@172ai/containers-mcp-server 1.0.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/.env.example +43 -0
- package/README.md +366 -0
- package/dist/auth.d.ts +57 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +192 -0
- package/dist/auth.js.map +1 -0
- package/dist/config.d.ts +84 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +246 -0
- package/dist/config.js.map +1 -0
- package/dist/server.d.ts +63 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +886 -0
- package/dist/server.js.map +1 -0
- package/dist/services/buildService.d.ts +51 -0
- package/dist/services/buildService.d.ts.map +1 -0
- package/dist/services/buildService.js +268 -0
- package/dist/services/buildService.js.map +1 -0
- package/dist/services/capabilityService.d.ts +62 -0
- package/dist/services/capabilityService.d.ts.map +1 -0
- package/dist/services/capabilityService.js +240 -0
- package/dist/services/capabilityService.js.map +1 -0
- package/dist/services/containerService.d.ts +52 -0
- package/dist/services/containerService.d.ts.map +1 -0
- package/dist/services/containerService.js +251 -0
- package/dist/services/containerService.js.map +1 -0
- package/dist/services/fileService.d.ts +65 -0
- package/dist/services/fileService.d.ts.map +1 -0
- package/dist/services/fileService.js +330 -0
- package/dist/services/fileService.js.map +1 -0
- package/dist/setup.d.ts +30 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +328 -0
- package/dist/setup.js.map +1 -0
- package/dist/types.d.ts +229 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +78 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +269 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.capabilityService = exports.CapabilityService = void 0;
|
|
4
|
+
const auth_1 = require("../auth");
|
|
5
|
+
const errorHandler_1 = require("../utils/errorHandler");
|
|
6
|
+
/**
|
|
7
|
+
* Capability management service
|
|
8
|
+
*/
|
|
9
|
+
class CapabilityService {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.httpClient = auth_1.authManager.getHttpClient();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* List available capabilities
|
|
15
|
+
*/
|
|
16
|
+
async listCapabilities(params = {}) {
|
|
17
|
+
try {
|
|
18
|
+
const queryParams = new URLSearchParams();
|
|
19
|
+
if (params.category)
|
|
20
|
+
queryParams.append('category', params.category);
|
|
21
|
+
if (params.limit)
|
|
22
|
+
queryParams.append('limit', params.limit.toString());
|
|
23
|
+
if (params.offset)
|
|
24
|
+
queryParams.append('offset', params.offset.toString());
|
|
25
|
+
if (params.query)
|
|
26
|
+
queryParams.append('query', params.query);
|
|
27
|
+
const response = await this.httpClient.get(`/v1/capabilities?${queryParams.toString()}`);
|
|
28
|
+
if (!response.data) {
|
|
29
|
+
throw errorHandler_1.ErrorHandler.createServerError('Invalid response format from capabilities list API');
|
|
30
|
+
}
|
|
31
|
+
const data = response.data;
|
|
32
|
+
if (!Array.isArray(data.capabilities)) {
|
|
33
|
+
throw errorHandler_1.ErrorHandler.createServerError('Invalid capabilities array in response');
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
capabilities: data.capabilities,
|
|
37
|
+
total: data.total || data.capabilities.length,
|
|
38
|
+
page: data.page || 1,
|
|
39
|
+
limit: data.limit || params.limit || 20,
|
|
40
|
+
hasMore: data.hasMore || false
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'CapabilityService.listCapabilities');
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get capability by ID
|
|
49
|
+
*/
|
|
50
|
+
async getCapability(params) {
|
|
51
|
+
try {
|
|
52
|
+
if (!params.capabilityId) {
|
|
53
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Capability ID is required');
|
|
54
|
+
}
|
|
55
|
+
const response = await this.httpClient.get(`/v1/capabilities/${params.capabilityId}`);
|
|
56
|
+
if (!response.data) {
|
|
57
|
+
throw errorHandler_1.ErrorHandler.createNotFoundError(`Capability ${params.capabilityId} not found`);
|
|
58
|
+
}
|
|
59
|
+
return response.data;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
63
|
+
throw errorHandler_1.ErrorHandler.createNotFoundError(`Capability ${params.capabilityId} not found`);
|
|
64
|
+
}
|
|
65
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'CapabilityService.getCapability');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Search capabilities by name or description
|
|
70
|
+
*/
|
|
71
|
+
async searchCapabilities(query, category, limit = 20) {
|
|
72
|
+
try {
|
|
73
|
+
if (!query || query.trim().length === 0) {
|
|
74
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Search query is required');
|
|
75
|
+
}
|
|
76
|
+
const response = await this.listCapabilities({
|
|
77
|
+
query: query.trim(),
|
|
78
|
+
category,
|
|
79
|
+
limit
|
|
80
|
+
});
|
|
81
|
+
return response.capabilities;
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'CapabilityService.searchCapabilities');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get capabilities by category
|
|
89
|
+
*/
|
|
90
|
+
async getCapabilitiesByCategory(category, limit = 20) {
|
|
91
|
+
try {
|
|
92
|
+
if (!category || category.trim().length === 0) {
|
|
93
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Category is required');
|
|
94
|
+
}
|
|
95
|
+
const response = await this.listCapabilities({
|
|
96
|
+
category: category.trim(),
|
|
97
|
+
limit
|
|
98
|
+
});
|
|
99
|
+
return response.capabilities;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'CapabilityService.getCapabilitiesByCategory');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get available categories
|
|
107
|
+
*/
|
|
108
|
+
async getAvailableCategories() {
|
|
109
|
+
try {
|
|
110
|
+
const response = await this.httpClient.get('/v1/capabilities/categories');
|
|
111
|
+
if (!response.data || !Array.isArray(response.data.categories)) {
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
return response.data.categories;
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'CapabilityService.getAvailableCategories');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get capability dependencies
|
|
125
|
+
*/
|
|
126
|
+
async getCapabilityDependencies(capabilityId) {
|
|
127
|
+
try {
|
|
128
|
+
if (!capabilityId) {
|
|
129
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Capability ID is required');
|
|
130
|
+
}
|
|
131
|
+
const response = await this.httpClient.get(`/v1/capabilities/${capabilityId}/dependencies`);
|
|
132
|
+
if (!response.data || !Array.isArray(response.data.dependencies)) {
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
return response.data.dependencies;
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
139
|
+
throw errorHandler_1.ErrorHandler.createNotFoundError(`Capability ${capabilityId} not found`);
|
|
140
|
+
}
|
|
141
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'CapabilityService.getCapabilityDependencies');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Check if capability is compatible with container
|
|
146
|
+
*/
|
|
147
|
+
async checkCompatibility(capabilityId, containerId) {
|
|
148
|
+
try {
|
|
149
|
+
if (!capabilityId) {
|
|
150
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Capability ID is required');
|
|
151
|
+
}
|
|
152
|
+
if (!containerId) {
|
|
153
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Container ID is required');
|
|
154
|
+
}
|
|
155
|
+
const response = await this.httpClient.post('/v1/capabilities/compatibility', {
|
|
156
|
+
capabilityId,
|
|
157
|
+
containerId
|
|
158
|
+
});
|
|
159
|
+
if (!response.data) {
|
|
160
|
+
return { compatible: false, issues: ['Unable to check compatibility'] };
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
compatible: response.data.compatible || false,
|
|
164
|
+
issues: response.data.issues || [],
|
|
165
|
+
suggestions: response.data.suggestions || []
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
170
|
+
return {
|
|
171
|
+
compatible: false,
|
|
172
|
+
issues: ['Capability or container not found']
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'CapabilityService.checkCompatibility');
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get recommended capabilities for a container
|
|
180
|
+
*/
|
|
181
|
+
async getRecommendedCapabilities(containerId, limit = 10) {
|
|
182
|
+
try {
|
|
183
|
+
if (!containerId) {
|
|
184
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Container ID is required');
|
|
185
|
+
}
|
|
186
|
+
const response = await this.httpClient.get(`/v1/containers/${containerId}/capabilities/recommendations?limit=${limit}`);
|
|
187
|
+
if (!response.data || !Array.isArray(response.data.recommendations)) {
|
|
188
|
+
return [];
|
|
189
|
+
}
|
|
190
|
+
return response.data.recommendations;
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
194
|
+
return [];
|
|
195
|
+
}
|
|
196
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'CapabilityService.getRecommendedCapabilities');
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get capability usage statistics
|
|
201
|
+
*/
|
|
202
|
+
async getCapabilityStats(capabilityId) {
|
|
203
|
+
try {
|
|
204
|
+
let endpoint = '/v1/capabilities/stats';
|
|
205
|
+
if (capabilityId) {
|
|
206
|
+
endpoint = `/v1/capabilities/${capabilityId}/stats`;
|
|
207
|
+
}
|
|
208
|
+
const response = await this.httpClient.get(endpoint);
|
|
209
|
+
if (!response.data) {
|
|
210
|
+
return {
|
|
211
|
+
totalCapabilities: 0,
|
|
212
|
+
activeCapabilities: 0,
|
|
213
|
+
mostUsed: [],
|
|
214
|
+
categories: []
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
totalCapabilities: response.data.totalCapabilities || 0,
|
|
219
|
+
activeCapabilities: response.data.activeCapabilities || 0,
|
|
220
|
+
mostUsed: response.data.mostUsed || [],
|
|
221
|
+
categories: response.data.categories || []
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
226
|
+
return {
|
|
227
|
+
totalCapabilities: 0,
|
|
228
|
+
activeCapabilities: 0,
|
|
229
|
+
mostUsed: [],
|
|
230
|
+
categories: []
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'CapabilityService.getCapabilityStats');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
exports.CapabilityService = CapabilityService;
|
|
238
|
+
// Export singleton instance
|
|
239
|
+
exports.capabilityService = new CapabilityService();
|
|
240
|
+
//# sourceMappingURL=capabilityService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilityService.js","sourceRoot":"","sources":["../../src/services/capabilityService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Container, ContainerListResponse, ListContainersParams, GetContainerParams, CreateContainerParams, UpdateContainerParams, DeleteContainerParams } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Container management service
|
|
4
|
+
*/
|
|
5
|
+
export declare class ContainerService {
|
|
6
|
+
private httpClient;
|
|
7
|
+
constructor();
|
|
8
|
+
/**
|
|
9
|
+
* List containers with optional filtering
|
|
10
|
+
*/
|
|
11
|
+
listContainers(params?: ListContainersParams): Promise<ContainerListResponse>;
|
|
12
|
+
/**
|
|
13
|
+
* Get container by ID
|
|
14
|
+
*/
|
|
15
|
+
getContainer(params: GetContainerParams): Promise<Container>;
|
|
16
|
+
/**
|
|
17
|
+
* Create a new container
|
|
18
|
+
*/
|
|
19
|
+
createContainer(params: CreateContainerParams): Promise<Container>;
|
|
20
|
+
/**
|
|
21
|
+
* Update an existing container
|
|
22
|
+
*/
|
|
23
|
+
updateContainer(params: UpdateContainerParams): Promise<Container>;
|
|
24
|
+
/**
|
|
25
|
+
* Delete a container
|
|
26
|
+
*/
|
|
27
|
+
deleteContainer(params: DeleteContainerParams): Promise<{
|
|
28
|
+
success: boolean;
|
|
29
|
+
message: string;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Copy/duplicate a container
|
|
33
|
+
*/
|
|
34
|
+
copyContainer(params: {
|
|
35
|
+
containerId: string;
|
|
36
|
+
newName: string;
|
|
37
|
+
}): Promise<Container>;
|
|
38
|
+
/**
|
|
39
|
+
* Search containers by name or description
|
|
40
|
+
*/
|
|
41
|
+
searchContainers(query: string, limit?: number): Promise<Container[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Get containers by tag
|
|
44
|
+
*/
|
|
45
|
+
getContainersByTag(tag: string, limit?: number): Promise<Container[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Get available tags
|
|
48
|
+
*/
|
|
49
|
+
getAvailableTags(): Promise<string[]>;
|
|
50
|
+
}
|
|
51
|
+
export declare const containerService: ContainerService;
|
|
52
|
+
//# sourceMappingURL=containerService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerService.d.ts","sourceRoot":"","sources":["../../src/services/containerService.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EACT,qBAAqB,EAErB,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,UAAU,CAAC;AAIlB;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,UAAU,CAAgB;;IAMlC;;OAEG;IACG,cAAc,CAAC,MAAM,GAAE,oBAAyB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiCvF;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC;IAqBlE;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC;IAkCxE;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC;IAmCxE;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAoBpG;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,SAAS,CAAC;IA4BzF;;OAEG;IACG,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAkB/E;;OAEG;IACG,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAqB/E;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAgB5C;AAGD,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.containerService = exports.ContainerService = void 0;
|
|
4
|
+
const auth_1 = require("../auth");
|
|
5
|
+
const errorHandler_1 = require("../utils/errorHandler");
|
|
6
|
+
/**
|
|
7
|
+
* Container management service
|
|
8
|
+
*/
|
|
9
|
+
class ContainerService {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.httpClient = auth_1.authManager.getHttpClient();
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* List containers with optional filtering
|
|
15
|
+
*/
|
|
16
|
+
async listContainers(params = {}) {
|
|
17
|
+
try {
|
|
18
|
+
const queryParams = new URLSearchParams();
|
|
19
|
+
if (params.scope)
|
|
20
|
+
queryParams.append('scope', params.scope);
|
|
21
|
+
if (params.limit)
|
|
22
|
+
queryParams.append('limit', params.limit.toString());
|
|
23
|
+
if (params.offset)
|
|
24
|
+
queryParams.append('offset', params.offset.toString());
|
|
25
|
+
if (params.query)
|
|
26
|
+
queryParams.append('query', params.query);
|
|
27
|
+
const response = await this.httpClient.get(`/v1/containers?${queryParams.toString()}`);
|
|
28
|
+
if (!response.data) {
|
|
29
|
+
throw errorHandler_1.ErrorHandler.createServerError('Invalid response format from container list API');
|
|
30
|
+
}
|
|
31
|
+
// Validate response structure
|
|
32
|
+
const data = response.data;
|
|
33
|
+
if (!Array.isArray(data.containers)) {
|
|
34
|
+
throw errorHandler_1.ErrorHandler.createServerError('Invalid containers array in response');
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
containers: data.containers,
|
|
38
|
+
total: data.total || data.containers.length,
|
|
39
|
+
page: data.page || 1,
|
|
40
|
+
limit: data.limit || params.limit || 20,
|
|
41
|
+
hasMore: data.hasMore || false
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'ContainerService.listContainers');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get container by ID
|
|
50
|
+
*/
|
|
51
|
+
async getContainer(params) {
|
|
52
|
+
try {
|
|
53
|
+
if (!params.containerId) {
|
|
54
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Container ID is required');
|
|
55
|
+
}
|
|
56
|
+
const response = await this.httpClient.get(`/v1/containers/${params.containerId}`);
|
|
57
|
+
if (!response.data) {
|
|
58
|
+
throw errorHandler_1.ErrorHandler.createNotFoundError(`Container ${params.containerId} not found`);
|
|
59
|
+
}
|
|
60
|
+
return response.data;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
64
|
+
throw errorHandler_1.ErrorHandler.createNotFoundError(`Container ${params.containerId} not found`);
|
|
65
|
+
}
|
|
66
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'ContainerService.getContainer');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Create a new container
|
|
71
|
+
*/
|
|
72
|
+
async createContainer(params) {
|
|
73
|
+
try {
|
|
74
|
+
// Validate required fields
|
|
75
|
+
if (!params.name) {
|
|
76
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Container name is required');
|
|
77
|
+
}
|
|
78
|
+
if (!params.description) {
|
|
79
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Container description is required');
|
|
80
|
+
}
|
|
81
|
+
if (!params.dockerfile) {
|
|
82
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Dockerfile content is required');
|
|
83
|
+
}
|
|
84
|
+
const containerData = {
|
|
85
|
+
name: params.name.trim(),
|
|
86
|
+
description: params.description.trim(),
|
|
87
|
+
dockerfile: params.dockerfile,
|
|
88
|
+
tags: params.tags || [],
|
|
89
|
+
isPrivate: params.isPrivate || false,
|
|
90
|
+
envVars: params.envVars || {}
|
|
91
|
+
};
|
|
92
|
+
const response = await this.httpClient.post('/v1/containers', containerData);
|
|
93
|
+
if (!response.data) {
|
|
94
|
+
throw errorHandler_1.ErrorHandler.createServerError('Invalid response from container creation API');
|
|
95
|
+
}
|
|
96
|
+
return response.data;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'ContainerService.createContainer');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Update an existing container
|
|
104
|
+
*/
|
|
105
|
+
async updateContainer(params) {
|
|
106
|
+
try {
|
|
107
|
+
if (!params.containerId) {
|
|
108
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Container ID is required');
|
|
109
|
+
}
|
|
110
|
+
// Build update payload with only provided fields
|
|
111
|
+
const updateData = {};
|
|
112
|
+
if (params.name !== undefined)
|
|
113
|
+
updateData.name = params.name.trim();
|
|
114
|
+
if (params.description !== undefined)
|
|
115
|
+
updateData.description = params.description.trim();
|
|
116
|
+
if (params.dockerfile !== undefined)
|
|
117
|
+
updateData.dockerfile = params.dockerfile;
|
|
118
|
+
if (params.tags !== undefined)
|
|
119
|
+
updateData.tags = params.tags;
|
|
120
|
+
if (params.isPrivate !== undefined)
|
|
121
|
+
updateData.isPrivate = params.isPrivate;
|
|
122
|
+
if (params.envVars !== undefined)
|
|
123
|
+
updateData.envVars = params.envVars;
|
|
124
|
+
if (Object.keys(updateData).length === 0) {
|
|
125
|
+
throw errorHandler_1.ErrorHandler.createValidationError('At least one field must be provided for update');
|
|
126
|
+
}
|
|
127
|
+
const response = await this.httpClient.patch(`/v1/containers/${params.containerId}`, updateData);
|
|
128
|
+
if (!response.data) {
|
|
129
|
+
throw errorHandler_1.ErrorHandler.createServerError('Invalid response from container update API');
|
|
130
|
+
}
|
|
131
|
+
return response.data;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
135
|
+
throw errorHandler_1.ErrorHandler.createNotFoundError(`Container ${params.containerId} not found`);
|
|
136
|
+
}
|
|
137
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'ContainerService.updateContainer');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Delete a container
|
|
142
|
+
*/
|
|
143
|
+
async deleteContainer(params) {
|
|
144
|
+
try {
|
|
145
|
+
if (!params.containerId) {
|
|
146
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Container ID is required');
|
|
147
|
+
}
|
|
148
|
+
await this.httpClient.delete(`/v1/containers/${params.containerId}`);
|
|
149
|
+
return {
|
|
150
|
+
success: true,
|
|
151
|
+
message: `Container ${params.containerId} deleted successfully`
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
156
|
+
throw errorHandler_1.ErrorHandler.createNotFoundError(`Container ${params.containerId} not found`);
|
|
157
|
+
}
|
|
158
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'ContainerService.deleteContainer');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Copy/duplicate a container
|
|
163
|
+
*/
|
|
164
|
+
async copyContainer(params) {
|
|
165
|
+
try {
|
|
166
|
+
if (!params.containerId) {
|
|
167
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Container ID is required');
|
|
168
|
+
}
|
|
169
|
+
if (!params.newName) {
|
|
170
|
+
throw errorHandler_1.ErrorHandler.createValidationError('New container name is required');
|
|
171
|
+
}
|
|
172
|
+
// First, get the original container
|
|
173
|
+
const originalContainer = await this.getContainer({ containerId: params.containerId });
|
|
174
|
+
// Create a copy with the new name
|
|
175
|
+
const copyData = {
|
|
176
|
+
name: params.newName.trim(),
|
|
177
|
+
description: `Copy of ${originalContainer.description}`,
|
|
178
|
+
dockerfile: originalContainer.dockerfile,
|
|
179
|
+
tags: [...(originalContainer.tags || []), 'copy'],
|
|
180
|
+
isPrivate: originalContainer.isPrivate,
|
|
181
|
+
envVars: { ...originalContainer.envVars }
|
|
182
|
+
};
|
|
183
|
+
return await this.createContainer(copyData);
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'ContainerService.copyContainer');
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Search containers by name or description
|
|
191
|
+
*/
|
|
192
|
+
async searchContainers(query, limit = 20) {
|
|
193
|
+
try {
|
|
194
|
+
if (!query || query.trim().length === 0) {
|
|
195
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Search query is required');
|
|
196
|
+
}
|
|
197
|
+
const response = await this.listContainers({
|
|
198
|
+
query: query.trim(),
|
|
199
|
+
limit,
|
|
200
|
+
scope: 'all'
|
|
201
|
+
});
|
|
202
|
+
return response.containers;
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'ContainerService.searchContainers');
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Get containers by tag
|
|
210
|
+
*/
|
|
211
|
+
async getContainersByTag(tag, limit = 20) {
|
|
212
|
+
try {
|
|
213
|
+
if (!tag || tag.trim().length === 0) {
|
|
214
|
+
throw errorHandler_1.ErrorHandler.createValidationError('Tag is required');
|
|
215
|
+
}
|
|
216
|
+
const response = await this.httpClient.get(`/v1/containers/tags/${encodeURIComponent(tag)}`);
|
|
217
|
+
if (!response.data || !Array.isArray(response.data.containers)) {
|
|
218
|
+
return [];
|
|
219
|
+
}
|
|
220
|
+
return response.data.containers.slice(0, limit);
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
224
|
+
return [];
|
|
225
|
+
}
|
|
226
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'ContainerService.getContainersByTag');
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Get available tags
|
|
231
|
+
*/
|
|
232
|
+
async getAvailableTags() {
|
|
233
|
+
try {
|
|
234
|
+
const response = await this.httpClient.get('/v1/containers/tags');
|
|
235
|
+
if (!response.data || !Array.isArray(response.data.tags)) {
|
|
236
|
+
return [];
|
|
237
|
+
}
|
|
238
|
+
return response.data.tags;
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
if (error instanceof errorHandler_1.ApiError && error.status === 404) {
|
|
242
|
+
return [];
|
|
243
|
+
}
|
|
244
|
+
throw errorHandler_1.ErrorHandler.processError(error, 'ContainerService.getAvailableTags');
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
exports.ContainerService = ContainerService;
|
|
249
|
+
// Export singleton instance
|
|
250
|
+
exports.containerService = new ContainerService();
|
|
251
|
+
//# sourceMappingURL=containerService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerService.js","sourceRoot":"","sources":["../../src/services/containerService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { ContainerFile, FileListResponse, FileUploadResult, UploadFileParams, GetFileContentParams, ListContainerFilesParams } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* File management service
|
|
4
|
+
*/
|
|
5
|
+
export declare class FileService {
|
|
6
|
+
private httpClient;
|
|
7
|
+
constructor();
|
|
8
|
+
/**
|
|
9
|
+
* List files in a container
|
|
10
|
+
*/
|
|
11
|
+
listContainerFiles(params: ListContainerFilesParams): Promise<FileListResponse>;
|
|
12
|
+
/**
|
|
13
|
+
* Get file content
|
|
14
|
+
*/
|
|
15
|
+
getFileContent(params: GetFileContentParams): Promise<ContainerFile>;
|
|
16
|
+
/**
|
|
17
|
+
* Upload a file to a container
|
|
18
|
+
*/
|
|
19
|
+
uploadFile(params: UploadFileParams): Promise<FileUploadResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Update file content
|
|
22
|
+
*/
|
|
23
|
+
updateFile(params: UploadFileParams): Promise<ContainerFile>;
|
|
24
|
+
/**
|
|
25
|
+
* Delete a file from a container
|
|
26
|
+
*/
|
|
27
|
+
deleteFile(containerId: string, filePath: string): Promise<{
|
|
28
|
+
success: boolean;
|
|
29
|
+
message: string;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* Upload multiple files
|
|
33
|
+
*/
|
|
34
|
+
uploadMultipleFiles(containerId: string, files: Array<{
|
|
35
|
+
filePath: string;
|
|
36
|
+
content: string;
|
|
37
|
+
mimeType?: string;
|
|
38
|
+
encoding?: string;
|
|
39
|
+
}>): Promise<FileUploadResult[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Create a directory
|
|
42
|
+
*/
|
|
43
|
+
createDirectory(containerId: string, dirPath: string): Promise<FileUploadResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Copy files between containers
|
|
46
|
+
*/
|
|
47
|
+
copyFiles(sourceContainerId: string, targetContainerId: string, filePaths: string[]): Promise<ContainerFile[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Move files within a container
|
|
50
|
+
*/
|
|
51
|
+
moveFiles(containerId: string, moves: Array<{
|
|
52
|
+
from: string;
|
|
53
|
+
to: string;
|
|
54
|
+
}>): Promise<ContainerFile[]>;
|
|
55
|
+
/**
|
|
56
|
+
* Get file metadata without content
|
|
57
|
+
*/
|
|
58
|
+
getFileMetadata(containerId: string, filePath: string): Promise<Omit<ContainerFile, 'content'>>;
|
|
59
|
+
/**
|
|
60
|
+
* Search files by name pattern
|
|
61
|
+
*/
|
|
62
|
+
searchFiles(containerId: string, pattern: string, path?: string): Promise<ContainerFile[]>;
|
|
63
|
+
}
|
|
64
|
+
export declare const fileService: FileService;
|
|
65
|
+
//# sourceMappingURL=fileService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileService.d.ts","sourceRoot":"","sources":["../../src/services/fileService.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAIlB;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,UAAU,CAAgB;;IAMlC;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqCrF;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IA2B1E;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqCrE;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAqClE;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAwBvG;;OAEG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GACxF,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAyB9B;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA0BtF;;OAEG;IACG,SAAS,CACb,iBAAiB,EAAE,MAAM,EACzB,iBAAiB,EAAE,MAAM,EACzB,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,aAAa,EAAE,CAAC;IA4B3B;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA0B1G;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAgCrG;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;CA+BjG;AAGD,eAAO,MAAM,WAAW,aAAoB,CAAC"}
|