chore: test deploy snapshot
This commit is contained in:
@@ -50,6 +50,7 @@ import {
|
||||
hasPendingAttentionVerificationRequest,
|
||||
} from '../services/chat-room-service.js';
|
||||
import {
|
||||
archiveChatShareTokenRoomMap,
|
||||
ensureDefaultChatShareTokenRoomMap,
|
||||
getChatShareTokenRoomMap,
|
||||
resolveChatShareTokenRoomSessionIds,
|
||||
@@ -1142,12 +1143,13 @@ async function buildChatShareSnapshot(
|
||||
}
|
||||
|
||||
const childRequestIdsByParentRequestId = buildChildRequestIdsByParentRequestId(requests);
|
||||
const isManagedShareRoomPlaceholder =
|
||||
tokenPayload.kind === 'request-bundle' && normalizedSessionId.startsWith(MANAGED_CHAT_SHARE_SESSION_PREFIX) && !targetRequestFromStore;
|
||||
const isManagedShareRoomSession =
|
||||
tokenPayload.kind === 'request-bundle' && normalizedSessionId.startsWith(MANAGED_CHAT_SHARE_SESSION_PREFIX);
|
||||
const isManagedShareRoomPlaceholder = isManagedShareRoomSession && !targetRequestFromStore;
|
||||
const rootRequestId = isManagedShareRoomPlaceholder
|
||||
? targetRequestId
|
||||
: resolveShareRootRequestId(targetRequestId, requestMap, tokenPayload.kind);
|
||||
const scopeRequestIds = isManagedShareRoomPlaceholder
|
||||
const scopeRequestIds = isManagedShareRoomSession
|
||||
? requests.map((request) => request.requestId.trim()).filter(Boolean)
|
||||
: collectShareScopeRequestIds(rootRequestId, childRequestIdsByParentRequestId);
|
||||
const scopeRequestIdSet = new Set(scopeRequestIds);
|
||||
@@ -2524,6 +2526,101 @@ export async function registerChatRoutes(app: FastifyInstance) {
|
||||
};
|
||||
});
|
||||
|
||||
app.delete(`${CHAT_SHARE_ROUTE_PREFIX}/:token/rooms/:sessionId`, async (request, reply) => {
|
||||
const params = z.object({
|
||||
token: z.string().trim().min(1).max(16000),
|
||||
sessionId: z.string().trim().min(1).max(120),
|
||||
}).parse(request.params ?? {});
|
||||
const managedContext = await resolveManagedChatShareContext(params.token);
|
||||
const tokenPayload = resolveChatSharePayloadFromManagedResource(managedContext.managedResource) ?? parseChatShareToken(params.token);
|
||||
|
||||
if (!tokenPayload) {
|
||||
return reply.code(404).send({
|
||||
message: '공유 링크가 유효하지 않습니다.',
|
||||
});
|
||||
}
|
||||
|
||||
if (tokenPayload.kind === 'prompt') {
|
||||
return reply.code(400).send({
|
||||
message: 'prompt 공유 링크에서는 채팅방을 삭제할 수 없습니다.',
|
||||
});
|
||||
}
|
||||
|
||||
const unavailableMessage = resolveManagedShareUnavailableMessage(managedContext.managedResource);
|
||||
|
||||
if (unavailableMessage) {
|
||||
return reply.code(403).send({
|
||||
message: unavailableMessage,
|
||||
});
|
||||
}
|
||||
|
||||
if (!(await ensureManagedShareAccessPin(request, reply, managedContext.sharePath))) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!managedContext.managedResource || managedContext.managedResource.token.resourceType !== 'chat-share') {
|
||||
return reply.code(404).send({
|
||||
message: '공유 채팅방 정보를 찾을 수 없습니다.',
|
||||
});
|
||||
}
|
||||
|
||||
if (!managedContext.managedResource.token.permissions.includes('manage')) {
|
||||
return reply.code(403).send({
|
||||
message: '이 공유 링크에는 채팅방을 삭제할 권한이 없습니다.',
|
||||
});
|
||||
}
|
||||
|
||||
if (!hasManagedShareAllowedApp(managedContext.managedResource, 'chat-room-settings')) {
|
||||
return reply.code(403).send({
|
||||
message: '이 공유 링크에는 채팅방 설정 앱 권한이 없습니다.',
|
||||
});
|
||||
}
|
||||
|
||||
const resolvedRoomContext = await resolveActiveManagedShareRoom({
|
||||
managedResource: managedContext.managedResource,
|
||||
tokenPayload,
|
||||
requestedSessionId: params.sessionId,
|
||||
});
|
||||
|
||||
if (!resolvedRoomContext.requestedRoomMatched || !resolvedRoomContext.activeRoom) {
|
||||
return reply.code(403).send({
|
||||
message: '이 공유 링크에서 접근할 수 없는 채팅방입니다.',
|
||||
});
|
||||
}
|
||||
|
||||
if (resolvedRoomContext.rooms.length <= 1) {
|
||||
return reply.code(400).send({
|
||||
message: '마지막 채팅방은 삭제할 수 없습니다.',
|
||||
});
|
||||
}
|
||||
|
||||
getActiveChatService()?.forgetSession(params.sessionId);
|
||||
chatRuntimeService.clearSession(params.sessionId);
|
||||
const deleted = await deleteChatConversation(params.sessionId);
|
||||
const archived = await archiveChatShareTokenRoomMap(managedContext.managedResource.token.id, params.sessionId);
|
||||
|
||||
if (!deleted || !archived.archived) {
|
||||
return reply.code(404).send({
|
||||
message: '삭제할 채팅방을 찾을 수 없습니다.',
|
||||
});
|
||||
}
|
||||
|
||||
if (managedContext.managedResource) {
|
||||
await recordSharedResourceTokenUsage(managedContext.managedResource.token.id, {
|
||||
actorLabel: 'share-manager',
|
||||
summary: '공유 채팅방을 삭제했습니다.',
|
||||
detail: params.sessionId,
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
ok: true,
|
||||
deleted: true,
|
||||
deletedSessionId: params.sessionId,
|
||||
nextRoomSessionId: archived.nextDefaultRoom?.sessionId ?? null,
|
||||
};
|
||||
});
|
||||
|
||||
app.post(`${CHAT_SHARE_ROUTE_PREFIX}/:token/messages`, async (request, reply) => {
|
||||
const params = z.object({
|
||||
token: z.string().trim().min(1).max(16000),
|
||||
|
||||
Reference in New Issue
Block a user