@openora/core 0.4.1-canary.27 → 0.4.1-canary.30

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 (105) 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/engagement/chat/__tests__/chat.service.test.js +266 -5
  17. package/dist/engagement/chat/__tests__/chat.service.test.js.map +1 -1
  18. package/dist/engagement/chat/contract/constants.d.ts +11 -0
  19. package/dist/engagement/chat/contract/constants.d.ts.map +1 -0
  20. package/dist/engagement/chat/contract/constants.js +11 -0
  21. package/dist/engagement/chat/contract/constants.js.map +1 -0
  22. package/dist/engagement/chat/contract/index.d.ts +223 -2
  23. package/dist/engagement/chat/contract/index.d.ts.map +1 -1
  24. package/dist/engagement/chat/contract/index.js +104 -7
  25. package/dist/engagement/chat/contract/index.js.map +1 -1
  26. package/dist/engagement/chat/drizzle/migrations/0001_cloudy_groot.sql +32 -0
  27. package/dist/engagement/chat/drizzle/migrations/meta/0001_snapshot.json +557 -0
  28. package/dist/engagement/chat/drizzle/migrations/meta/_journal.json +7 -0
  29. package/dist/engagement/chat/index.d.ts +1 -2
  30. package/dist/engagement/chat/index.d.ts.map +1 -1
  31. package/dist/engagement/chat/index.js +1 -2
  32. package/dist/engagement/chat/index.js.map +1 -1
  33. package/dist/engagement/chat/plugin.d.ts.map +1 -1
  34. package/dist/engagement/chat/plugin.js +8 -3
  35. package/dist/engagement/chat/plugin.js.map +1 -1
  36. package/dist/engagement/chat/react/use-join-room.d.ts +13 -0
  37. package/dist/engagement/chat/react/use-join-room.d.ts.map +1 -0
  38. package/dist/engagement/chat/react/use-join-room.js +25 -0
  39. package/dist/engagement/chat/react/use-join-room.js.map +1 -0
  40. package/dist/engagement/chat/router/index.d.ts +184 -4
  41. package/dist/engagement/chat/router/index.d.ts.map +1 -1
  42. package/dist/engagement/chat/router/index.js +105 -20
  43. package/dist/engagement/chat/router/index.js.map +1 -1
  44. package/dist/engagement/chat/schema/index.d.ts +256 -0
  45. package/dist/engagement/chat/schema/index.d.ts.map +1 -1
  46. package/dist/engagement/chat/schema/index.js +40 -2
  47. package/dist/engagement/chat/schema/index.js.map +1 -1
  48. package/dist/engagement/chat/service/chat.service.d.ts +151 -4
  49. package/dist/engagement/chat/service/chat.service.d.ts.map +1 -1
  50. package/dist/engagement/chat/service/chat.service.js +391 -16
  51. package/dist/engagement/chat/service/chat.service.js.map +1 -1
  52. package/dist/engagement/react.d.ts +1 -0
  53. package/dist/engagement/react.d.ts.map +1 -1
  54. package/dist/engagement/react.js +1 -0
  55. package/dist/engagement/react.js.map +1 -1
  56. package/dist/iam/service/iam.service.d.ts +1 -1
  57. package/dist/react/context/realtime-client.d.ts +1 -0
  58. package/dist/react/context/realtime-client.d.ts.map +1 -1
  59. package/dist/react/context/realtime-client.js.map +1 -1
  60. package/dist/server/auth/permissions.d.ts +12 -0
  61. package/dist/server/auth/permissions.d.ts.map +1 -1
  62. package/dist/server/auth/permissions.js +2 -0
  63. package/dist/server/auth/permissions.js.map +1 -1
  64. package/dist/server/db/__tests__/migrate.test.d.ts +2 -0
  65. package/dist/server/db/__tests__/migrate.test.d.ts.map +1 -0
  66. package/dist/server/db/__tests__/migrate.test.js +50 -0
  67. package/dist/server/db/__tests__/migrate.test.js.map +1 -0
  68. package/dist/server/db/migrate.d.ts +14 -0
  69. package/dist/server/db/migrate.d.ts.map +1 -1
  70. package/dist/server/db/migrate.js +70 -12
  71. package/dist/server/db/migrate.js.map +1 -1
  72. package/dist/server/kernel/index.d.ts +2 -0
  73. package/dist/server/kernel/index.d.ts.map +1 -1
  74. package/dist/server/kernel/index.js +2 -0
  75. package/dist/server/kernel/index.js.map +1 -1
  76. package/dist/server/kernel/realtime-authorizer.d.ts +8 -0
  77. package/dist/server/kernel/realtime-authorizer.d.ts.map +1 -0
  78. package/dist/server/kernel/realtime-authorizer.js +11 -0
  79. package/dist/server/kernel/realtime-authorizer.js.map +1 -0
  80. package/dist/server/kernel/realtime-transport.d.ts +9 -0
  81. package/dist/server/kernel/realtime-transport.d.ts.map +1 -0
  82. package/dist/server/kernel/realtime-transport.js +63 -0
  83. package/dist/server/kernel/realtime-transport.js.map +1 -0
  84. package/dist/server/plugin-host/core-plugins.d.ts +16 -0
  85. package/dist/server/plugin-host/core-plugins.d.ts.map +1 -0
  86. package/dist/server/plugin-host/core-plugins.js +36 -0
  87. package/dist/server/plugin-host/core-plugins.js.map +1 -0
  88. package/dist/server/plugin-host/index.d.ts +1 -0
  89. package/dist/server/plugin-host/index.d.ts.map +1 -1
  90. package/dist/server/plugin-host/index.js +1 -0
  91. package/dist/server/plugin-host/index.js.map +1 -1
  92. package/dist/server/runtime/assert-durable-seams.d.ts +3 -2
  93. package/dist/server/runtime/assert-durable-seams.d.ts.map +1 -1
  94. package/dist/server/runtime/assert-durable-seams.js.map +1 -1
  95. package/dist/server/runtime/create-app.d.ts +1 -2
  96. package/dist/server/runtime/create-app.d.ts.map +1 -1
  97. package/dist/server/runtime/create-app.js +5 -4
  98. package/dist/server/runtime/create-app.js.map +1 -1
  99. package/dist/testing/fakes/__tests__/realtime-transport.test.js +6 -4
  100. package/dist/testing/fakes/__tests__/realtime-transport.test.js.map +1 -1
  101. package/dist/testing/fakes/realtime-transport.d.ts +1 -7
  102. package/dist/testing/fakes/realtime-transport.d.ts.map +1 -1
  103. package/dist/testing/fakes/realtime-transport.js +1 -58
  104. package/dist/testing/fakes/realtime-transport.js.map +1 -1
  105. package/package.json +1 -1
@@ -1,14 +1,57 @@
1
1
  import * as z from 'zod';
2
- export declare const MAX_MESSAGE_LENGTH = 500;
2
+ export * from './constants.js';
3
+ export declare const AdminRoomSortByValues: readonly ["name", "createdAt"];
4
+ export declare const AdminRoomSortBySchema: z.ZodDefault<z.ZodEnum<{
5
+ createdAt: "createdAt";
6
+ name: "name";
7
+ }>>;
8
+ export type AdminRoomSortBy = z.infer<typeof AdminRoomSortBySchema>;
9
+ export declare const SortOrderValues: readonly ["asc", "desc"];
10
+ export declare const SortOrderSchema: z.ZodDefault<z.ZodEnum<{
11
+ asc: "asc";
12
+ desc: "desc";
13
+ }>>;
14
+ export type SortOrder = z.infer<typeof SortOrderSchema>;
15
+ export declare const ChatRoomSlugSchema: z.ZodString;
3
16
  export declare const MessageContentSchema: z.ZodString;
17
+ export declare const ChatRoomRoleSchema: z.ZodEnum<{
18
+ member: "member";
19
+ moderator: "moderator";
20
+ }>;
21
+ export type ChatRoomRole = z.infer<typeof ChatRoomRoleSchema>;
22
+ export declare const CHAT_ROOM_CATEGORIES: readonly ["games-sports", "regions", "languages", "private-channels"];
23
+ export declare const ChatRoomCategorySchema: z.ZodEnum<{
24
+ "games-sports": "games-sports";
25
+ regions: "regions";
26
+ languages: "languages";
27
+ "private-channels": "private-channels";
28
+ }>;
29
+ export type ChatRoomCategory = z.infer<typeof ChatRoomCategorySchema>;
4
30
  export declare const ChatRoomSchema: z.ZodObject<{
5
31
  id: z.ZodUUID;
6
32
  name: z.ZodString;
7
33
  slug: z.ZodString;
34
+ category: z.ZodEnum<{
35
+ "games-sports": "games-sports";
36
+ regions: "regions";
37
+ languages: "languages";
38
+ "private-channels": "private-channels";
39
+ }>;
8
40
  isPublic: z.ZodBoolean;
41
+ joinCode: z.ZodNullable<z.ZodString>;
42
+ creatorId: z.ZodNullable<z.ZodUUID>;
9
43
  createdAt: z.ZodISODateTime;
10
44
  }, z.core.$strip>;
11
45
  export type ChatRoom = z.infer<typeof ChatRoomSchema>;
46
+ export declare const ChatRoomMemberSchema: z.ZodObject<{
47
+ userId: z.ZodUUID;
48
+ role: z.ZodEnum<{
49
+ member: "member";
50
+ moderator: "moderator";
51
+ }>;
52
+ joinedAt: z.ZodISODateTime;
53
+ }, z.core.$strip>;
54
+ export type ChatRoomMember = z.infer<typeof ChatRoomMemberSchema>;
12
55
  export declare const ChatMessageSchema: z.ZodObject<{
13
56
  id: z.ZodUUID;
14
57
  roomId: z.ZodNullable<z.ZodUUID>;
@@ -23,6 +66,9 @@ export declare const BlockedUserSchema: z.ZodObject<{
23
66
  blockedId: z.ZodUUID;
24
67
  createdAt: z.ZodISODateTime;
25
68
  }, z.core.$strip>;
69
+ export declare const ChatOnlineCountSchema: z.ZodObject<{
70
+ count: z.ZodNumber;
71
+ }, z.core.$strip>;
26
72
  export declare const ChatConnectionGrantSchema: z.ZodObject<{
27
73
  provider: z.ZodString;
28
74
  channels: z.ZodArray<z.ZodString>;
@@ -32,7 +78,15 @@ export declare const chatContract: {
32
78
  id: z.ZodUUID;
33
79
  name: z.ZodString;
34
80
  slug: z.ZodString;
81
+ category: z.ZodEnum<{
82
+ "games-sports": "games-sports";
83
+ regions: "regions";
84
+ languages: "languages";
85
+ "private-channels": "private-channels";
86
+ }>;
35
87
  isPublic: z.ZodBoolean;
88
+ joinCode: z.ZodNullable<z.ZodString>;
89
+ creatorId: z.ZodNullable<z.ZodUUID>;
36
90
  createdAt: z.ZodISODateTime;
37
91
  }, z.core.$strip>>, Record<never, never>, Record<never, never>>;
38
92
  getRoomMessages: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
@@ -87,7 +141,6 @@ export declare const chatContract: {
87
141
  }, z.core.$strip>, Record<never, never>, Record<never, never>>;
88
142
  getConnection: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
89
143
  clientId: z.ZodOptional<z.ZodString>;
90
- channels: z.ZodOptional<z.ZodArray<z.ZodString>>;
91
144
  }, z.core.$strip>, z.ZodObject<{
92
145
  provider: z.ZodString;
93
146
  channels: z.ZodArray<z.ZodString>;
@@ -111,6 +164,11 @@ export declare const chatContract: {
111
164
  isDeleted: boolean;
112
165
  createdAt: string;
113
166
  }, unknown, void>>, Record<never, never>, Record<never, never>>;
167
+ getOnlineCount: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
168
+ roomId: z.ZodOptional<z.ZodNullable<z.ZodUUID>>;
169
+ }, z.core.$strip>, z.ZodObject<{
170
+ count: z.ZodNumber;
171
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
114
172
  listBlockedUsers: import("@orpc/contract").ContractProcedureBuilderWithOutput<import("@orpc/contract").Schema<unknown, unknown>, z.ZodArray<z.ZodObject<{
115
173
  blockedId: z.ZodUUID;
116
174
  createdAt: z.ZodISODateTime;
@@ -125,5 +183,168 @@ export declare const chatContract: {
125
183
  }, z.core.$strip>, z.ZodObject<{
126
184
  success: z.ZodLiteral<true>;
127
185
  }, z.core.$strip>, Record<never, never>, Record<never, never>>;
186
+ createPrivateRoom: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
187
+ name: z.ZodString;
188
+ }, z.core.$strip>, z.ZodObject<{
189
+ id: z.ZodUUID;
190
+ name: z.ZodString;
191
+ slug: z.ZodString;
192
+ category: z.ZodEnum<{
193
+ "games-sports": "games-sports";
194
+ regions: "regions";
195
+ languages: "languages";
196
+ "private-channels": "private-channels";
197
+ }>;
198
+ isPublic: z.ZodBoolean;
199
+ joinCode: z.ZodNullable<z.ZodString>;
200
+ creatorId: z.ZodNullable<z.ZodUUID>;
201
+ createdAt: z.ZodISODateTime;
202
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
203
+ joinRoom: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
204
+ joinCode: z.ZodString;
205
+ }, z.core.$strip>, z.ZodObject<{
206
+ id: z.ZodUUID;
207
+ name: z.ZodString;
208
+ slug: z.ZodString;
209
+ category: z.ZodEnum<{
210
+ "games-sports": "games-sports";
211
+ regions: "regions";
212
+ languages: "languages";
213
+ "private-channels": "private-channels";
214
+ }>;
215
+ isPublic: z.ZodBoolean;
216
+ joinCode: z.ZodNullable<z.ZodString>;
217
+ creatorId: z.ZodNullable<z.ZodUUID>;
218
+ createdAt: z.ZodISODateTime;
219
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
220
+ leaveRoom: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
221
+ roomId: z.ZodUUID;
222
+ }, z.core.$strip>, z.ZodObject<{
223
+ success: z.ZodLiteral<true>;
224
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
225
+ getRoom: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
226
+ roomId: z.ZodUUID;
227
+ }, z.core.$strip>, z.ZodObject<{
228
+ id: z.ZodUUID;
229
+ name: z.ZodString;
230
+ slug: z.ZodString;
231
+ category: z.ZodEnum<{
232
+ "games-sports": "games-sports";
233
+ regions: "regions";
234
+ languages: "languages";
235
+ "private-channels": "private-channels";
236
+ }>;
237
+ isPublic: z.ZodBoolean;
238
+ joinCode: z.ZodNullable<z.ZodString>;
239
+ creatorId: z.ZodNullable<z.ZodUUID>;
240
+ createdAt: z.ZodISODateTime;
241
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
242
+ kickMember: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
243
+ roomId: z.ZodUUID;
244
+ userId: z.ZodUUID;
245
+ }, z.core.$strip>, z.ZodObject<{
246
+ success: z.ZodLiteral<true>;
247
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
248
+ banMember: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
249
+ roomId: z.ZodUUID;
250
+ userId: z.ZodUUID;
251
+ }, z.core.$strip>, z.ZodObject<{
252
+ success: z.ZodLiteral<true>;
253
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
254
+ listRoomMembers: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
255
+ roomId: z.ZodUUID;
256
+ }, z.core.$strip>, z.ZodArray<z.ZodObject<{
257
+ userId: z.ZodUUID;
258
+ role: z.ZodEnum<{
259
+ member: "member";
260
+ moderator: "moderator";
261
+ }>;
262
+ joinedAt: z.ZodISODateTime;
263
+ }, z.core.$strip>>, Record<never, never>, Record<never, never>>;
264
+ createRoom: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
265
+ name: z.ZodString;
266
+ slug: z.ZodString;
267
+ category: z.ZodEnum<{
268
+ "games-sports": "games-sports";
269
+ regions: "regions";
270
+ languages: "languages";
271
+ "private-channels": "private-channels";
272
+ }>;
273
+ }, z.core.$strip>, z.ZodObject<{
274
+ id: z.ZodUUID;
275
+ name: z.ZodString;
276
+ slug: z.ZodString;
277
+ category: z.ZodEnum<{
278
+ "games-sports": "games-sports";
279
+ regions: "regions";
280
+ languages: "languages";
281
+ "private-channels": "private-channels";
282
+ }>;
283
+ isPublic: z.ZodBoolean;
284
+ joinCode: z.ZodNullable<z.ZodString>;
285
+ creatorId: z.ZodNullable<z.ZodUUID>;
286
+ createdAt: z.ZodISODateTime;
287
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
288
+ updateRoom: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
289
+ id: z.ZodUUID;
290
+ name: z.ZodOptional<z.ZodString>;
291
+ slug: z.ZodOptional<z.ZodString>;
292
+ category: z.ZodOptional<z.ZodEnum<{
293
+ "games-sports": "games-sports";
294
+ regions: "regions";
295
+ languages: "languages";
296
+ "private-channels": "private-channels";
297
+ }>>;
298
+ }, z.core.$strip>, z.ZodObject<{
299
+ id: z.ZodUUID;
300
+ name: z.ZodString;
301
+ slug: z.ZodString;
302
+ category: z.ZodEnum<{
303
+ "games-sports": "games-sports";
304
+ regions: "regions";
305
+ languages: "languages";
306
+ "private-channels": "private-channels";
307
+ }>;
308
+ isPublic: z.ZodBoolean;
309
+ joinCode: z.ZodNullable<z.ZodString>;
310
+ creatorId: z.ZodNullable<z.ZodUUID>;
311
+ createdAt: z.ZodISODateTime;
312
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
313
+ listAdminRooms: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
314
+ sortBy: z.ZodDefault<z.ZodEnum<{
315
+ createdAt: "createdAt";
316
+ name: "name";
317
+ }>>;
318
+ sortOrder: z.ZodDefault<z.ZodEnum<{
319
+ asc: "asc";
320
+ desc: "desc";
321
+ }>>;
322
+ page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
323
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
324
+ }, z.core.$strip>, z.ZodObject<{
325
+ items: z.ZodArray<z.ZodObject<{
326
+ id: z.ZodUUID;
327
+ name: z.ZodString;
328
+ slug: z.ZodString;
329
+ category: z.ZodEnum<{
330
+ "games-sports": "games-sports";
331
+ regions: "regions";
332
+ languages: "languages";
333
+ "private-channels": "private-channels";
334
+ }>;
335
+ isPublic: z.ZodBoolean;
336
+ joinCode: z.ZodNullable<z.ZodString>;
337
+ creatorId: z.ZodNullable<z.ZodUUID>;
338
+ createdAt: z.ZodISODateTime;
339
+ }, z.core.$strip>>;
340
+ total: z.ZodNumber;
341
+ page: z.ZodNumber;
342
+ limit: z.ZodNumber;
343
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
344
+ deleteRoom: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
345
+ id: z.ZodUUID;
346
+ }, z.core.$strip>, z.ZodObject<{
347
+ success: z.ZodLiteral<true>;
348
+ }, z.core.$strip>, Record<never, never>, Record<never, never>>;
128
349
  };
129
350
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/engagement/chat/contract/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,eAAO,MAAM,oBAAoB,aAAmD,CAAC;AAErF,eAAO,MAAM,cAAc;;;;;;iBAMzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,iBAAiB;;;;;;;;iBAW5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAGH,eAAO,MAAM,yBAAyB;;;iBAK5B,CAAC;AAGX,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDxB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/engagement/chat/contract/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAWzB,cAAc,gBAAgB,CAAC;AAE/B,eAAO,MAAM,qBAAqB,gCAAiC,CAAC;AACpE,eAAO,MAAM,qBAAqB;;;GAAqD,CAAC;AACxF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,eAAe,0BAA2B,CAAC;AACxD,eAAO,MAAM,eAAe;;;GAA0C,CAAC;AACvE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAGxD,eAAO,MAAM,kBAAkB,aAKO,CAAC;AAEvC,eAAO,MAAM,oBAAoB,aAAmD,CAAC;AAErF,eAAO,MAAM,kBAAkB;;;EAA0B,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,oBAAoB,uEAKvB,CAAC;AACX,eAAO,MAAM,sBAAsB;;;;;EAA+B,CAAC;AACnE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;iBAUzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,oBAAoB;;;;;;;iBAI/B,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,iBAAiB;;;;;;;;iBAU5B,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;iBAA+C,CAAC;AAGlF,eAAO,MAAM,yBAAyB;;;iBAK5B,CAAC;AAMX,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgJxB,CAAC"}
@@ -1,23 +1,52 @@
1
1
  import { oc, eventIterator } from '@orpc/contract';
2
2
  import * as z from 'zod';
3
3
  import { IdInputSchema, TimestampSchema, UuidSchema } from '@openora/core/contracts';
4
- export const MAX_MESSAGE_LENGTH = 500;
4
+ import { PageQuerySchema, paginated } from '@openora/core/contracts/kit';
5
+ import { MAX_MESSAGE_LENGTH, ROOM_NAME_MAX_LENGTH, ROOM_SLUG_MAX_LENGTH, JOIN_CODE_INPUT_MAX_LENGTH, CHAT_ROOM_ROLES, } from './constants.js';
6
+ export * from './constants.js';
7
+ export const AdminRoomSortByValues = ['name', 'createdAt'];
8
+ export const AdminRoomSortBySchema = z.enum(AdminRoomSortByValues).default('createdAt');
9
+ export const SortOrderValues = ['asc', 'desc'];
10
+ export const SortOrderSchema = z.enum(SortOrderValues).default('desc');
11
+ // kebab-case slug: lowercase alphanum + hyphens, no leading/trailing hyphen.
12
+ export const ChatRoomSlugSchema = z
13
+ .string()
14
+ .trim()
15
+ .min(1)
16
+ .max(ROOM_SLUG_MAX_LENGTH)
17
+ .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/);
5
18
  export const MessageContentSchema = z.string().trim().min(1).max(MAX_MESSAGE_LENGTH);
19
+ export const ChatRoomRoleSchema = z.enum(CHAT_ROOM_ROLES);
20
+ export const CHAT_ROOM_CATEGORIES = [
21
+ 'games-sports',
22
+ 'regions',
23
+ 'languages',
24
+ 'private-channels',
25
+ ];
26
+ export const ChatRoomCategorySchema = z.enum(CHAT_ROOM_CATEGORIES);
6
27
  export const ChatRoomSchema = z.object({
7
28
  id: UuidSchema,
8
29
  name: z.string(),
9
30
  slug: z.string(),
31
+ category: ChatRoomCategorySchema,
10
32
  isPublic: z.boolean(),
33
+ // Null for public rooms; populated for private rooms when the viewer is a member.
34
+ joinCode: z.string().nullable(),
35
+ creatorId: UuidSchema.nullable(),
11
36
  createdAt: TimestampSchema,
12
37
  });
38
+ export const ChatRoomMemberSchema = z.object({
39
+ userId: UuidSchema,
40
+ role: ChatRoomRoleSchema,
41
+ joinedAt: TimestampSchema,
42
+ });
13
43
  export const ChatMessageSchema = z.object({
14
44
  id: UuidSchema,
15
45
  roomId: UuidSchema.nullable(),
16
46
  userId: UuidSchema,
17
47
  username: z.string(),
18
- // UNTRUSTED user text. Profanity-gated and dangerous-URL-defanged server-side
19
- // (best-effort), but NOT HTML-escaped. Consumers MUST render it as text or
20
- // HTML-escape it - never inject it as raw HTML. See moderation/sanitize-urls.ts.
48
+ // UNTRUSTED user text: profanity-gated and URL-defanged server-side but NOT HTML-escaped.
49
+ // Consumers MUST render as text or escape before injecting into HTML.
21
50
  content: z.string(),
22
51
  isDeleted: z.boolean(),
23
52
  createdAt: TimestampSchema,
@@ -26,6 +55,7 @@ export const BlockedUserSchema = z.object({
26
55
  blockedId: UuidSchema,
27
56
  createdAt: TimestampSchema,
28
57
  });
58
+ export const ChatOnlineCountSchema = z.object({ count: z.number().int().min(0) });
29
59
  // `.loose()` keeps this an open union so a managed-vendor overlay (eg Ably) can return extra fields without a contract change.
30
60
  export const ChatConnectionGrantSchema = z
31
61
  .object({
@@ -33,14 +63,16 @@ export const ChatConnectionGrantSchema = z
33
63
  channels: z.array(z.string()),
34
64
  })
35
65
  .loose();
36
- // Default first-party SSE; swappable for a managed vendor (Ably/GetStream) downstream. See ADR-0007.
66
+ const RoomIdInput = z.object({ roomId: UuidSchema });
67
+ const RoomUserInput = z.object({ roomId: UuidSchema, userId: UuidSchema });
68
+ const ChatJoinCodeSchema = z.string().trim().min(1).max(JOIN_CODE_INPUT_MAX_LENGTH);
37
69
  export const chatContract = {
38
70
  listRooms: oc.route({ method: 'GET', path: '/chat/rooms' }).output(z.array(ChatRoomSchema)),
39
71
  getRoomMessages: oc
40
72
  .route({ method: 'GET', path: '/chat/rooms/{roomId}/messages' })
41
73
  .input(z.object({
42
74
  roomId: UuidSchema,
43
- // Bounded so a caller cannot request an unbounded page (matches the 50 default).
75
+ // Bounded so a caller cannot request an unbounded page.
44
76
  limit: z.number().int().min(1).max(100).optional(),
45
77
  before: z.string().optional(),
46
78
  }))
@@ -62,12 +94,16 @@ export const chatContract = {
62
94
  .output(ChatMessageSchema),
63
95
  getConnection: oc
64
96
  .route({ method: 'GET', path: '/chat/connection' })
65
- .input(z.object({ clientId: z.string().optional(), channels: z.array(z.string()).optional() }))
97
+ .input(z.object({ clientId: z.string().optional() }))
66
98
  .output(ChatConnectionGrantSchema),
67
99
  streamMessages: oc
68
100
  .route({ method: 'GET', path: '/chat/stream' })
69
101
  .input(z.object({ roomId: UuidSchema.nullable().optional() }))
70
102
  .output(eventIterator(ChatMessageSchema)),
103
+ getOnlineCount: oc
104
+ .route({ method: 'GET', path: '/chat/online-count' })
105
+ .input(z.object({ roomId: UuidSchema.nullable().optional() }))
106
+ .output(ChatOnlineCountSchema),
71
107
  listBlockedUsers: oc
72
108
  .route({ method: 'GET', path: '/chat/blocks' })
73
109
  .output(z.array(BlockedUserSchema)),
@@ -79,5 +115,66 @@ export const chatContract = {
79
115
  .route({ method: 'DELETE', path: '/chat/blocks/{blockedId}' })
80
116
  .input(z.object({ blockedId: UuidSchema }))
81
117
  .output(z.object({ success: z.literal(true) })),
118
+ createPrivateRoom: oc
119
+ .route({ method: 'POST', path: '/chat/rooms/private' })
120
+ .input(z.object({ name: z.string().trim().min(1).max(ROOM_NAME_MAX_LENGTH) }))
121
+ .output(ChatRoomSchema),
122
+ joinRoom: oc
123
+ .route({ method: 'POST', path: '/chat/rooms/join' })
124
+ .input(z.object({ joinCode: ChatJoinCodeSchema }))
125
+ .output(ChatRoomSchema),
126
+ leaveRoom: oc
127
+ .route({ method: 'POST', path: '/chat/rooms/{roomId}/leave' })
128
+ .input(RoomIdInput)
129
+ .output(z.object({ success: z.literal(true) })),
130
+ getRoom: oc
131
+ .route({ method: 'GET', path: '/chat/rooms/{roomId}' })
132
+ .input(RoomIdInput)
133
+ .output(ChatRoomSchema),
134
+ kickMember: oc
135
+ .route({ method: 'POST', path: '/chat/rooms/{roomId}/kick' })
136
+ .input(RoomUserInput)
137
+ .output(z.object({ success: z.literal(true) })),
138
+ banMember: oc
139
+ .route({ method: 'POST', path: '/chat/rooms/{roomId}/ban' })
140
+ .input(RoomUserInput)
141
+ .output(z.object({ success: z.literal(true) })),
142
+ listRoomMembers: oc
143
+ .route({ method: 'GET', path: '/chat/rooms/{roomId}/members' })
144
+ .input(RoomIdInput)
145
+ .output(z.array(ChatRoomMemberSchema)),
146
+ createRoom: oc
147
+ .route({ method: 'POST', path: '/backoffice/chat/rooms' })
148
+ .input(z.object({
149
+ name: z.string().trim().min(1).max(ROOM_NAME_MAX_LENGTH),
150
+ slug: ChatRoomSlugSchema,
151
+ category: ChatRoomCategorySchema,
152
+ }))
153
+ .output(ChatRoomSchema),
154
+ updateRoom: oc
155
+ .route({ method: 'PATCH', path: '/backoffice/chat/rooms/{id}' })
156
+ .input(z
157
+ .object({
158
+ id: UuidSchema,
159
+ name: z.string().trim().min(1).max(ROOM_NAME_MAX_LENGTH).optional(),
160
+ slug: ChatRoomSlugSchema.optional(),
161
+ category: ChatRoomCategorySchema.optional(),
162
+ })
163
+ .refine(({ name, slug, category }) => name !== undefined || slug !== undefined || category !== undefined, {
164
+ message: 'At least one room field is required',
165
+ }))
166
+ .output(ChatRoomSchema),
167
+ listAdminRooms: oc
168
+ .route({ method: 'GET', path: '/backoffice/chat/rooms' })
169
+ .input(z.object({
170
+ ...PageQuerySchema.shape,
171
+ sortBy: AdminRoomSortBySchema,
172
+ sortOrder: SortOrderSchema,
173
+ }))
174
+ .output(paginated(ChatRoomSchema)),
175
+ deleteRoom: oc
176
+ .route({ method: 'DELETE', path: '/backoffice/chat/rooms/{id}' })
177
+ .input(IdInputSchema)
178
+ .output(z.object({ success: z.literal(true) })),
82
179
  };
83
180
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/engagement/chat/contract/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/engagement/chat/contract/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ CREATE TYPE "public"."chat_room_category" AS ENUM('games-sports', 'regions', 'languages', 'private-channels');--> statement-breakpoint
2
+ CREATE TYPE "public"."chat_room_role" AS ENUM('member', 'moderator');--> statement-breakpoint
3
+ CREATE TABLE "chat_room_ban" (
4
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
5
+ "room_id" uuid NOT NULL,
6
+ "user_id" uuid NOT NULL,
7
+ "banned_by" uuid NOT NULL,
8
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
9
+ );
10
+ --> statement-breakpoint
11
+ CREATE TABLE "chat_room_member" (
12
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
13
+ "room_id" uuid NOT NULL,
14
+ "user_id" uuid NOT NULL,
15
+ "role" "chat_room_role" DEFAULT 'member' NOT NULL,
16
+ "joined_at" timestamp with time zone DEFAULT now() NOT NULL
17
+ );
18
+ --> statement-breakpoint
19
+ ALTER TABLE "chat_room" ADD COLUMN "category" "chat_room_category" DEFAULT 'games-sports' NOT NULL;--> statement-breakpoint
20
+ ALTER TABLE "chat_room" ADD COLUMN "join_code" text;--> statement-breakpoint
21
+ ALTER TABLE "chat_room" ADD COLUMN "creator_id" uuid;--> statement-breakpoint
22
+ ALTER TABLE "chat_room" ADD COLUMN "deleted_at" timestamp with time zone;--> statement-breakpoint
23
+ ALTER TABLE "chat_room_ban" ADD CONSTRAINT "chat_room_ban_room_id_chat_room_id_fk" FOREIGN KEY ("room_id") REFERENCES "public"."chat_room"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
24
+ ALTER TABLE "chat_room_member" ADD CONSTRAINT "chat_room_member_room_id_chat_room_id_fk" FOREIGN KEY ("room_id") REFERENCES "public"."chat_room"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
25
+ CREATE UNIQUE INDEX "chat_room_ban_room_user_key" ON "chat_room_ban" USING btree ("room_id","user_id");--> statement-breakpoint
26
+ CREATE INDEX "chat_room_ban_room_idx" ON "chat_room_ban" USING btree ("room_id");--> statement-breakpoint
27
+ CREATE UNIQUE INDEX "chat_room_member_room_user_key" ON "chat_room_member" USING btree ("room_id","user_id");--> statement-breakpoint
28
+ CREATE INDEX "chat_room_member_room_idx" ON "chat_room_member" USING btree ("room_id");--> statement-breakpoint
29
+ CREATE INDEX "chat_room_member_user_idx" ON "chat_room_member" USING btree ("user_id");--> statement-breakpoint
30
+ CREATE UNIQUE INDEX "chat_room_join_code_key" ON "chat_room" USING btree ("join_code");--> statement-breakpoint
31
+ CREATE INDEX "chat_room_deleted_at_idx" ON "chat_room" USING btree ("deleted_at");--> statement-breakpoint
32
+ CREATE INDEX "chat_room_creator_public_deleted_at_idx" ON "chat_room" USING btree ("creator_id","is_public","deleted_at");