@openora/core 0.4.1-canary.26 → 0.4.1-canary.29

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 (133) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/audit/plugin.d.ts.map +1 -1
  3. package/dist/audit/plugin.js +58 -0
  4. package/dist/audit/plugin.js.map +1 -1
  5. package/dist/contracts/adapters/rate-limit.d.ts +2 -0
  6. package/dist/contracts/adapters/rate-limit.d.ts.map +1 -1
  7. package/dist/contracts/adapters/rate-limit.js +2 -0
  8. package/dist/contracts/adapters/rate-limit.js.map +1 -1
  9. package/dist/contracts/adapters/realtime.d.ts +4 -3
  10. package/dist/contracts/adapters/realtime.d.ts.map +1 -1
  11. package/dist/contracts/adapters/realtime.js.map +1 -1
  12. package/dist/contracts/schemas/events.d.ts +52 -0
  13. package/dist/contracts/schemas/events.d.ts.map +1 -1
  14. package/dist/contracts/schemas/events.js +33 -0
  15. package/dist/contracts/schemas/events.js.map +1 -1
  16. package/dist/contracts/schemas/identity.d.ts +6 -0
  17. package/dist/contracts/schemas/identity.d.ts.map +1 -1
  18. package/dist/contracts/schemas/identity.js +2 -0
  19. package/dist/contracts/schemas/identity.js.map +1 -1
  20. package/dist/engagement/chat/__tests__/chat.service.test.js +266 -5
  21. package/dist/engagement/chat/__tests__/chat.service.test.js.map +1 -1
  22. package/dist/engagement/chat/contract/constants.d.ts +11 -0
  23. package/dist/engagement/chat/contract/constants.d.ts.map +1 -0
  24. package/dist/engagement/chat/contract/constants.js +11 -0
  25. package/dist/engagement/chat/contract/constants.js.map +1 -0
  26. package/dist/engagement/chat/contract/index.d.ts +223 -2
  27. package/dist/engagement/chat/contract/index.d.ts.map +1 -1
  28. package/dist/engagement/chat/contract/index.js +104 -7
  29. package/dist/engagement/chat/contract/index.js.map +1 -1
  30. package/dist/engagement/chat/drizzle/migrations/0001_cloudy_groot.sql +32 -0
  31. package/dist/engagement/chat/drizzle/migrations/meta/0001_snapshot.json +557 -0
  32. package/dist/engagement/chat/drizzle/migrations/meta/_journal.json +7 -0
  33. package/dist/engagement/chat/index.d.ts +1 -2
  34. package/dist/engagement/chat/index.d.ts.map +1 -1
  35. package/dist/engagement/chat/index.js +1 -2
  36. package/dist/engagement/chat/index.js.map +1 -1
  37. package/dist/engagement/chat/plugin.d.ts.map +1 -1
  38. package/dist/engagement/chat/plugin.js +8 -3
  39. package/dist/engagement/chat/plugin.js.map +1 -1
  40. package/dist/engagement/chat/react/use-join-room.d.ts +13 -0
  41. package/dist/engagement/chat/react/use-join-room.d.ts.map +1 -0
  42. package/dist/engagement/chat/react/use-join-room.js +25 -0
  43. package/dist/engagement/chat/react/use-join-room.js.map +1 -0
  44. package/dist/engagement/chat/router/index.d.ts +184 -4
  45. package/dist/engagement/chat/router/index.d.ts.map +1 -1
  46. package/dist/engagement/chat/router/index.js +105 -20
  47. package/dist/engagement/chat/router/index.js.map +1 -1
  48. package/dist/engagement/chat/schema/index.d.ts +256 -0
  49. package/dist/engagement/chat/schema/index.d.ts.map +1 -1
  50. package/dist/engagement/chat/schema/index.js +40 -2
  51. package/dist/engagement/chat/schema/index.js.map +1 -1
  52. package/dist/engagement/chat/service/chat.service.d.ts +151 -4
  53. package/dist/engagement/chat/service/chat.service.d.ts.map +1 -1
  54. package/dist/engagement/chat/service/chat.service.js +391 -16
  55. package/dist/engagement/chat/service/chat.service.js.map +1 -1
  56. package/dist/engagement/react.d.ts +1 -0
  57. package/dist/engagement/react.d.ts.map +1 -1
  58. package/dist/engagement/react.js +1 -0
  59. package/dist/engagement/react.js.map +1 -1
  60. package/dist/iam/service/iam.service.d.ts +1 -1
  61. package/dist/pam/identity/__tests__/phone-login.service.test.js +87 -9
  62. package/dist/pam/identity/__tests__/phone-login.service.test.js.map +1 -1
  63. package/dist/pam/identity/plugin.d.ts.map +1 -1
  64. package/dist/pam/identity/plugin.js +2 -1
  65. package/dist/pam/identity/plugin.js.map +1 -1
  66. package/dist/pam/identity/router/index.d.ts.map +1 -1
  67. package/dist/pam/identity/router/index.js +1 -1
  68. package/dist/pam/identity/router/index.js.map +1 -1
  69. package/dist/pam/identity/service/phone-login.service.d.ts +8 -4
  70. package/dist/pam/identity/service/phone-login.service.d.ts.map +1 -1
  71. package/dist/pam/identity/service/phone-login.service.js +25 -3
  72. package/dist/pam/identity/service/phone-login.service.js.map +1 -1
  73. package/dist/react/context/realtime-client.d.ts +1 -0
  74. package/dist/react/context/realtime-client.d.ts.map +1 -1
  75. package/dist/react/context/realtime-client.js.map +1 -1
  76. package/dist/server/auth/__tests__/sign-session-cookie.test.d.ts +2 -0
  77. package/dist/server/auth/__tests__/sign-session-cookie.test.d.ts.map +1 -0
  78. package/dist/server/auth/__tests__/sign-session-cookie.test.js +59 -0
  79. package/dist/server/auth/__tests__/sign-session-cookie.test.js.map +1 -0
  80. package/dist/server/auth/index.d.ts +1 -0
  81. package/dist/server/auth/index.d.ts.map +1 -1
  82. package/dist/server/auth/index.js +1 -0
  83. package/dist/server/auth/index.js.map +1 -1
  84. package/dist/server/auth/permissions.d.ts +12 -0
  85. package/dist/server/auth/permissions.d.ts.map +1 -1
  86. package/dist/server/auth/permissions.js +2 -0
  87. package/dist/server/auth/permissions.js.map +1 -1
  88. package/dist/server/auth/sign-session-cookie.d.ts +18 -0
  89. package/dist/server/auth/sign-session-cookie.d.ts.map +1 -0
  90. package/dist/server/auth/sign-session-cookie.js +15 -0
  91. package/dist/server/auth/sign-session-cookie.js.map +1 -0
  92. package/dist/server/db/__tests__/migrate.test.d.ts +2 -0
  93. package/dist/server/db/__tests__/migrate.test.d.ts.map +1 -0
  94. package/dist/server/db/__tests__/migrate.test.js +50 -0
  95. package/dist/server/db/__tests__/migrate.test.js.map +1 -0
  96. package/dist/server/db/migrate.d.ts +14 -0
  97. package/dist/server/db/migrate.d.ts.map +1 -1
  98. package/dist/server/db/migrate.js +70 -12
  99. package/dist/server/db/migrate.js.map +1 -1
  100. package/dist/server/kernel/index.d.ts +2 -0
  101. package/dist/server/kernel/index.d.ts.map +1 -1
  102. package/dist/server/kernel/index.js +2 -0
  103. package/dist/server/kernel/index.js.map +1 -1
  104. package/dist/server/kernel/realtime-authorizer.d.ts +8 -0
  105. package/dist/server/kernel/realtime-authorizer.d.ts.map +1 -0
  106. package/dist/server/kernel/realtime-authorizer.js +11 -0
  107. package/dist/server/kernel/realtime-authorizer.js.map +1 -0
  108. package/dist/server/kernel/realtime-transport.d.ts +9 -0
  109. package/dist/server/kernel/realtime-transport.d.ts.map +1 -0
  110. package/dist/server/kernel/realtime-transport.js +63 -0
  111. package/dist/server/kernel/realtime-transport.js.map +1 -0
  112. package/dist/server/plugin-host/core-plugins.d.ts +16 -0
  113. package/dist/server/plugin-host/core-plugins.d.ts.map +1 -0
  114. package/dist/server/plugin-host/core-plugins.js +36 -0
  115. package/dist/server/plugin-host/core-plugins.js.map +1 -0
  116. package/dist/server/plugin-host/index.d.ts +1 -0
  117. package/dist/server/plugin-host/index.d.ts.map +1 -1
  118. package/dist/server/plugin-host/index.js +1 -0
  119. package/dist/server/plugin-host/index.js.map +1 -1
  120. package/dist/server/runtime/assert-durable-seams.d.ts +3 -2
  121. package/dist/server/runtime/assert-durable-seams.d.ts.map +1 -1
  122. package/dist/server/runtime/assert-durable-seams.js.map +1 -1
  123. package/dist/server/runtime/create-app.d.ts +1 -2
  124. package/dist/server/runtime/create-app.d.ts.map +1 -1
  125. package/dist/server/runtime/create-app.js +5 -4
  126. package/dist/server/runtime/create-app.js.map +1 -1
  127. package/dist/testing/fakes/__tests__/realtime-transport.test.js +6 -4
  128. package/dist/testing/fakes/__tests__/realtime-transport.test.js.map +1 -1
  129. package/dist/testing/fakes/realtime-transport.d.ts +1 -7
  130. package/dist/testing/fakes/realtime-transport.d.ts.map +1 -1
  131. package/dist/testing/fakes/realtime-transport.js +1 -58
  132. package/dist/testing/fakes/realtime-transport.js.map +1 -1
  133. package/package.json +1 -1
@@ -1,16 +1,26 @@
1
- import { createDomainError, assertOwnership, findOneOrThrow, serializeRow, } from '@openora/core/server';
2
- import { eq, and, isNull, lt, desc, asc, notInArray } from 'drizzle-orm';
1
+ import { randomInt, randomUUID } from 'node:crypto';
2
+ import { makeNotFoundError, makeOwnershipError, makeConflictError, createDomainError, assertOwnership, findOneOrThrow, serializeRow, pageToOffset, withAdvisoryXactLock, } from '@openora/core/server';
3
+ import { eq, and, isNull, lt, desc, asc, notInArray, inArray, count, ne } from 'drizzle-orm';
3
4
  import { user } from '@openora/core/pam/schema/identity';
4
- import { chatRoom, chatMessage, chatUserBlock } from '../schema/index.js';
5
+ import { chatRoom, chatMessage, chatUserBlock, chatRoomMember, chatRoomBan, } from '../schema/index.js';
6
+ import { DEFAULT_MESSAGE_LIMIT, JOIN_CODE_ALPHABET, JOIN_CODE_LENGTH, MAX_PRIVATE_ROOMS_PER_PLAYER, PRIVATE_ROOM_SLUG_PREFIX, } from '../contract/constants.js';
5
7
  import { moderateContent } from '../moderation/index.js';
6
8
  export function chatChannel(roomId) {
7
9
  return roomId ? `chat:room:${roomId}` : 'chat:global';
8
10
  }
9
- export const ChatRoomNotFoundError = createDomainError('ChatRoomNotFoundError', (id) => `Chat room not found: ${id}`);
10
- export const ChatMessageNotFoundError = createDomainError('ChatMessageNotFoundError', (id) => `Chat message not found: ${id}`);
11
- export const ChatMessageOwnershipError = createDomainError('ChatMessageOwnershipError', (id) => `Not authorized to delete message: ${id}`);
11
+ export const ChatRoomNotFoundError = makeNotFoundError('ChatRoom');
12
+ export const ChatMessageNotFoundError = makeNotFoundError('ChatMessage');
13
+ export const ChatMessageOwnershipError = makeOwnershipError('ChatMessage');
12
14
  export const ChatMessageBlockedError = createDomainError('ChatMessageBlockedError', () => 'Message blocked: it contains prohibited language');
13
15
  export const ChatSelfBlockError = createDomainError('ChatSelfBlockError', () => 'You cannot block yourself');
16
+ export const ChatRoomSlugConflictError = makeConflictError('ChatRoomSlugConflictError', 'A room with this slug already exists');
17
+ export const ChatRoomLimitReachedError = makeConflictError('ChatRoomLimitReachedError', 'Private room limit reached');
18
+ export const ChatRoomLastModeratorError = makeConflictError('ChatRoomLastModeratorError', 'Cannot leave: you are the sole moderator of this room');
19
+ export const ChatRoomJoinCodeNotFoundError = createDomainError('ChatRoomJoinCodeNotFoundError', (code) => `No room found with join code: ${code}`);
20
+ export const ChatRoomBannedError = createDomainError('ChatRoomBannedError', (roomId) => `You are banned from room: ${roomId}`);
21
+ export const ChatRoomNotMemberError = createDomainError('ChatRoomNotMemberError', (roomId) => `You are not a member of room: ${roomId}`);
22
+ export const ChatRoomNotModeratorError = createDomainError('ChatRoomNotModeratorError', (roomId) => `You are not a moderator of room: ${roomId}`);
23
+ export const ChatRoomSelfModerationError = createDomainError('ChatRoomSelfModerationError', () => 'You cannot kick or ban yourself');
14
24
  function gateContent(content) {
15
25
  const result = moderateContent(content);
16
26
  if (!result.ok) {
@@ -19,11 +29,32 @@ function gateContent(content) {
19
29
  return result.content;
20
30
  }
21
31
  function toRoom(record) {
22
- return serializeRow(record, { dateFields: ['createdAt'] });
32
+ const { deletedAt: _deletedAt, ...room } = record;
33
+ return serializeRow(room, { dateFields: ['createdAt'] });
23
34
  }
24
35
  function toMessage(record) {
25
36
  return serializeRow(record, { dateFields: ['createdAt'] });
26
37
  }
38
+ function generateJoinCode() {
39
+ return Array.from({ length: JOIN_CODE_LENGTH }, () => {
40
+ const ch = JOIN_CODE_ALPHABET[randomInt(0, JOIN_CODE_ALPHABET.length)];
41
+ return ch ?? 'A';
42
+ }).join('');
43
+ }
44
+ function generatePrivateRoomSlug(joinCode) {
45
+ const normalizedJoinCode = joinCode.toLowerCase();
46
+ let slug = `${PRIVATE_ROOM_SLUG_PREFIX}${randomUUID()}`;
47
+ while (slug.includes(normalizedJoinCode)) {
48
+ slug = `${PRIVATE_ROOM_SLUG_PREFIX}${randomUUID()}`;
49
+ }
50
+ return slug;
51
+ }
52
+ function isUniqueConstraintViolation(e) {
53
+ if (typeof e !== 'object' || e === null || !('code' in e)) {
54
+ return false;
55
+ }
56
+ return e.code === '23505';
57
+ }
27
58
  export class ChatService {
28
59
  drizzle;
29
60
  events;
@@ -33,7 +64,11 @@ export class ChatService {
33
64
  this.events = events;
34
65
  this.transport = transport;
35
66
  }
36
- subscribeMessages(roomId, listener, viewerId) {
67
+ subscribeMessages(roomId, listener, viewerId, connectionId = randomUUID()) {
68
+ const channel = chatChannel(roomId);
69
+ const presenceMemberId = viewerId ?? `anonymous:${connectionId}`;
70
+ const presence = this.transport.presence;
71
+ presence?.join(channel, presenceMemberId, connectionId);
37
72
  let blocked = viewerId ? null : new Set();
38
73
  const pending = [];
39
74
  const deliver = (message) => {
@@ -52,7 +87,7 @@ export class ChatService {
52
87
  pending.length = 0;
53
88
  });
54
89
  }
55
- return this.transport.subscribe(chatChannel(roomId), (message) => {
90
+ const unsubscribe = this.transport.subscribe(channel, (message) => {
56
91
  if (blocked === null) {
57
92
  pending.push(message);
58
93
  }
@@ -60,6 +95,14 @@ export class ChatService {
60
95
  deliver(message);
61
96
  }
62
97
  });
98
+ return () => {
99
+ unsubscribe();
100
+ presence?.leave(channel, presenceMemberId, connectionId);
101
+ };
102
+ }
103
+ async getOnlineCount(roomId) {
104
+ const count = await this.transport.presence?.count(chatChannel(roomId));
105
+ return { count: count ?? 0 };
63
106
  }
64
107
  async blockedIdsFor(viewerId) {
65
108
  const rows = await this.drizzle.db
@@ -76,11 +119,76 @@ export class ChatService {
76
119
  .limit(1);
77
120
  return row?.name?.trim() || fallback || 'anonymous';
78
121
  }
79
- async listRooms() {
80
- const rooms = await this.drizzle.db.select().from(chatRoom).orderBy(asc(chatRoom.createdAt));
81
- return rooms.map(toRoom);
122
+ /** Throws ChatRoomNotFoundError or ChatRoomNotMemberError; returns the room on success. */
123
+ async verifyRoomAccess(roomId, viewerId) {
124
+ const [room] = await this.drizzle.db
125
+ .select()
126
+ .from(chatRoom)
127
+ .where(and(eq(chatRoom.id, roomId), isNull(chatRoom.deletedAt)))
128
+ .limit(1);
129
+ if (!room) {
130
+ throw new ChatRoomNotFoundError(roomId);
131
+ }
132
+ if (!room.isPublic) {
133
+ if (!viewerId) {
134
+ throw new ChatRoomNotMemberError(roomId);
135
+ }
136
+ const [member] = await this.drizzle.db
137
+ .select({ id: chatRoomMember.id })
138
+ .from(chatRoomMember)
139
+ .where(and(eq(chatRoomMember.roomId, roomId), eq(chatRoomMember.userId, viewerId)))
140
+ .limit(1);
141
+ if (!member) {
142
+ throw new ChatRoomNotMemberError(roomId);
143
+ }
144
+ }
145
+ return room;
82
146
  }
83
- async getRoomMessages({ roomId, limit = 50, before, viewerId, }) {
147
+ async listRooms(viewerId) {
148
+ const publicRooms = await this.drizzle.db
149
+ .select()
150
+ .from(chatRoom)
151
+ .where(and(eq(chatRoom.isPublic, true), isNull(chatRoom.deletedAt)))
152
+ .orderBy(asc(chatRoom.createdAt));
153
+ if (!viewerId) {
154
+ return publicRooms.map(toRoom);
155
+ }
156
+ const memberIds = await this.drizzle.db
157
+ .select({ roomId: chatRoomMember.roomId })
158
+ .from(chatRoomMember)
159
+ .where(eq(chatRoomMember.userId, viewerId));
160
+ if (memberIds.length === 0) {
161
+ return publicRooms.map(toRoom);
162
+ }
163
+ const privateRooms = await this.drizzle.db
164
+ .select()
165
+ .from(chatRoom)
166
+ .where(and(eq(chatRoom.isPublic, false), isNull(chatRoom.deletedAt), inArray(chatRoom.id, memberIds.map((r) => r.roomId))))
167
+ .orderBy(asc(chatRoom.createdAt));
168
+ return [...publicRooms, ...privateRooms].map(toRoom);
169
+ }
170
+ async listAdminRooms({ page, limit, sortBy, sortOrder, }) {
171
+ const dir = sortOrder === 'asc' ? asc : desc;
172
+ const col = sortBy === 'name' ? chatRoom.name : chatRoom.createdAt;
173
+ const where = and(eq(chatRoom.isPublic, true), isNull(chatRoom.deletedAt));
174
+ const [rows, [{ n }]] = await Promise.all([
175
+ this.drizzle.db
176
+ .select()
177
+ .from(chatRoom)
178
+ .where(where)
179
+ .orderBy(dir(col))
180
+ .limit(limit)
181
+ .offset(pageToOffset(page, limit)),
182
+ this.drizzle.db.select({ n: count() }).from(chatRoom).where(where),
183
+ ]);
184
+ return { items: rows.map(toRoom), total: Number(n), page, limit };
185
+ }
186
+ async getRoom({ roomId, viewerId }) {
187
+ const room = await this.verifyRoomAccess(roomId, viewerId);
188
+ return toRoom(room);
189
+ }
190
+ async getRoomMessages({ roomId, limit = DEFAULT_MESSAGE_LIMIT, before, viewerId, }) {
191
+ await this.verifyRoomAccess(roomId, viewerId);
84
192
  const conditions = [eq(chatMessage.roomId, roomId), eq(chatMessage.isDeleted, false)];
85
193
  if (before) {
86
194
  conditions.push(lt(chatMessage.createdAt, new Date(before)));
@@ -104,7 +212,8 @@ export class ChatService {
104
212
  }
105
213
  }
106
214
  async sendRoomMessage({ userId, username, roomId, content, }) {
107
- findOneOrThrow(await this.drizzle.db.select().from(chatRoom).where(eq(chatRoom.id, roomId)), new ChatRoomNotFoundError(roomId));
215
+ // TODO: check RG_SELF_EXCLUSION_SERVICE before send (sealed token not yet implemented)
216
+ await this.verifyRoomAccess(roomId, userId);
108
217
  const safeContent = gateContent(content);
109
218
  const displayName = await this.resolveDisplayName(userId, username);
110
219
  const [record] = await this.drizzle.db
@@ -127,14 +236,14 @@ export class ChatService {
127
236
  }
128
237
  async deleteMessage(id, userId) {
129
238
  const message = findOneOrThrow(await this.drizzle.db.select().from(chatMessage).where(eq(chatMessage.id, id)), new ChatMessageNotFoundError(id));
130
- assertOwnership(message.userId, userId, new ChatMessageOwnershipError(id));
239
+ assertOwnership(message.userId, userId, new ChatMessageOwnershipError());
131
240
  await this.drizzle.db
132
241
  .update(chatMessage)
133
242
  .set({ isDeleted: true })
134
243
  .where(eq(chatMessage.id, id));
135
244
  return { success: true };
136
245
  }
137
- async getGlobalMessages(limit = 50, viewerId) {
246
+ async getGlobalMessages(limit = DEFAULT_MESSAGE_LIMIT, viewerId) {
138
247
  const conditions = [isNull(chatMessage.roomId), eq(chatMessage.isDeleted, false)];
139
248
  await this.appendBlockFilter(conditions, viewerId);
140
249
  const messages = await this.drizzle.db
@@ -146,6 +255,7 @@ export class ChatService {
146
255
  return messages.map(toMessage);
147
256
  }
148
257
  async sendGlobalMessage(userId, username, content) {
258
+ // TODO: check RG_SELF_EXCLUSION_SERVICE before send (sealed token not yet implemented)
149
259
  const safeContent = gateContent(content);
150
260
  const displayName = await this.resolveDisplayName(userId, username);
151
261
  const [record] = await this.drizzle.db
@@ -199,5 +309,270 @@ export class ChatService {
199
309
  }
200
310
  return { success: true };
201
311
  }
312
+ async createRoom({ name, slug, category, actorId, }) {
313
+ const [existing] = await this.drizzle.db
314
+ .select({ id: chatRoom.id })
315
+ .from(chatRoom)
316
+ .where(eq(chatRoom.slug, slug))
317
+ .limit(1);
318
+ if (existing) {
319
+ throw new ChatRoomSlugConflictError();
320
+ }
321
+ let record;
322
+ try {
323
+ [record] = await this.drizzle.db
324
+ .insert(chatRoom)
325
+ .values({ name, slug, category })
326
+ .returning();
327
+ }
328
+ catch (error) {
329
+ if (isUniqueConstraintViolation(error)) {
330
+ throw new ChatRoomSlugConflictError();
331
+ }
332
+ throw error;
333
+ }
334
+ this.events.emit('chat.room.created', { roomId: record.id, name, slug, category, actorId });
335
+ return toRoom(record);
336
+ }
337
+ async updateRoom({ id, name, slug, category, actorId, }) {
338
+ const existing = findOneOrThrow(await this.drizzle.db
339
+ .select()
340
+ .from(chatRoom)
341
+ .where(and(eq(chatRoom.id, id), isNull(chatRoom.deletedAt)))
342
+ .limit(1), new ChatRoomNotFoundError(id));
343
+ if (slug !== undefined) {
344
+ const [clash] = await this.drizzle.db
345
+ .select({ id: chatRoom.id })
346
+ .from(chatRoom)
347
+ .where(and(eq(chatRoom.slug, slug), ne(chatRoom.id, id)))
348
+ .limit(1);
349
+ if (clash) {
350
+ throw new ChatRoomSlugConflictError();
351
+ }
352
+ }
353
+ const patch = {};
354
+ if (name !== undefined) {
355
+ patch.name = name;
356
+ }
357
+ if (slug !== undefined) {
358
+ patch.slug = slug;
359
+ }
360
+ if (category !== undefined) {
361
+ patch.category = category;
362
+ }
363
+ let updated;
364
+ try {
365
+ updated = findOneOrThrow(await this.drizzle.db
366
+ .update(chatRoom)
367
+ .set(patch)
368
+ .where(and(eq(chatRoom.id, id), isNull(chatRoom.deletedAt)))
369
+ .returning(), new ChatRoomNotFoundError(id));
370
+ }
371
+ catch (error) {
372
+ if (isUniqueConstraintViolation(error)) {
373
+ throw new ChatRoomSlugConflictError();
374
+ }
375
+ throw error;
376
+ }
377
+ this.events.emit('chat.room.updated', {
378
+ roomId: id,
379
+ actorId,
380
+ before: { name: existing.name, slug: existing.slug, category: existing.category },
381
+ after: { name: updated.name, slug: updated.slug, category: updated.category },
382
+ });
383
+ return toRoom(updated);
384
+ }
385
+ async deleteRoom(id, actorId) {
386
+ const deleted = findOneOrThrow(await this.drizzle.db
387
+ .update(chatRoom)
388
+ .set({ deletedAt: new Date() })
389
+ .where(and(eq(chatRoom.id, id), isNull(chatRoom.deletedAt)))
390
+ .returning({
391
+ id: chatRoom.id,
392
+ name: chatRoom.name,
393
+ slug: chatRoom.slug,
394
+ category: chatRoom.category,
395
+ }), new ChatRoomNotFoundError(id));
396
+ this.events.emit('chat.room.deleted', {
397
+ roomId: id,
398
+ actorId,
399
+ before: { name: deleted.name, slug: deleted.slug, category: deleted.category },
400
+ });
401
+ return { success: true };
402
+ }
403
+ async createPrivateRoom({ userId, name }) {
404
+ for (let attempt = 1; attempt <= 3; attempt++) {
405
+ const joinCode = generateJoinCode();
406
+ const slug = generatePrivateRoomSlug(joinCode);
407
+ try {
408
+ const record = await this.drizzle.db.transaction((t) => withAdvisoryXactLock(t, userId, async () => {
409
+ const [{ total }] = await t
410
+ .select({ total: count() })
411
+ .from(chatRoom)
412
+ .where(and(eq(chatRoom.creatorId, userId), eq(chatRoom.isPublic, false), isNull(chatRoom.deletedAt)));
413
+ if (Number(total) >= MAX_PRIVATE_ROOMS_PER_PLAYER) {
414
+ throw new ChatRoomLimitReachedError();
415
+ }
416
+ const [room] = await t
417
+ .insert(chatRoom)
418
+ .values({
419
+ name,
420
+ slug,
421
+ category: 'private-channels',
422
+ isPublic: false,
423
+ joinCode,
424
+ creatorId: userId,
425
+ })
426
+ .returning();
427
+ await t
428
+ .insert(chatRoomMember)
429
+ .values({ roomId: room.id, userId, role: 'moderator' })
430
+ .onConflictDoNothing();
431
+ return room;
432
+ }));
433
+ this.events.emit('chat.private_room.created', { roomId: record.id, creatorId: userId });
434
+ return toRoom(record);
435
+ }
436
+ catch (e) {
437
+ if (attempt < 3 && isUniqueConstraintViolation(e)) {
438
+ continue;
439
+ }
440
+ throw e;
441
+ }
442
+ }
443
+ // unreachable: loop returns or rethrows on every iteration
444
+ throw new ChatRoomSlugConflictError();
445
+ }
446
+ async joinRoom({ userId, joinCode }) {
447
+ const [candidate] = await this.drizzle.db
448
+ .select({ id: chatRoom.id })
449
+ .from(chatRoom)
450
+ .where(and(eq(chatRoom.joinCode, joinCode), isNull(chatRoom.deletedAt)))
451
+ .limit(1);
452
+ if (!candidate) {
453
+ throw new ChatRoomJoinCodeNotFoundError(joinCode);
454
+ }
455
+ const { room, inserted } = await this.drizzle.db.transaction((t) => withAdvisoryXactLock(t, `chat-room:${candidate.id}`, async () => {
456
+ const [room] = await t
457
+ .select()
458
+ .from(chatRoom)
459
+ .where(and(eq(chatRoom.id, candidate.id), eq(chatRoom.joinCode, joinCode), isNull(chatRoom.deletedAt)))
460
+ .limit(1);
461
+ if (!room) {
462
+ throw new ChatRoomJoinCodeNotFoundError(joinCode);
463
+ }
464
+ const [ban] = await t
465
+ .select({ id: chatRoomBan.id })
466
+ .from(chatRoomBan)
467
+ .where(and(eq(chatRoomBan.roomId, room.id), eq(chatRoomBan.userId, userId)))
468
+ .limit(1);
469
+ if (ban) {
470
+ throw new ChatRoomBannedError(room.id);
471
+ }
472
+ // Idempotent: re-joining is a no-op (preserves existing role).
473
+ const inserted = await t
474
+ .insert(chatRoomMember)
475
+ .values({ roomId: room.id, userId })
476
+ .onConflictDoNothing()
477
+ .returning();
478
+ return { room, inserted };
479
+ }));
480
+ if (inserted.length > 0) {
481
+ this.events.emit('chat.room.member.joined', { roomId: room.id, userId });
482
+ }
483
+ return toRoom(room);
484
+ }
485
+ async leaveRoom({ userId, roomId }) {
486
+ await this.verifyRoomAccess(roomId, userId);
487
+ const removed = await this.drizzle.db.transaction((t) => withAdvisoryXactLock(t, `chat-room:${roomId}`, async () => {
488
+ const [memberRow] = await t
489
+ .select({ role: chatRoomMember.role })
490
+ .from(chatRoomMember)
491
+ .where(and(eq(chatRoomMember.roomId, roomId), eq(chatRoomMember.userId, userId)))
492
+ .limit(1);
493
+ if (memberRow?.role === 'moderator') {
494
+ const [{ modCount }] = await t
495
+ .select({ modCount: count() })
496
+ .from(chatRoomMember)
497
+ .where(and(eq(chatRoomMember.roomId, roomId), eq(chatRoomMember.role, 'moderator')));
498
+ if (Number(modCount) <= 1) {
499
+ throw new ChatRoomLastModeratorError();
500
+ }
501
+ }
502
+ return t
503
+ .delete(chatRoomMember)
504
+ .where(and(eq(chatRoomMember.roomId, roomId), eq(chatRoomMember.userId, userId)))
505
+ .returning();
506
+ }));
507
+ if (removed.length > 0) {
508
+ this.events.emit('chat.room.member.left', { roomId, userId });
509
+ }
510
+ return { success: true };
511
+ }
512
+ async kickMember({ moderatorId, roomId, userId, }) {
513
+ if (moderatorId === userId) {
514
+ throw new ChatRoomSelfModerationError();
515
+ }
516
+ await this.verifyRoomAccess(roomId, moderatorId);
517
+ const removed = await this.drizzle.db.transaction(async (t) => {
518
+ const [mod] = await t
519
+ .select({ role: chatRoomMember.role })
520
+ .from(chatRoomMember)
521
+ .where(and(eq(chatRoomMember.roomId, roomId), eq(chatRoomMember.userId, moderatorId)))
522
+ .limit(1);
523
+ if (!mod || mod.role !== 'moderator') {
524
+ throw new ChatRoomNotModeratorError(roomId);
525
+ }
526
+ return t
527
+ .delete(chatRoomMember)
528
+ .where(and(eq(chatRoomMember.roomId, roomId), eq(chatRoomMember.userId, userId)))
529
+ .returning();
530
+ });
531
+ if (removed.length > 0) {
532
+ this.events.emit('chat.room.member.kicked', { roomId, userId, kickedBy: moderatorId });
533
+ }
534
+ await this.transport.revokeClient?.(userId);
535
+ return { success: true };
536
+ }
537
+ async banMember({ moderatorId, roomId, userId, }) {
538
+ if (moderatorId === userId) {
539
+ throw new ChatRoomSelfModerationError();
540
+ }
541
+ await this.verifyRoomAccess(roomId, moderatorId);
542
+ // Idempotent: banning an already-banned user is a no-op.
543
+ await this.drizzle.db.transaction((t) => withAdvisoryXactLock(t, `chat-room:${roomId}`, async () => {
544
+ const [mod] = await t
545
+ .select({ role: chatRoomMember.role })
546
+ .from(chatRoomMember)
547
+ .where(and(eq(chatRoomMember.roomId, roomId), eq(chatRoomMember.userId, moderatorId)))
548
+ .limit(1);
549
+ if (!mod || mod.role !== 'moderator') {
550
+ throw new ChatRoomNotModeratorError(roomId);
551
+ }
552
+ await t
553
+ .insert(chatRoomBan)
554
+ .values({ roomId, userId, bannedBy: moderatorId })
555
+ .onConflictDoNothing();
556
+ await t
557
+ .delete(chatRoomMember)
558
+ .where(and(eq(chatRoomMember.roomId, roomId), eq(chatRoomMember.userId, userId)));
559
+ }));
560
+ this.events.emit('chat.room.member.banned', { roomId, userId, bannedBy: moderatorId });
561
+ await this.transport.revokeClient?.(userId);
562
+ return { success: true };
563
+ }
564
+ async listRoomMembers({ roomId, viewerId }) {
565
+ await this.verifyRoomAccess(roomId, viewerId);
566
+ const members = await this.drizzle.db
567
+ .select({
568
+ userId: chatRoomMember.userId,
569
+ role: chatRoomMember.role,
570
+ joinedAt: chatRoomMember.joinedAt,
571
+ })
572
+ .from(chatRoomMember)
573
+ .where(eq(chatRoomMember.roomId, roomId))
574
+ .orderBy(asc(chatRoomMember.joinedAt));
575
+ return members.map((m) => serializeRow(m, { dateFields: ['joinedAt'] }));
576
+ }
202
577
  }
203
578
  //# sourceMappingURL=chat.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../../../src/engagement/chat/service/chat.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat.service.js","sourceRoot":"","sources":["../../../../src/engagement/chat/service/chat.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAEL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EAEf,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAC7F,OAAO,EAAE,IAAI,EAAE,MAAM,mCAAmC,CAAC;AAEzD,OAAO,EACL,QAAQ,EACR,WAAW,EACX,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAChB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,UAAU,WAAW,CAAC,MAA6B;IACvD,OAAO,MAAM,CAAC,CAAC,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;AACzE,MAAM,CAAC,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CACtD,yBAAyB,EACzB,GAAG,EAAE,CAAC,kDAAkD,CACzD,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,iBAAiB,CACjD,oBAAoB,EACpB,GAAG,EAAE,CAAC,2BAA2B,CAClC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CACxD,2BAA2B,EAC3B,sCAAsC,CACvC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CACxD,2BAA2B,EAC3B,4BAA4B,CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,iBAAiB,CACzD,4BAA4B,EAC5B,uDAAuD,CACxD,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAC5D,+BAA+B,EAC/B,CAAC,IAAY,EAAE,EAAE,CAAC,iCAAiC,IAAI,EAAE,CAC1D,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,iBAAiB,CAClD,qBAAqB,EACrB,CAAC,MAAsB,EAAE,EAAE,CAAC,6BAA6B,MAAM,EAAE,CAClE,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,iBAAiB,CACrD,wBAAwB,EACxB,CAAC,MAAsB,EAAE,EAAE,CAAC,iCAAiC,MAAM,EAAE,CACtE,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CACxD,2BAA2B,EAC3B,CAAC,MAAsB,EAAE,EAAE,CAAC,oCAAoC,MAAM,EAAE,CACzE,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAC1D,6BAA6B,EAC7B,GAAG,EAAE,CAAC,iCAAiC,CACxC,CAAC;AAEF,SAAS,WAAW,CAAC,OAAe;IAClC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,uBAAuB,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,SAAS,MAAM,CAAC,MAAoC;IAClD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAClD,OAAO,YAAY,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,SAAS,CAAC,MAAuC;IACxD,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,GAAG,EAAE;QACnD,MAAM,EAAE,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,OAAO,EAAE,IAAI,GAAG,CAAC;IACnB,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAgB;IAC/C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAClD,IAAI,IAAI,GAAG,GAAG,wBAAwB,GAAG,UAAU,EAAE,EAAE,CAAC;IACxD,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACzC,IAAI,GAAG,GAAG,wBAAwB,GAAG,UAAU,EAAE,EAAE,CAAC;IACtD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,2BAA2B,CAAC,CAAU;IAC7C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;AAC5B,CAAC;AAED,MAAM,OAAO,WAAW;IAEH;IACA;IACA;IAHnB,YACmB,OAAuB,EACvB,MAAgB,EAChB,SAA4B;QAF5B,YAAO,GAAP,OAAO,CAAgB;QACvB,WAAM,GAAN,MAAM,CAAU;QAChB,cAAS,GAAT,SAAS,CAAmB;IAC5C,CAAC;IAEJ,iBAAiB,CACf,MAA6B,EAC7B,QAAwC,EACxC,QAAqB,EACrB,eAAuB,UAAU,EAAE;QAEnC,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,gBAAgB,GAAG,QAAQ,IAAI,aAAa,YAAY,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;QACzC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;QACxD,IAAI,OAAO,GAAmC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;QAC1E,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,CAAC,OAAoB,EAAE,EAAE;YACvC,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;iBACzB,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAc,CAAC;iBAClC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,OAAO,GAAG,GAAG,CAAC;gBACd,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE,CAAC;oBAC9B,OAAO,CAAC,OAAO,CAAC,CAAC;gBACnB,CAAC;gBACD,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;QACP,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAc,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE;YAC7E,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,WAAW,EAAE,CAAC;YACd,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC3D,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAA6B;QAChD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,QAAoB;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aAC/B,MAAM,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC;aAC9C,IAAI,CAAC,aAAa,CAAC;aACnB,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,MAAkB,EAAE,QAAgB;QACnE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aAChC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;aAC3B,IAAI,CAAC,IAAI,CAAC;aACV,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;aAC1B,KAAK,CAAC,CAAC,CAAC,CAAC;QACZ,OAAO,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,QAAQ,IAAI,WAAW,CAAC;IACtD,CAAC;IAED,2FAA2F;IAC3F,KAAK,CAAC,gBAAgB,CAAC,MAAsB,EAAE,QAAqB;QAClE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACjC,MAAM,EAAE;aACR,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;aAC/D,KAAK,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;iBACnC,MAAM,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC;iBACjC,IAAI,CAAC,cAAc,CAAC;iBACpB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;iBAClF,KAAK,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAqB;QACnC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACtC,MAAM,EAAE;aACR,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;aACnE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACpC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC;aACzC,IAAI,CAAC,cAAc,CAAC;aACpB,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE9C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACvC,MAAM,EAAE;aACR,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAC5B,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC1B,OAAO,CACL,QAAQ,CAAC,EAAE,EACX,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAC/B,CACF,CACF;aACA,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAEpC,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,EACnB,IAAI,EACJ,KAAK,EACL,MAAM,EACN,SAAS,GAMV;QACC,MAAM,GAAG,GAAG,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnE,MAAM,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,EAAE;iBACZ,MAAM,EAAE;iBACR,IAAI,CAAC,QAAQ,CAAC;iBACd,KAAK,CAAC,KAAK,CAAC;iBACZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBACjB,KAAK,CAAC,KAAK,CAAC;iBACZ,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;SACnE,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAqD;QACnF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EACpB,MAAM,EACN,KAAK,GAAG,qBAAqB,EAC7B,MAAM,EACN,QAAQ,GAMT;QACC,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAE9C,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QACtF,IAAI,MAAM,EAAE,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACnC,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;aACzB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;aACpC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChB,OAAO,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,UAAmC,EAAE,QAAqB;QACxF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACrB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EACpB,MAAM,EACN,QAAQ,EACR,MAAM,EACN,OAAO,GAMR;QACC,uFAAuF;QACvF,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE5C,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACnC,MAAM,CAAC,WAAW,CAAC;aACnB,MAAM,CAAC;YACN,MAAM;YACN,MAAM;YACN,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,WAAW;SACrB,CAAC;aACD,SAAS,EAAE,CAAC;QAEf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACpC,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,MAAM;YACN,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAqB,EAAE,MAAkB;QAC3D,MAAM,OAAO,GAAG,cAAc,CAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAC9E,IAAI,wBAAwB,CAAC,EAAE,CAAC,CACjC,CAAC;QACF,eAAe,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,yBAAyB,EAAE,CAAC,CAAC;QAEzE,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aAClB,MAAM,CAAC,WAAW,CAAC;aACnB,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;aACxB,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAEjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAAK,GAAG,qBAAqB,EAAE,QAAqB;QAC1E,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAClF,MAAM,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACnC,MAAM,EAAE;aACR,IAAI,CAAC,WAAW,CAAC;aACjB,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;aACzB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;aACpC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChB,OAAO,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAkB,EAAE,QAAgB,EAAE,OAAe;QAC3E,uFAAuF;QACvF,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACnC,MAAM,CAAC,WAAW,CAAC;aACnB,MAAM,CAAC;YACN,MAAM,EAAE,IAAI;YACZ,MAAM;YACN,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,WAAW;SACrB,CAAC;aACD,SAAS,EAAE,CAAC;QAEf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACpC,SAAS,EAAE,MAAM,CAAC,EAAE;YACpB,MAAM,EAAE,IAAI;YACZ,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,SAAqB;QAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aAC/B,MAAM,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC;aAClF,IAAI,CAAC,aAAa,CAAC;aACnB,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;aAC7C,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAAqB,EAAE,SAAqB;QAC1D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACjC,CAAC;QAED,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACnC,MAAM,CAAC,aAAa,CAAC;aACrB,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;aAChC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;aACnF,SAAS,EAAE,CAAC;QAEf,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAqB,EAAE,SAAqB;QAC5D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aAClC,MAAM,CAAC,aAAa,CAAC;aACrB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;aAC1F,SAAS,EAAE,CAAC;QAEf,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EACf,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,OAAO,GAMR;QACC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACrC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;aAC3B,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAC9B,KAAK,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,yBAAyB,EAAE,CAAC;QACxC,CAAC;QACD,IAAI,MAAoC,CAAC;QACzC,IAAI,CAAC;YACH,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;iBAC7B,MAAM,CAAC,QAAQ,CAAC;iBAChB,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;iBAChC,SAAS,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,2BAA2B,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,yBAAyB,EAAE,CAAC;YACxC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5F,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EACf,EAAE,EACF,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,OAAO,GAOR;QACC,MAAM,QAAQ,GAAG,cAAc,CAC7B,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aAClB,MAAM,EAAE;aACR,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;aAC3D,KAAK,CAAC,CAAC,CAAC,EACX,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAC9B,CAAC;QACF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;iBAClC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;iBAC3B,IAAI,CAAC,QAAQ,CAAC;iBACd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;iBACxD,KAAK,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,yBAAyB,EAAE,CAAC;YACxC,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAA0C,EAAE,CAAC;QACxD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC5B,CAAC;QACD,IAAI,OAAqC,CAAC;QAC1C,IAAI,CAAC;YACH,OAAO,GAAG,cAAc,CACtB,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;iBAClB,MAAM,CAAC,QAAQ,CAAC;iBAChB,GAAG,CAAC,KAAK,CAAC;iBACV,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;iBAC3D,SAAS,EAAE,EACd,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,2BAA2B,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,MAAM,IAAI,yBAAyB,EAAE,CAAC;YACxC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACpC,MAAM,EAAE,EAAE;YACV,OAAO;YACP,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE;YACjF,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;SAC9E,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAkB,EAAE,OAAoB;QACvD,MAAM,OAAO,GAAG,cAAc,CAC5B,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aAClB,MAAM,CAAC,QAAQ,CAAC;aAChB,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;aAC9B,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;aAC3D,SAAS,CAAC;YACT,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAC,EACJ,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAC9B,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE;YACpC,MAAM,EAAE,EAAE;YACV,OAAO;YACP,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE;SAC/E,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAwC;QAC5E,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,EAAE;oBACzC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC;yBACxB,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;yBAC1B,IAAI,CAAC,QAAQ,CAAC;yBACd,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,EAC9B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAC5B,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC3B,CACF,CAAC;oBACJ,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,4BAA4B,EAAE,CAAC;wBAClD,MAAM,IAAI,yBAAyB,EAAE,CAAC;oBACxC,CAAC;oBAED,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;yBACnB,MAAM,CAAC,QAAQ,CAAC;yBAChB,MAAM,CAAC;wBACN,IAAI;wBACJ,IAAI;wBACJ,QAAQ,EAAE,kBAAkB;wBAC5B,QAAQ,EAAE,KAAK;wBACf,QAAQ;wBACR,SAAS,EAAE,MAAM;qBAClB,CAAC;yBACD,SAAS,EAAE,CAAC;oBACf,MAAM,CAAC;yBACJ,MAAM,CAAC,cAAc,CAAC;yBACtB,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;yBACtD,mBAAmB,EAAE,CAAC;oBACzB,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CACH,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;gBACxF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,OAAO,GAAG,CAAC,IAAI,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC;oBAClD,SAAS;gBACX,CAAC;gBACD,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;QACD,2DAA2D;QAC3D,MAAM,IAAI,yBAAyB,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAA4C;QAC3E,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aACtC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;aAC3B,IAAI,CAAC,QAAQ,CAAC;aACd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;aACvE,KAAK,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,6BAA6B,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CACjE,oBAAoB,CAAC,CAAC,EAAE,aAAa,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;iBACnB,MAAM,EAAE;iBACR,IAAI,CAAC,QAAQ,CAAC;iBACd,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,EAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAC/B,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAC3B,CACF;iBACA,KAAK,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,6BAA6B,CAAC,QAAQ,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;iBAClB,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC;iBAC9B,IAAI,CAAC,WAAW,CAAC;iBACjB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;iBAC3E,KAAK,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,+DAA+D;YAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC;iBACrB,MAAM,CAAC,cAAc,CAAC;iBACtB,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;iBACnC,mBAAmB,EAAE;iBACrB,SAAS,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CACH,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAkD;QAChF,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CACtD,oBAAoB,CAAC,CAAC,EAAE,aAAa,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;iBACxB,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;iBACrC,IAAI,CAAC,cAAc,CAAC;iBACpB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;iBAChF,KAAK,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,SAAS,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;gBACpC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC;qBAC3B,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;qBAC7B,IAAI,CAAC,cAAc,CAAC;qBACpB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;gBACvF,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,MAAM,IAAI,0BAA0B,EAAE,CAAC;gBACzC,CAAC;YACH,CAAC;YACD,OAAO,CAAC;iBACL,MAAM,CAAC,cAAc,CAAC;iBACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;iBAChF,SAAS,EAAE,CAAC;QACjB,CAAC,CAAC,CACH,CAAC;QACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EACf,WAAW,EACX,MAAM,EACN,MAAM,GAKP;QACC,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,2BAA2B,EAAE,CAAC;QAC1C,CAAC;QACD,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC5D,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;iBAClB,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;iBACrC,IAAI,CAAC,cAAc,CAAC;iBACpB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;iBACrF,KAAK,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACrC,MAAM,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,CAAC;iBACL,MAAM,CAAC,cAAc,CAAC;iBACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;iBAChF,SAAS,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,EACd,WAAW,EACX,MAAM,EACN,MAAM,GAKP;QACC,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,2BAA2B,EAAE,CAAC;QAC1C,CAAC;QACD,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACjD,yDAAyD;QACzD,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CACtC,oBAAoB,CAAC,CAAC,EAAE,aAAa,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;iBAClB,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC;iBACrC,IAAI,CAAC,cAAc,CAAC;iBACpB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;iBACrF,KAAK,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBACrC,MAAM,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,CAAC;iBACJ,MAAM,CAAC,WAAW,CAAC;iBACnB,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;iBACjD,mBAAmB,EAAE,CAAC;YACzB,MAAM,CAAC;iBACJ,MAAM,CAAC,cAAc,CAAC;iBACtB,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACtF,CAAC,CAAC,CACH,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QACvF,MAAM,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;QAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAW,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAqD;QAC3F,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE;aAClC,MAAM,CAAC;YACN,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,IAAI,EAAE,cAAc,CAAC,IAAI;YACzB,QAAQ,EAAE,cAAc,CAAC,QAAQ;SAClC,CAAC;aACD,IAAI,CAAC,cAAc,CAAC;aACpB,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;aACxC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
@@ -1,2 +1,3 @@
1
1
  export { useChatStream, type ChatMessage, type UseChatStreamOptions, type UseChatStreamResult, } from './chat/react/use-chat-stream.js';
2
+ export { useJoinRoom } from './chat/react/use-join-room.js';
2
3
  //# sourceMappingURL=react.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/engagement/react.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/engagement/react.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC"}
@@ -1,3 +1,4 @@
1
1
  // `@openora/engagement/react` - domain-owned hooks, keeping the base @openora/core/react SDK domain-agnostic.
2
2
  export { useChatStream, } from './chat/react/use-chat-stream.js';
3
+ export { useJoinRoom } from './chat/react/use-join-room.js';
3
4
  //# sourceMappingURL=react.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/engagement/react.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAC9G,OAAO,EACL,aAAa,GAId,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/engagement/react.ts"],"names":[],"mappings":"AAAA,8GAA8G;AAC9G,OAAO,EACL,aAAa,GAId,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC"}
@@ -43,7 +43,7 @@ export declare class IamService {
43
43
  private assertSuperAdmin;
44
44
  listCatalog(): {
45
45
  modules: {
46
- resource: "admin" | "player" | "withdrawal" | "bonus" | "report" | "transaction" | "game" | "content" | "compliance" | "audit" | "game-config" | "analytics" | "sportsbook" | "affiliate" | "sessions" | "player-note" | "tag-rule";
46
+ resource: "admin" | "player" | "withdrawal" | "bonus" | "report" | "audit" | "compliance" | "transaction" | "game" | "content" | "game-config" | "analytics" | "sportsbook" | "affiliate" | "sessions" | "player-note" | "tag-rule" | "chat-room";
47
47
  actions: string[];
48
48
  readActions: string[];
49
49
  }[];