-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherror-map.ts
More file actions
68 lines (63 loc) · 2.34 KB
/
Copy patherror-map.ts
File metadata and controls
68 lines (63 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import type { DomainError } from '../domain/domain-error.js';
import { isDomainError } from '../domain/domain-error.js';
function getLegacyErrorCode(err: unknown): unknown {
return err && typeof err === 'object' && 'code' in err
? (err as { code: unknown }).code
: undefined;
}
function mapDomainError(err: DomainError): { status: number; body: Record<string, unknown> } {
const message = err.message;
switch (err._tag) {
case 'SESSION_NOT_FOUND':
return { status: 404, body: { error: err._tag, message } };
case 'SCENARIO_NOT_FOUND':
return { status: 404, body: { error: err._tag, message } };
case 'BAD_STEP':
case 'SESSION_COMPLETED':
return { status: 400, body: { error: err._tag, message } };
case 'EMPTY_SCENARIO':
return { status: 500, body: { error: err._tag, message } };
case 'MODEL_TIMEOUT':
return { status: 504, body: { error: err._tag, message } };
case 'MODEL_PROVIDER_ERROR':
return {
status: 502,
body: {
error: err._tag,
message,
status: err.status,
bodyPreview: err.bodyPreview,
},
};
case 'VERSION_CONFLICT':
return { status: 409, body: { error: err._tag, message } };
case 'INTERNAL_ERROR':
return { status: 500, body: { error: 'INTERNAL_ERROR', message } };
}
}
export function mapErrorToHttp(err: unknown): { status: number; body: Record<string, unknown> } {
if (isDomainError(err)) {
return mapDomainError(err);
}
const code = getLegacyErrorCode(err);
const message = err instanceof Error ? err.message : String(err);
switch (code) {
case 'SESSION_NOT_FOUND':
return { status: 404, body: { error: code, message } };
case 'SCENARIO_NOT_FOUND':
return { status: 404, body: { error: code, message } };
case 'BAD_STEP':
case 'SESSION_COMPLETED':
return { status: 400, body: { error: code, message } };
case 'EMPTY_SCENARIO':
return { status: 500, body: { error: code, message } };
case 'MODEL_TIMEOUT':
return { status: 504, body: { error: code, message } };
case 'MODEL_PROVIDER_ERROR':
return { status: 502, body: { error: code, message } };
case 'VERSION_CONFLICT':
return { status: 409, body: { error: code, message } };
default:
return { status: 500, body: { error: 'INTERNAL_ERROR', message } };
}
}