Skip to content

Commit 081dc67

Browse files
fix(web): Fix ask link generation for anonymous access (#873)
1 parent 1fac503 commit 081dc67

File tree

3 files changed

+35
-22
lines changed

3 files changed

+35
-22
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212

1313
### Fixed
1414
- Fixed issue where anonymous access on a Sourcebot instance with a unlimited seat license and anonymous access enabled would result in a "not authenticated" message being displayed. [#866](https://github.com/sourcebot-dev/sourcebot/pull/866)
15+
- Fixed issue where session links generated for a `ask_codebase` mcp call would not be accessible to unauthed users. [#873](https://github.com/sourcebot-dev/sourcebot/pull/873)
1516

1617
## [4.10.28] - 2026-02-07
1718

packages/web/src/app/api/(server)/chat/blocking/route.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ export const POST = apiHandler(async (request: NextRequest) => {
100100
data: {
101101
orgId: org.id,
102102
createdById: user?.id,
103-
visibility: ChatVisibility.PRIVATE,
103+
visibility: user ? ChatVisibility.PRIVATE : ChatVisibility.PUBLIC,
104104
messages: [] as unknown as Prisma.InputJsonValue,
105105
},
106106
});
@@ -156,6 +156,18 @@ export const POST = apiHandler(async (request: NextRequest) => {
156156
onFinish: async ({ messages }) => {
157157
finalMessages = messages;
158158
},
159+
onError: (error) => {
160+
if (error instanceof ServiceErrorException) {
161+
throw error;
162+
}
163+
164+
const message = error instanceof Error ? error.message : String(error);
165+
throw new ServiceErrorException({
166+
statusCode: StatusCodes.INTERNAL_SERVER_ERROR,
167+
errorCode: ErrorCode.UNEXPECTED_ERROR,
168+
message,
169+
});
170+
},
159171
})
160172

161173
await Promise.all([

packages/web/src/app/api/(server)/chat/route.ts

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,24 @@ export const POST = apiHandler(async (req: NextRequest) => {
100100
messages
101101
});
102102
},
103+
onError: (error: unknown) => {
104+
logger.error(error);
105+
Sentry.captureException(error);
106+
107+
if (error == null) {
108+
return 'unknown error';
109+
}
110+
111+
if (typeof error === 'string') {
112+
return error;
113+
}
114+
115+
if (error instanceof Error) {
116+
return error.message;
117+
}
118+
119+
return JSON.stringify(error);
120+
}
103121
});
104122

105123
return createUIMessageStreamResponse({
@@ -134,6 +152,7 @@ interface CreateMessageStreamResponseProps {
134152
orgId: number;
135153
prisma: PrismaClient;
136154
onFinish: UIMessageStreamOnFinishCallback<SBChatMessage>;
155+
onError: (error: unknown) => string;
137156
}
138157

139158
export const createMessageStream = async ({
@@ -145,6 +164,7 @@ export const createMessageStream = async ({
145164
orgId,
146165
prisma,
147166
onFinish,
167+
onError,
148168
}: CreateMessageStreamResponseProps) => {
149169
const latestMessage = messages[messages.length - 1];
150170
const sources = latestMessage.parts
@@ -247,30 +267,10 @@ export const createMessageStream = async ({
247267
type: 'finish',
248268
});
249269
},
250-
onError: errorHandler,
270+
onError,
251271
originalMessages: messages,
252272
onFinish,
253273
});
254274

255275
return stream;
256276
};
257-
258-
const errorHandler = (error: unknown) => {
259-
logger.error(error);
260-
Sentry.captureException(error);
261-
262-
if (error == null) {
263-
return 'unknown error';
264-
}
265-
266-
if (typeof error === 'string') {
267-
return error;
268-
}
269-
270-
if (error instanceof Error) {
271-
return error.message;
272-
}
273-
274-
return JSON.stringify(error);
275-
}
276-

0 commit comments

Comments
 (0)