@essentialai/cogent-server 3.1.5 → 3.1.6
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/routes/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/routes/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAS5B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,YAAY,CAAC,EAAE,mBAAmB,EAClC,eAAe,CAAC,EAAE,eAAe,GAChC,IAAI,CAAC,SAAS,CAAC,CAuTjB"}
|
package/dist/routes/messages.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import { zValidator } from "@hono/zod-validator";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
-
import { BridgeError, ErrorCode,
|
|
4
|
+
import { BridgeError, ErrorCode, generateMessageId, } from "@essentialai/cogent";
|
|
5
5
|
import { createAuthMiddleware } from "../middleware/auth.js";
|
|
6
6
|
import { validationHook } from "./validation-hook.js";
|
|
7
7
|
import { createMessageFrame } from "../ws/frames.js";
|
|
@@ -22,6 +22,35 @@ export function createMessageRoutes(sessionStore, authService, maxMessages, conn
|
|
|
22
22
|
// Auth middleware applied per-route (not wildcard) to avoid intercepting
|
|
23
23
|
// unauthenticated session routes mounted at the same /api/sessions prefix.
|
|
24
24
|
const auth = createAuthMiddleware(sessionStore, authService);
|
|
25
|
+
// Local request schemas (redefined here so we can extend the wire contract
|
|
26
|
+
// without touching the shared @essentialai/cogent package, whose schemas
|
|
27
|
+
// are .strict() and pinned at v3.0.0). The shape mirrors the shared schemas
|
|
28
|
+
// and adds the new optional `isRelayEcho` (POST) / `includeRelayEchoes` (GET)
|
|
29
|
+
// fields for the 260511-o3p relay-echo fix. Older clients that omit the
|
|
30
|
+
// fields continue to work — the fields are optional with explicit defaults.
|
|
31
|
+
const LocalSendMessageBodySchema = z
|
|
32
|
+
.object({
|
|
33
|
+
fromPeerId: z.string().min(1),
|
|
34
|
+
toPeerId: z.string().min(1),
|
|
35
|
+
message: z.string().min(1),
|
|
36
|
+
originPlatform: z.enum(["cc", "slack", "gchat", "web"]).optional(),
|
|
37
|
+
isRelayEcho: z.boolean().optional(),
|
|
38
|
+
})
|
|
39
|
+
.strict();
|
|
40
|
+
const LocalGetHistoryQuerySchema = z
|
|
41
|
+
.object({
|
|
42
|
+
peerId: z.string().optional(),
|
|
43
|
+
limit: z.coerce.number().int().min(1).max(1000).optional().default(100),
|
|
44
|
+
offset: z.coerce.number().int().min(0).optional().default(0),
|
|
45
|
+
// Query strings arrive as raw strings; coerce "true" / true to boolean,
|
|
46
|
+
// anything else (including absent) to false. Default false keeps
|
|
47
|
+
// history clean of auto-relay echo records.
|
|
48
|
+
includeRelayEchoes: z
|
|
49
|
+
.preprocess((v) => v === "true" || v === true, z.boolean())
|
|
50
|
+
.optional()
|
|
51
|
+
.default(false),
|
|
52
|
+
})
|
|
53
|
+
.strict();
|
|
25
54
|
/**
|
|
26
55
|
* POST /:sessionId/messages - Send a message (direct or broadcast).
|
|
27
56
|
*
|
|
@@ -31,15 +60,18 @@ export function createMessageRoutes(sessionStore, authService, maxMessages, conn
|
|
|
31
60
|
* Updates sender's lastSeenAt as a heartbeat on activity.
|
|
32
61
|
* Enforces per-session message cap by trimming oldest messages.
|
|
33
62
|
*/
|
|
34
|
-
messages.post("/:sessionId/messages", auth, zValidator("json",
|
|
63
|
+
messages.post("/:sessionId/messages", auth, zValidator("json", LocalSendMessageBodySchema, validationHook), async (c) => {
|
|
35
64
|
const authSessionId = c.get("sessionId");
|
|
36
65
|
const pathSessionId = c.req.param("sessionId");
|
|
37
66
|
// Verify path param matches authenticated session
|
|
38
67
|
if (pathSessionId !== authSessionId) {
|
|
39
68
|
throw new BridgeError(ErrorCode.AUTH_INVALID_TOKEN, "Token does not belong to this session");
|
|
40
69
|
}
|
|
41
|
-
const { fromPeerId, toPeerId, message, originPlatform } = c.req.valid("json");
|
|
42
|
-
// Variables to capture for the response (set inside updateSession callback)
|
|
70
|
+
const { fromPeerId, toPeerId, message, originPlatform, isRelayEcho } = c.req.valid("json");
|
|
71
|
+
// Variables to capture for the response (set inside updateSession callback).
|
|
72
|
+
// The record may carry an extra `isRelayEcho` flag (260511-o3p) that is
|
|
73
|
+
// not yet part of the shared MessageRecord type (pinned at v3.0.0); see
|
|
74
|
+
// local schema above. We store it on the record via an intersection type.
|
|
43
75
|
let messageId;
|
|
44
76
|
let timestamp;
|
|
45
77
|
let record;
|
|
@@ -69,7 +101,14 @@ export function createMessageRoutes(sessionStore, authService, maxMessages, conn
|
|
|
69
101
|
success: true,
|
|
70
102
|
error: null,
|
|
71
103
|
originPlatform: originPlatform ?? "cc",
|
|
104
|
+
// Persist explicit false (rather than undefined) so the field is
|
|
105
|
+
// unambiguous on the wire and downstream filters can compare
|
|
106
|
+
// against true/false directly.
|
|
107
|
+
isRelayEcho: isRelayEcho ?? false,
|
|
72
108
|
};
|
|
109
|
+
// state.messages is MessageRecord[] from the shared package which
|
|
110
|
+
// doesn't yet know about isRelayEcho; the cast keeps the new field
|
|
111
|
+
// intact through JSON persistence without bumping the shared package.
|
|
73
112
|
state.messages.push(record);
|
|
74
113
|
// Enforce message cap (session store also does this, belt-and-suspenders)
|
|
75
114
|
if (state.messages.length > maxMessages) {
|
|
@@ -134,7 +173,7 @@ export function createMessageRoutes(sessionStore, authService, maxMessages, conn
|
|
|
134
173
|
* When peerId is provided, returns messages where the peer is sender,
|
|
135
174
|
* recipient, or the message is a broadcast (toPeerId: "*").
|
|
136
175
|
*/
|
|
137
|
-
messages.get("/:sessionId/messages", auth, zValidator("query",
|
|
176
|
+
messages.get("/:sessionId/messages", auth, zValidator("query", LocalGetHistoryQuerySchema, validationHook), async (c) => {
|
|
138
177
|
const authSessionId = c.get("sessionId");
|
|
139
178
|
const pathSessionId = c.req.param("sessionId");
|
|
140
179
|
// Verify path param matches authenticated session
|
|
@@ -146,13 +185,21 @@ export function createMessageRoutes(sessionStore, authService, maxMessages, conn
|
|
|
146
185
|
// Zod schema provides defaults but the type annotation includes undefined
|
|
147
186
|
const limit = query.limit ?? 300;
|
|
148
187
|
const offset = query.offset ?? 0;
|
|
188
|
+
const includeRelayEchoes = query.includeRelayEchoes ?? false;
|
|
149
189
|
// Fresh read from store (not cached from auth middleware)
|
|
150
190
|
const session = await sessionStore.getSession(authSessionId);
|
|
151
191
|
if (!session) {
|
|
152
192
|
throw new BridgeError(ErrorCode.SESSION_NOT_FOUND, `Session ${authSessionId} not found`);
|
|
153
193
|
}
|
|
154
|
-
// Filter
|
|
194
|
+
// Filter out auto-relay echoes FIRST -- before peerId narrowing and
|
|
195
|
+
// before pagination -- so the response budget is spent on real records,
|
|
196
|
+
// not on the duplicate "phantom self" entries every directed exchange
|
|
197
|
+
// produces. Opt back in with includeRelayEchoes=true (260511-o3p).
|
|
155
198
|
let filtered = session.messages;
|
|
199
|
+
if (!includeRelayEchoes) {
|
|
200
|
+
filtered = filtered.filter((m) => m.isRelayEcho !== true);
|
|
201
|
+
}
|
|
202
|
+
// Filter messages by peer if specified
|
|
156
203
|
if (peerId) {
|
|
157
204
|
filtered = filtered.filter((msg) => msg.fromPeerId === peerId ||
|
|
158
205
|
msg.toPeerId === peerId ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/routes/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,SAAS,EACT,
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/routes/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,SAAS,EACT,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,mBAAmB,CACjC,YAA0B,EAC1B,WAAwB,EACxB,WAAmB,EACnB,iBAAqC,EACrC,YAAkC,EAClC,eAAiC;IAEjC,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAa,CAAC;IAEvC,yEAAyE;IACzE,2EAA2E;IAC3E,MAAM,IAAI,GAAG,oBAAoB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAE7D,2EAA2E;IAC3E,yEAAyE;IACzE,4EAA4E;IAC5E,8EAA8E;IAC9E,wEAAwE;IACxE,4EAA4E;IAC5E,MAAM,0BAA0B,GAAG,CAAC;SACjC,MAAM,CAAC;QACN,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1B,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;QAClE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACpC,CAAC;SACD,MAAM,EAAE,CAAC;IAEZ,MAAM,0BAA0B,GAAG,CAAC;SACjC,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC7B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACvE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,wEAAwE;QACxE,iEAAiE;QACjE,4CAA4C;QAC5C,kBAAkB,EAAE,CAAC;aAClB,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;aAC1D,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;KAClB,CAAC;SACD,MAAM,EAAE,CAAC;IAEZ;;;;;;;;OAQG;IACH,QAAQ,CAAC,IAAI,CACX,sBAAsB,EACtB,IAAI,EACJ,UAAU,CAAC,MAAM,EAAE,0BAA0B,EAAE,cAAc,CAAC,EAC9D,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE/C,kDAAkD;QAClD,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,WAAW,CACnB,SAAS,CAAC,kBAAkB,EAC5B,uCAAuC,CACxC,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,GAClE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEtB,6EAA6E;QAC7E,wEAAwE;QACxE,wEAAwE;QACxE,0EAA0E;QAC1E,IAAI,SAAiB,CAAC;QACtB,IAAI,SAAiB,CAAC;QACtB,IAAI,MAAiD,CAAC;QAEtD,MAAM,YAAY,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;YACxD,qDAAqD;YACrD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,WAAW,CACnB,SAAS,CAAC,cAAc,EACxB,uCAAuC,EACvC,kBAAkB,UAAU,2BAA2B,CACxD,CAAC;YACJ,CAAC;YAED,oEAAoE;YACpE,IAAI,QAAQ,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,WAAW,CACnB,SAAS,CAAC,cAAc,EACxB,qCAAqC,EACrC,oBAAoB,QAAQ,gCAAgC,CAC7D,CAAC;YACJ,CAAC;YAED,qDAAqD;YACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;YAEzC,4CAA4C;YAC5C,SAAS,GAAG,iBAAiB,EAAE,CAAC;YAChC,SAAS,GAAG,GAAG,CAAC;YAEhB,MAAM,GAAG;gBACP,EAAE,EAAE,SAAS;gBACb,UAAU;gBACV,QAAQ;gBACR,OAAO;gBACP,QAAQ,EAAE,IAAI;gBACd,SAAS;gBACT,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,IAAI;gBACX,cAAc,EAAE,cAAc,IAAI,IAAI;gBACtC,iEAAiE;gBACjE,6DAA6D;gBAC7D,+BAA+B;gBAC/B,WAAW,EAAE,WAAW,IAAI,KAAK;aAClC,CAAC;YAEF,kEAAkE;YAClE,mEAAmE;YACnE,sEAAsE;YACtE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAuB,CAAC,CAAC;YAE7C,0EAA0E;YAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;gBACxC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,0EAA0E;QAC1E,MAAM,YAAY,CAAC,2BAA2B,EAAE,CAAC;QAEjD,8DAA8D;QAC9D,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,kBAAkB,CAAC,MAAO,CAAC,CAAC;gBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBACnC,MAAM,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC;gBAE9C,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;oBACrB,mEAAmE;oBACnE,iBAAiB,CAAC,kBAAkB,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;oBAEtE,8DAA8D;oBAC9D,IAAI,eAAe,EAAE,CAAC;wBACpB,eAAe,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;oBAC3E,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,yEAAyE;oBACzE,IAAI,iBAAiB,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAE,CAAC;wBAC3D,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC,aAAa,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;wBACzE,IAAI,IAAI,KAAK,CAAC,IAAI,YAAY,EAAE,CAAC;4BAC/B,MAAM,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAO,CAAC,CAAC;wBAC/D,CAAC;oBACH,CAAC;yBAAM,IAAI,YAAY,EAAE,CAAC;wBACxB,MAAM,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAO,CAAC,CAAC;oBAC/D,CAAC;oBAED,wEAAwE;oBACxE,uEAAuE;oBACvE,8DAA8D;oBAC9D,IAAI,eAAe,EAAE,CAAC;wBACpB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;wBAC7D,MAAM,iBAAiB,GAAG,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;wBAC7D,IAAI,iBAAiB,IAAI,iBAAiB,KAAK,IAAI,IAAI,iBAAiB,KAAK,cAAc,EAAE,CAAC;4BAC5F,eAAe,CAAC,aAAa,CAAC,aAAa,EAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;wBACxE,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,iEAAiE;gBACjE,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,OAAO,CAAC,CAAC,IAAI,CACX;YACE,EAAE,EAAE,SAAU;YACd,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,SAAU;SACtB,EACD,GAAG,CACJ,CAAC;IACJ,CAAC,CACF,CAAC;IAEF;;;;;;OAMG;IACH,QAAQ,CAAC,GAAG,CACV,sBAAsB,EACtB,IAAI,EACJ,UAAU,CAAC,OAAO,EAAE,0BAA0B,EAAE,cAAc,CAAC,EAC/D,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE/C,kDAAkD;QAClD,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,WAAW,CACnB,SAAS,CAAC,kBAAkB,EAC5B,uCAAuC,CACxC,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,0EAA0E;QAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QACjC,MAAM,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC;QAE7D,0DAA0D;QAC1D,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,WAAW,CACnB,SAAS,CAAC,iBAAiB,EAC3B,WAAW,aAAa,YAAY,CACrC,CAAC;QACJ,CAAC;QAED,oEAAoE;QACpE,wEAAwE;QACxE,sEAAsE;QACtE,mEAAmE;QACnE,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CACxB,CAAC,CAAC,EAAE,EAAE,CAAE,CAA+C,CAAC,WAAW,KAAK,IAAI,CAC7E,CAAC;QACJ,CAAC;QAED,uCAAuC;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,QAAQ,GAAG,QAAQ,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,UAAU,KAAK,MAAM;gBACzB,GAAG,CAAC,QAAQ,KAAK,MAAM;gBACvB,GAAG,CAAC,QAAQ,KAAK,GAAG,CACvB,CAAC;QACJ,CAAC;QAED,kCAAkC;QAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE9B,mEAAmE;QACnE,sDAAsD;QACtD,qEAAqE;QACrE,wEAAwE;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEnD,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,QAAQ,EAAE,SAAS;YACnB,KAAK;SACN,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF;;;;;;;OAOG;IACH,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;QAC3C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAClC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,CACZ,iCAAiC,EACjC,IAAI,EACJ,UAAU,CAAC,MAAM,EAAE,2BAA2B,EAAE,cAAc,CAAC,EAC/D,KAAK,EAAE,CAAC,EAAE,EAAE;QACV,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAE/C,IAAI,aAAa,KAAK,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,WAAW,CACnB,SAAS,CAAC,kBAAkB,EAC5B,uCAAuC,CACxC,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAErD,MAAM,YAAY,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;YACxD,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;YAC3D,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACxB,IAAI,UAAU,KAAK,SAAS;oBAAE,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;YAC5D,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC,CACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|