hazo_chat 2.0.16 → 2.1.1
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.
- package/README.md +60 -8
- package/SETUP_CHECKLIST.md +266 -10
- package/dist/api/index.d.ts +17 -2
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +16 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/messages.d.ts +52 -1
- package/dist/api/messages.d.ts.map +1 -1
- package/dist/api/messages.js +380 -22
- package/dist/api/messages.js.map +1 -1
- package/dist/api/types.d.ts +25 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/components/hazo_chat/hazo_chat.d.ts.map +1 -1
- package/dist/components/hazo_chat/hazo_chat.js +18 -10
- package/dist/components/hazo_chat/hazo_chat.js.map +1 -1
- package/dist/components/hazo_chat/hazo_chat_header.d.ts.map +1 -1
- package/dist/components/hazo_chat/hazo_chat_header.js +22 -1
- package/dist/components/hazo_chat/hazo_chat_header.js.map +1 -1
- package/dist/components/hazo_chat/hazo_chat_messages.d.ts +5 -4
- package/dist/components/hazo_chat/hazo_chat_messages.d.ts.map +1 -1
- package/dist/components/hazo_chat/hazo_chat_messages.js +153 -7
- package/dist/components/hazo_chat/hazo_chat_messages.js.map +1 -1
- package/dist/components/ui/chat_bubble.d.ts.map +1 -1
- package/dist/components/ui/chat_bubble.js +28 -5
- package/dist/components/ui/chat_bubble.js.map +1 -1
- package/dist/hooks/use_chat_messages.d.ts +3 -3
- package/dist/hooks/use_chat_messages.d.ts.map +1 -1
- package/dist/hooks/use_chat_messages.js +259 -136
- package/dist/hooks/use_chat_messages.js.map +1 -1
- package/dist/types/index.d.ts +108 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/api/messages.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Messages API Handler Factory
|
|
3
3
|
*
|
|
4
|
-
* Creates GET and
|
|
4
|
+
* Creates GET, POST, and DELETE handlers for the /api/hazo_chat/messages endpoint.
|
|
5
5
|
* These handlers should be used in a Next.js API route.
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
@@ -21,15 +21,46 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { NextResponse } from 'next/server';
|
|
23
23
|
import { cookies } from 'next/headers';
|
|
24
|
-
import { createCrudService } from 'hazo_connect/server';
|
|
25
|
-
//
|
|
24
|
+
import { createCrudService, getSqliteAdminService } from 'hazo_connect/server';
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Constants for validation
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/** Maximum message length in characters */
|
|
29
|
+
const MAX_MESSAGE_LENGTH = 5000;
|
|
30
|
+
/** Maximum length for reference_id */
|
|
31
|
+
const MAX_REFERENCE_ID_LENGTH = 255;
|
|
32
|
+
/** Maximum length for reference_type */
|
|
33
|
+
const MAX_REFERENCE_TYPE_LENGTH = 100;
|
|
34
|
+
/** Default messages per page */
|
|
35
|
+
const DEFAULT_LIMIT = 50;
|
|
36
|
+
/** Maximum messages per page */
|
|
37
|
+
const MAX_LIMIT = 100;
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Helper Functions
|
|
40
|
+
// ============================================================================
|
|
41
|
+
/** Generate a UUID v4 */
|
|
26
42
|
function generateUUID() {
|
|
27
43
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
28
|
-
const r = Math.random() * 16 | 0;
|
|
29
|
-
const v = c === 'x' ? r : (r & 0x3 | 0x8
|
|
44
|
+
const r = (Math.random() * 16) | 0;
|
|
45
|
+
const v = c === 'x' ? r : (r & 0x3) | 0x8;
|
|
30
46
|
return v.toString(16);
|
|
31
47
|
});
|
|
32
48
|
}
|
|
49
|
+
/** Create a standardized error response */
|
|
50
|
+
function createErrorResponse(error, status, error_code) {
|
|
51
|
+
return NextResponse.json({
|
|
52
|
+
success: false,
|
|
53
|
+
error,
|
|
54
|
+
error_code,
|
|
55
|
+
}, { status });
|
|
56
|
+
}
|
|
57
|
+
/** Create a standardized success response */
|
|
58
|
+
function createSuccessResponse(data) {
|
|
59
|
+
return NextResponse.json({
|
|
60
|
+
success: true,
|
|
61
|
+
data,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
33
64
|
/**
|
|
34
65
|
* Default function to get user ID from request cookies
|
|
35
66
|
*/
|
|
@@ -46,12 +77,15 @@ async function defaultGetUserIdFromRequest() {
|
|
|
46
77
|
export function createMessagesHandler(options) {
|
|
47
78
|
const { getHazoConnect, getUserIdFromRequest } = options;
|
|
48
79
|
/**
|
|
49
|
-
* GET handler - Fetch chat messages
|
|
80
|
+
* GET handler - Fetch chat messages with pagination
|
|
50
81
|
*
|
|
51
82
|
* Query params:
|
|
52
83
|
* - receiver_user_id (required): The other user in the conversation
|
|
53
84
|
* - reference_id (optional): Filter by reference ID
|
|
54
85
|
* - reference_type (optional): Filter by reference type
|
|
86
|
+
* - limit (optional): Number of messages per page (default: 50, max: 100)
|
|
87
|
+
* - cursor (optional): Cursor for pagination (created_at timestamp of last message)
|
|
88
|
+
* - direction (optional): 'older' or 'newer' relative to cursor (default: 'older')
|
|
55
89
|
*/
|
|
56
90
|
async function GET(request) {
|
|
57
91
|
try {
|
|
@@ -61,61 +95,123 @@ export function createMessagesHandler(options) {
|
|
|
61
95
|
: await defaultGetUserIdFromRequest();
|
|
62
96
|
if (!current_user_id) {
|
|
63
97
|
console.error('[hazo_chat/messages GET] No user ID - not authenticated');
|
|
64
|
-
return
|
|
98
|
+
return createErrorResponse('User not authenticated', 401, 'UNAUTHENTICATED');
|
|
65
99
|
}
|
|
66
100
|
// Get query params
|
|
67
101
|
const { searchParams } = new URL(request.url);
|
|
68
102
|
const receiver_user_id = searchParams.get('receiver_user_id');
|
|
69
103
|
const reference_id = searchParams.get('reference_id') || '';
|
|
70
104
|
const reference_type = searchParams.get('reference_type') || '';
|
|
105
|
+
const cursor = searchParams.get('cursor') || '';
|
|
106
|
+
const direction = searchParams.get('direction') || 'older';
|
|
107
|
+
const limit_param = searchParams.get('limit');
|
|
108
|
+
// Validate required params
|
|
71
109
|
if (!receiver_user_id) {
|
|
72
110
|
console.error('[hazo_chat/messages GET] Missing receiver_user_id');
|
|
73
|
-
return
|
|
111
|
+
return createErrorResponse('receiver_user_id is required', 400, 'MISSING_RECEIVER');
|
|
112
|
+
}
|
|
113
|
+
// Validate input lengths
|
|
114
|
+
if (reference_id && reference_id.length > MAX_REFERENCE_ID_LENGTH) {
|
|
115
|
+
return createErrorResponse(`reference_id exceeds maximum length of ${MAX_REFERENCE_ID_LENGTH}`, 400, 'INVALID_REFERENCE_ID');
|
|
116
|
+
}
|
|
117
|
+
if (reference_type && reference_type.length > MAX_REFERENCE_TYPE_LENGTH) {
|
|
118
|
+
return createErrorResponse(`reference_type exceeds maximum length of ${MAX_REFERENCE_TYPE_LENGTH}`, 400, 'INVALID_REFERENCE_TYPE');
|
|
119
|
+
}
|
|
120
|
+
// Parse and validate limit
|
|
121
|
+
let limit = DEFAULT_LIMIT;
|
|
122
|
+
if (limit_param) {
|
|
123
|
+
const parsed_limit = parseInt(limit_param, 10);
|
|
124
|
+
if (isNaN(parsed_limit) || parsed_limit < 1) {
|
|
125
|
+
return createErrorResponse('limit must be a positive integer', 400, 'INVALID_LIMIT');
|
|
126
|
+
}
|
|
127
|
+
limit = Math.min(parsed_limit, MAX_LIMIT);
|
|
74
128
|
}
|
|
75
129
|
console.log('[hazo_chat/messages GET] Fetching messages:', {
|
|
76
130
|
current_user_id,
|
|
77
131
|
receiver_user_id,
|
|
78
132
|
reference_id,
|
|
79
133
|
reference_type,
|
|
134
|
+
cursor,
|
|
135
|
+
direction,
|
|
136
|
+
limit,
|
|
80
137
|
});
|
|
81
138
|
// Get hazo_connect instance and create CRUD service
|
|
82
139
|
const hazoConnect = getHazoConnect();
|
|
83
140
|
const chatService = createCrudService(hazoConnect, 'hazo_chat');
|
|
84
141
|
let messages = [];
|
|
85
142
|
try {
|
|
86
|
-
//
|
|
143
|
+
// Build query with proper filtering
|
|
87
144
|
const all_messages = await chatService.list((qb) => {
|
|
88
145
|
let builder = qb.select('*');
|
|
146
|
+
// Filter by reference if provided
|
|
89
147
|
if (reference_id) {
|
|
90
148
|
builder = builder.where('reference_id', 'eq', reference_id);
|
|
91
149
|
}
|
|
92
150
|
if (reference_type) {
|
|
93
151
|
builder = builder.where('reference_type', 'eq', reference_type);
|
|
94
152
|
}
|
|
95
|
-
|
|
153
|
+
// Apply cursor-based pagination
|
|
154
|
+
if (cursor) {
|
|
155
|
+
if (direction === 'newer') {
|
|
156
|
+
builder = builder.where('created_at', 'gt', cursor);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
builder = builder.where('created_at', 'lt', cursor);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Order by created_at
|
|
163
|
+
// For 'older' direction, we want desc to get the most recent first before cursor
|
|
164
|
+
// For 'newer' or initial load, we want asc
|
|
165
|
+
if (direction === 'older' && cursor) {
|
|
166
|
+
builder = builder.order('created_at', 'desc');
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
builder = builder.order('created_at', 'asc');
|
|
170
|
+
}
|
|
171
|
+
return builder;
|
|
96
172
|
});
|
|
97
173
|
// Filter to only messages between current user and receiver
|
|
98
|
-
|
|
174
|
+
// Also exclude deleted messages
|
|
175
|
+
const filtered_messages = all_messages.filter((msg) => {
|
|
176
|
+
if (msg.deleted_at)
|
|
177
|
+
return false;
|
|
99
178
|
const is_sent_by_me = msg.sender_user_id === current_user_id && msg.receiver_user_id === receiver_user_id;
|
|
100
179
|
const is_sent_to_me = msg.sender_user_id === receiver_user_id && msg.receiver_user_id === current_user_id;
|
|
101
180
|
return is_sent_by_me || is_sent_to_me;
|
|
102
181
|
});
|
|
182
|
+
// Apply limit after filtering
|
|
183
|
+
messages = filtered_messages.slice(0, limit);
|
|
184
|
+
// If we fetched in desc order, reverse to return in asc order
|
|
185
|
+
if (direction === 'older' && cursor) {
|
|
186
|
+
messages.reverse();
|
|
187
|
+
}
|
|
103
188
|
}
|
|
104
189
|
catch (dbError) {
|
|
105
190
|
console.error('[hazo_chat/messages GET] Database error:', dbError);
|
|
106
191
|
throw dbError;
|
|
107
192
|
}
|
|
108
193
|
console.log('[hazo_chat/messages GET] Found messages:', messages.length);
|
|
194
|
+
// Determine if there are more messages
|
|
195
|
+
const has_more = messages.length === limit;
|
|
196
|
+
// Get cursors for next/prev page
|
|
197
|
+
const next_cursor = messages.length > 0 ? messages[messages.length - 1].created_at : null;
|
|
198
|
+
const prev_cursor = messages.length > 0 ? messages[0].created_at : null;
|
|
109
199
|
return NextResponse.json({
|
|
110
200
|
success: true,
|
|
111
201
|
messages,
|
|
112
202
|
current_user_id,
|
|
203
|
+
pagination: {
|
|
204
|
+
limit,
|
|
205
|
+
has_more,
|
|
206
|
+
next_cursor,
|
|
207
|
+
prev_cursor,
|
|
208
|
+
},
|
|
113
209
|
});
|
|
114
210
|
}
|
|
115
211
|
catch (error) {
|
|
116
212
|
const error_message = error instanceof Error ? error.message : 'Unknown error';
|
|
117
213
|
console.error('[hazo_chat/messages GET] Error:', error_message, error);
|
|
118
|
-
return
|
|
214
|
+
return createErrorResponse('Failed to fetch messages', 500, 'INTERNAL_ERROR');
|
|
119
215
|
}
|
|
120
216
|
}
|
|
121
217
|
/**
|
|
@@ -123,7 +219,7 @@ export function createMessagesHandler(options) {
|
|
|
123
219
|
*
|
|
124
220
|
* Request body:
|
|
125
221
|
* - receiver_user_id (required): The recipient user ID
|
|
126
|
-
* - message_text (required): The message content
|
|
222
|
+
* - message_text (required): The message content (max 5000 chars)
|
|
127
223
|
* - reference_id (optional): Reference ID for context grouping
|
|
128
224
|
* - reference_type (optional): Reference type (default: 'chat')
|
|
129
225
|
*/
|
|
@@ -135,7 +231,7 @@ export function createMessagesHandler(options) {
|
|
|
135
231
|
: await defaultGetUserIdFromRequest();
|
|
136
232
|
if (!sender_user_id) {
|
|
137
233
|
console.error('[hazo_chat/messages POST] No user ID - not authenticated');
|
|
138
|
-
return
|
|
234
|
+
return createErrorResponse('User not authenticated', 401, 'UNAUTHENTICATED');
|
|
139
235
|
}
|
|
140
236
|
// Parse request body
|
|
141
237
|
const body = await request.json();
|
|
@@ -143,11 +239,29 @@ export function createMessagesHandler(options) {
|
|
|
143
239
|
// Validate required fields
|
|
144
240
|
if (!receiver_user_id) {
|
|
145
241
|
console.error('[hazo_chat/messages POST] Missing receiver_user_id');
|
|
146
|
-
return
|
|
242
|
+
return createErrorResponse('receiver_user_id is required', 400, 'MISSING_RECEIVER');
|
|
243
|
+
}
|
|
244
|
+
// Validate message_text
|
|
245
|
+
if (!message_text || typeof message_text !== 'string') {
|
|
246
|
+
console.error('[hazo_chat/messages POST] Missing message_text');
|
|
247
|
+
return createErrorResponse('message_text is required', 400, 'MISSING_MESSAGE');
|
|
248
|
+
}
|
|
249
|
+
const trimmed_message = message_text.trim();
|
|
250
|
+
if (trimmed_message === '') {
|
|
251
|
+
console.error('[hazo_chat/messages POST] Empty message_text');
|
|
252
|
+
return createErrorResponse('message_text cannot be empty or whitespace-only', 400, 'EMPTY_MESSAGE');
|
|
147
253
|
}
|
|
148
|
-
if (
|
|
149
|
-
console.error('[hazo_chat/messages POST]
|
|
150
|
-
return
|
|
254
|
+
if (trimmed_message.length > MAX_MESSAGE_LENGTH) {
|
|
255
|
+
console.error('[hazo_chat/messages POST] Message too long:', trimmed_message.length);
|
|
256
|
+
return createErrorResponse(`Message exceeds maximum length of ${MAX_MESSAGE_LENGTH} characters`, 400, 'MESSAGE_TOO_LONG');
|
|
257
|
+
}
|
|
258
|
+
// Validate reference_id length
|
|
259
|
+
if (reference_id && reference_id.length > MAX_REFERENCE_ID_LENGTH) {
|
|
260
|
+
return createErrorResponse(`reference_id exceeds maximum length of ${MAX_REFERENCE_ID_LENGTH}`, 400, 'INVALID_REFERENCE_ID');
|
|
261
|
+
}
|
|
262
|
+
// Validate reference_type length
|
|
263
|
+
if (reference_type && reference_type.length > MAX_REFERENCE_TYPE_LENGTH) {
|
|
264
|
+
return createErrorResponse(`reference_type exceeds maximum length of ${MAX_REFERENCE_TYPE_LENGTH}`, 400, 'INVALID_REFERENCE_TYPE');
|
|
151
265
|
}
|
|
152
266
|
// Get hazo_connect instance and create CRUD service
|
|
153
267
|
const hazoConnect = getHazoConnect();
|
|
@@ -162,7 +276,7 @@ export function createMessagesHandler(options) {
|
|
|
162
276
|
reference_type: reference_type || 'chat',
|
|
163
277
|
sender_user_id,
|
|
164
278
|
receiver_user_id,
|
|
165
|
-
message_text:
|
|
279
|
+
message_text: trimmed_message,
|
|
166
280
|
reference_list: null,
|
|
167
281
|
read_at: null,
|
|
168
282
|
deleted_at: null,
|
|
@@ -175,7 +289,7 @@ export function createMessagesHandler(options) {
|
|
|
175
289
|
receiver_user_id,
|
|
176
290
|
reference_id: reference_id || '',
|
|
177
291
|
reference_type: reference_type || 'chat',
|
|
178
|
-
message_length:
|
|
292
|
+
message_length: trimmed_message.length,
|
|
179
293
|
});
|
|
180
294
|
// Save to database
|
|
181
295
|
try {
|
|
@@ -194,7 +308,7 @@ export function createMessagesHandler(options) {
|
|
|
194
308
|
receiver_user_id,
|
|
195
309
|
reference_id: reference_id || '',
|
|
196
310
|
reference_type: reference_type || 'chat',
|
|
197
|
-
message_text:
|
|
311
|
+
message_text: trimmed_message,
|
|
198
312
|
reference_list: null,
|
|
199
313
|
read_at: null,
|
|
200
314
|
deleted_at: null,
|
|
@@ -206,9 +320,253 @@ export function createMessagesHandler(options) {
|
|
|
206
320
|
catch (error) {
|
|
207
321
|
const error_message = error instanceof Error ? error.message : 'Unknown error';
|
|
208
322
|
console.error('[hazo_chat/messages POST] Error:', error_message, error);
|
|
209
|
-
return
|
|
323
|
+
return createErrorResponse('Failed to save message', 500, 'INTERNAL_ERROR');
|
|
210
324
|
}
|
|
211
325
|
}
|
|
212
326
|
return { GET, POST };
|
|
213
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Creates a PATCH handler for marking a message as read
|
|
330
|
+
*
|
|
331
|
+
* This handler should be used in a Next.js API route like:
|
|
332
|
+
* /api/hazo_chat/messages/[id]/read/route.ts
|
|
333
|
+
*
|
|
334
|
+
* @param options - Configuration options
|
|
335
|
+
* @returns PATCH handler function
|
|
336
|
+
*/
|
|
337
|
+
export function createMarkAsReadHandler(options) {
|
|
338
|
+
const { getHazoConnect, getUserIdFromRequest } = options;
|
|
339
|
+
/**
|
|
340
|
+
* PATCH handler - Mark a message as read
|
|
341
|
+
*
|
|
342
|
+
* Route params:
|
|
343
|
+
* - id (required): The message ID to mark as read
|
|
344
|
+
*
|
|
345
|
+
* Note: In Next.js 13+ App Router, params may be a Promise
|
|
346
|
+
*/
|
|
347
|
+
async function PATCH(request, context) {
|
|
348
|
+
try {
|
|
349
|
+
// Get current user ID
|
|
350
|
+
const current_user_id = getUserIdFromRequest
|
|
351
|
+
? await getUserIdFromRequest(request)
|
|
352
|
+
: await defaultGetUserIdFromRequest();
|
|
353
|
+
if (!current_user_id) {
|
|
354
|
+
console.error('[hazo_chat/messages/[id]/read PATCH] No user ID - not authenticated');
|
|
355
|
+
return NextResponse.json({ success: false, error: 'User not authenticated' }, { status: 401 });
|
|
356
|
+
}
|
|
357
|
+
// Handle params as Promise (Next.js 15+) or direct object (Next.js 13-14)
|
|
358
|
+
const params = context.params instanceof Promise ? await context.params : context.params;
|
|
359
|
+
const message_id = params.id;
|
|
360
|
+
if (!message_id) {
|
|
361
|
+
console.error('[hazo_chat/messages/[id]/read PATCH] Missing message ID');
|
|
362
|
+
return NextResponse.json({ success: false, error: 'Message ID is required' }, { status: 400 });
|
|
363
|
+
}
|
|
364
|
+
console.log('[hazo_chat/messages/[id]/read PATCH] Marking message as read:', {
|
|
365
|
+
message_id,
|
|
366
|
+
current_user_id,
|
|
367
|
+
});
|
|
368
|
+
// Get hazo_connect instance and create CRUD service
|
|
369
|
+
const hazoConnect = getHazoConnect();
|
|
370
|
+
const chatService = createCrudService(hazoConnect, 'hazo_chat');
|
|
371
|
+
// First, fetch the message to verify ownership
|
|
372
|
+
let message = null;
|
|
373
|
+
try {
|
|
374
|
+
const messages = await chatService.list((qb) => qb.select('*').where('id', 'eq', message_id));
|
|
375
|
+
message = messages[0] || null;
|
|
376
|
+
}
|
|
377
|
+
catch (dbError) {
|
|
378
|
+
console.error('[hazo_chat/messages/[id]/read PATCH] Database error fetching message:', dbError);
|
|
379
|
+
throw dbError;
|
|
380
|
+
}
|
|
381
|
+
if (!message) {
|
|
382
|
+
console.error('[hazo_chat/messages/[id]/read PATCH] Message not found:', message_id);
|
|
383
|
+
return NextResponse.json({ success: false, error: 'Message not found' }, { status: 404 });
|
|
384
|
+
}
|
|
385
|
+
// Verify that the current user is the receiver (only receivers can mark as read)
|
|
386
|
+
if (message.receiver_user_id !== current_user_id) {
|
|
387
|
+
console.error('[hazo_chat/messages/[id]/read PATCH] User is not the receiver:', {
|
|
388
|
+
message_id,
|
|
389
|
+
current_user_id,
|
|
390
|
+
receiver_user_id: message.receiver_user_id,
|
|
391
|
+
});
|
|
392
|
+
return NextResponse.json({ success: false, error: 'Unauthorized - only the receiver can mark messages as read' }, { status: 403 });
|
|
393
|
+
}
|
|
394
|
+
// Don't update if already read
|
|
395
|
+
if (message.read_at) {
|
|
396
|
+
console.log('[hazo_chat/messages/[id]/read PATCH] Message already read:', message_id);
|
|
397
|
+
return NextResponse.json({
|
|
398
|
+
success: true,
|
|
399
|
+
message: {
|
|
400
|
+
...message,
|
|
401
|
+
read_at: message.read_at,
|
|
402
|
+
},
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
// Update the read_at timestamp
|
|
406
|
+
// Use SQLite admin service's updateRows method for reliable updates
|
|
407
|
+
const now = new Date().toISOString();
|
|
408
|
+
try {
|
|
409
|
+
// Use the SQLite admin service which has updateRows method
|
|
410
|
+
const sqliteService = getSqliteAdminService();
|
|
411
|
+
const updated_rows = await sqliteService.updateRows('hazo_chat', { id: message_id }, // criteria: update where id matches
|
|
412
|
+
{ read_at: now, changed_at: now } // data to update
|
|
413
|
+
);
|
|
414
|
+
if (updated_rows.length === 0) {
|
|
415
|
+
console.warn('[hazo_chat/messages/[id]/read PATCH] No rows updated - message may not exist:', message_id);
|
|
416
|
+
// Don't throw error, just log warning - message might have been deleted
|
|
417
|
+
}
|
|
418
|
+
else {
|
|
419
|
+
console.log('[hazo_chat/messages/[id]/read PATCH] Successfully updated', updated_rows.length, 'row(s)');
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
catch (dbError) {
|
|
423
|
+
console.error('[hazo_chat/messages/[id]/read PATCH] Database error updating message:', dbError);
|
|
424
|
+
throw dbError;
|
|
425
|
+
}
|
|
426
|
+
console.log('[hazo_chat/messages/[id]/read PATCH] Message marked as read successfully:', message_id);
|
|
427
|
+
return NextResponse.json({
|
|
428
|
+
success: true,
|
|
429
|
+
message: {
|
|
430
|
+
...message,
|
|
431
|
+
read_at: now,
|
|
432
|
+
changed_at: now,
|
|
433
|
+
},
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
catch (error) {
|
|
437
|
+
const error_message = error instanceof Error ? error.message : 'Unknown error';
|
|
438
|
+
console.error('[hazo_chat/messages/[id]/read PATCH] Error:', error_message, error);
|
|
439
|
+
return NextResponse.json({ success: false, error: 'Failed to mark message as read' }, { status: 500 });
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
return { PATCH };
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Creates a DELETE handler for soft-deleting a message
|
|
446
|
+
*
|
|
447
|
+
* This handler should be used in a Next.js API route like:
|
|
448
|
+
* /api/hazo_chat/messages/[id]/route.ts
|
|
449
|
+
*
|
|
450
|
+
* @example
|
|
451
|
+
* ```typescript
|
|
452
|
+
* // app/api/hazo_chat/messages/[id]/route.ts
|
|
453
|
+
* import { createDeleteHandler } from 'hazo_chat/api';
|
|
454
|
+
* import { getHazoConnectSingleton } from 'hazo_connect/nextjs/setup';
|
|
455
|
+
*
|
|
456
|
+
* export const dynamic = 'force-dynamic';
|
|
457
|
+
*
|
|
458
|
+
* const { DELETE } = createDeleteHandler({
|
|
459
|
+
* getHazoConnect: () => getHazoConnectSingleton()
|
|
460
|
+
* });
|
|
461
|
+
*
|
|
462
|
+
* export { DELETE };
|
|
463
|
+
* ```
|
|
464
|
+
*
|
|
465
|
+
* @param options - Configuration options
|
|
466
|
+
* @returns DELETE handler function
|
|
467
|
+
*/
|
|
468
|
+
export function createDeleteHandler(options) {
|
|
469
|
+
const { getHazoConnect, getUserIdFromRequest } = options;
|
|
470
|
+
/**
|
|
471
|
+
* DELETE handler - Soft delete a message
|
|
472
|
+
*
|
|
473
|
+
* Route params:
|
|
474
|
+
* - id (required): The message ID to delete
|
|
475
|
+
*
|
|
476
|
+
* Note: This performs a soft delete by setting deleted_at timestamp.
|
|
477
|
+
* Only the sender can delete their own messages.
|
|
478
|
+
*/
|
|
479
|
+
async function DELETE(request, context) {
|
|
480
|
+
try {
|
|
481
|
+
// Get current user ID
|
|
482
|
+
const current_user_id = getUserIdFromRequest
|
|
483
|
+
? await getUserIdFromRequest(request)
|
|
484
|
+
: await defaultGetUserIdFromRequest();
|
|
485
|
+
if (!current_user_id) {
|
|
486
|
+
console.error('[hazo_chat/messages/[id] DELETE] No user ID - not authenticated');
|
|
487
|
+
return createErrorResponse('User not authenticated', 401, 'UNAUTHENTICATED');
|
|
488
|
+
}
|
|
489
|
+
// Handle params as Promise (Next.js 15+) or direct object (Next.js 13-14)
|
|
490
|
+
const params = context.params instanceof Promise ? await context.params : context.params;
|
|
491
|
+
const message_id = params.id;
|
|
492
|
+
if (!message_id) {
|
|
493
|
+
console.error('[hazo_chat/messages/[id] DELETE] Missing message ID');
|
|
494
|
+
return createErrorResponse('Message ID is required', 400, 'MISSING_MESSAGE_ID');
|
|
495
|
+
}
|
|
496
|
+
console.log('[hazo_chat/messages/[id] DELETE] Deleting message:', {
|
|
497
|
+
message_id,
|
|
498
|
+
current_user_id,
|
|
499
|
+
});
|
|
500
|
+
// Get hazo_connect instance and create CRUD service
|
|
501
|
+
const hazoConnect = getHazoConnect();
|
|
502
|
+
const chatService = createCrudService(hazoConnect, 'hazo_chat');
|
|
503
|
+
// Fetch the message to verify ownership
|
|
504
|
+
let message = null;
|
|
505
|
+
try {
|
|
506
|
+
const messages = await chatService.list((qb) => qb.select('*').where('id', 'eq', message_id));
|
|
507
|
+
message = messages[0] || null;
|
|
508
|
+
}
|
|
509
|
+
catch (dbError) {
|
|
510
|
+
console.error('[hazo_chat/messages/[id] DELETE] Database error fetching message:', dbError);
|
|
511
|
+
throw dbError;
|
|
512
|
+
}
|
|
513
|
+
if (!message) {
|
|
514
|
+
console.error('[hazo_chat/messages/[id] DELETE] Message not found:', message_id);
|
|
515
|
+
return createErrorResponse('Message not found', 404, 'MESSAGE_NOT_FOUND');
|
|
516
|
+
}
|
|
517
|
+
// Verify that the current user is the sender (only senders can delete their messages)
|
|
518
|
+
if (message.sender_user_id !== current_user_id) {
|
|
519
|
+
console.error('[hazo_chat/messages/[id] DELETE] User is not the sender:', {
|
|
520
|
+
message_id,
|
|
521
|
+
current_user_id,
|
|
522
|
+
sender_user_id: message.sender_user_id,
|
|
523
|
+
});
|
|
524
|
+
return createErrorResponse('Unauthorized - only the sender can delete their messages', 403, 'UNAUTHORIZED');
|
|
525
|
+
}
|
|
526
|
+
// Check if already deleted
|
|
527
|
+
if (message.deleted_at) {
|
|
528
|
+
console.log('[hazo_chat/messages/[id] DELETE] Message already deleted:', message_id);
|
|
529
|
+
return NextResponse.json({
|
|
530
|
+
success: true,
|
|
531
|
+
message: {
|
|
532
|
+
...message,
|
|
533
|
+
message_text: null,
|
|
534
|
+
},
|
|
535
|
+
});
|
|
536
|
+
}
|
|
537
|
+
// Soft delete: set deleted_at timestamp and clear message_text
|
|
538
|
+
const now = new Date().toISOString();
|
|
539
|
+
try {
|
|
540
|
+
const sqliteService = getSqliteAdminService();
|
|
541
|
+
const updated_rows = await sqliteService.updateRows('hazo_chat', { id: message_id }, { deleted_at: now, message_text: null, changed_at: now });
|
|
542
|
+
if (updated_rows.length === 0) {
|
|
543
|
+
console.warn('[hazo_chat/messages/[id] DELETE] No rows updated - message may not exist:', message_id);
|
|
544
|
+
}
|
|
545
|
+
else {
|
|
546
|
+
console.log('[hazo_chat/messages/[id] DELETE] Successfully deleted', updated_rows.length, 'row(s)');
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
catch (dbError) {
|
|
550
|
+
console.error('[hazo_chat/messages/[id] DELETE] Database error deleting message:', dbError);
|
|
551
|
+
throw dbError;
|
|
552
|
+
}
|
|
553
|
+
console.log('[hazo_chat/messages/[id] DELETE] Message deleted successfully:', message_id);
|
|
554
|
+
return NextResponse.json({
|
|
555
|
+
success: true,
|
|
556
|
+
message: {
|
|
557
|
+
...message,
|
|
558
|
+
deleted_at: now,
|
|
559
|
+
message_text: null,
|
|
560
|
+
changed_at: now,
|
|
561
|
+
},
|
|
562
|
+
});
|
|
563
|
+
}
|
|
564
|
+
catch (error) {
|
|
565
|
+
const error_message = error instanceof Error ? error.message : 'Unknown error';
|
|
566
|
+
console.error('[hazo_chat/messages/[id] DELETE] Error:', error_message, error);
|
|
567
|
+
return createErrorResponse('Failed to delete message', 500, 'INTERNAL_ERROR');
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
return { DELETE };
|
|
571
|
+
}
|
|
214
572
|
//# sourceMappingURL=messages.js.map
|
package/dist/api/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/api/messages.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/api/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAe,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAI/E,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,2CAA2C;AAC3C,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,sCAAsC;AACtC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAEpC,wCAAwC;AACxC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAEtC,gCAAgC;AAChC,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,gCAAgC;AAChC,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,yBAAyB;AACzB,SAAS,YAAY;IACnB,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;QACxE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,2CAA2C;AAC3C,SAAS,mBAAmB,CAC1B,KAAa,EACb,MAAc,EACd,UAAmB;IAEnB,OAAO,YAAY,CAAC,IAAI,CACtB;QACE,OAAO,EAAE,KAAK;QACd,KAAK;QACL,UAAU;KACX,EACD,EAAE,MAAM,EAAE,CACX,CAAC;AACJ,CAAC;AAED,6CAA6C;AAC7C,SAAS,qBAAqB,CAAI,IAAO;IACvC,OAAO,YAAY,CAAC,IAAI,CAAC;QACvB,OAAO,EAAE,IAAI;QACb,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,2BAA2B;IACxC,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IACpC,OAAO,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAA+B;IACnE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC;IAEzD;;;;;;;;;;OAUG;IACH,KAAK,UAAU,GAAG,CAAC,OAAoB;QACrC,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,eAAe,GAAG,oBAAoB;gBAC1C,CAAC,CAAC,MAAM,oBAAoB,CAAC,OAAO,CAAC;gBACrC,CAAC,CAAC,MAAM,2BAA2B,EAAE,CAAC;YAExC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;gBACzE,OAAO,mBAAmB,CAAC,wBAAwB,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC/E,CAAC;YAED,mBAAmB;YACnB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,gBAAgB,GAAG,YAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC5D,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;YAChE,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC;YAC3D,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAE9C,2BAA2B;YAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;gBACnE,OAAO,mBAAmB,CAAC,8BAA8B,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;YACtF,CAAC;YAED,yBAAyB;YACzB,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;gBAClE,OAAO,mBAAmB,CACxB,0CAA0C,uBAAuB,EAAE,EACnE,GAAG,EACH,sBAAsB,CACvB,CAAC;YACJ,CAAC;YAED,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;gBACxE,OAAO,mBAAmB,CACxB,4CAA4C,yBAAyB,EAAE,EACvE,GAAG,EACH,wBAAwB,CACzB,CAAC;YACJ,CAAC;YAED,2BAA2B;YAC3B,IAAI,KAAK,GAAG,aAAa,CAAC;YAC1B,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC/C,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;oBAC5C,OAAO,mBAAmB,CAAC,kCAAkC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;gBACvF,CAAC;gBACD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YAC5C,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE;gBACzD,eAAe;gBACf,gBAAgB;gBAChB,YAAY;gBACZ,cAAc;gBACd,MAAM;gBACN,SAAS;gBACT,KAAK;aACN,CAAC,CAAC;YAEH,oDAAoD;YACpD,MAAM,WAAW,GAAG,cAAc,EAAwB,CAAC;YAC3D,MAAM,WAAW,GAAG,iBAAiB,CAAoB,WAAW,EAAE,WAAW,CAAC,CAAC;YAEnF,IAAI,QAAQ,GAAwB,EAAE,CAAC;YAEvC,IAAI,CAAC;gBACH,oCAAoC;gBACpC,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;oBACjD,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAE7B,kCAAkC;oBAClC,IAAI,YAAY,EAAE,CAAC;wBACjB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;oBAC9D,CAAC;oBACD,IAAI,cAAc,EAAE,CAAC;wBACnB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;oBAClE,CAAC;oBAED,gCAAgC;oBAChC,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;4BAC1B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;wBACtD,CAAC;6BAAM,CAAC;4BACN,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;wBACtD,CAAC;oBACH,CAAC;oBAED,sBAAsB;oBACtB,iFAAiF;oBACjF,2CAA2C;oBAC3C,IAAI,SAAS,KAAK,OAAO,IAAI,MAAM,EAAE,CAAC;wBACpC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;oBAChD,CAAC;yBAAM,CAAC;wBACN,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;oBAC/C,CAAC;oBAED,OAAO,OAAO,CAAC;gBACjB,CAAC,CAAC,CAAC;gBAEH,4DAA4D;gBAC5D,gCAAgC;gBAChC,MAAM,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;oBACpD,IAAI,GAAG,CAAC,UAAU;wBAAE,OAAO,KAAK,CAAC;oBACjC,MAAM,aAAa,GACjB,GAAG,CAAC,cAAc,KAAK,eAAe,IAAI,GAAG,CAAC,gBAAgB,KAAK,gBAAgB,CAAC;oBACtF,MAAM,aAAa,GACjB,GAAG,CAAC,cAAc,KAAK,gBAAgB,IAAI,GAAG,CAAC,gBAAgB,KAAK,eAAe,CAAC;oBACtF,OAAO,aAAa,IAAI,aAAa,CAAC;gBACxC,CAAC,CAAC,CAAC;gBAEH,8BAA8B;gBAC9B,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAE7C,8DAA8D;gBAC9D,IAAI,SAAS,KAAK,OAAO,IAAI,MAAM,EAAE,CAAC;oBACpC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,CAAC;YACH,CAAC;YAAC,OAAO,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,OAAO,CAAC,CAAC;gBACnE,MAAM,OAAO,CAAC;YAChB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAEzE,uCAAuC;YACvC,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC;YAE3C,iCAAiC;YACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1F,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAExE,OAAO,YAAY,CAAC,IAAI,CAAC;gBACvB,OAAO,EAAE,IAAI;gBACb,QAAQ;gBACR,eAAe;gBACf,UAAU,EAAE;oBACV,KAAK;oBACL,QAAQ;oBACR,WAAW;oBACX,WAAW;iBACZ;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC/E,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;YAEvE,OAAO,mBAAmB,CAAC,0BAA0B,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,UAAU,IAAI,CAAC,OAAoB;QACtC,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,cAAc,GAAG,oBAAoB;gBACzC,CAAC,CAAC,MAAM,oBAAoB,CAAC,OAAO,CAAC;gBACrC,CAAC,CAAC,MAAM,2BAA2B,EAAE,CAAC;YAExC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;gBAC1E,OAAO,mBAAmB,CAAC,wBAAwB,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC/E,CAAC;YAED,qBAAqB;YACrB,MAAM,IAAI,GAAqB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;YAE9E,2BAA2B;YAC3B,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBACpE,OAAO,mBAAmB,CAAC,8BAA8B,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;YACtF,CAAC;YAED,wBAAwB;YACxB,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;gBACtD,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;gBAChE,OAAO,mBAAmB,CAAC,0BAA0B,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;YACjF,CAAC;YAED,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,EAAE,CAAC;YAE5C,IAAI,eAAe,KAAK,EAAE,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBAC9D,OAAO,mBAAmB,CACxB,iDAAiD,EACjD,GAAG,EACH,eAAe,CAChB,CAAC;YACJ,CAAC;YAED,IAAI,eAAe,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;gBAChD,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;gBACrF,OAAO,mBAAmB,CACxB,qCAAqC,kBAAkB,aAAa,EACpE,GAAG,EACH,kBAAkB,CACnB,CAAC;YACJ,CAAC;YAED,+BAA+B;YAC/B,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;gBAClE,OAAO,mBAAmB,CACxB,0CAA0C,uBAAuB,EAAE,EACnE,GAAG,EACH,sBAAsB,CACvB,CAAC;YACJ,CAAC;YAED,iCAAiC;YACjC,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;gBACxE,OAAO,mBAAmB,CACxB,4CAA4C,yBAAyB,EAAE,EACvE,GAAG,EACH,wBAAwB,CACzB,CAAC;YACJ,CAAC;YAED,oDAAoD;YACpD,MAAM,WAAW,GAAG,cAAc,EAAwB,CAAC;YAC3D,MAAM,WAAW,GAAG,iBAAiB,CAAoB,WAAW,EAAE,WAAW,CAAC,CAAC;YAEnF,qCAAqC;YACrC,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAErC,wBAAwB;YACxB,MAAM,cAAc,GAA+B;gBACjD,EAAE,EAAE,UAAU;gBACd,YAAY,EAAE,YAAY,IAAI,EAAE;gBAChC,cAAc,EAAE,cAAc,IAAI,MAAM;gBACxC,cAAc;gBACd,gBAAgB;gBAChB,YAAY,EAAE,eAAe;gBAC7B,cAAc,EAAE,IAAI;gBACpB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,GAAG;gBACf,UAAU,EAAE,GAAG;aAChB,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE;gBACvD,EAAE,EAAE,UAAU;gBACd,cAAc;gBACd,gBAAgB;gBAChB,YAAY,EAAE,YAAY,IAAI,EAAE;gBAChC,cAAc,EAAE,cAAc,IAAI,MAAM;gBACxC,cAAc,EAAE,eAAe,CAAC,MAAM;aACvC,CAAC,CAAC;YAEH,mBAAmB;YACnB,IAAI,CAAC;gBACH,MAAM,WAAW,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,OAAO,CAAC,CAAC;gBACpE,MAAM,OAAO,CAAC;YAChB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,uDAAuD,EAAE,UAAU,CAAC,CAAC;YAEjF,OAAO,YAAY,CAAC,IAAI,CAAC;gBACvB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP,EAAE,EAAE,UAAU;oBACd,cAAc;oBACd,gBAAgB;oBAChB,YAAY,EAAE,YAAY,IAAI,EAAE;oBAChC,cAAc,EAAE,cAAc,IAAI,MAAM;oBACxC,YAAY,EAAE,eAAe;oBAC7B,cAAc,EAAE,IAAI;oBACpB,OAAO,EAAE,IAAI;oBACb,UAAU,EAAE,IAAI;oBAChB,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,GAAG;iBAChB;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC/E,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;YAExE,OAAO,mBAAmB,CAAC,wBAAwB,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAA+B;IACrE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC;IAEzD;;;;;;;OAOG;IACH,KAAK,UAAU,KAAK,CAClB,OAAoB,EACpB,OAA6D;QAE7D,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,eAAe,GAAG,oBAAoB;gBAC1C,CAAC,CAAC,MAAM,oBAAoB,CAAC,OAAO,CAAC;gBACrC,CAAC,CAAC,MAAM,2BAA2B,EAAE,CAAC;YAExC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;gBACrF,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,EACnD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;YACJ,CAAC;YAED,0EAA0E;YAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACzF,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;YAE7B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;gBACzE,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,EACnD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;YACJ,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,+DAA+D,EAAE;gBAC3E,UAAU;gBACV,eAAe;aAChB,CAAC,CAAC;YAEH,oDAAoD;YACpD,MAAM,WAAW,GAAG,cAAc,EAAwB,CAAC;YAC3D,MAAM,WAAW,GAAG,iBAAiB,CAAoB,WAAW,EAAE,WAAW,CAAC,CAAC;YAEnF,+CAA+C;YAC/C,IAAI,OAAO,GAA6B,IAAI,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAC7C,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAC7C,CAAC;gBACF,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YAChC,CAAC;YAAC,OAAO,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,uEAAuE,EAAE,OAAO,CAAC,CAAC;gBAChG,MAAM,OAAO,CAAC;YAChB,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,yDAAyD,EAAE,UAAU,CAAC,CAAC;gBACrF,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAC9C,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;YACJ,CAAC;YAED,iFAAiF;YACjF,IAAI,OAAO,CAAC,gBAAgB,KAAK,eAAe,EAAE,CAAC;gBACjD,OAAO,CAAC,KAAK,CAAC,gEAAgE,EAAE;oBAC9E,UAAU;oBACV,eAAe;oBACf,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;iBAC3C,CAAC,CAAC;gBACH,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4DAA4D,EAAE,EACvF,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;YACJ,CAAC;YAED,+BAA+B;YAC/B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,4DAA4D,EAAE,UAAU,CAAC,CAAC;gBACtF,OAAO,YAAY,CAAC,IAAI,CAAC;oBACvB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP,GAAG,OAAO;wBACV,OAAO,EAAE,OAAO,CAAC,OAAO;qBACzB;iBACF,CAAC,CAAC;YACL,CAAC;YAED,+BAA+B;YAC/B,oEAAoE;YACpE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,2DAA2D;gBAC3D,MAAM,aAAa,GAAG,qBAAqB,EAAE,CAAC;gBAC9C,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,UAAU,CACjD,WAAW,EACX,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,oCAAoC;gBACxD,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,iBAAiB;iBACpD,CAAC;gBAEF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,IAAI,CAAC,+EAA+E,EAAE,UAAU,CAAC,CAAC;oBAC1G,wEAAwE;gBAC1E,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,2DAA2D,EAAE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC1G,CAAC;YACH,CAAC;YAAC,OAAO,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,uEAAuE,EAAE,OAAO,CAAC,CAAC;gBAChG,MAAM,OAAO,CAAC;YAChB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,2EAA2E,EAAE,UAAU,CAAC,CAAC;YAErG,OAAO,YAAY,CAAC,IAAI,CAAC;gBACvB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP,GAAG,OAAO;oBACV,OAAO,EAAE,GAAG;oBACZ,UAAU,EAAE,GAAG;iBAChB;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC/E,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;YAEnF,OAAO,YAAY,CAAC,IAAI,CACtB,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,EAC3D,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA+B;IACjE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC;IAEzD;;;;;;;;OAQG;IACH,KAAK,UAAU,MAAM,CACnB,OAAoB,EACpB,OAA6D;QAE7D,IAAI,CAAC;YACH,sBAAsB;YACtB,MAAM,eAAe,GAAG,oBAAoB;gBAC1C,CAAC,CAAC,MAAM,oBAAoB,CAAC,OAAO,CAAC;gBACrC,CAAC,CAAC,MAAM,2BAA2B,EAAE,CAAC;YAExC,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;gBACjF,OAAO,mBAAmB,CAAC,wBAAwB,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC/E,CAAC;YAED,0EAA0E;YAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACzF,MAAM,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC;YAE7B,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;gBACrE,OAAO,mBAAmB,CAAC,wBAAwB,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC;YAClF,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,oDAAoD,EAAE;gBAChE,UAAU;gBACV,eAAe;aAChB,CAAC,CAAC;YAEH,oDAAoD;YACpD,MAAM,WAAW,GAAG,cAAc,EAAwB,CAAC;YAC3D,MAAM,WAAW,GAAG,iBAAiB,CAAoB,WAAW,EAAE,WAAW,CAAC,CAAC;YAEnF,wCAAwC;YACxC,IAAI,OAAO,GAA6B,IAAI,CAAC;YAC7C,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAC7C,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAC7C,CAAC;gBACF,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;YAChC,CAAC;YAAC,OAAO,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,mEAAmE,EAAE,OAAO,CAAC,CAAC;gBAC5F,MAAM,OAAO,CAAC;YAChB,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,UAAU,CAAC,CAAC;gBACjF,OAAO,mBAAmB,CAAC,mBAAmB,EAAE,GAAG,EAAE,mBAAmB,CAAC,CAAC;YAC5E,CAAC;YAED,sFAAsF;YACtF,IAAI,OAAO,CAAC,cAAc,KAAK,eAAe,EAAE,CAAC;gBAC/C,OAAO,CAAC,KAAK,CAAC,0DAA0D,EAAE;oBACxE,UAAU;oBACV,eAAe;oBACf,cAAc,EAAE,OAAO,CAAC,cAAc;iBACvC,CAAC,CAAC;gBACH,OAAO,mBAAmB,CACxB,0DAA0D,EAC1D,GAAG,EACH,cAAc,CACf,CAAC;YACJ,CAAC;YAED,2BAA2B;YAC3B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,2DAA2D,EAAE,UAAU,CAAC,CAAC;gBACrF,OAAO,YAAY,CAAC,IAAI,CAAC;oBACvB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE;wBACP,GAAG,OAAO;wBACV,YAAY,EAAE,IAAI;qBACnB;iBACF,CAAC,CAAC;YACL,CAAC;YAED,+DAA+D;YAC/D,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,qBAAqB,EAAE,CAAC;gBAC9C,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,UAAU,CACjD,WAAW,EACX,EAAE,EAAE,EAAE,UAAU,EAAE,EAClB,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,CACzD,CAAC;gBAEF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,IAAI,CACV,2EAA2E,EAC3E,UAAU,CACX,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CACT,uDAAuD,EACvD,YAAY,CAAC,MAAM,EACnB,QAAQ,CACT,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,OAAO,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,mEAAmE,EAAE,OAAO,CAAC,CAAC;gBAC5F,MAAM,OAAO,CAAC;YAChB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,gEAAgE,EAAE,UAAU,CAAC,CAAC;YAE1F,OAAO,YAAY,CAAC,IAAI,CAAC;gBACvB,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP,GAAG,OAAO;oBACV,UAAU,EAAE,GAAG;oBACf,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,GAAG;iBAChB;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,aAAa,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC/E,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;YAE/E,OAAO,mBAAmB,CAAC,0BAA0B,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC"}
|
package/dist/api/types.d.ts
CHANGED
|
@@ -5,6 +5,31 @@
|
|
|
5
5
|
* These are used by consumers when setting up their API routes.
|
|
6
6
|
*/
|
|
7
7
|
import type { NextRequest } from 'next/server';
|
|
8
|
+
/**
|
|
9
|
+
* Standardized error response format for all API endpoints
|
|
10
|
+
*/
|
|
11
|
+
export interface ApiErrorResponse {
|
|
12
|
+
success: false;
|
|
13
|
+
error: string;
|
|
14
|
+
error_code?: string;
|
|
15
|
+
details?: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Standardized success response format for all API endpoints
|
|
19
|
+
*/
|
|
20
|
+
export interface ApiSuccessResponse<T = unknown> {
|
|
21
|
+
success: true;
|
|
22
|
+
data: T;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Pagination metadata included in list responses
|
|
26
|
+
*/
|
|
27
|
+
export interface PaginationMeta {
|
|
28
|
+
limit: number;
|
|
29
|
+
has_more: boolean;
|
|
30
|
+
next_cursor: string | null;
|
|
31
|
+
prev_cursor: string | null;
|
|
32
|
+
}
|
|
8
33
|
/**
|
|
9
34
|
* Options for creating message API handlers
|
|
10
35
|
*/
|
package/dist/api/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO;IAC7C,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,CAAC,CAAC;CACT;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAMD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;;OAYG;IACH,cAAc,EAAE,MAAM,OAAO,CAAC;IAE9B;;;;;;;;;;;;;;OAcG;IACH,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACzF;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hazo_chat.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"hazo_chat.d.ts","sourceRoot":"","sources":["../../../src/components/hazo_chat/hazo_chat.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EACV,aAAa,EAId,MAAM,sBAAsB,CAAC;AAkc9B;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAyD5C;yBAzDe,QAAQ"}
|