openclaw-event-server-plugin 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.
Files changed (209) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +473 -0
  3. package/config.example.json +203 -0
  4. package/dist/broadcast/index.d.ts +3 -0
  5. package/dist/broadcast/index.d.ts.map +1 -0
  6. package/dist/broadcast/index.js +19 -0
  7. package/dist/broadcast/index.js.map +1 -0
  8. package/dist/broadcast/queue.d.ts +63 -0
  9. package/dist/broadcast/queue.d.ts.map +1 -0
  10. package/dist/broadcast/queue.js +259 -0
  11. package/dist/broadcast/queue.js.map +1 -0
  12. package/dist/broadcast/webhook.d.ts +30 -0
  13. package/dist/broadcast/webhook.d.ts.map +1 -0
  14. package/dist/broadcast/webhook.js +184 -0
  15. package/dist/broadcast/webhook.js.map +1 -0
  16. package/dist/broadcast/websocketServer.d.ts +90 -0
  17. package/dist/broadcast/websocketServer.d.ts.map +1 -0
  18. package/dist/broadcast/websocketServer.js +403 -0
  19. package/dist/broadcast/websocketServer.js.map +1 -0
  20. package/dist/config/config-types.d.ts +280 -0
  21. package/dist/config/config-types.d.ts.map +1 -0
  22. package/dist/config/config-types.js +3 -0
  23. package/dist/config/config-types.js.map +1 -0
  24. package/dist/config/default-config.d.ts +3 -0
  25. package/dist/config/default-config.d.ts.map +1 -0
  26. package/dist/config/default-config.js +136 -0
  27. package/dist/config/default-config.js.map +1 -0
  28. package/dist/config/env.d.ts +6 -0
  29. package/dist/config/env.d.ts.map +1 -0
  30. package/dist/config/env.js +160 -0
  31. package/dist/config/env.js.map +1 -0
  32. package/dist/config/event-types.d.ts +5 -0
  33. package/dist/config/event-types.d.ts.map +1 -0
  34. package/dist/config/event-types.js +54 -0
  35. package/dist/config/event-types.js.map +1 -0
  36. package/dist/config/handler.d.ts +9 -0
  37. package/dist/config/handler.d.ts.map +1 -0
  38. package/dist/config/handler.js +17 -0
  39. package/dist/config/handler.js.map +1 -0
  40. package/dist/config/helpers.d.ts +5 -0
  41. package/dist/config/helpers.d.ts.map +1 -0
  42. package/dist/config/helpers.js +40 -0
  43. package/dist/config/helpers.js.map +1 -0
  44. package/dist/config/index.d.ts +3 -0
  45. package/dist/config/index.d.ts.map +1 -0
  46. package/dist/config/index.js +19 -0
  47. package/dist/config/index.js.map +1 -0
  48. package/dist/config/merge.d.ts +6 -0
  49. package/dist/config/merge.d.ts.map +1 -0
  50. package/dist/config/merge.js +108 -0
  51. package/dist/config/merge.js.map +1 -0
  52. package/dist/config/schema-hook-bridge.d.ts +594 -0
  53. package/dist/config/schema-hook-bridge.d.ts.map +1 -0
  54. package/dist/config/schema-hook-bridge.js +423 -0
  55. package/dist/config/schema-hook-bridge.js.map +1 -0
  56. package/dist/config/schema.d.ts +915 -0
  57. package/dist/config/schema.d.ts.map +1 -0
  58. package/dist/config/schema.js +323 -0
  59. package/dist/config/schema.js.map +1 -0
  60. package/dist/config/types.d.ts +9 -0
  61. package/dist/config/types.d.ts.map +1 -0
  62. package/dist/config/types.js +28 -0
  63. package/dist/config/types.js.map +1 -0
  64. package/dist/config/validate-hook-bridge.d.ts +3 -0
  65. package/dist/config/validate-hook-bridge.d.ts.map +1 -0
  66. package/dist/config/validate-hook-bridge.js +246 -0
  67. package/dist/config/validate-hook-bridge.js.map +1 -0
  68. package/dist/config/validate.d.ts +17 -0
  69. package/dist/config/validate.d.ts.map +1 -0
  70. package/dist/config/validate.js +194 -0
  71. package/dist/config/validate.js.map +1 -0
  72. package/dist/events/index.d.ts +4 -0
  73. package/dist/events/index.d.ts.map +1 -0
  74. package/dist/events/index.js +20 -0
  75. package/dist/events/index.js.map +1 -0
  76. package/dist/events/redaction.d.ts +5 -0
  77. package/dist/events/redaction.d.ts.map +1 -0
  78. package/dist/events/redaction.js +46 -0
  79. package/dist/events/redaction.js.map +1 -0
  80. package/dist/events/signing.d.ts +8 -0
  81. package/dist/events/signing.d.ts.map +1 -0
  82. package/dist/events/signing.js +35 -0
  83. package/dist/events/signing.js.map +1 -0
  84. package/dist/events/types.d.ts +125 -0
  85. package/dist/events/types.d.ts.map +1 -0
  86. package/dist/events/types.js +9 -0
  87. package/dist/events/types.js.map +1 -0
  88. package/dist/hooks/agent-hooks.d.ts +59 -0
  89. package/dist/hooks/agent-hooks.d.ts.map +1 -0
  90. package/dist/hooks/agent-hooks.js +116 -0
  91. package/dist/hooks/agent-hooks.js.map +1 -0
  92. package/dist/hooks/command-hooks.d.ts +13 -0
  93. package/dist/hooks/command-hooks.d.ts.map +1 -0
  94. package/dist/hooks/command-hooks.js +26 -0
  95. package/dist/hooks/command-hooks.js.map +1 -0
  96. package/dist/hooks/event-factory.d.ts +21 -0
  97. package/dist/hooks/event-factory.d.ts.map +1 -0
  98. package/dist/hooks/event-factory.js +31 -0
  99. package/dist/hooks/event-factory.js.map +1 -0
  100. package/dist/hooks/gateway-hooks.d.ts +14 -0
  101. package/dist/hooks/gateway-hooks.d.ts.map +1 -0
  102. package/dist/hooks/gateway-hooks.js +43 -0
  103. package/dist/hooks/gateway-hooks.js.map +1 -0
  104. package/dist/hooks/index.d.ts +10 -0
  105. package/dist/hooks/index.d.ts.map +1 -0
  106. package/dist/hooks/index.js +26 -0
  107. package/dist/hooks/index.js.map +1 -0
  108. package/dist/hooks/message-hooks.d.ts +33 -0
  109. package/dist/hooks/message-hooks.d.ts.map +1 -0
  110. package/dist/hooks/message-hooks.js +208 -0
  111. package/dist/hooks/message-hooks.js.map +1 -0
  112. package/dist/hooks/session-hooks.d.ts +89 -0
  113. package/dist/hooks/session-hooks.d.ts.map +1 -0
  114. package/dist/hooks/session-hooks.js +253 -0
  115. package/dist/hooks/session-hooks.js.map +1 -0
  116. package/dist/hooks/status-reducer.d.ts +30 -0
  117. package/dist/hooks/status-reducer.d.ts.map +1 -0
  118. package/dist/hooks/status-reducer.js +157 -0
  119. package/dist/hooks/status-reducer.js.map +1 -0
  120. package/dist/hooks/subagent-hooks.d.ts +37 -0
  121. package/dist/hooks/subagent-hooks.d.ts.map +1 -0
  122. package/dist/hooks/subagent-hooks.js +79 -0
  123. package/dist/hooks/subagent-hooks.js.map +1 -0
  124. package/dist/hooks/subagent-tracker.d.ts +33 -0
  125. package/dist/hooks/subagent-tracker.d.ts.map +1 -0
  126. package/dist/hooks/subagent-tracker.js +73 -0
  127. package/dist/hooks/subagent-tracker.js.map +1 -0
  128. package/dist/hooks/tool-hooks.d.ts +132 -0
  129. package/dist/hooks/tool-hooks.d.ts.map +1 -0
  130. package/dist/hooks/tool-hooks.js +215 -0
  131. package/dist/hooks/tool-hooks.js.map +1 -0
  132. package/dist/index.d.ts +929 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +236 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/logging/event-file-logger.d.ts +21 -0
  137. package/dist/logging/event-file-logger.d.ts.map +1 -0
  138. package/dist/logging/event-file-logger.js +167 -0
  139. package/dist/logging/event-file-logger.js.map +1 -0
  140. package/dist/logging/index.d.ts +3 -0
  141. package/dist/logging/index.d.ts.map +1 -0
  142. package/dist/logging/index.js +19 -0
  143. package/dist/logging/index.js.map +1 -0
  144. package/dist/logging/runtime-logger.d.ts +12 -0
  145. package/dist/logging/runtime-logger.d.ts.map +1 -0
  146. package/dist/logging/runtime-logger.js +45 -0
  147. package/dist/logging/runtime-logger.js.map +1 -0
  148. package/dist/runtime/hook-bridge-actions.d.ts +9 -0
  149. package/dist/runtime/hook-bridge-actions.d.ts.map +1 -0
  150. package/dist/runtime/hook-bridge-actions.js +248 -0
  151. package/dist/runtime/hook-bridge-actions.js.map +1 -0
  152. package/dist/runtime/hook-bridge-dispatch-engine.d.ts +42 -0
  153. package/dist/runtime/hook-bridge-dispatch-engine.d.ts.map +1 -0
  154. package/dist/runtime/hook-bridge-dispatch-engine.js +233 -0
  155. package/dist/runtime/hook-bridge-dispatch-engine.js.map +1 -0
  156. package/dist/runtime/hook-bridge-tool-guard.d.ts +16 -0
  157. package/dist/runtime/hook-bridge-tool-guard.d.ts.map +1 -0
  158. package/dist/runtime/hook-bridge-tool-guard.js +236 -0
  159. package/dist/runtime/hook-bridge-tool-guard.js.map +1 -0
  160. package/dist/runtime/hook-bridge-utils.d.ts +11 -0
  161. package/dist/runtime/hook-bridge-utils.d.ts.map +1 -0
  162. package/dist/runtime/hook-bridge-utils.js +116 -0
  163. package/dist/runtime/hook-bridge-utils.js.map +1 -0
  164. package/dist/runtime/hook-bridge.d.ts +33 -0
  165. package/dist/runtime/hook-bridge.d.ts.map +1 -0
  166. package/dist/runtime/hook-bridge.js +359 -0
  167. package/dist/runtime/hook-bridge.js.map +1 -0
  168. package/dist/runtime/internal-handlers.d.ts +20 -0
  169. package/dist/runtime/internal-handlers.d.ts.map +1 -0
  170. package/dist/runtime/internal-handlers.js +225 -0
  171. package/dist/runtime/internal-handlers.js.map +1 -0
  172. package/dist/runtime/register-gateway-hooks.d.ts +4 -0
  173. package/dist/runtime/register-gateway-hooks.d.ts.map +1 -0
  174. package/dist/runtime/register-gateway-hooks.js +27 -0
  175. package/dist/runtime/register-gateway-hooks.js.map +1 -0
  176. package/dist/runtime/register-session-hooks.d.ts +4 -0
  177. package/dist/runtime/register-session-hooks.d.ts.map +1 -0
  178. package/dist/runtime/register-session-hooks.js +88 -0
  179. package/dist/runtime/register-session-hooks.js.map +1 -0
  180. package/dist/runtime/register-subagent-hooks.d.ts +4 -0
  181. package/dist/runtime/register-subagent-hooks.d.ts.map +1 -0
  182. package/dist/runtime/register-subagent-hooks.js +143 -0
  183. package/dist/runtime/register-subagent-hooks.js.map +1 -0
  184. package/dist/runtime/register-tool-hooks.d.ts +4 -0
  185. package/dist/runtime/register-tool-hooks.d.ts.map +1 -0
  186. package/dist/runtime/register-tool-hooks.js +348 -0
  187. package/dist/runtime/register-tool-hooks.js.map +1 -0
  188. package/dist/runtime/runtime-events.d.ts +14 -0
  189. package/dist/runtime/runtime-events.d.ts.map +1 -0
  190. package/dist/runtime/runtime-events.js +166 -0
  191. package/dist/runtime/runtime-events.js.map +1 -0
  192. package/dist/runtime/typed-hooks.d.ts +9 -0
  193. package/dist/runtime/typed-hooks.d.ts.map +1 -0
  194. package/dist/runtime/typed-hooks.js +14 -0
  195. package/dist/runtime/typed-hooks.js.map +1 -0
  196. package/dist/runtime/types.d.ts +91 -0
  197. package/dist/runtime/types.d.ts.map +1 -0
  198. package/dist/runtime/types.js +3 -0
  199. package/dist/runtime/types.js.map +1 -0
  200. package/dist/runtime/utils.d.ts +47 -0
  201. package/dist/runtime/utils.d.ts.map +1 -0
  202. package/dist/runtime/utils.js +166 -0
  203. package/dist/runtime/utils.js.map +1 -0
  204. package/dist/tools/replay-tool-guard.d.ts +3 -0
  205. package/dist/tools/replay-tool-guard.d.ts.map +1 -0
  206. package/dist/tools/replay-tool-guard.js +96 -0
  207. package/dist/tools/replay-tool-guard.js.map +1 -0
  208. package/openclaw.plugin.json +847 -0
  209. package/package.json +63 -0
@@ -0,0 +1,17 @@
1
+ import { PluginConfig } from './config-types';
2
+ /**
3
+ * Validate configuration
4
+ */
5
+ export declare function validateConfig(config: PluginConfig): {
6
+ valid: boolean;
7
+ errors: string[];
8
+ };
9
+ /**
10
+ * Resolve runtime-only config values (for example, loading HMAC secret from file).
11
+ */
12
+ export declare function resolveRuntimeConfig(config: PluginConfig): PluginConfig;
13
+ /**
14
+ * Check if an event should be filtered out
15
+ */
16
+ export declare function shouldFilterEvent(config: PluginConfig, eventType: string, channelId?: string, toolName?: string, sessionId?: string): boolean;
17
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/config/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO9C;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA6HzF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAqCvE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CA+BT"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateConfig = validateConfig;
4
+ exports.resolveRuntimeConfig = resolveRuntimeConfig;
5
+ exports.shouldFilterEvent = shouldFilterEvent;
6
+ const event_types_1 = require("./event-types");
7
+ const helpers_1 = require("./helpers");
8
+ const validate_hook_bridge_1 = require("./validate-hook-bridge");
9
+ const node_os_1 = require("node:os");
10
+ const node_path_1 = require("node:path");
11
+ /**
12
+ * Validate configuration
13
+ */
14
+ function validateConfig(config) {
15
+ const errors = [];
16
+ // Validate webhooks
17
+ if (config.webhooks && config.webhooks.length > 0) {
18
+ config.webhooks.forEach((webhook, index) => {
19
+ if (!webhook.url || webhook.url.trim() === '') {
20
+ errors.push(`Webhook ${index}: URL is required`);
21
+ }
22
+ else {
23
+ try {
24
+ const parsedUrl = new URL(webhook.url);
25
+ // Only allow http and https protocols for security
26
+ if (parsedUrl.protocol !== 'http:' && parsedUrl.protocol !== 'https:') {
27
+ errors.push(`Webhook ${index}: Only HTTP and HTTPS protocols are allowed`);
28
+ }
29
+ }
30
+ catch {
31
+ errors.push(`Webhook ${index}: Invalid URL format`);
32
+ }
33
+ }
34
+ // Validate HTTP method if specified
35
+ if (webhook.method && !['POST', 'PUT', 'PATCH'].includes(webhook.method)) {
36
+ errors.push(`Webhook ${index}: Invalid HTTP method. Must be POST, PUT, or PATCH`);
37
+ }
38
+ });
39
+ }
40
+ // Validate retry config
41
+ if (config.retry.maxAttempts < 0 || config.retry.maxAttempts > 10) {
42
+ errors.push('Retry maxAttempts must be between 0 and 10');
43
+ }
44
+ if (config.retry.initialDelayMs < 100 || config.retry.initialDelayMs > 10000) {
45
+ errors.push('Retry initialDelayMs must be between 100 and 10000');
46
+ }
47
+ if (config.retry.maxDelayMs < 1000 || config.retry.maxDelayMs > 300000) {
48
+ errors.push('Retry maxDelayMs must be between 1000 and 300000');
49
+ }
50
+ if (config.retry.backoffMultiplier < 1 || config.retry.backoffMultiplier > 5) {
51
+ errors.push('Retry backoffMultiplier must be between 1 and 5');
52
+ }
53
+ // Validate queue config
54
+ if (config.queue.maxSize < 10 || config.queue.maxSize > 10000) {
55
+ errors.push('Queue maxSize must be between 10 and 10000');
56
+ }
57
+ if (config.queue.flushIntervalMs < 100 || config.queue.flushIntervalMs > 60000) {
58
+ errors.push('Queue flushIntervalMs must be between 100 and 60000');
59
+ }
60
+ // Validate synthetic status config
61
+ if (config.status.workingWindowMs < 1000 || config.status.workingWindowMs > 120000) {
62
+ errors.push('Status workingWindowMs must be between 1000 and 120000');
63
+ }
64
+ if (config.status.sleepingWindowMs < 10000 || config.status.sleepingWindowMs > 86400000) {
65
+ errors.push('Status sleepingWindowMs must be between 10000 and 86400000');
66
+ }
67
+ if (config.status.sleepingWindowMs <= config.status.workingWindowMs) {
68
+ errors.push('Status sleepingWindowMs must be greater than workingWindowMs');
69
+ }
70
+ if (config.status.tickIntervalMs < 1000 || config.status.tickIntervalMs > 60000) {
71
+ errors.push('Status tickIntervalMs must be between 1000 and 60000');
72
+ }
73
+ if (config.status.subagentIdleWindowMs < 10000 || config.status.subagentIdleWindowMs > 86400000) {
74
+ errors.push('Status subagentIdleWindowMs must be between 10000 and 86400000');
75
+ }
76
+ // Validate redaction config
77
+ if (!config.redaction.replacement || config.redaction.replacement.trim() === '') {
78
+ errors.push('Redaction replacement cannot be empty');
79
+ }
80
+ if (!Array.isArray(config.redaction.fields)) {
81
+ errors.push('Redaction fields must be an array');
82
+ }
83
+ else if (config.redaction.fields.some((field) => field.trim() === '')) {
84
+ errors.push('Redaction fields cannot contain empty values');
85
+ }
86
+ // Validate event log config
87
+ if (!config.eventLog.path || config.eventLog.path.trim() === '') {
88
+ errors.push('Event log path cannot be empty');
89
+ }
90
+ if (!['full-json', 'summary'].includes(config.eventLog.format)) {
91
+ errors.push('Event log format must be full-json or summary');
92
+ }
93
+ if (!['debug', 'info', 'warn', 'error'].includes(config.eventLog.minLevel)) {
94
+ errors.push('Event log minLevel must be debug, info, warn, or error');
95
+ }
96
+ if (config.eventLog.maxFileSizeMb < 1 || config.eventLog.maxFileSizeMb > 1024) {
97
+ errors.push('Event log maxFileSizeMb must be between 1 and 1024');
98
+ }
99
+ // Validate WS security config
100
+ if (!config.security.ws.bindAddress || config.security.ws.bindAddress.trim() === '') {
101
+ errors.push('Security ws.bindAddress cannot be empty');
102
+ }
103
+ if (config.security.ws.requireAuth && (!config.security.ws.authToken || config.security.ws.authToken.trim() === '')) {
104
+ errors.push('Security ws.authToken is required when ws.requireAuth is true');
105
+ }
106
+ // Validate HMAC config
107
+ if (config.security.hmac.enabled && (!config.security.hmac.secret || config.security.hmac.secret.trim() === '')) {
108
+ const secretFromFile = (0, helpers_1.loadSecretFromFile)(config.security.hmac.secretFilePath);
109
+ if (!secretFromFile) {
110
+ errors.push('Security hmac.secret or hmac.secretFilePath is required when hmac.enabled is true');
111
+ }
112
+ }
113
+ if (!['sha256', 'sha512'].includes(config.security.hmac.algorithm)) {
114
+ errors.push('Security hmac.algorithm must be sha256 or sha512');
115
+ }
116
+ // Validate timeout
117
+ if (config.webhookTimeoutMs < 1000 || config.webhookTimeoutMs > 60000) {
118
+ errors.push('Webhook timeout must be between 1000 and 60000 ms');
119
+ }
120
+ // Validate correlation ID header name
121
+ if (!config.correlationIdHeader || config.correlationIdHeader.trim() === '') {
122
+ errors.push('Correlation ID header name cannot be empty');
123
+ }
124
+ (0, validate_hook_bridge_1.validateHookBridgeConfig)(config, errors);
125
+ return {
126
+ valid: errors.length === 0,
127
+ errors,
128
+ };
129
+ }
130
+ /**
131
+ * Resolve runtime-only config values (for example, loading HMAC secret from file).
132
+ */
133
+ function resolveRuntimeConfig(config) {
134
+ const resolveEventLogPath = (rawPath) => {
135
+ const trimmedPath = rawPath.trim();
136
+ if (trimmedPath === '' || (0, node_path_1.isAbsolute)(trimmedPath)) {
137
+ return rawPath;
138
+ }
139
+ const stateDir = process.env.OPENCLAW_STATE_DIR?.trim();
140
+ if (stateDir) {
141
+ return (0, node_path_1.resolve)(stateDir, trimmedPath);
142
+ }
143
+ const configPath = process.env.OPENCLAW_CONFIG_PATH?.trim();
144
+ if (configPath) {
145
+ return (0, node_path_1.resolve)((0, node_path_1.dirname)(configPath), trimmedPath);
146
+ }
147
+ return (0, node_path_1.resolve)((0, node_os_1.homedir)(), '.openclaw', trimmedPath);
148
+ };
149
+ const resolvedSecret = config.security.hmac.secret ?? (0, helpers_1.loadSecretFromFile)(config.security.hmac.secretFilePath);
150
+ return {
151
+ ...config,
152
+ eventLog: {
153
+ ...config.eventLog,
154
+ path: resolveEventLogPath(config.eventLog.path),
155
+ },
156
+ security: {
157
+ ...config.security,
158
+ hmac: {
159
+ ...config.security.hmac,
160
+ ...(resolvedSecret ? { secret: resolvedSecret } : {}),
161
+ },
162
+ },
163
+ };
164
+ }
165
+ /**
166
+ * Check if an event should be filtered out
167
+ */
168
+ function shouldFilterEvent(config, eventType, channelId, toolName, sessionId) {
169
+ const { filters } = config;
170
+ // Check exclude types first
171
+ if ((0, event_types_1.isEventType)(eventType) && filters.excludeTypes?.includes(eventType)) {
172
+ return true;
173
+ }
174
+ // Check include types (if specified, only these are allowed)
175
+ if (filters.includeTypes?.length) {
176
+ if (!(0, event_types_1.isEventType)(eventType) || !filters.includeTypes.includes(eventType)) {
177
+ return true;
178
+ }
179
+ }
180
+ // Check channel filter
181
+ if (filters.channelId && filters.channelId !== channelId) {
182
+ return true;
183
+ }
184
+ // Check tool name filter
185
+ if (filters.toolName && filters.toolName !== toolName) {
186
+ return true;
187
+ }
188
+ // Check session filter
189
+ if (filters.sessionId && filters.sessionId !== sessionId) {
190
+ return true;
191
+ }
192
+ return false;
193
+ }
194
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/config/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './types';
2
+ export * from './redaction';
3
+ export * from './signing';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./redaction"), exports);
19
+ __exportStar(require("./signing"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,8CAA4B;AAC5B,4CAA0B"}
@@ -0,0 +1,5 @@
1
+ import { RedactionConfig } from '../config/types';
2
+ import { OpenClawEvent } from './types';
3
+ export declare function redactPayload<T>(payload: T, config: Pick<RedactionConfig, 'enabled' | 'replacement' | 'fields'>): T;
4
+ export declare function redactEvent(event: OpenClawEvent, config: RedactionConfig): OpenClawEvent;
5
+ //# sourceMappingURL=redaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../src/events/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAwCxC,wBAAgB,aAAa,CAAC,CAAC,EAC7B,OAAO,EAAE,CAAC,EACV,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC,GAClE,CAAC,CAYH;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,eAAe,GAAG,aAAa,CAExF"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redactPayload = redactPayload;
4
+ exports.redactEvent = redactEvent;
5
+ function isRecord(value) {
6
+ return typeof value === 'object' && value !== null;
7
+ }
8
+ function normalizeFieldSet(fields) {
9
+ return new Set(fields.map((field) => field.trim().toLowerCase()).filter(Boolean));
10
+ }
11
+ function redactValue(value, sensitiveFields, replacement, seen) {
12
+ if (Array.isArray(value)) {
13
+ return value.map((item) => redactValue(item, sensitiveFields, replacement, seen));
14
+ }
15
+ if (!isRecord(value)) {
16
+ return value;
17
+ }
18
+ if (seen.has(value)) {
19
+ return replacement;
20
+ }
21
+ seen.add(value);
22
+ const redacted = {};
23
+ for (const [key, nestedValue] of Object.entries(value)) {
24
+ if (sensitiveFields.has(key.toLowerCase())) {
25
+ redacted[key] = replacement;
26
+ continue;
27
+ }
28
+ redacted[key] = redactValue(nestedValue, sensitiveFields, replacement, seen);
29
+ }
30
+ return redacted;
31
+ }
32
+ function redactPayload(payload, config) {
33
+ if (!config.enabled) {
34
+ return payload;
35
+ }
36
+ const sensitiveFields = normalizeFieldSet(config.fields);
37
+ if (sensitiveFields.size === 0) {
38
+ return payload;
39
+ }
40
+ const redacted = redactValue(payload, sensitiveFields, config.replacement, new WeakSet());
41
+ return redacted;
42
+ }
43
+ function redactEvent(event, config) {
44
+ return redactPayload(event, config);
45
+ }
46
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/events/redaction.ts"],"names":[],"mappings":";;AAyCA,sCAeC;AAED,kCAEC;AAzDD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAgB;IACzC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,WAAW,CAClB,KAAc,EACd,eAA4B,EAC5B,WAAmB,EACnB,IAAqB;IAErB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEhB,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAC3C,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC;YAC5B,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAgB,aAAa,CAC3B,OAAU,EACV,MAAmE;IAEnE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,OAAO,EAAU,CAAC,CAAC;IAClG,OAAO,QAAa,CAAC;AACvB,CAAC;AAED,SAAgB,WAAW,CAAC,KAAoB,EAAE,MAAuB;IACvE,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { OpenClawEvent } from './types';
2
+ export type HmacConfig = {
3
+ enabled: boolean;
4
+ secret?: string;
5
+ algorithm: 'sha256' | 'sha512';
6
+ };
7
+ export declare function signEvent(event: OpenClawEvent, config: HmacConfig): OpenClawEvent;
8
+ //# sourceMappingURL=signing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../src/events/signing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAChC,CAAC;AAcF,wBAAgB,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,GAAG,aAAa,CAoBjF"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.signEvent = signEvent;
4
+ const node_crypto_1 = require("node:crypto");
5
+ function toSignablePayload(event, timestamp, nonce) {
6
+ const payload = {
7
+ ...event,
8
+ signature: undefined,
9
+ };
10
+ return JSON.stringify({
11
+ timestamp,
12
+ nonce,
13
+ payload,
14
+ });
15
+ }
16
+ function signEvent(event, config) {
17
+ if (!config.enabled || !config.secret) {
18
+ return event;
19
+ }
20
+ const timestamp = Math.floor(Date.now() / 1000);
21
+ const nonce = (0, node_crypto_1.randomUUID)();
22
+ const raw = toSignablePayload(event, timestamp, nonce);
23
+ const value = (0, node_crypto_1.createHmac)(config.algorithm, config.secret).update(raw).digest('hex');
24
+ return {
25
+ ...event,
26
+ signature: {
27
+ version: 'v1',
28
+ algorithm: config.algorithm,
29
+ timestamp,
30
+ nonce,
31
+ value,
32
+ },
33
+ };
34
+ }
35
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../../src/events/signing.ts"],"names":[],"mappings":";;AAqBA,8BAoBC;AAzCD,6CAAqD;AASrD,SAAS,iBAAiB,CAAC,KAAoB,EAAE,SAAiB,EAAE,KAAa;IAC/E,MAAM,OAAO,GAAG;QACd,GAAG,KAAK;QACR,SAAS,EAAE,SAAS;KACrB,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,SAAS;QACT,KAAK;QACL,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,SAAS,CAAC,KAAoB,EAAE,MAAkB;IAChE,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,IAAA,wBAAU,GAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,IAAA,wBAAU,EAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEpF,OAAO;QACL,GAAG,KAAK;QACR,SAAS,EAAE;YACT,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS;YACT,KAAK;YACL,KAAK;SACN;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Canonical event type definitions for OpenClaw Event Server Plugin.
3
+ *
4
+ * The server broadcasts raw hook/plugin events with minimal transformation plus
5
+ * optional synthetic status/activity events.
6
+ */
7
+ export type EventCategory = 'message' | 'tool' | 'command' | 'session' | 'agent' | 'gateway' | 'subagent' | 'synthetic';
8
+ export type EventSource = 'internal-hook' | 'plugin-hook' | 'synthetic';
9
+ export type EventType = 'message.received' | 'message.transcribed' | 'message.preprocessed' | 'message.sent' | 'message.edited' | 'message.deleted' | 'tool.called' | 'tool.guard.matched' | 'tool.guard.allowed' | 'tool.guard.blocked' | 'tool.completed' | 'tool.error' | 'tool.result_persist' | 'command.new' | 'command.reset' | 'command.stop' | 'session.start' | 'session.end' | 'subagent.spawning' | 'subagent.spawned' | 'subagent.ended' | 'subagent.idle' | 'agent.bootstrap' | 'agent.error' | 'agent.session_start' | 'agent.session_end' | 'agent.sub_agent_spawn' | 'agent.status' | 'agent.activity' | 'gateway.startup' | 'gateway.start' | 'gateway.stop' | 'session.spawned' | 'session.completed' | 'session.error';
10
+ export type AgentSyntheticStatus = 'sleeping' | 'idle' | 'working' | 'offline' | 'error';
11
+ export interface EventError {
12
+ message: string;
13
+ code?: string;
14
+ stack?: string;
15
+ kind?: 'tool' | 'agent' | 'gateway' | 'unknown';
16
+ }
17
+ export interface EventSignature {
18
+ version: 'v1';
19
+ algorithm: 'sha256' | 'sha512';
20
+ timestamp: number;
21
+ nonce: string;
22
+ value: string;
23
+ }
24
+ export interface OpenClawEvent {
25
+ /** Unique event ID */
26
+ eventId: string;
27
+ /** Canonical event schema version */
28
+ schemaVersion: string;
29
+ /** Legacy/primary type identifier for consumers */
30
+ type: EventType;
31
+ /** Canonical grouping for downstream filtering */
32
+ eventCategory?: EventCategory;
33
+ /** Original source event key name */
34
+ eventName?: string;
35
+ /** Where this event originated */
36
+ source?: EventSource;
37
+ /** Timestamp when event occurred */
38
+ timestamp: string;
39
+ /** Agent identifiers when known */
40
+ agentId?: string;
41
+ agentName?: string;
42
+ /** Session identifiers when known */
43
+ sessionId?: string;
44
+ sessionKey?: string;
45
+ sessionName?: string;
46
+ /** Run/tool correlation identifiers */
47
+ runId?: string;
48
+ toolCallId?: string;
49
+ correlationId?: string;
50
+ /** Result/error fields for completion/error events */
51
+ result?: unknown;
52
+ error?: EventError;
53
+ /** Plugin version that generated this event */
54
+ pluginVersion: string;
55
+ /** Optional cryptographic signature when HMAC signing is enabled */
56
+ signature?: EventSignature;
57
+ /** Raw normalized event payload */
58
+ data: Record<string, unknown>;
59
+ /** Additional metadata/debug fields */
60
+ metadata?: Record<string, unknown>;
61
+ }
62
+ export type MessageEvent = OpenClawEvent;
63
+ export type ToolEvent = OpenClawEvent;
64
+ export type SessionEvent = OpenClawEvent;
65
+ export type AgentEvent = OpenClawEvent;
66
+ export type CommandEvent = OpenClawEvent;
67
+ export type GatewayEvent = OpenClawEvent;
68
+ export type SubagentEvent = OpenClawEvent;
69
+ /**
70
+ * Webhook configuration for broadcasting
71
+ */
72
+ export interface WebhookConfig {
73
+ /** Webhook URL */
74
+ url: string;
75
+ /** HTTP method (default: POST) */
76
+ method?: 'POST' | 'PUT' | 'PATCH';
77
+ /** Custom headers */
78
+ headers?: Record<string, string>;
79
+ /** Authentication token (optional) */
80
+ authToken?: string;
81
+ /** Whether to include full event payload */
82
+ includeFullPayload?: boolean;
83
+ }
84
+ /**
85
+ * Event filter configuration
86
+ */
87
+ export interface EventFilter {
88
+ /** Event types to include (empty = all) */
89
+ includeTypes?: EventType[];
90
+ /** Event types to exclude */
91
+ excludeTypes?: EventType[];
92
+ /** Filter by channel ID */
93
+ channelId?: string;
94
+ /** Filter by tool name */
95
+ toolName?: string;
96
+ /** Filter by session ID */
97
+ sessionId?: string;
98
+ }
99
+ /**
100
+ * Retry configuration
101
+ */
102
+ export interface RetryConfig {
103
+ /** Maximum retry attempts */
104
+ maxAttempts: number;
105
+ /** Initial delay in milliseconds */
106
+ initialDelayMs: number;
107
+ /** Maximum delay in milliseconds */
108
+ maxDelayMs: number;
109
+ /** Backoff multiplier */
110
+ backoffMultiplier: number;
111
+ }
112
+ /**
113
+ * Queue configuration
114
+ */
115
+ export interface QueueConfig {
116
+ /** Maximum queue size */
117
+ maxSize: number;
118
+ /** Flush interval in milliseconds */
119
+ flushIntervalMs: number;
120
+ /** Whether to persist queue to disk */
121
+ persistToDisk: boolean;
122
+ /** Queue file path (if persisting) */
123
+ persistPath?: string;
124
+ }
125
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /**
3
+ * Canonical event type definitions for OpenClaw Event Server Plugin.
4
+ *
5
+ * The server broadcasts raw hook/plugin events with minimal transformation plus
6
+ * optional synthetic status/activity events.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Agent event builders.
3
+ */
4
+ import { AgentEvent, AgentSyntheticStatus, EventType } from '../events/types';
5
+ export declare function createAgentStatusEvent(context: {
6
+ agentId: string;
7
+ status: AgentSyntheticStatus;
8
+ activity?: string;
9
+ activityDetail?: string;
10
+ sessionId?: string;
11
+ sessionKey?: string;
12
+ correlationId?: string;
13
+ sourceEventType?: EventType;
14
+ metadata?: Record<string, unknown>;
15
+ }): AgentEvent;
16
+ export declare function createAgentActivityEvent(context: {
17
+ agentId: string;
18
+ activity: string;
19
+ activityDetail?: string;
20
+ sessionId?: string;
21
+ sessionKey?: string;
22
+ correlationId?: string;
23
+ sourceEventType?: EventType;
24
+ toolName?: string;
25
+ toolStatus?: 'called' | 'completed' | 'error';
26
+ metadata?: Record<string, unknown>;
27
+ }): AgentEvent;
28
+ export declare function createAgentBootstrapEvent(context: {
29
+ sessionId?: string;
30
+ sessionKey?: string;
31
+ agentId?: string;
32
+ data?: Record<string, unknown>;
33
+ }): AgentEvent;
34
+ export declare function createAgentErrorEvent(context: {
35
+ sessionId?: string;
36
+ sessionKey?: string;
37
+ agentId?: string;
38
+ error: string;
39
+ stack?: string;
40
+ data?: Record<string, unknown>;
41
+ }): AgentEvent;
42
+ export declare function createAgentSessionEvent(context: {
43
+ type: 'agent.session_start' | 'agent.session_end';
44
+ sessionId?: string;
45
+ sessionKey?: string;
46
+ agentId?: string;
47
+ data?: Record<string, unknown>;
48
+ }): AgentEvent;
49
+ export declare function createAgentSubAgentSpawnEvent(context: {
50
+ parentAgentId?: string;
51
+ childAgentId?: string;
52
+ parentSessionId?: string;
53
+ parentSessionKey?: string;
54
+ childSessionKey?: string;
55
+ runId?: string;
56
+ mode?: string;
57
+ data?: Record<string, unknown>;
58
+ }): AgentEvent;
59
+ //# sourceMappingURL=agent-hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-hooks.d.ts","sourceRoot":"","sources":["../../src/hooks/agent-hooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG9E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,UAAU,CAmBb;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,UAAU,CAoBb;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GAAG,UAAU,CAWb;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GAAG,UAAU,CAgBb;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE;IAC/C,IAAI,EAAE,qBAAqB,GAAG,mBAAmB,CAAC;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GAAG,UAAU,CAWb;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GAAG,UAAU,CAoBb"}