@gxp-dev/tools 2.0.62 → 2.0.64

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 (182) hide show
  1. package/README.md +32 -31
  2. package/bin/gx-devtools.js +74 -54
  3. package/bin/lib/cli.js +23 -21
  4. package/bin/lib/commands/add-dependency.js +366 -325
  5. package/bin/lib/commands/assets.js +137 -139
  6. package/bin/lib/commands/build.js +169 -174
  7. package/bin/lib/commands/datastore.js +181 -183
  8. package/bin/lib/commands/dev.js +127 -131
  9. package/bin/lib/commands/extensions.js +147 -149
  10. package/bin/lib/commands/extract-config.js +73 -67
  11. package/bin/lib/commands/index.js +12 -12
  12. package/bin/lib/commands/init.js +342 -240
  13. package/bin/lib/commands/publish.js +69 -75
  14. package/bin/lib/commands/socket.js +69 -69
  15. package/bin/lib/commands/ssl.js +14 -14
  16. package/bin/lib/constants.js +10 -24
  17. package/bin/lib/tui/App.tsx +761 -705
  18. package/bin/lib/tui/components/AIPanel.tsx +191 -171
  19. package/bin/lib/tui/components/CommandInput.tsx +394 -343
  20. package/bin/lib/tui/components/GeminiPanel.tsx +175 -151
  21. package/bin/lib/tui/components/Header.tsx +23 -21
  22. package/bin/lib/tui/components/LogPanel.tsx +244 -220
  23. package/bin/lib/tui/components/TabBar.tsx +50 -48
  24. package/bin/lib/tui/components/WelcomeScreen.tsx +126 -71
  25. package/bin/lib/tui/index.tsx +37 -39
  26. package/bin/lib/tui/services/AIService.ts +518 -462
  27. package/bin/lib/tui/services/ExtensionService.ts +140 -129
  28. package/bin/lib/tui/services/GeminiService.ts +367 -337
  29. package/bin/lib/tui/services/ServiceManager.ts +344 -322
  30. package/bin/lib/tui/services/SocketService.ts +168 -168
  31. package/bin/lib/tui/services/ViteService.ts +88 -88
  32. package/bin/lib/tui/services/index.ts +47 -22
  33. package/bin/lib/utils/ai-scaffold.js +291 -280
  34. package/bin/lib/utils/extract-config.js +157 -140
  35. package/bin/lib/utils/files.js +82 -86
  36. package/bin/lib/utils/index.js +7 -7
  37. package/bin/lib/utils/paths.js +34 -34
  38. package/bin/lib/utils/prompts.js +194 -169
  39. package/bin/lib/utils/ssl.js +79 -81
  40. package/browser-extensions/README.md +0 -1
  41. package/browser-extensions/chrome/background.js +244 -237
  42. package/browser-extensions/chrome/content.js +32 -29
  43. package/browser-extensions/chrome/devtools.html +7 -7
  44. package/browser-extensions/chrome/devtools.js +19 -19
  45. package/browser-extensions/chrome/inspector.js +802 -767
  46. package/browser-extensions/chrome/manifest.json +71 -63
  47. package/browser-extensions/chrome/panel.html +674 -636
  48. package/browser-extensions/chrome/panel.js +722 -712
  49. package/browser-extensions/chrome/popup.html +586 -543
  50. package/browser-extensions/chrome/popup.js +282 -244
  51. package/browser-extensions/chrome/rules.json +1 -1
  52. package/browser-extensions/chrome/test-chrome.html +216 -136
  53. package/browser-extensions/chrome/test-mixed-content.html +284 -189
  54. package/browser-extensions/chrome/test-uri-pattern.html +221 -198
  55. package/browser-extensions/firefox/README.md +9 -6
  56. package/browser-extensions/firefox/background.js +221 -218
  57. package/browser-extensions/firefox/content.js +55 -52
  58. package/browser-extensions/firefox/debug-errors.html +386 -228
  59. package/browser-extensions/firefox/debug-https.html +153 -105
  60. package/browser-extensions/firefox/devtools.html +7 -7
  61. package/browser-extensions/firefox/devtools.js +23 -20
  62. package/browser-extensions/firefox/inspector.js +802 -767
  63. package/browser-extensions/firefox/manifest.json +68 -68
  64. package/browser-extensions/firefox/panel.html +674 -636
  65. package/browser-extensions/firefox/panel.js +722 -712
  66. package/browser-extensions/firefox/popup.html +572 -535
  67. package/browser-extensions/firefox/popup.js +281 -236
  68. package/browser-extensions/firefox/test-gramercy.html +170 -125
  69. package/browser-extensions/firefox/test-imports.html +59 -55
  70. package/browser-extensions/firefox/test-masking.html +231 -140
  71. package/browser-extensions/firefox/test-uri-pattern.html +221 -198
  72. package/dist/tui/App.d.ts +1 -1
  73. package/dist/tui/App.d.ts.map +1 -1
  74. package/dist/tui/App.js +154 -150
  75. package/dist/tui/App.js.map +1 -1
  76. package/dist/tui/components/AIPanel.d.ts.map +1 -1
  77. package/dist/tui/components/AIPanel.js +42 -35
  78. package/dist/tui/components/AIPanel.js.map +1 -1
  79. package/dist/tui/components/CommandInput.d.ts +1 -1
  80. package/dist/tui/components/CommandInput.d.ts.map +1 -1
  81. package/dist/tui/components/CommandInput.js +92 -62
  82. package/dist/tui/components/CommandInput.js.map +1 -1
  83. package/dist/tui/components/GeminiPanel.d.ts.map +1 -1
  84. package/dist/tui/components/GeminiPanel.js +37 -30
  85. package/dist/tui/components/GeminiPanel.js.map +1 -1
  86. package/dist/tui/components/Header.d.ts.map +1 -1
  87. package/dist/tui/components/Header.js +1 -1
  88. package/dist/tui/components/Header.js.map +1 -1
  89. package/dist/tui/components/LogPanel.d.ts +1 -1
  90. package/dist/tui/components/LogPanel.d.ts.map +1 -1
  91. package/dist/tui/components/LogPanel.js +26 -24
  92. package/dist/tui/components/LogPanel.js.map +1 -1
  93. package/dist/tui/components/TabBar.d.ts +2 -2
  94. package/dist/tui/components/TabBar.d.ts.map +1 -1
  95. package/dist/tui/components/TabBar.js +11 -11
  96. package/dist/tui/components/TabBar.js.map +1 -1
  97. package/dist/tui/components/WelcomeScreen.d.ts.map +1 -1
  98. package/dist/tui/components/WelcomeScreen.js +6 -6
  99. package/dist/tui/components/WelcomeScreen.js.map +1 -1
  100. package/dist/tui/index.d.ts.map +1 -1
  101. package/dist/tui/index.js +8 -8
  102. package/dist/tui/index.js.map +1 -1
  103. package/dist/tui/services/AIService.d.ts +2 -2
  104. package/dist/tui/services/AIService.d.ts.map +1 -1
  105. package/dist/tui/services/AIService.js +165 -125
  106. package/dist/tui/services/AIService.js.map +1 -1
  107. package/dist/tui/services/ExtensionService.d.ts +1 -1
  108. package/dist/tui/services/ExtensionService.d.ts.map +1 -1
  109. package/dist/tui/services/ExtensionService.js +33 -26
  110. package/dist/tui/services/ExtensionService.js.map +1 -1
  111. package/dist/tui/services/GeminiService.d.ts +1 -1
  112. package/dist/tui/services/GeminiService.d.ts.map +1 -1
  113. package/dist/tui/services/GeminiService.js +87 -76
  114. package/dist/tui/services/GeminiService.js.map +1 -1
  115. package/dist/tui/services/ServiceManager.d.ts +3 -3
  116. package/dist/tui/services/ServiceManager.d.ts.map +1 -1
  117. package/dist/tui/services/ServiceManager.js +72 -58
  118. package/dist/tui/services/ServiceManager.js.map +1 -1
  119. package/dist/tui/services/SocketService.d.ts.map +1 -1
  120. package/dist/tui/services/SocketService.js +32 -32
  121. package/dist/tui/services/SocketService.js.map +1 -1
  122. package/dist/tui/services/ViteService.d.ts.map +1 -1
  123. package/dist/tui/services/ViteService.js +26 -28
  124. package/dist/tui/services/ViteService.js.map +1 -1
  125. package/dist/tui/services/index.d.ts +6 -6
  126. package/dist/tui/services/index.d.ts.map +1 -1
  127. package/dist/tui/services/index.js +6 -6
  128. package/dist/tui/services/index.js.map +1 -1
  129. package/mcp/gxp-api-server.js +83 -81
  130. package/package.json +109 -93
  131. package/runtime/PortalContainer.vue +258 -234
  132. package/runtime/dev-tools/DevToolsModal.vue +153 -155
  133. package/runtime/dev-tools/LayoutSwitcher.vue +144 -140
  134. package/runtime/dev-tools/MockDataEditor.vue +456 -433
  135. package/runtime/dev-tools/SocketSimulator.vue +379 -371
  136. package/runtime/dev-tools/StoreInspector.vue +517 -455
  137. package/runtime/dev-tools/index.js +5 -5
  138. package/runtime/fallback-layouts/PrivateLayout.vue +2 -2
  139. package/runtime/fallback-layouts/PublicLayout.vue +2 -2
  140. package/runtime/fallback-layouts/SystemLayout.vue +2 -2
  141. package/runtime/gxpStringsPlugin.js +159 -134
  142. package/runtime/index.html +17 -19
  143. package/runtime/main.js +24 -22
  144. package/runtime/mock-api/auth-middleware.js +15 -15
  145. package/runtime/mock-api/image-generator.js +46 -46
  146. package/runtime/mock-api/index.js +55 -55
  147. package/runtime/mock-api/response-generator.js +116 -105
  148. package/runtime/mock-api/route-generator.js +107 -84
  149. package/runtime/mock-api/socket-triggers.js +94 -93
  150. package/runtime/mock-api/spec-loader.js +79 -80
  151. package/runtime/package.json +3 -0
  152. package/runtime/server.js +68 -68
  153. package/runtime/stores/gxpPortalConfigStore.js +204 -186
  154. package/runtime/stores/index.js +2 -2
  155. package/runtime/vite-inspector-plugin.js +858 -707
  156. package/runtime/vite-source-tracker-plugin.js +132 -113
  157. package/runtime/vite.config.js +207 -132
  158. package/scripts/launch-chrome.js +41 -41
  159. package/scripts/pack-chrome.js +38 -39
  160. package/socket-events/AiSessionMessageCreated.json +17 -17
  161. package/socket-events/SocialStreamPostCreated.json +23 -23
  162. package/socket-events/SocialStreamPostVariantCompleted.json +22 -22
  163. package/template/.claude/agents/gxp-developer.md +100 -99
  164. package/template/.claude/settings.json +7 -7
  165. package/template/AGENTS.md +30 -23
  166. package/template/GEMINI.md +20 -20
  167. package/template/README.md +70 -53
  168. package/template/app-manifest.json +2 -4
  169. package/template/configuration.json +10 -10
  170. package/template/default-styling.css +1 -1
  171. package/template/index.html +18 -20
  172. package/template/main.js +24 -22
  173. package/template/src/DemoPage.vue +415 -362
  174. package/template/src/Plugin.vue +76 -85
  175. package/template/src/stores/index.js +3 -3
  176. package/template/src/stores/test-data.json +164 -172
  177. package/template/theme-layouts/AdditionalStyling.css +50 -50
  178. package/template/theme-layouts/PrivateLayout.vue +8 -12
  179. package/template/theme-layouts/PublicLayout.vue +8 -12
  180. package/template/theme-layouts/SystemLayout.vue +8 -12
  181. package/template/vite.extend.js +45 -0
  182. package/template/vite.config.js +0 -409
@@ -11,33 +11,33 @@
11
11
  * @returns {object} Map of operation keys to trigger definitions
12
12
  */
13
13
  function parseSocketTriggers(asyncApiSpec) {
14
- const triggers = {};
14
+ const triggers = {}
15
15
 
16
16
  if (!asyncApiSpec) {
17
- return triggers;
17
+ return triggers
18
18
  }
19
19
 
20
20
  // Handle AsyncAPI 2.x format
21
21
  if (asyncApiSpec.channels) {
22
- parseChannels(asyncApiSpec.channels, asyncApiSpec, triggers);
22
+ parseChannels(asyncApiSpec.channels, asyncApiSpec, triggers)
23
23
  }
24
24
 
25
25
  // Handle AsyncAPI 3.x format
26
26
  if (asyncApiSpec.operations) {
27
- parseOperations(asyncApiSpec.operations, asyncApiSpec, triggers);
27
+ parseOperations(asyncApiSpec.operations, asyncApiSpec, triggers)
28
28
  }
29
29
 
30
30
  // Also check components/messages directly
31
31
  if (asyncApiSpec.components?.messages) {
32
- parseMessages(asyncApiSpec.components.messages, triggers);
32
+ parseMessages(asyncApiSpec.components.messages, triggers)
33
33
  }
34
34
 
35
- const triggerCount = Object.keys(triggers).length;
35
+ const triggerCount = Object.keys(triggers).length
36
36
  if (triggerCount > 0) {
37
- console.log(`📡 Parsed ${triggerCount} socket trigger definitions`);
37
+ console.log(`📡 Parsed ${triggerCount} socket trigger definitions`)
38
38
  }
39
39
 
40
- return triggers;
40
+ return triggers
41
41
  }
42
42
 
43
43
  /**
@@ -49,15 +49,12 @@ function parseSocketTriggers(asyncApiSpec) {
49
49
  function parseChannels(channels, spec, triggers) {
50
50
  for (const [channelName, channel] of Object.entries(channels)) {
51
51
  // Check publish/subscribe operations
52
- const operations = [
53
- channel.publish,
54
- channel.subscribe,
55
- ].filter(Boolean);
52
+ const operations = [channel.publish, channel.subscribe].filter(Boolean)
56
53
 
57
54
  for (const operation of operations) {
58
- const message = operation.message;
55
+ const message = operation.message
59
56
  if (message) {
60
- extractTriggersFromMessage(channelName, message, spec, triggers);
57
+ extractTriggersFromMessage(channelName, message, spec, triggers)
61
58
  }
62
59
  }
63
60
  }
@@ -73,8 +70,8 @@ function parseOperations(operations, spec, triggers) {
73
70
  for (const [, operation] of Object.entries(operations)) {
74
71
  if (operation.messages) {
75
72
  for (const message of operation.messages) {
76
- const channelName = operation.channel?.$ref || "default";
77
- extractTriggersFromMessage(channelName, message, spec, triggers);
73
+ const channelName = operation.channel?.$ref || "default"
74
+ extractTriggersFromMessage(channelName, message, spec, triggers)
78
75
  }
79
76
  }
80
77
  }
@@ -90,14 +87,14 @@ function parseMessages(messages, triggers) {
90
87
  if (message["x-triggered-by"]) {
91
88
  const triggerDefs = Array.isArray(message["x-triggered-by"])
92
89
  ? message["x-triggered-by"]
93
- : [message["x-triggered-by"]];
90
+ : [message["x-triggered-by"]]
94
91
 
95
92
  for (const triggerDef of triggerDefs) {
96
- const operationKey = triggerDef.operation;
97
- if (!operationKey) continue;
93
+ const operationKey = triggerDef.operation
94
+ if (!operationKey) continue
98
95
 
99
96
  if (!triggers[operationKey]) {
100
- triggers[operationKey] = [];
97
+ triggers[operationKey] = []
101
98
  }
102
99
 
103
100
  triggers[operationKey].push({
@@ -106,7 +103,7 @@ function parseMessages(messages, triggers) {
106
103
  delay: triggerDef.delay || 0,
107
104
  condition: triggerDef.condition,
108
105
  payload: triggerDef.payload || message.payload,
109
- });
106
+ })
110
107
  }
111
108
  }
112
109
  }
@@ -121,23 +118,23 @@ function parseMessages(messages, triggers) {
121
118
  */
122
119
  function extractTriggersFromMessage(channelName, message, spec, triggers) {
123
120
  // Resolve $ref if needed
124
- let resolvedMessage = message;
121
+ let resolvedMessage = message
125
122
  if (message.$ref) {
126
- resolvedMessage = resolveRef(message.$ref, spec) || message;
123
+ resolvedMessage = resolveRef(message.$ref, spec) || message
127
124
  }
128
125
 
129
126
  // Check for x-triggered-by extension
130
- const triggerDefs = resolvedMessage["x-triggered-by"];
131
- if (!triggerDefs) return;
127
+ const triggerDefs = resolvedMessage["x-triggered-by"]
128
+ if (!triggerDefs) return
132
129
 
133
- const triggerArray = Array.isArray(triggerDefs) ? triggerDefs : [triggerDefs];
130
+ const triggerArray = Array.isArray(triggerDefs) ? triggerDefs : [triggerDefs]
134
131
 
135
132
  for (const triggerDef of triggerArray) {
136
- const operationKey = triggerDef.operation;
137
- if (!operationKey) continue;
133
+ const operationKey = triggerDef.operation
134
+ if (!operationKey) continue
138
135
 
139
136
  if (!triggers[operationKey]) {
140
- triggers[operationKey] = [];
137
+ triggers[operationKey] = []
141
138
  }
142
139
 
143
140
  triggers[operationKey].push({
@@ -146,7 +143,7 @@ function extractTriggersFromMessage(channelName, message, spec, triggers) {
146
143
  delay: triggerDef.delay || 0,
147
144
  condition: triggerDef.condition,
148
145
  payload: triggerDef.payload || resolvedMessage.payload,
149
- });
146
+ })
150
147
  }
151
148
  }
152
149
 
@@ -158,21 +155,21 @@ function extractTriggersFromMessage(channelName, message, spec, triggers) {
158
155
  */
159
156
  function resolveRef(ref, spec) {
160
157
  if (!ref || !ref.startsWith("#/")) {
161
- return null;
158
+ return null
162
159
  }
163
160
 
164
- const parts = ref.slice(2).split("/");
165
- let current = spec;
161
+ const parts = ref.slice(2).split("/")
162
+ let current = spec
166
163
 
167
164
  for (const part of parts) {
168
165
  if (current && typeof current === "object" && part in current) {
169
- current = current[part];
166
+ current = current[part]
170
167
  } else {
171
- return null;
168
+ return null
172
169
  }
173
170
  }
174
171
 
175
- return current;
172
+ return current
176
173
  }
177
174
 
178
175
  /**
@@ -182,31 +179,31 @@ function resolveRef(ref, spec) {
182
179
  * @returns {object} Templated payload
183
180
  */
184
181
  function templatePayload(payload, context) {
185
- if (!payload) return {};
182
+ if (!payload) return {}
186
183
 
187
- const payloadStr = JSON.stringify(payload);
184
+ const payloadStr = JSON.stringify(payload)
188
185
 
189
186
  // Replace template variables
190
187
  const templated = payloadStr.replace(/\{\{([^}]+)\}\}/g, (match, path) => {
191
- const value = resolvePath(path.trim(), context);
188
+ const value = resolvePath(path.trim(), context)
192
189
 
193
190
  if (value === undefined) {
194
- return match; // Keep original if not found
191
+ return match // Keep original if not found
195
192
  }
196
193
 
197
194
  // Handle different types
198
195
  if (typeof value === "string") {
199
- return value;
196
+ return value
200
197
  }
201
198
 
202
- return JSON.stringify(value);
203
- });
199
+ return JSON.stringify(value)
200
+ })
204
201
 
205
202
  try {
206
- return JSON.parse(templated);
203
+ return JSON.parse(templated)
207
204
  } catch {
208
205
  // If JSON parse fails, return original
209
- return payload;
206
+ return payload
210
207
  }
211
208
  }
212
209
 
@@ -219,25 +216,25 @@ function templatePayload(payload, context) {
219
216
  function resolvePath(path, obj) {
220
217
  // Handle special values
221
218
  if (path === "now") {
222
- return new Date().toISOString();
219
+ return new Date().toISOString()
223
220
  }
224
221
 
225
222
  if (path === "timestamp") {
226
- return Date.now();
223
+ return Date.now()
227
224
  }
228
225
 
229
- const parts = path.split(".");
230
- let current = obj;
226
+ const parts = path.split(".")
227
+ let current = obj
231
228
 
232
229
  for (const part of parts) {
233
230
  if (current && typeof current === "object" && part in current) {
234
- current = current[part];
231
+ current = current[part]
235
232
  } else {
236
- return undefined;
233
+ return undefined
237
234
  }
238
235
  }
239
236
 
240
- return current;
237
+ return current
241
238
  }
242
239
 
243
240
  /**
@@ -247,43 +244,43 @@ function resolvePath(path, obj) {
247
244
  * @returns {boolean} Condition result
248
245
  */
249
246
  function evaluateCondition(condition, context) {
250
- if (!condition) return true;
247
+ if (!condition) return true
251
248
 
252
249
  try {
253
250
  // Simple condition parsing (e.g., "response.status == 200")
254
- const match = condition.match(/^([^\s]+)\s*(==|!=|>|<|>=|<=)\s*(.+)$/);
251
+ const match = condition.match(/^([^\s]+)\s*(==|!=|>|<|>=|<=)\s*(.+)$/)
255
252
 
256
- if (!match) return true;
253
+ if (!match) return true
257
254
 
258
- const [, path, operator, valueStr] = match;
259
- const actualValue = resolvePath(path, context);
255
+ const [, path, operator, valueStr] = match
256
+ const actualValue = resolvePath(path, context)
260
257
 
261
258
  // Parse the expected value
262
- let expectedValue;
259
+ let expectedValue
263
260
  try {
264
- expectedValue = JSON.parse(valueStr);
261
+ expectedValue = JSON.parse(valueStr)
265
262
  } catch {
266
- expectedValue = valueStr;
263
+ expectedValue = valueStr
267
264
  }
268
265
 
269
266
  switch (operator) {
270
267
  case "==":
271
- return actualValue == expectedValue;
268
+ return actualValue == expectedValue
272
269
  case "!=":
273
- return actualValue != expectedValue;
270
+ return actualValue != expectedValue
274
271
  case ">":
275
- return actualValue > expectedValue;
272
+ return actualValue > expectedValue
276
273
  case "<":
277
- return actualValue < expectedValue;
274
+ return actualValue < expectedValue
278
275
  case ">=":
279
- return actualValue >= expectedValue;
276
+ return actualValue >= expectedValue
280
277
  case "<=":
281
- return actualValue <= expectedValue;
278
+ return actualValue <= expectedValue
282
279
  default:
283
- return true;
280
+ return true
284
281
  }
285
282
  } catch {
286
- return true;
283
+ return true
287
284
  }
288
285
  }
289
286
 
@@ -295,45 +292,49 @@ function evaluateCondition(condition, context) {
295
292
  * @param {object} context - Request/response context
296
293
  */
297
294
  function triggerSocketEvents(io, socketTriggers, operationKey, context) {
298
- if (!io || !socketTriggers) return;
295
+ if (!io || !socketTriggers) return
299
296
 
300
- const triggers = socketTriggers[operationKey];
301
- if (!triggers || triggers.length === 0) return;
297
+ const triggers = socketTriggers[operationKey]
298
+ if (!triggers || triggers.length === 0) return
302
299
 
303
300
  for (const trigger of triggers) {
304
301
  // Evaluate condition
305
302
  if (!evaluateCondition(trigger.condition, context)) {
306
- console.log(` ⏭️ Skipped socket event (condition not met): ${trigger.event}`);
307
- continue;
303
+ console.log(
304
+ ` ⏭️ Skipped socket event (condition not met): ${trigger.event}`,
305
+ )
306
+ continue
308
307
  }
309
308
 
310
309
  // Template the payload
311
- const payload = templatePayload(trigger.payload, context);
310
+ const payload = templatePayload(trigger.payload, context)
312
311
 
313
312
  // Template the channel name
314
- let channel = trigger.channel || "";
313
+ let channel = trigger.channel || ""
315
314
  channel = channel.replace(/\{([^}]+)\}/g, (match, path) => {
316
- const value = resolvePath(`request.params.${path}`, context);
317
- return value !== undefined ? value : match;
318
- });
315
+ const value = resolvePath(`request.params.${path}`, context)
316
+ return value !== undefined ? value : match
317
+ })
319
318
 
320
319
  // Schedule the emit
321
- const delay = trigger.delay || 0;
320
+ const delay = trigger.delay || 0
322
321
 
323
322
  const emit = () => {
324
- console.log(` 📡 Emitting socket event: ${trigger.event}`);
323
+ console.log(` 📡 Emitting socket event: ${trigger.event}`)
325
324
  if (channel) {
326
- console.log(` Channel: ${channel}`);
325
+ console.log(` Channel: ${channel}`)
327
326
  }
328
327
 
329
- io.emit(trigger.event, payload);
330
- };
328
+ io.emit(trigger.event, payload)
329
+ }
331
330
 
332
331
  if (delay > 0) {
333
- console.log(` ⏱️ Scheduling socket event: ${trigger.event} (${delay}ms delay)`);
334
- setTimeout(emit, delay);
332
+ console.log(
333
+ ` ⏱️ Scheduling socket event: ${trigger.event} (${delay}ms delay)`,
334
+ )
335
+ setTimeout(emit, delay)
335
336
  } else {
336
- emit();
337
+ emit()
337
338
  }
338
339
  }
339
340
  }
@@ -345,21 +346,21 @@ function triggerSocketEvents(io, socketTriggers, operationKey, context) {
345
346
  */
346
347
  function getTriggerStats(socketTriggers) {
347
348
  if (!socketTriggers) {
348
- return { total: 0, operations: [] };
349
+ return { total: 0, operations: [] }
349
350
  }
350
351
 
351
- const operations = [];
352
- let total = 0;
352
+ const operations = []
353
+ let total = 0
353
354
 
354
355
  for (const [operation, triggers] of Object.entries(socketTriggers)) {
355
- total += triggers.length;
356
+ total += triggers.length
356
357
  operations.push({
357
358
  operation,
358
359
  events: triggers.map((t) => t.event),
359
- });
360
+ })
360
361
  }
361
362
 
362
- return { total, operations };
363
+ return { total, operations }
363
364
  }
364
365
 
365
366
  module.exports = {
@@ -368,4 +369,4 @@ module.exports = {
368
369
  templatePayload,
369
370
  evaluateCondition,
370
371
  getTriggerStats,
371
- };
372
+ }