(
projectId: string,
payload: {
id?: string;
role: Message['role'];
messageType: Message['messageType'];
content: string;
metadata?: Record<string, unknown> | null;
},
requestId?: string,
overrides?: Partial<RealtimeMessage>
)
| 292 | } |
| 293 | |
| 294 | async function persistMessage( |
| 295 | projectId: string, |
| 296 | payload: { |
| 297 | id?: string; |
| 298 | role: Message['role']; |
| 299 | messageType: Message['messageType']; |
| 300 | content: string; |
| 301 | metadata?: Record<string, unknown> | null; |
| 302 | }, |
| 303 | requestId?: string, |
| 304 | overrides?: Partial<RealtimeMessage> |
| 305 | ) { |
| 306 | try { |
| 307 | const saved = await createMessage({ |
| 308 | ...(payload.id ? { id: payload.id } : {}), |
| 309 | projectId, |
| 310 | role: payload.role, |
| 311 | messageType: payload.messageType, |
| 312 | content: payload.content, |
| 313 | metadata: payload.metadata ?? null, |
| 314 | cliSource: 'codex', |
| 315 | requestId, |
| 316 | }); |
| 317 | |
| 318 | const serializedOverrides = { |
| 319 | ...(requestId ? { requestId } : {}), |
| 320 | ...(overrides ?? {}), |
| 321 | }; |
| 322 | |
| 323 | streamManager.publish(projectId, { |
| 324 | type: 'message', |
| 325 | data: serializeMessage(saved, serializedOverrides), |
| 326 | }); |
| 327 | } catch (error) { |
| 328 | console.error('[CodexService] Failed to persist message. Falling back to realtime emit:', error); |
| 329 | const fallback = createRealtimeMessage({ |
| 330 | id: payload.id ?? randomUUID(), |
| 331 | projectId, |
| 332 | role: payload.role, |
| 333 | messageType: payload.messageType, |
| 334 | content: payload.content, |
| 335 | metadata: payload.metadata ?? null, |
| 336 | cliSource: 'codex', |
| 337 | requestId, |
| 338 | ...(overrides ?? {}), |
| 339 | }); |
| 340 | streamManager.publish(projectId, { |
| 341 | type: 'message', |
| 342 | data: fallback, |
| 343 | }); |
| 344 | } |
| 345 | } |
| 346 | |
| 347 | const encodeHash = (value: string): string => |
| 348 | Buffer.from(value, 'utf-8').toString('base64'); |
no test coverage detected