gobananas-cli 1.0.1

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.
Files changed (103) hide show
  1. package/bin/gobananas-mcp.js +10 -0
  2. package/bin/gobananas.js +8 -0
  3. package/dist/commands/account.d.ts +8 -0
  4. package/dist/commands/account.d.ts.map +1 -0
  5. package/dist/commands/account.js +200 -0
  6. package/dist/commands/account.js.map +1 -0
  7. package/dist/commands/character.d.ts +8 -0
  8. package/dist/commands/character.d.ts.map +1 -0
  9. package/dist/commands/character.js +493 -0
  10. package/dist/commands/character.js.map +1 -0
  11. package/dist/commands/config.d.ts +8 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +232 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/edit.d.ts +19 -0
  16. package/dist/commands/edit.d.ts.map +1 -0
  17. package/dist/commands/edit.js +279 -0
  18. package/dist/commands/edit.js.map +1 -0
  19. package/dist/commands/generate.d.ts +8 -0
  20. package/dist/commands/generate.d.ts.map +1 -0
  21. package/dist/commands/generate.js +177 -0
  22. package/dist/commands/generate.js.map +1 -0
  23. package/dist/commands/image.d.ts +8 -0
  24. package/dist/commands/image.d.ts.map +1 -0
  25. package/dist/commands/image.js +212 -0
  26. package/dist/commands/image.js.map +1 -0
  27. package/dist/commands/index.d.ts +19 -0
  28. package/dist/commands/index.d.ts.map +1 -0
  29. package/dist/commands/index.js +19 -0
  30. package/dist/commands/index.js.map +1 -0
  31. package/dist/commands/mcp-help.d.ts +8 -0
  32. package/dist/commands/mcp-help.d.ts.map +1 -0
  33. package/dist/commands/mcp-help.js +264 -0
  34. package/dist/commands/mcp-help.js.map +1 -0
  35. package/dist/commands/mcp.d.ts +9 -0
  36. package/dist/commands/mcp.d.ts.map +1 -0
  37. package/dist/commands/mcp.js +25 -0
  38. package/dist/commands/mcp.js.map +1 -0
  39. package/dist/commands/product.d.ts +8 -0
  40. package/dist/commands/product.d.ts.map +1 -0
  41. package/dist/commands/product.js +316 -0
  42. package/dist/commands/product.js.map +1 -0
  43. package/dist/commands/scene.d.ts +8 -0
  44. package/dist/commands/scene.d.ts.map +1 -0
  45. package/dist/commands/scene.js +448 -0
  46. package/dist/commands/scene.js.map +1 -0
  47. package/dist/commands/search.d.ts +8 -0
  48. package/dist/commands/search.d.ts.map +1 -0
  49. package/dist/commands/search.js +123 -0
  50. package/dist/commands/search.js.map +1 -0
  51. package/dist/commands/session.d.ts +8 -0
  52. package/dist/commands/session.d.ts.map +1 -0
  53. package/dist/commands/session.js +167 -0
  54. package/dist/commands/session.js.map +1 -0
  55. package/dist/commands/style.d.ts +8 -0
  56. package/dist/commands/style.d.ts.map +1 -0
  57. package/dist/commands/style.js +297 -0
  58. package/dist/commands/style.js.map +1 -0
  59. package/dist/commands/usage.d.ts +8 -0
  60. package/dist/commands/usage.d.ts.map +1 -0
  61. package/dist/commands/usage.js +144 -0
  62. package/dist/commands/usage.js.map +1 -0
  63. package/dist/config/config.d.ts +65 -0
  64. package/dist/config/config.d.ts.map +1 -0
  65. package/dist/config/config.js +156 -0
  66. package/dist/config/config.js.map +1 -0
  67. package/dist/index.d.ts +22 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +130 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/mcp/stdio-proxy.d.ts +8 -0
  72. package/dist/mcp/stdio-proxy.d.ts.map +1 -0
  73. package/dist/mcp/stdio-proxy.js +297 -0
  74. package/dist/mcp/stdio-proxy.js.map +1 -0
  75. package/dist/mcp-stdio.d.ts +3 -0
  76. package/dist/mcp-stdio.d.ts.map +1 -0
  77. package/dist/mcp-stdio.js +8 -0
  78. package/dist/mcp-stdio.js.map +1 -0
  79. package/dist/transport/index.d.ts +29 -0
  80. package/dist/transport/index.d.ts.map +1 -0
  81. package/dist/transport/index.js +72 -0
  82. package/dist/transport/index.js.map +1 -0
  83. package/dist/transport/mcp-client.d.ts +342 -0
  84. package/dist/transport/mcp-client.d.ts.map +1 -0
  85. package/dist/transport/mcp-client.js +478 -0
  86. package/dist/transport/mcp-client.js.map +1 -0
  87. package/dist/transport/rest-client.d.ts +297 -0
  88. package/dist/transport/rest-client.d.ts.map +1 -0
  89. package/dist/transport/rest-client.js +461 -0
  90. package/dist/transport/rest-client.js.map +1 -0
  91. package/dist/types/responses.d.ts +230 -0
  92. package/dist/types/responses.d.ts.map +1 -0
  93. package/dist/types/responses.js +46 -0
  94. package/dist/types/responses.js.map +1 -0
  95. package/dist/utils/file-handler.d.ts +51 -0
  96. package/dist/utils/file-handler.d.ts.map +1 -0
  97. package/dist/utils/file-handler.js +189 -0
  98. package/dist/utils/file-handler.js.map +1 -0
  99. package/dist/utils/output.d.ts +111 -0
  100. package/dist/utils/output.d.ts.map +1 -0
  101. package/dist/utils/output.js +240 -0
  102. package/dist/utils/output.js.map +1 -0
  103. package/package.json +54 -0
@@ -0,0 +1,461 @@
1
+ /**
2
+ * REST API Client for Go Bananas
3
+ *
4
+ * Provides a fallback transport when MCP is not available.
5
+ * Communicates with the /api/* endpoints on the Go Bananas server.
6
+ */
7
+ import { getConfig, getOrCreateSessionId } from '../config/config.js';
8
+ export class RestClient {
9
+ baseUrl;
10
+ apiKey;
11
+ constructor(baseUrl, apiKey) {
12
+ const config = getConfig();
13
+ this.baseUrl = baseUrl || config.serverUrl;
14
+ this.apiKey = apiKey || config.apiKey;
15
+ }
16
+ /**
17
+ * Make an authenticated request to the API
18
+ */
19
+ async request(method, path, body) {
20
+ const url = `${this.baseUrl}/api${path}`;
21
+ const headers = {
22
+ 'X-API-Key': this.apiKey,
23
+ 'Content-Type': 'application/json',
24
+ };
25
+ const options = {
26
+ method,
27
+ headers,
28
+ };
29
+ if (body && method !== 'GET') {
30
+ options.body = JSON.stringify(body);
31
+ }
32
+ try {
33
+ const response = await fetch(url, options);
34
+ if (!response.ok) {
35
+ const errorData = await response.json().catch(() => ({}));
36
+ throw new Error(errorData.error ||
37
+ errorData.message ||
38
+ `HTTP ${response.status}: ${response.statusText}`);
39
+ }
40
+ return await response.json();
41
+ }
42
+ catch (error) {
43
+ if (error instanceof Error) {
44
+ throw error;
45
+ }
46
+ throw new Error('Network request failed');
47
+ }
48
+ }
49
+ // =====================================
50
+ // IMAGE GENERATION & EDITING
51
+ // =====================================
52
+ /**
53
+ * Generate a new image
54
+ */
55
+ async generateImage(params) {
56
+ return this.request('POST', '/images', {
57
+ prompt: params.prompt,
58
+ n: params.n,
59
+ negative_prompt: params.negativePrompt,
60
+ system_instruction: params.systemInstruction,
61
+ aspect_ratio: params.aspectRatio,
62
+ reference_images: params.referenceImages,
63
+ scene_id: params.sceneId,
64
+ scene_ids: params.sceneIds,
65
+ scene_name: params.sceneName,
66
+ model_id: params.modelId,
67
+ style_preset_name: params.stylePresetName,
68
+ style_preset_id: params.stylePresetId,
69
+ session_id: getOrCreateSessionId(),
70
+ });
71
+ }
72
+ /**
73
+ * Edit an image by ID
74
+ */
75
+ async editImage(params) {
76
+ return this.request('POST', '/edit-image', {
77
+ image_id: params.imageId,
78
+ prompt: params.prompt,
79
+ negative_prompt: params.negativePrompt,
80
+ aspect_ratio: params.aspectRatio,
81
+ });
82
+ }
83
+ /**
84
+ * Continue editing the last image in session
85
+ */
86
+ async continueEditing(params) {
87
+ return this.request('POST', '/images/continue-edit', {
88
+ prompt: params.prompt,
89
+ negative_prompt: params.negativePrompt,
90
+ session_id: params.sessionId || getOrCreateSessionId(),
91
+ });
92
+ }
93
+ /**
94
+ * Upload an image for editing (from URL)
95
+ */
96
+ async uploadImage(params) {
97
+ return this.request('POST', '/upload-for-editing', {
98
+ image_url: params.imageUrl,
99
+ file_name: params.fileName,
100
+ mime_type: params.mimeType,
101
+ });
102
+ }
103
+ /**
104
+ * Upload a local image file (as base64) for editing
105
+ * Uses the REST endpoint which accepts base64 (MCP blocks base64 due to token limits)
106
+ */
107
+ async uploadImageFromFile(params) {
108
+ return this.request('POST', '/upload-for-editing', {
109
+ image_data: params.imageData,
110
+ file_name: params.fileName,
111
+ mime_type: params.mimeType,
112
+ });
113
+ }
114
+ /**
115
+ * Get image details by ID
116
+ */
117
+ async getImage(imageId) {
118
+ return this.request('GET', `/images/${imageId}`);
119
+ }
120
+ /**
121
+ * List images with optional search
122
+ */
123
+ async listImages(options) {
124
+ const params = new URLSearchParams();
125
+ if (options?.limit)
126
+ params.set('limit', String(options.limit));
127
+ if (options?.offset)
128
+ params.set('offset', String(options.offset));
129
+ if (options?.search)
130
+ params.set('search', options.search);
131
+ const query = params.toString();
132
+ return this.request('GET', `/images${query ? `?${query}` : ''}`);
133
+ }
134
+ /**
135
+ * Delete an image
136
+ */
137
+ async deleteImage(imageId) {
138
+ await this.request('DELETE', `/images/${imageId}`);
139
+ }
140
+ // =====================================
141
+ // SESSIONS
142
+ // =====================================
143
+ /**
144
+ * List sessions
145
+ */
146
+ async listSessions(options) {
147
+ const params = new URLSearchParams();
148
+ if (options?.limit)
149
+ params.set('limit', String(options.limit));
150
+ if (options?.offset)
151
+ params.set('offset', String(options.offset));
152
+ const query = params.toString();
153
+ return this.request('GET', `/sessions${query ? `?${query}` : ''}`);
154
+ }
155
+ /**
156
+ * Get session details
157
+ */
158
+ async getSession(sessionId) {
159
+ return this.request('GET', `/sessions/${sessionId}`);
160
+ }
161
+ // =====================================
162
+ // CHARACTERS
163
+ // =====================================
164
+ /**
165
+ * Create a character
166
+ */
167
+ async createCharacter(params) {
168
+ return this.request('POST', '/characters', {
169
+ character_name: params.characterName,
170
+ description: params.description,
171
+ base_prompt: params.basePrompt,
172
+ negative_prompt: params.negativePrompt,
173
+ system_instruction: params.systemInstruction,
174
+ reference_image_ids: params.referenceImageIds,
175
+ preferred_aspect_ratio: params.preferredAspectRatio,
176
+ tags: params.tags,
177
+ });
178
+ }
179
+ /**
180
+ * List characters
181
+ */
182
+ async listCharacters(options) {
183
+ const params = new URLSearchParams();
184
+ if (options?.limit)
185
+ params.set('limit', String(options.limit));
186
+ if (options?.offset)
187
+ params.set('offset', String(options.offset));
188
+ if (options?.search)
189
+ params.set('search', options.search);
190
+ if (options?.sortBy)
191
+ params.set('sort_by', options.sortBy);
192
+ const query = params.toString();
193
+ return this.request('GET', `/characters${query ? `?${query}` : ''}`);
194
+ }
195
+ /**
196
+ * Get character by ID or name
197
+ */
198
+ async getCharacter(idOrName) {
199
+ return this.request('GET', `/characters/${encodeURIComponent(String(idOrName))}`);
200
+ }
201
+ /**
202
+ * Delete a character
203
+ */
204
+ async deleteCharacter(idOrName) {
205
+ await this.request('DELETE', `/characters/${encodeURIComponent(String(idOrName))}`);
206
+ }
207
+ /**
208
+ * Generate with character
209
+ */
210
+ async generateWithCharacter(idOrName, params) {
211
+ return this.request('POST', `/characters/${encodeURIComponent(String(idOrName))}/generate`, {
212
+ scene_prompt: params.scenePrompt,
213
+ additional_details: params.additionalDetails,
214
+ aspect_ratio: params.aspectRatio,
215
+ session_id: getOrCreateSessionId(),
216
+ });
217
+ }
218
+ /**
219
+ * Generate with multiple characters
220
+ */
221
+ async generateWithMultipleCharacters(params) {
222
+ return this.request('POST', '/characters/generate-multi', {
223
+ character_ids: params.characterIds,
224
+ scene_prompt: params.scenePrompt,
225
+ additional_details: params.additionalDetails,
226
+ aspect_ratio: params.aspectRatio,
227
+ session_id: getOrCreateSessionId(),
228
+ });
229
+ }
230
+ // =====================================
231
+ // PRODUCTS
232
+ // =====================================
233
+ /**
234
+ * Create a product reference
235
+ */
236
+ async createProduct(params) {
237
+ return this.request('POST', '/products', {
238
+ product_name: params.productName,
239
+ product_url: params.productUrl,
240
+ product_description: params.productDescription,
241
+ tags: params.tags,
242
+ });
243
+ }
244
+ /**
245
+ * List products
246
+ */
247
+ async listProducts(options) {
248
+ const params = new URLSearchParams();
249
+ if (options?.page)
250
+ params.set('page', String(options.page));
251
+ if (options?.pageSize)
252
+ params.set('page_size', String(options.pageSize));
253
+ if (options?.search)
254
+ params.set('search', options.search);
255
+ const query = params.toString();
256
+ return this.request('GET', `/products${query ? `?${query}` : ''}`);
257
+ }
258
+ /**
259
+ * Get product by ID or name
260
+ */
261
+ async getProduct(idOrName) {
262
+ return this.request('GET', `/products/${encodeURIComponent(String(idOrName))}`);
263
+ }
264
+ /**
265
+ * Delete a product
266
+ */
267
+ async deleteProduct(idOrName) {
268
+ await this.request('DELETE', `/products/${encodeURIComponent(String(idOrName))}`);
269
+ }
270
+ /**
271
+ * Generate with product (uses main /images endpoint with product params)
272
+ */
273
+ async generateWithProduct(params) {
274
+ // Note: This would need a dedicated endpoint or use generate_image with product reference
275
+ // For now, we'll use the REST API pattern
276
+ return this.request('POST', '/images', {
277
+ prompt: params.scenePrompt,
278
+ product_id: params.productId,
279
+ product_name: params.productName,
280
+ additional_details: params.additionalDetails,
281
+ aspect_ratio: params.aspectRatio,
282
+ negative_prompt: params.negativePrompt,
283
+ n: params.numberOfImages,
284
+ session_id: getOrCreateSessionId(),
285
+ });
286
+ }
287
+ // =====================================
288
+ // STYLE PRESETS
289
+ // =====================================
290
+ /**
291
+ * Create a style preset
292
+ */
293
+ async createStylePreset(params) {
294
+ return this.request('POST', '/style-presets', {
295
+ name: params.name,
296
+ prompt: params.prompt,
297
+ negative_prompt: params.negativePrompt,
298
+ system_instruction: params.systemInstruction,
299
+ aspect_ratio: params.aspectRatio,
300
+ });
301
+ }
302
+ /**
303
+ * List style presets
304
+ */
305
+ async listStylePresets() {
306
+ return this.request('GET', '/style-presets');
307
+ }
308
+ /**
309
+ * Get style preset by ID
310
+ */
311
+ async getStylePreset(id) {
312
+ return this.request('GET', `/style-presets/${id}`);
313
+ }
314
+ /**
315
+ * Delete a style preset
316
+ */
317
+ async deleteStylePreset(idOrName) {
318
+ await this.request('DELETE', `/style-presets/${encodeURIComponent(String(idOrName))}`);
319
+ }
320
+ /**
321
+ * Update a style preset
322
+ */
323
+ async updateStylePreset(idOrName, params) {
324
+ return this.request('PATCH', `/style-presets/${encodeURIComponent(String(idOrName))}`, {
325
+ new_name: params.newName,
326
+ prompt: params.prompt,
327
+ negative_prompt: params.negativePrompt,
328
+ system_instruction: params.systemInstruction,
329
+ aspect_ratio: params.aspectRatio,
330
+ });
331
+ }
332
+ /**
333
+ * Update a character
334
+ */
335
+ async updateCharacter(idOrName, params) {
336
+ return this.request('PATCH', `/characters/${encodeURIComponent(String(idOrName))}`, {
337
+ new_character_name: params.newCharacterName,
338
+ description: params.description,
339
+ base_prompt: params.basePrompt,
340
+ negative_prompt: params.negativePrompt,
341
+ system_instruction: params.systemInstruction,
342
+ reference_image_ids: params.referenceImageIds,
343
+ preferred_aspect_ratio: params.preferredAspectRatio,
344
+ tags: params.tags,
345
+ });
346
+ }
347
+ // =====================================
348
+ // SCENES
349
+ // =====================================
350
+ async listScenes(options) {
351
+ const params = new URLSearchParams();
352
+ if (options?.limit)
353
+ params.set('limit', String(options.limit));
354
+ if (options?.offset)
355
+ params.set('offset', String(options.offset));
356
+ if (options?.search)
357
+ params.set('search', options.search);
358
+ if (options?.sortBy)
359
+ params.set('sort_by', options.sortBy);
360
+ const query = params.toString();
361
+ return this.request('GET', `/scenes${query ? `?${query}` : ''}`);
362
+ }
363
+ async getScene(idOrName) {
364
+ return this.request('GET', `/scenes/${encodeURIComponent(String(idOrName))}`);
365
+ }
366
+ async createScene(params) {
367
+ return this.request('POST', '/scenes', {
368
+ scene_name: params.sceneName,
369
+ description: params.description,
370
+ scene_prompt: params.scenePrompt,
371
+ reference_image_ids: params.referenceImageIds,
372
+ reference_image_urls: params.referenceImageUrls,
373
+ default_reference_mode: params.defaultReferenceMode,
374
+ preferred_aspect_ratio: params.preferredAspectRatio,
375
+ tags: params.tags,
376
+ });
377
+ }
378
+ async updateScene(idOrName, params) {
379
+ return this.request('PATCH', `/scenes/${encodeURIComponent(String(idOrName))}`, {
380
+ new_scene_name: params.newSceneName,
381
+ description: params.description,
382
+ scene_prompt: params.scenePrompt,
383
+ reference_image_ids: params.referenceImageIds,
384
+ reference_image_urls: params.referenceImageUrls,
385
+ default_reference_mode: params.defaultReferenceMode,
386
+ preferred_aspect_ratio: params.preferredAspectRatio,
387
+ tags: params.tags,
388
+ });
389
+ }
390
+ async deleteScene(idOrName) {
391
+ await this.request('DELETE', `/scenes/${encodeURIComponent(String(idOrName))}`);
392
+ }
393
+ // =====================================
394
+ // SEARCH
395
+ // =====================================
396
+ /**
397
+ * Search images with filters
398
+ */
399
+ async searchImages(options) {
400
+ const params = new URLSearchParams();
401
+ if (options?.limit)
402
+ params.set('limit', String(options.limit));
403
+ if (options?.offset)
404
+ params.set('offset', String(options.offset));
405
+ if (options?.sortOrder)
406
+ params.set('sort_order', options.sortOrder);
407
+ if (options?.filters) {
408
+ // Flatten filter params
409
+ const filters = options.filters;
410
+ if (filters.prompt_substring)
411
+ params.set('search', String(filters.prompt_substring));
412
+ if (filters.operation_type)
413
+ params.set('operation', String(filters.operation_type));
414
+ if (filters.session_id)
415
+ params.set('session_id', String(filters.session_id));
416
+ if (filters.aspect_ratio)
417
+ params.set('aspect_ratio', String(filters.aspect_ratio));
418
+ if (filters.created_after)
419
+ params.set('created_after', String(filters.created_after));
420
+ if (filters.created_before)
421
+ params.set('created_before', String(filters.created_before));
422
+ }
423
+ const query = params.toString();
424
+ return this.request('GET', `/images${query ? `?${query}` : ''}`);
425
+ }
426
+ // =====================================
427
+ // USAGE & PROFILE
428
+ // =====================================
429
+ /**
430
+ * Get usage statistics
431
+ */
432
+ async getUsage(options) {
433
+ const params = new URLSearchParams();
434
+ if (options?.limit)
435
+ params.set('limit', String(options.limit));
436
+ const query = params.toString();
437
+ return this.request('GET', `/usage${query ? `?${query}` : ''}`);
438
+ }
439
+ /**
440
+ * Get tenant profile
441
+ */
442
+ async getProfile() {
443
+ return this.request('GET', '/profile');
444
+ }
445
+ // =====================================
446
+ // CONNECTION TEST
447
+ // =====================================
448
+ /**
449
+ * Test connection to server
450
+ */
451
+ async testConnection() {
452
+ try {
453
+ await this.getProfile();
454
+ return true;
455
+ }
456
+ catch {
457
+ return false;
458
+ }
459
+ }
460
+ }
461
+ //# sourceMappingURL=rest-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-client.js","sourceRoot":"","sources":["../../src/transport/rest-client.ts"],"names":[],"mappings":"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"}