@loopman/langchain-sdk 1.7.0 → 1.12.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.
Files changed (94) hide show
  1. package/README.md +78 -5
  2. package/dist/agents/loopman-agent.d.ts.map +1 -1
  3. package/dist/agents/loopman-agent.js +51 -92
  4. package/dist/agents/loopman-agent.js.map +1 -1
  5. package/dist/client/loopman-api.d.ts +19 -64
  6. package/dist/client/loopman-api.d.ts.map +1 -1
  7. package/dist/client/loopman-api.js +85 -248
  8. package/dist/client/loopman-api.js.map +1 -1
  9. package/dist/helpers/prompt-orchestrator.js +17 -17
  10. package/dist/helpers/prompt-orchestrator.js.map +1 -1
  11. package/dist/helpers/template-generator-static.d.ts +27 -0
  12. package/dist/helpers/template-generator-static.d.ts.map +1 -0
  13. package/dist/helpers/template-generator-static.js +52 -0
  14. package/dist/helpers/template-generator-static.js.map +1 -0
  15. package/dist/helpers/template-generator.d.ts +50 -0
  16. package/dist/helpers/template-generator.d.ts.map +1 -0
  17. package/dist/helpers/template-generator.js +85 -0
  18. package/dist/helpers/template-generator.js.map +1 -0
  19. package/dist/index.d.ts +6 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +6 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/langgraph/helpers.d.ts +171 -0
  24. package/dist/langgraph/helpers.d.ts.map +1 -0
  25. package/dist/langgraph/helpers.js +216 -0
  26. package/dist/langgraph/helpers.js.map +1 -0
  27. package/dist/langgraph/index.d.ts +16 -0
  28. package/dist/langgraph/index.d.ts.map +1 -0
  29. package/dist/langgraph/index.js +17 -0
  30. package/dist/langgraph/index.js.map +1 -0
  31. package/dist/langgraph/loopman-conditional-edge.d.ts +58 -0
  32. package/dist/langgraph/loopman-conditional-edge.d.ts.map +1 -0
  33. package/dist/langgraph/loopman-conditional-edge.js +77 -0
  34. package/dist/langgraph/loopman-conditional-edge.js.map +1 -0
  35. package/dist/langgraph/loopman-context-node.d.ts +74 -0
  36. package/dist/langgraph/loopman-context-node.d.ts.map +1 -0
  37. package/dist/langgraph/loopman-context-node.js +143 -0
  38. package/dist/langgraph/loopman-context-node.js.map +1 -0
  39. package/dist/langgraph/loopman-validation-node.d.ts +119 -0
  40. package/dist/langgraph/loopman-validation-node.d.ts.map +1 -0
  41. package/dist/langgraph/loopman-validation-node.js +420 -0
  42. package/dist/langgraph/loopman-validation-node.js.map +1 -0
  43. package/dist/langgraph/types.d.ts +75 -0
  44. package/dist/langgraph/types.d.ts.map +1 -0
  45. package/dist/langgraph/types.js +74 -0
  46. package/dist/langgraph/types.js.map +1 -0
  47. package/dist/loopman-agent-wrapper.d.ts +18 -0
  48. package/dist/loopman-agent-wrapper.d.ts.map +1 -1
  49. package/dist/loopman-agent-wrapper.js +31 -21
  50. package/dist/loopman-agent-wrapper.js.map +1 -1
  51. package/dist/loopman-middleware.d.ts +0 -5
  52. package/dist/loopman-middleware.d.ts.map +1 -1
  53. package/dist/loopman-middleware.js +22 -23
  54. package/dist/loopman-middleware.js.map +1 -1
  55. package/dist/mcp/loopman-mcp-client.d.ts.map +1 -1
  56. package/dist/mcp/loopman-mcp-client.js +5 -0
  57. package/dist/mcp/loopman-mcp-client.js.map +1 -1
  58. package/dist/mcp/tool-registry.d.ts +7 -1
  59. package/dist/mcp/tool-registry.d.ts.map +1 -1
  60. package/dist/mcp/tool-registry.js +23 -16
  61. package/dist/mcp/tool-registry.js.map +1 -1
  62. package/dist/services/logger.service.d.ts.map +1 -1
  63. package/dist/services/logger.service.js +4 -12
  64. package/dist/services/logger.service.js.map +1 -1
  65. package/dist/services/loopman.service.d.ts +25 -11
  66. package/dist/services/loopman.service.d.ts.map +1 -1
  67. package/dist/services/loopman.service.js +74 -45
  68. package/dist/services/loopman.service.js.map +1 -1
  69. package/dist/services/polling.service.d.ts +7 -3
  70. package/dist/services/polling.service.d.ts.map +1 -1
  71. package/dist/services/polling.service.js +61 -47
  72. package/dist/services/polling.service.js.map +1 -1
  73. package/dist/templates.json +20 -0
  74. package/dist/types.d.ts +9 -35
  75. package/dist/types.d.ts.map +1 -1
  76. package/dist/types.js.map +1 -1
  77. package/examples/README.md +346 -0
  78. package/examples/templates/README.md +285 -0
  79. package/examples/templates/langchain-full-review/.env.example +3 -0
  80. package/examples/templates/langchain-full-review/README.md +165 -0
  81. package/examples/templates/langchain-full-review/index.ts +54 -0
  82. package/examples/templates/langchain-full-review/package.json +29 -0
  83. package/examples/templates/langchain-full-review/tsconfig.json +22 -0
  84. package/examples/templates/langchain-tool-validation/.env.example +3 -0
  85. package/examples/templates/langchain-tool-validation/README.md +137 -0
  86. package/examples/templates/langchain-tool-validation/index.ts +65 -0
  87. package/examples/templates/langchain-tool-validation/package.json +29 -0
  88. package/examples/templates/langchain-tool-validation/tsconfig.json +22 -0
  89. package/examples/templates/langgraph-hello-world/.env.example +3 -0
  90. package/examples/templates/langgraph-hello-world/README.md +71 -0
  91. package/examples/templates/langgraph-hello-world/index.ts +147 -0
  92. package/examples/templates/langgraph-hello-world/package.json +27 -0
  93. package/examples/templates/langgraph-hello-world/tsconfig.json +22 -0
  94. package/package.json +12 -7
@@ -1,108 +1,47 @@
1
1
  import { LoopmanConnectionError, } from "../types";
2
2
  /**
3
3
  * Loopman client for direct API connection
4
- * Allows authentication with an API key and direct backoffice calls
4
+ * Uses API key directly via X-API-Key header (no token exchange)
5
5
  */
6
6
  export class LoopmanApiClient {
7
7
  config;
8
- authServiceUrl;
9
- tokenCache = new Map();
10
- bufferTimeSeconds = 60; // Renew token 60s before expiration
8
+ serverUrl;
9
+ logger = null;
10
+ debug = false;
11
11
  constructor(config) {
12
12
  this.config = config;
13
- this.authServiceUrl =
14
- process.env.LOOPMAN_AUTH_URL || "https://auth.loopman.ai";
15
- // Clean expired tokens every 5 minutes
16
- setInterval(() => this.cleanupExpiredTokens(), 5 * 60 * 1000);
13
+ this.serverUrl =
14
+ config.serverUrl ||
15
+ process.env.LOOPMAN_BACKOFFICE_URL ||
16
+ "https://api.loopman.ai";
17
17
  }
18
18
  /**
19
- * Exchange an API key for JWT tokens with caching
20
- * @param apiKey The API key to exchange
21
- * @returns Object containing accessToken and serverUrl
19
+ * Attach a logger (optional).
20
+ * The client is silent by default; logging is enabled only when debug is true.
22
21
  */
23
- async getTokenFromApiKey(apiKey) {
24
- // Check cache first
25
- const cached = this.getCachedToken(apiKey);
26
- if (cached) {
27
- return cached;
28
- }
29
- // Cache miss or expired, get a new token
30
- console.log("🔑 Getting a new token from the authentication service");
31
- try {
32
- const response = await fetch(`${this.authServiceUrl}/auth/tokens/exchange`, {
33
- method: "POST",
34
- headers: {
35
- "Content-Type": "application/json",
36
- },
37
- body: JSON.stringify({ apiKey }),
38
- });
39
- if (!response.ok) {
40
- const errorData = (await response
41
- .json()
42
- .catch(() => ({})));
43
- throw new Error(errorData.message || `HTTP ${response.status}: ${response.statusText}`);
44
- }
45
- const data = (await response.json());
46
- const { accessToken, refreshToken, expiresIn, serverUrl } = data;
47
- // Store in cache
48
- this.setCachedToken(apiKey, {
49
- accessToken,
50
- refreshToken,
51
- serverUrl,
52
- expiresIn,
53
- });
54
- return { accessToken, serverUrl, fromCache: false };
22
+ setLogger(logger, debug) {
23
+ this.logger = logger;
24
+ this.debug = debug ?? this.debug;
25
+ }
26
+ logDebug(message, data) {
27
+ if (this.logger && this.debug) {
28
+ this.logger.debug(message, data);
55
29
  }
56
- catch (error) {
57
- console.error("❌ Failed to exchange API key:", error);
58
- this.handleNetworkError(error, "Authentication service", this.authServiceUrl);
30
+ }
31
+ logError(message, data) {
32
+ if (this.logger) {
33
+ this.logger.error(message, data);
59
34
  }
60
35
  }
61
36
  /**
62
- * Get authorization headers with access token and server URL
37
+ * Get authorization headers with API key
38
+ * Uses X-API-Key header directly (no token exchange)
63
39
  */
64
- async getAuthHeaders(apiKey) {
65
- const { accessToken, serverUrl } = await this.getTokenFromApiKey(apiKey);
40
+ getAuthHeaders(apiKey) {
66
41
  return {
67
- Authorization: `Bearer ${accessToken}`,
68
- serverUrl,
42
+ "X-API-Key": apiKey,
69
43
  };
70
44
  }
71
- /**
72
- * Get current user from backoffice
73
- * @param apiKey The API key for authentication
74
- * @returns Current user information
75
- */
76
- async getCurrentUser(apiKey) {
77
- console.log("👤 Getting current user from backoffice");
78
- try {
79
- const { Authorization, serverUrl } = await this.getAuthHeaders(apiKey);
80
- //console.log(`🔗 Using backoffice URL: ${serverUrl}`);
81
- const response = await fetch(`${serverUrl}/user/me`, {
82
- headers: { Authorization },
83
- });
84
- if (!response.ok) {
85
- const errorData = (await response
86
- .json()
87
- .catch(() => ({})));
88
- throw new Error(errorData.message || `HTTP ${response.status}: ${response.statusText}`);
89
- }
90
- const user = (await response.json());
91
- console.log(`✅ Current user retrieved: ${user.email}`);
92
- return user;
93
- }
94
- catch (error) {
95
- console.error("❌ Failed to get current user:", error);
96
- // Specific error handling for network errors
97
- if (error instanceof TypeError &&
98
- error.message.includes("fetch failed")) {
99
- throw new LoopmanConnectionError(`Backoffice service inaccessible. ` +
100
- `Check that the backoffice server is started and accessible. ` +
101
- `Network error: ${error.message}`);
102
- }
103
- throw new LoopmanConnectionError(`Failed to get user: ${error instanceof Error ? error.message : "Unknown error"}`);
104
- }
105
- }
106
45
  /**
107
46
  * Generic method to make GET requests to backoffice
108
47
  * @param apiKey The API key for authentication
@@ -110,12 +49,11 @@ export class LoopmanApiClient {
110
49
  * @returns Response data
111
50
  */
112
51
  async get(apiKey, endpoint) {
113
- console.log(`📥 GET ${endpoint}`);
52
+ this.logDebug(`HTTP GET ${endpoint}`);
114
53
  try {
115
- const { Authorization, serverUrl } = await this.getAuthHeaders(apiKey);
116
- //console.log(`🔗 Using backoffice URL: ${serverUrl}`);
117
- const response = await fetch(`${serverUrl}${endpoint}`, {
118
- headers: { Authorization },
54
+ const headers = this.getAuthHeaders(apiKey);
55
+ const response = await fetch(`${this.serverUrl}${endpoint}`, {
56
+ headers,
119
57
  });
120
58
  if (!response.ok) {
121
59
  const errorData = (await response
@@ -126,7 +64,11 @@ export class LoopmanApiClient {
126
64
  return (await response.json());
127
65
  }
128
66
  catch (error) {
129
- console.error(`❌ Failed GET ${endpoint}:`, error);
67
+ this.logError(`HTTP GET failed: ${endpoint}`, error);
68
+ if (error instanceof TypeError &&
69
+ error.message.includes("fetch failed")) {
70
+ this.handleNetworkError(error, endpoint);
71
+ }
130
72
  throw new LoopmanConnectionError(`Failed GET ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
131
73
  }
132
74
  }
@@ -138,16 +80,15 @@ export class LoopmanApiClient {
138
80
  * @returns Response data
139
81
  */
140
82
  async post(apiKey, endpoint, data) {
141
- console.log(`📤 POST ${endpoint}`);
83
+ this.logDebug(`HTTP POST ${endpoint}`);
142
84
  try {
143
- const { Authorization, serverUrl } = await this.getAuthHeaders(apiKey);
144
- //console.log(`🔗 Using backoffice URL: ${serverUrl}`);
145
- const response = await fetch(`${serverUrl}${endpoint}`, {
85
+ const headers = {
86
+ ...this.getAuthHeaders(apiKey),
87
+ "Content-Type": "application/json",
88
+ };
89
+ const response = await fetch(`${this.serverUrl}${endpoint}`, {
146
90
  method: "POST",
147
- headers: {
148
- Authorization,
149
- "Content-Type": "application/json",
150
- },
91
+ headers,
151
92
  body: JSON.stringify(data),
152
93
  });
153
94
  if (!response.ok) {
@@ -159,7 +100,11 @@ export class LoopmanApiClient {
159
100
  return (await response.json());
160
101
  }
161
102
  catch (error) {
162
- console.error(`❌ Failed POST ${endpoint}:`, error);
103
+ this.logError(`HTTP POST failed: ${endpoint}`, error);
104
+ if (error instanceof TypeError &&
105
+ error.message.includes("fetch failed")) {
106
+ this.handleNetworkError(error, endpoint);
107
+ }
163
108
  throw new LoopmanConnectionError(`Failed POST ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
164
109
  }
165
110
  }
@@ -171,16 +116,15 @@ export class LoopmanApiClient {
171
116
  * @returns Response data
172
117
  */
173
118
  async put(apiKey, endpoint, data) {
174
- console.log(`📝 PUT ${endpoint}`);
119
+ this.logDebug(`HTTP PUT ${endpoint}`);
175
120
  try {
176
- const { Authorization, serverUrl } = await this.getAuthHeaders(apiKey);
177
- //console.log(`🔗 Using backoffice URL: ${serverUrl}`);
178
- const response = await fetch(`${serverUrl}${endpoint}`, {
121
+ const headers = {
122
+ ...this.getAuthHeaders(apiKey),
123
+ "Content-Type": "application/json",
124
+ };
125
+ const response = await fetch(`${this.serverUrl}${endpoint}`, {
179
126
  method: "PUT",
180
- headers: {
181
- Authorization,
182
- "Content-Type": "application/json",
183
- },
127
+ headers,
184
128
  body: JSON.stringify(data),
185
129
  });
186
130
  if (!response.ok) {
@@ -192,7 +136,11 @@ export class LoopmanApiClient {
192
136
  return (await response.json());
193
137
  }
194
138
  catch (error) {
195
- console.error(`❌ Failed PUT ${endpoint}:`, error);
139
+ this.logError(`HTTP PUT failed: ${endpoint}`, error);
140
+ if (error instanceof TypeError &&
141
+ error.message.includes("fetch failed")) {
142
+ this.handleNetworkError(error, endpoint);
143
+ }
196
144
  throw new LoopmanConnectionError(`Failed PUT ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
197
145
  }
198
146
  }
@@ -204,16 +152,15 @@ export class LoopmanApiClient {
204
152
  * @returns Response data
205
153
  */
206
154
  async patch(apiKey, endpoint, data) {
207
- console.log(`🔧 PATCH ${endpoint}`);
155
+ this.logDebug(`HTTP PATCH ${endpoint}`);
208
156
  try {
209
- const { Authorization, serverUrl } = await this.getAuthHeaders(apiKey);
210
- //console.log(`🔗 Using backoffice URL: ${serverUrl}`);
211
- const response = await fetch(`${serverUrl}${endpoint}`, {
157
+ const headers = {
158
+ ...this.getAuthHeaders(apiKey),
159
+ "Content-Type": "application/json",
160
+ };
161
+ const response = await fetch(`${this.serverUrl}${endpoint}`, {
212
162
  method: "PATCH",
213
- headers: {
214
- Authorization,
215
- "Content-Type": "application/json",
216
- },
163
+ headers,
217
164
  body: JSON.stringify(data),
218
165
  });
219
166
  if (!response.ok) {
@@ -225,7 +172,11 @@ export class LoopmanApiClient {
225
172
  return (await response.json());
226
173
  }
227
174
  catch (error) {
228
- console.error(`❌ Failed PATCH ${endpoint}:`, error);
175
+ this.logError(`HTTP PATCH failed: ${endpoint}`, error);
176
+ if (error instanceof TypeError &&
177
+ error.message.includes("fetch failed")) {
178
+ this.handleNetworkError(error, endpoint);
179
+ }
229
180
  throw new LoopmanConnectionError(`Failed PATCH ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
230
181
  }
231
182
  }
@@ -236,13 +187,12 @@ export class LoopmanApiClient {
236
187
  * @returns Response data
237
188
  */
238
189
  async delete(apiKey, endpoint) {
239
- console.log(`🗑️ DELETE ${endpoint}`);
190
+ this.logDebug(`HTTP DELETE ${endpoint}`);
240
191
  try {
241
- const { Authorization, serverUrl } = await this.getAuthHeaders(apiKey);
242
- //console.log(`🔗 Using backoffice URL: ${serverUrl}`);
243
- const response = await fetch(`${serverUrl}${endpoint}`, {
192
+ const headers = this.getAuthHeaders(apiKey);
193
+ const response = await fetch(`${this.serverUrl}${endpoint}`, {
244
194
  method: "DELETE",
245
- headers: { Authorization },
195
+ headers,
246
196
  });
247
197
  if (!response.ok) {
248
198
  const errorData = (await response
@@ -253,150 +203,37 @@ export class LoopmanApiClient {
253
203
  return (await response.json());
254
204
  }
255
205
  catch (error) {
256
- console.error(`❌ Failed DELETE ${endpoint}:`, error);
257
- throw new LoopmanConnectionError(`Failed DELETE ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
258
- }
259
- }
260
- /**
261
- * Get token from cache if valid, otherwise return null
262
- */
263
- getCachedToken(apiKey) {
264
- const cached = this.tokenCache.get(apiKey);
265
- if (!cached) {
266
- console.log(`🔍 Cache miss for key: ${this.maskApiKey(apiKey)}`);
267
- return null;
268
- }
269
- // Check if token is still valid
270
- const now = Date.now();
271
- if (cached.expiresAt <= now) {
272
- console.log(`⏰ Token expired for key: ${this.maskApiKey(apiKey)} (expired ${Math.floor((now - cached.expiresAt) / 1000)}s ago)`);
273
- this.tokenCache.delete(apiKey);
274
- return null;
275
- }
276
- const ttl = Math.floor((cached.expiresAt - now) / 1000);
277
- console.log(`✅ Cache hit for key: ${this.maskApiKey(apiKey)} (TTL: ${ttl}s)`);
278
- return {
279
- accessToken: cached.data.accessToken,
280
- serverUrl: cached.data.serverUrl,
281
- fromCache: true,
282
- };
283
- }
284
- /**
285
- * Store token in cache with expiration
286
- */
287
- setCachedToken(apiKey, tokenData) {
288
- const now = Date.now();
289
- const expiresAt = now + (tokenData.expiresIn - this.bufferTimeSeconds) * 1000;
290
- this.tokenCache.set(apiKey, {
291
- data: tokenData,
292
- expiresAt,
293
- });
294
- const ttl = Math.floor((expiresAt - now) / 1000);
295
- console.log(`💾 Token cached for key: ${this.maskApiKey(apiKey)} (TTL: ${ttl}s, expires at: ${new Date(expiresAt).toISOString()})`);
296
- }
297
- /**
298
- * Remove a token from cache
299
- */
300
- clearCache(apiKey) {
301
- const deleted = this.tokenCache.delete(apiKey);
302
- if (deleted) {
303
- console.log(`🗑️ Token removed from cache for key: ${this.maskApiKey(apiKey)}`);
304
- }
305
- }
306
- /**
307
- * Clear all token cache
308
- */
309
- clearAllCache() {
310
- const size = this.tokenCache.size;
311
- this.tokenCache.clear();
312
- console.log(`🧹 Token cache cleared (${size} entries removed)`);
313
- }
314
- /**
315
- * Get cache statistics
316
- */
317
- getCacheStats() {
318
- const now = Date.now();
319
- const entries = Array.from(this.tokenCache.entries()).map(([apiKey, cached]) => ({
320
- apiKey: this.maskApiKey(apiKey),
321
- serverUrl: cached.data.serverUrl,
322
- expiresAt: new Date(cached.expiresAt).toISOString(),
323
- ttl: Math.floor((cached.expiresAt - now) / 1000), // seconds until expiration
324
- }));
325
- return {
326
- size: this.tokenCache.size,
327
- entries,
328
- };
329
- }
330
- /**
331
- * Check if a token exists and is valid
332
- */
333
- hasValidToken(apiKey) {
334
- const cached = this.tokenCache.get(apiKey);
335
- if (!cached)
336
- return false;
337
- const isValid = cached.expiresAt > Date.now();
338
- if (!isValid) {
339
- this.tokenCache.delete(apiKey);
340
- }
341
- return isValid;
342
- }
343
- /**
344
- * Get remaining TTL for a cached token
345
- */
346
- getTokenTTL(apiKey) {
347
- const cached = this.tokenCache.get(apiKey);
348
- if (!cached)
349
- return 0;
350
- const ttl = Math.floor((cached.expiresAt - Date.now()) / 1000);
351
- return Math.max(0, ttl);
352
- }
353
- /**
354
- * Clean up expired tokens from cache
355
- */
356
- cleanupExpiredTokens() {
357
- const now = Date.now();
358
- let removed = 0;
359
- for (const [apiKey, cached] of this.tokenCache.entries()) {
360
- if (cached.expiresAt <= now) {
361
- this.tokenCache.delete(apiKey);
362
- removed++;
206
+ this.logError(`HTTP DELETE failed: ${endpoint}`, error);
207
+ if (error instanceof TypeError &&
208
+ error.message.includes("fetch failed")) {
209
+ this.handleNetworkError(error, endpoint);
363
210
  }
364
- }
365
- if (removed > 0) {
366
- console.log(`🧹 ${removed} expired token(s) cleaned from cache (${this.tokenCache.size} remaining)`);
211
+ throw new LoopmanConnectionError(`Failed DELETE ${endpoint}: ${error instanceof Error ? error.message : "Unknown error"}`);
367
212
  }
368
213
  }
369
214
  /**
370
215
  * Handle network errors consistently
371
216
  */
372
- handleNetworkError(error, serviceName, serviceUrl) {
217
+ handleNetworkError(error, endpoint) {
373
218
  if (error instanceof TypeError && error.message.includes("fetch failed")) {
374
- throw new LoopmanConnectionError(`${serviceName} inaccessible at ${serviceUrl}. ` +
219
+ throw new LoopmanConnectionError(`Backoffice service inaccessible at ${this.serverUrl}. ` +
375
220
  `Check that the server is started and accessible. ` +
376
221
  `Network error: ${error.message}`);
377
222
  }
378
223
  if (error instanceof Error && error.message.includes("ECONNREFUSED")) {
379
- throw new LoopmanConnectionError(`Connection refused to ${serviceName} (${serviceUrl}). ` +
224
+ throw new LoopmanConnectionError(`Connection refused to backoffice (${this.serverUrl}). ` +
380
225
  `The server is probably not started. ` +
381
226
  `Check that the service is running.`);
382
227
  }
383
228
  if (error instanceof Error && error.message.includes("ENOTFOUND")) {
384
- throw new LoopmanConnectionError(`${serviceName} not found (${serviceUrl}). ` +
229
+ throw new LoopmanConnectionError(`Backoffice not found (${this.serverUrl}). ` +
385
230
  `Check the service URL in your configuration. ` +
386
231
  `DNS error: ${error.message}`);
387
232
  }
388
- throw new LoopmanConnectionError(`Connection error to ${serviceName}. ` +
389
- `Service: ${serviceUrl}. ` +
233
+ throw new LoopmanConnectionError(`Connection error to backoffice. ` +
234
+ `Endpoint: ${endpoint}. ` +
390
235
  `Error: ${error instanceof Error ? error.message : "Unknown error"}`);
391
236
  }
392
- /**
393
- * Mask API key for logs (show only first 8 characters)
394
- */
395
- maskApiKey(apiKey) {
396
- if (apiKey.length <= 8)
397
- return apiKey;
398
- return `${apiKey.substring(0, 8)}...`;
399
- }
400
237
  /**
401
238
  * Get current configuration
402
239
  */
@@ -1 +1 @@
1
- {"version":3,"file":"loopman-api.js","sourceRoot":"","sources":["../../src/client/loopman-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,sBAAsB,GAIvB,MAAM,UAAU,CAAC;AAMlB;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAMP;IALZ,cAAc,CAAS;IACvB,UAAU,GAChB,IAAI,GAAG,EAAE,CAAC;IACK,iBAAiB,GAAG,EAAE,CAAC,CAAC,oCAAoC;IAE7E,YAAoB,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;QACvC,IAAI,CAAC,cAAc;YACjB,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;QAE5D,uCAAuC;QACvC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAChE,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CACtB,MAAc;QAEd,oBAAoB;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,yCAAyC;QACzC,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QAEtE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,IAAI,CAAC,cAAc,uBAAuB,EAC7C;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;aACjC,CACF,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ;qBAC9B,IAAI,EAAE;qBACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAqB,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0B,CAAC;YAC9D,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YAEjE,iBAAiB;YACjB,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;gBAC1B,WAAW;gBACX,YAAY;gBACZ,SAAS;gBACT,SAAS;aACV,CAAC,CAAC;YAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACtD,IAAI,CAAC,kBAAkB,CACrB,KAAK,EACL,wBAAwB,EACxB,IAAI,CAAC,cAAc,CACpB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAC1B,MAAc;QAEd,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACzE,OAAO;YACL,aAAa,EAAE,UAAU,WAAW,EAAE;YACtC,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,MAAc;QACjC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvE,uDAAuD;YAEvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,UAAU,EAAE;gBACnD,OAAO,EAAE,EAAE,aAAa,EAAE;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ;qBAC9B,IAAI,EAAE;qBACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAqB,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgB,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YAEtD,6CAA6C;YAC7C,IACE,KAAK,YAAY,SAAS;gBAC1B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EACtC,CAAC;gBACD,MAAM,IAAI,sBAAsB,CAC9B,mCAAmC;oBACjC,8DAA8D;oBAC9D,kBAAkB,KAAK,CAAC,OAAO,EAAE,CACpC,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,sBAAsB,CAC9B,uBACE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAI,MAAc,EAAE,QAAgB;QAC3C,OAAO,CAAC,GAAG,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvE,uDAAuD;YAEvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,EAAE;gBACtD,OAAO,EAAE,EAAE,aAAa,EAAE;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ;qBAC9B,IAAI,EAAE;qBACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAqB,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gBAAgB,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,IAAI,sBAAsB,CAC9B,cAAc,QAAQ,KACpB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,CAAI,MAAc,EAAE,QAAgB,EAAE,IAAS;QACvD,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvE,uDAAuD;YAEvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,EAAE;gBACtD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa;oBACb,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ;qBAC9B,IAAI,EAAE;qBACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAqB,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iBAAiB,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,IAAI,sBAAsB,CAC9B,eAAe,QAAQ,KACrB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,CAAI,MAAc,EAAE,QAAgB,EAAE,IAAS;QACtD,OAAO,CAAC,GAAG,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvE,uDAAuD;YAEvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,EAAE;gBACtD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,aAAa;oBACb,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ;qBAC9B,IAAI,EAAE;qBACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAqB,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gBAAgB,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YAClD,MAAM,IAAI,sBAAsB,CAC9B,cAAc,QAAQ,KACpB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAI,MAAc,EAAE,QAAgB,EAAE,IAAS;QACxD,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvE,uDAAuD;YAEvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,EAAE;gBACtD,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE;oBACP,aAAa;oBACb,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ;qBAC9B,IAAI,EAAE;qBACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAqB,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YACpD,MAAM,IAAI,sBAAsB,CAC9B,gBAAgB,QAAQ,KACtB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAI,MAAc,EAAE,QAAgB;QAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACvE,uDAAuD;YAEvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,QAAQ,EAAE,EAAE;gBACtD,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,EAAE,aAAa,EAAE;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ;qBAC9B,IAAI,EAAE;qBACN,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAqB,CAAC;gBAC1C,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,GAAG,EAAE,KAAK,CAAC,CAAC;YACrD,MAAM,IAAI,sBAAsB,CAC9B,iBAAiB,QAAQ,KACvB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAC3C,EAAE,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,MAAc;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,gCAAgC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,MAAM,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CACT,4BAA4B,IAAI,CAAC,UAAU,CACzC,MAAM,CACP,aAAa,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,CAClE,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CACT,wBAAwB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CACjE,CAAC;QAEF,OAAO;YACL,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;YACpC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;YAChC,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,MAAc,EAAE,SAAoB;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,SAAS,GACb,GAAG,GAAG,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;QAE9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE;YAC1B,IAAI,EAAE,SAAS;YACf,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CACT,4BAA4B,IAAI,CAAC,UAAU,CACzC,MAAM,CACP,UAAU,GAAG,kBAAkB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,GAAG,CACrE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,MAAc;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CACT,yCAAyC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,mBAAmB,CAAC,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,aAAa;QASX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CACvD,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACrB,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAC/B,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;YAChC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;YACnD,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,2BAA2B;SAC9E,CAAC,CACH,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI;YAC1B,OAAO;SACR,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,MAAc;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,MAAc;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAEtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,IAAI,MAAM,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;gBAC5B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/B,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CACT,MAAM,OAAO,yCAAyC,IAAI,CAAC,UAAU,CAAC,IAAI,aAAa,CACxF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB,CACxB,KAAU,EACV,WAAmB,EACnB,UAAkB;QAElB,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACzE,MAAM,IAAI,sBAAsB,CAC9B,GAAG,WAAW,oBAAoB,UAAU,IAAI;gBAC9C,mDAAmD;gBACnD,kBAAkB,KAAK,CAAC,OAAO,EAAE,CACpC,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,sBAAsB,CAC9B,yBAAyB,WAAW,KAAK,UAAU,KAAK;gBACtD,sCAAsC;gBACtC,oCAAoC,CACvC,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,sBAAsB,CAC9B,GAAG,WAAW,eAAe,UAAU,KAAK;gBAC1C,+CAA+C;gBAC/C,cAAc,KAAK,CAAC,OAAO,EAAE,CAChC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,sBAAsB,CAC9B,uBAAuB,WAAW,IAAI;YACpC,YAAY,UAAU,IAAI;YAC1B,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACvE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,MAAc;QAC/B,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,MAAM,CAAC;QACtC,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"loopman-api.js","sourceRoot":"","sources":["../../src/client/loopman-api.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ export function buildLoopmanSystemPrompt(options) {
5
5
  // Add language instruction if specified
6
6
  let languageInstruction = "";
7
7
  if (options.language) {
8
- languageInstruction = `\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\n🌍 LANGUAGE REQUIREMENT\n\nAll text content you provide to submitForHumanReview MUST be written in ${options.language}.\nThis includes:\n- title\n- description\n- proposedDecision\n- decisionReasoning\n- businessContext\n- information labels and values\n\nEven if the user communicates in another language, always use ${options.language} for human review content.\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
8
+ languageInstruction = `\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nLANGUAGE REQUIREMENT\n\nAll text content you provide to submitForHumanReview MUST be written in ${options.language}.\nThis includes:\n- title\n- description\n- proposedDecision\n- decisionReasoning\n- businessContext\n- information labels and values\n\nEven if the user communicates in another language, always use ${options.language} for human review content.\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n`;
9
9
  }
10
10
  if (variablePrompt.trim().length === 0) {
11
11
  return `${before}${languageInstruction}\n${after}`;
@@ -31,31 +31,31 @@ function sanitizePlaceholders(template, options) {
31
31
  const ORCHESTRATOR_BEFORE = `
32
32
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
33
33
 
34
- 🔧 LOOPMAN HUMAN-IN-THE-LOOP WORKFLOW
34
+ LOOPMAN HUMAN-IN-THE-LOOP WORKFLOW
35
35
 
36
- 🚨 IMPORTANT: This is a STRICT workflow. You MUST NOT deviate from it.
36
+ IMPORTANT: This is a STRICT workflow. You MUST NOT deviate from it.
37
37
 
38
- DO NOT call business tools directly (send_email, publish_content, delete_data, etc.)
39
- ALWAYS follow the 4-step process below
38
+ DO NOT call business tools directly (send_email, publish_content, delete_data, etc.)
39
+ ALWAYS follow the 4-step process below
40
40
 
41
41
  You MUST follow these steps IN ORDER:
42
42
 
43
- 1️⃣ STEP 1: Call getHumanGuidelines
43
+ STEP 1: Call getHumanGuidelines
44
44
  - workflow_id: "{{ $workflow.id }}"
45
45
  - execution_id: "{{ $execution.id }}"
46
46
  - category: "{{ $category }}"
47
47
 
48
- 2️⃣ STEP 2: Call getDecisionContext
48
+ STEP 2: Call getDecisionContext
49
49
  - workflow_id: "{{ $workflow.id }}"
50
50
  - execution_id: "{{ $execution.id }}"
51
51
 
52
- 3️⃣ STEP 3: Analyze the context
52
+ STEP 3: Analyze the context
53
53
 
54
54
  After completing Steps 1 and 2, analyze in your next Thought:
55
55
 
56
56
  Thought: Steps 1 and 2 complete. Analyzing context:
57
57
 
58
- 🚨 DECISION HIERARCHY (from highest to lowest priority):
58
+ DECISION HIERARCHY (from highest to lowest priority):
59
59
  1. HUMAN DECISIONS (userType: USER) - Most authoritative
60
60
  2. GUIDELINES - Generic rules and policies
61
61
  3. SYSTEM DECISIONS (userType: SYSTEM) - Lowest priority
@@ -95,28 +95,28 @@ You MUST follow these steps IN ORDER:
95
95
  const ORCHESTRATOR_AFTER = `
96
96
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
97
97
 
98
- 4️⃣ STEP 4: Submit for human review
98
+ STEP 4: Submit for human review
99
99
 
100
- 🚨 CRITICAL RULES - READ CAREFULLY:
100
+ CRITICAL RULES - READ CAREFULLY:
101
101
 
102
- NEVER call business tools directly (like send_email, publish_content, delete_data, etc.)
103
- NEVER skip the submitForHumanReview step
104
- ALWAYS go through submitForHumanReview FIRST before any action
102
+ NEVER call business tools directly (like send_email, publish_content, delete_data, etc.)
103
+ NEVER skip the submitForHumanReview step
104
+ ALWAYS go through submitForHumanReview FIRST before any action
105
105
 
106
106
  You MUST call submitForHumanReview in these cases:
107
107
 
108
108
  A) First attempt: No previous decisions found
109
- B) After NEED_CHANGES: getDecisionContext shows human feedback
109
+ B) After NEEDS_CHANGES: getDecisionContext shows human feedback
110
110
  → In this case, you MUST incorporate the feedback and RE-SUBMIT a corrected proposal
111
111
 
112
- Do NOT skip this step if you see previous NEED_CHANGES feedback!
112
+ Do NOT skip this step if you see previous NEEDS_CHANGES feedback.
113
113
  The human is waiting for your corrected proposal.
114
114
 
115
115
  Call submitForHumanReview with ALL these REQUIRED fields:
116
116
  * title (string, required): Brief description of the action (e.g., "Send email to Alice")
117
117
  * description (string, required): Brief description of the decision being requested
118
118
  * proposedDecision (string, REQUIRED): The exact action you propose (e.g., "Send email with subject 'Meeting' to alice@example.com")
119
- - If re-submitting after NEED_CHANGES, incorporate the human feedback into your proposal
119
+ - If re-submitting after NEEDS_CHANGES, incorporate the human feedback into your proposal
120
120
  * decisionReasoning (string, required): Detailed explanation of why you made this decision based on guidelines
121
121
  - If getDecisionContext returned previous human decisions, ALWAYS mention them in your reasoning
122
122
  - Example: "Based on John Doe's previous feedback on 2024-01-15 requesting changes, I have updated the proposal to..."
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-orchestrator.js","sourceRoot":"","sources":["../../src/helpers/prompt-orchestrator.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,wBAAwB,CACtC,OAA6B;IAE7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAElD,wCAAwC;IACxC,IAAI,mBAAmB,GAAG,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,mBAAmB,GAAG,wKAAwK,OAAO,CAAC,QAAQ,2MAA2M,OAAO,CAAC,QAAQ,8FAA8F,CAAC;IAC1gB,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,GAAG,MAAM,GAAG,mBAAmB,KAAK,KAAK,EAAE,CAAC;IACrD,CAAC;IAED,OAAO,GAAG,MAAM,KAAK,cAAc,GAAG,mBAAmB,KAAK,KAAK,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,oBAAoB,CAC3B,QAAgB,EAChB,OAA6B;IAE7B,MAAM,QAAQ,GAAG,QAAQ;SACtB,OAAO,CAAC,+BAA+B,EAAE,OAAO,CAAC,UAAU,CAAC;SAC5D,OAAO,CAAC,gCAAgC,EAAE,OAAO,CAAC,WAAW,CAAC;SAC9D,OAAO,CAAC,+BAA+B,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;SAC9D,OAAO,CAAC,2BAA2B,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IAEvE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DA+DiC,CAAC;AAE9D,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DAqCkC,CAAC"}
1
+ {"version":3,"file":"prompt-orchestrator.js","sourceRoot":"","sources":["../../src/helpers/prompt-orchestrator.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,wBAAwB,CACtC,OAA6B;IAE7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAElD,wCAAwC;IACxC,IAAI,mBAAmB,GAAG,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,mBAAmB,GAAG,qKAAqK,OAAO,CAAC,QAAQ,2MAA2M,OAAO,CAAC,QAAQ,8FAA8F,CAAC;IACvgB,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,GAAG,MAAM,GAAG,mBAAmB,KAAK,KAAK,EAAE,CAAC;IACrD,CAAC;IAED,OAAO,GAAG,MAAM,KAAK,cAAc,GAAG,mBAAmB,KAAK,KAAK,EAAE,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC5D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAS,oBAAoB,CAC3B,QAAgB,EAChB,OAA6B;IAE7B,MAAM,QAAQ,GAAG,QAAQ;SACtB,OAAO,CAAC,+BAA+B,EAAE,OAAO,CAAC,UAAU,CAAC;SAC5D,OAAO,CAAC,gCAAgC,EAAE,OAAO,CAAC,WAAW,CAAC;SAC9D,OAAO,CAAC,+BAA+B,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;SAC9D,OAAO,CAAC,2BAA2B,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAC;IAEvE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DA+DiC,CAAC;AAE9D,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6DAqCkC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Template Generator Utility (Static Version)
3
+ *
4
+ * This is a browser-compatible version that uses pre-exported templates
5
+ * instead of reading from the file system.
6
+ *
7
+ * This version is used by the web application.
8
+ */
9
+ export interface TemplateConfig {
10
+ workflowId: string;
11
+ apiKey?: string;
12
+ sdkVersion?: string;
13
+ }
14
+ export interface TemplateFile {
15
+ path: string;
16
+ content: string;
17
+ }
18
+ /**
19
+ * Get the LangGraph Hello World template files with variable substitution
20
+ *
21
+ * This uses pre-exported templates and applies variable substitution.
22
+ *
23
+ * @param config - Template configuration with workflowId, apiKey, and sdkVersion
24
+ * @returns Array of template files ready to be zipped
25
+ */
26
+ export declare function getLangGraphHelloWorldTemplate(config: TemplateConfig): TemplateFile[];
27
+ //# sourceMappingURL=template-generator-static.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-generator-static.d.ts","sourceRoot":"","sources":["../../src/helpers/template-generator-static.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,cAAc,GACrB,YAAY,EAAE,CAqChB"}