@djangocfg/ext-knowbase 1.0.0
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 +177 -0
- package/dist/chunk-GNRC54ON.js +4308 -0
- package/dist/hooks.cjs +6003 -0
- package/dist/hooks.d.cts +610 -0
- package/dist/hooks.d.ts +610 -0
- package/dist/hooks.js +1486 -0
- package/dist/index.cjs +4450 -0
- package/dist/index.d.cts +4398 -0
- package/dist/index.d.ts +4398 -0
- package/dist/index.js +1 -0
- package/package.json +81 -0
- package/src/api/generated/ext_knowbase/_utils/fetchers/ext_knowbase__knowbase.ts +2983 -0
- package/src/api/generated/ext_knowbase/_utils/fetchers/index.ts +28 -0
- package/src/api/generated/ext_knowbase/_utils/hooks/ext_knowbase__knowbase.ts +999 -0
- package/src/api/generated/ext_knowbase/_utils/hooks/index.ts +28 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItem.schema.ts +33 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemChunk.schema.ts +29 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemChunkDetail.schema.ts +30 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemChunkRequest.schema.ts +22 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemDetail.schema.ts +35 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveItemRequest.schema.ts +22 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveProcessingResult.schema.ts +26 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveSearchRequestRequest.schema.ts +25 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveSearchResult.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ArchiveStatistics.schema.ts +28 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChatHistory.schema.ts +22 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChatMessage.schema.ts +27 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChatQueryRequest.schema.ts +22 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChatResponse.schema.ts +26 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChatResponseRequest.schema.ts +26 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChatSession.schema.ts +29 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChatSessionCreateRequest.schema.ts +22 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChatSessionRequest.schema.ts +25 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChatSource.schema.ts +21 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChatSourceRequest.schema.ts +21 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/ChunkRevectorizationRequestRequest.schema.ts +20 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/Document.schema.ts +32 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchive.schema.ts +44 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchiveDetail.schema.ts +48 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchiveList.schema.ts +35 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/DocumentArchiveRequest.schema.ts +21 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/DocumentCategory.schema.ts +23 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/DocumentCategoryRequest.schema.ts +21 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/DocumentCreateRequest.schema.ts +22 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/DocumentProcessingStatus.schema.ts +23 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/DocumentRequest.schema.ts +22 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/DocumentStats.schema.ts +25 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedArchiveItemChunkList.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedArchiveItemList.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedArchiveSearchResultList.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedChatResponseList.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedChatSessionList.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedDocumentArchiveListList.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedDocumentList.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedPublicCategoryList.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PaginatedPublicDocumentListList.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PatchedArchiveItemChunkRequest.schema.ts +22 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PatchedArchiveItemRequest.schema.ts +22 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PatchedChatResponseRequest.schema.ts +26 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PatchedChatSessionRequest.schema.ts +25 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PatchedDocumentArchiveRequest.schema.ts +21 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PatchedDocumentRequest.schema.ts +22 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PublicCategory.schema.ts +21 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PublicDocument.schema.ts +25 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/PublicDocumentList.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/VectorizationResult.schema.ts +24 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/VectorizationStatistics.schema.ts +26 -0
- package/src/api/generated/ext_knowbase/_utils/schemas/index.ts +70 -0
- package/src/api/generated/ext_knowbase/api-instance.ts +131 -0
- package/src/api/generated/ext_knowbase/client.ts +301 -0
- package/src/api/generated/ext_knowbase/enums.ts +241 -0
- package/src/api/generated/ext_knowbase/errors.ts +116 -0
- package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/client.ts +666 -0
- package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/index.ts +2 -0
- package/src/api/generated/ext_knowbase/ext_knowbase__knowbase/models.ts +1120 -0
- package/src/api/generated/ext_knowbase/http.ts +103 -0
- package/src/api/generated/ext_knowbase/index.ts +273 -0
- package/src/api/generated/ext_knowbase/logger.ts +259 -0
- package/src/api/generated/ext_knowbase/retry.ts +175 -0
- package/src/api/generated/ext_knowbase/schema.json +5865 -0
- package/src/api/generated/ext_knowbase/storage.ts +161 -0
- package/src/api/generated/ext_knowbase/validation-events.ts +133 -0
- package/src/api/index.ts +9 -0
- package/src/components/Chat/ChatUIContext.tsx +110 -0
- package/src/components/Chat/ChatWidget.tsx +476 -0
- package/src/components/Chat/README.md +122 -0
- package/src/components/Chat/components/MessageInput.tsx +124 -0
- package/src/components/Chat/components/MessageList.tsx +169 -0
- package/src/components/Chat/components/SessionList.tsx +192 -0
- package/src/components/Chat/components/index.ts +9 -0
- package/src/components/Chat/hooks/index.ts +6 -0
- package/src/components/Chat/hooks/useInfiniteSessions.ts +81 -0
- package/src/components/Chat/index.tsx +45 -0
- package/src/components/Chat/types.ts +81 -0
- package/src/config.ts +20 -0
- package/src/contexts/knowbase/ChatContext.tsx +173 -0
- package/src/contexts/knowbase/DocumentsContext.tsx +306 -0
- package/src/contexts/knowbase/KnowbaseProvider.tsx +47 -0
- package/src/contexts/knowbase/SessionsContext.tsx +175 -0
- package/src/contexts/knowbase/index.ts +63 -0
- package/src/contexts/knowbase/types.ts +69 -0
- package/src/hooks/index.ts +28 -0
- package/src/index.ts +22 -0
- package/src/utils/logger.ts +10 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content classification
|
|
3
|
+
* * `document` - Document
|
|
4
|
+
* * `code` - Code
|
|
5
|
+
* * `image` - Image
|
|
6
|
+
* * `data` - Data
|
|
7
|
+
* * `archive` - Archive
|
|
8
|
+
* * `unknown` - Unknown
|
|
9
|
+
*/
|
|
10
|
+
export enum ArchiveItemContentType {
|
|
11
|
+
DOCUMENT = "document",
|
|
12
|
+
CODE = "code",
|
|
13
|
+
IMAGE = "image",
|
|
14
|
+
DATA = "data",
|
|
15
|
+
ARCHIVE = "archive",
|
|
16
|
+
UNKNOWN = "unknown",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Type of content in chunk
|
|
21
|
+
* * `text` - Text
|
|
22
|
+
* * `code` - Code
|
|
23
|
+
* * `heading` - Heading
|
|
24
|
+
* * `metadata` - Metadata
|
|
25
|
+
* * `table` - Table
|
|
26
|
+
* * `list` - List
|
|
27
|
+
*/
|
|
28
|
+
export enum ArchiveItemChunkChunkType {
|
|
29
|
+
TEXT = "text",
|
|
30
|
+
CODE = "code",
|
|
31
|
+
HEADING = "heading",
|
|
32
|
+
METADATA = "metadata",
|
|
33
|
+
TABLE = "table",
|
|
34
|
+
LIST = "list",
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Type of content in chunk
|
|
39
|
+
* * `text` - Text
|
|
40
|
+
* * `code` - Code
|
|
41
|
+
* * `heading` - Heading
|
|
42
|
+
* * `metadata` - Metadata
|
|
43
|
+
* * `table` - Table
|
|
44
|
+
* * `list` - List
|
|
45
|
+
*/
|
|
46
|
+
export enum ArchiveItemChunkDetailChunkType {
|
|
47
|
+
TEXT = "text",
|
|
48
|
+
CODE = "code",
|
|
49
|
+
HEADING = "heading",
|
|
50
|
+
METADATA = "metadata",
|
|
51
|
+
TABLE = "table",
|
|
52
|
+
LIST = "list",
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Type of content in chunk
|
|
57
|
+
* * `text` - Text
|
|
58
|
+
* * `code` - Code
|
|
59
|
+
* * `heading` - Heading
|
|
60
|
+
* * `metadata` - Metadata
|
|
61
|
+
* * `table` - Table
|
|
62
|
+
* * `list` - List
|
|
63
|
+
*/
|
|
64
|
+
export enum ArchiveItemChunkRequestChunkType {
|
|
65
|
+
TEXT = "text",
|
|
66
|
+
CODE = "code",
|
|
67
|
+
HEADING = "heading",
|
|
68
|
+
METADATA = "metadata",
|
|
69
|
+
TABLE = "table",
|
|
70
|
+
LIST = "list",
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Content classification
|
|
75
|
+
* * `document` - Document
|
|
76
|
+
* * `code` - Code
|
|
77
|
+
* * `image` - Image
|
|
78
|
+
* * `data` - Data
|
|
79
|
+
* * `archive` - Archive
|
|
80
|
+
* * `unknown` - Unknown
|
|
81
|
+
*/
|
|
82
|
+
export enum ArchiveItemDetailContentType {
|
|
83
|
+
DOCUMENT = "document",
|
|
84
|
+
CODE = "code",
|
|
85
|
+
IMAGE = "image",
|
|
86
|
+
DATA = "data",
|
|
87
|
+
ARCHIVE = "archive",
|
|
88
|
+
UNKNOWN = "unknown",
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* * `document` - Document
|
|
93
|
+
* * `code` - Code
|
|
94
|
+
* * `image` - Image
|
|
95
|
+
* * `data` - Data
|
|
96
|
+
* * `archive` - Archive
|
|
97
|
+
* * `unknown` - Unknown
|
|
98
|
+
*/
|
|
99
|
+
export enum ArchiveSearchRequestRequestContentTypesItems {
|
|
100
|
+
DOCUMENT = "document",
|
|
101
|
+
CODE = "code",
|
|
102
|
+
IMAGE = "image",
|
|
103
|
+
DATA = "data",
|
|
104
|
+
ARCHIVE = "archive",
|
|
105
|
+
UNKNOWN = "unknown",
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* * `text` - Text
|
|
110
|
+
* * `code` - Code
|
|
111
|
+
* * `heading` - Heading
|
|
112
|
+
* * `metadata` - Metadata
|
|
113
|
+
* * `table` - Table
|
|
114
|
+
* * `list` - List
|
|
115
|
+
*/
|
|
116
|
+
export enum ArchiveSearchRequestRequestChunkTypesItems {
|
|
117
|
+
TEXT = "text",
|
|
118
|
+
CODE = "code",
|
|
119
|
+
HEADING = "heading",
|
|
120
|
+
METADATA = "metadata",
|
|
121
|
+
TABLE = "table",
|
|
122
|
+
LIST = "list",
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Message sender role
|
|
127
|
+
* * `user` - User
|
|
128
|
+
* * `assistant` - Assistant
|
|
129
|
+
* * `system` - System
|
|
130
|
+
*/
|
|
131
|
+
export enum ChatMessageRole {
|
|
132
|
+
USER = "user",
|
|
133
|
+
ASSISTANT = "assistant",
|
|
134
|
+
SYSTEM = "system",
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Archive format
|
|
139
|
+
* * `zip` - ZIP
|
|
140
|
+
* * `tar` - TAR
|
|
141
|
+
* * `tar.gz` - TAR GZ
|
|
142
|
+
* * `tar.bz2` - TAR BZ2
|
|
143
|
+
*/
|
|
144
|
+
export enum DocumentArchiveArchiveType {
|
|
145
|
+
ZIP = "zip",
|
|
146
|
+
TAR = "tar",
|
|
147
|
+
TAR_DOT_GZ = "tar.gz",
|
|
148
|
+
TAR_DOT_BZ2 = "tar.bz2",
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* * `pending` - Pending
|
|
153
|
+
* * `processing` - Processing
|
|
154
|
+
* * `completed` - Completed
|
|
155
|
+
* * `failed` - Failed
|
|
156
|
+
* * `cancelled` - Cancelled
|
|
157
|
+
*/
|
|
158
|
+
export enum DocumentArchiveProcessingStatus {
|
|
159
|
+
PENDING = "pending",
|
|
160
|
+
PROCESSING = "processing",
|
|
161
|
+
COMPLETED = "completed",
|
|
162
|
+
FAILED = "failed",
|
|
163
|
+
CANCELLED = "cancelled",
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Archive format
|
|
168
|
+
* * `zip` - ZIP
|
|
169
|
+
* * `tar` - TAR
|
|
170
|
+
* * `tar.gz` - TAR GZ
|
|
171
|
+
* * `tar.bz2` - TAR BZ2
|
|
172
|
+
*/
|
|
173
|
+
export enum DocumentArchiveDetailArchiveType {
|
|
174
|
+
ZIP = "zip",
|
|
175
|
+
TAR = "tar",
|
|
176
|
+
TAR_DOT_GZ = "tar.gz",
|
|
177
|
+
TAR_DOT_BZ2 = "tar.bz2",
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* * `pending` - Pending
|
|
182
|
+
* * `processing` - Processing
|
|
183
|
+
* * `completed` - Completed
|
|
184
|
+
* * `failed` - Failed
|
|
185
|
+
* * `cancelled` - Cancelled
|
|
186
|
+
*/
|
|
187
|
+
export enum DocumentArchiveDetailProcessingStatus {
|
|
188
|
+
PENDING = "pending",
|
|
189
|
+
PROCESSING = "processing",
|
|
190
|
+
COMPLETED = "completed",
|
|
191
|
+
FAILED = "failed",
|
|
192
|
+
CANCELLED = "cancelled",
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Archive format
|
|
197
|
+
* * `zip` - ZIP
|
|
198
|
+
* * `tar` - TAR
|
|
199
|
+
* * `tar.gz` - TAR GZ
|
|
200
|
+
* * `tar.bz2` - TAR BZ2
|
|
201
|
+
*/
|
|
202
|
+
export enum DocumentArchiveListArchiveType {
|
|
203
|
+
ZIP = "zip",
|
|
204
|
+
TAR = "tar",
|
|
205
|
+
TAR_DOT_GZ = "tar.gz",
|
|
206
|
+
TAR_DOT_BZ2 = "tar.bz2",
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* * `pending` - Pending
|
|
211
|
+
* * `processing` - Processing
|
|
212
|
+
* * `completed` - Completed
|
|
213
|
+
* * `failed` - Failed
|
|
214
|
+
* * `cancelled` - Cancelled
|
|
215
|
+
*/
|
|
216
|
+
export enum DocumentArchiveListProcessingStatus {
|
|
217
|
+
PENDING = "pending",
|
|
218
|
+
PROCESSING = "processing",
|
|
219
|
+
COMPLETED = "completed",
|
|
220
|
+
FAILED = "failed",
|
|
221
|
+
CANCELLED = "cancelled",
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Type of content in chunk
|
|
226
|
+
* * `text` - Text
|
|
227
|
+
* * `code` - Code
|
|
228
|
+
* * `heading` - Heading
|
|
229
|
+
* * `metadata` - Metadata
|
|
230
|
+
* * `table` - Table
|
|
231
|
+
* * `list` - List
|
|
232
|
+
*/
|
|
233
|
+
export enum PatchedArchiveItemChunkRequestChunkType {
|
|
234
|
+
TEXT = "text",
|
|
235
|
+
CODE = "code",
|
|
236
|
+
HEADING = "heading",
|
|
237
|
+
METADATA = "metadata",
|
|
238
|
+
TABLE = "table",
|
|
239
|
+
LIST = "list",
|
|
240
|
+
}
|
|
241
|
+
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Error Classes
|
|
3
|
+
*
|
|
4
|
+
* Typed error classes with Django REST Framework support.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* HTTP API Error with DRF field-specific validation errors.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* try {
|
|
13
|
+
* await api.users.create(userData);
|
|
14
|
+
* } catch (error) {
|
|
15
|
+
* if (error instanceof APIError) {
|
|
16
|
+
* if (error.isValidationError) {
|
|
17
|
+
* console.log('Field errors:', error.fieldErrors);
|
|
18
|
+
* // { "email": ["Email already exists"], "username": ["Required"] }
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export class APIError extends Error {
|
|
25
|
+
constructor(
|
|
26
|
+
public statusCode: number,
|
|
27
|
+
public statusText: string,
|
|
28
|
+
public response: any,
|
|
29
|
+
public url: string,
|
|
30
|
+
message?: string
|
|
31
|
+
) {
|
|
32
|
+
super(message || `HTTP ${statusCode}: ${statusText}`);
|
|
33
|
+
this.name = 'APIError';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Get error details from response.
|
|
38
|
+
* DRF typically returns: { "detail": "Error message" } or { "field": ["error1", "error2"] }
|
|
39
|
+
*/
|
|
40
|
+
get details(): Record<string, any> | null {
|
|
41
|
+
if (typeof this.response === 'object' && this.response !== null) {
|
|
42
|
+
return this.response;
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Get field-specific validation errors from DRF.
|
|
49
|
+
* Returns: { "field_name": ["error1", "error2"], ... }
|
|
50
|
+
*/
|
|
51
|
+
get fieldErrors(): Record<string, string[]> | null {
|
|
52
|
+
const details = this.details;
|
|
53
|
+
if (!details) return null;
|
|
54
|
+
|
|
55
|
+
// DRF typically returns: { "field": ["error1", "error2"] }
|
|
56
|
+
const fieldErrors: Record<string, string[]> = {};
|
|
57
|
+
for (const [key, value] of Object.entries(details)) {
|
|
58
|
+
if (Array.isArray(value)) {
|
|
59
|
+
fieldErrors[key] = value;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return Object.keys(fieldErrors).length > 0 ? fieldErrors : null;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Get single error message from DRF.
|
|
68
|
+
* Checks for "detail", "message", or first field error.
|
|
69
|
+
*/
|
|
70
|
+
get errorMessage(): string {
|
|
71
|
+
const details = this.details;
|
|
72
|
+
if (!details) return this.message;
|
|
73
|
+
|
|
74
|
+
// Check for "detail" field (common in DRF)
|
|
75
|
+
if (details.detail) {
|
|
76
|
+
return Array.isArray(details.detail) ? details.detail.join(', ') : String(details.detail);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Check for "message" field
|
|
80
|
+
if (details.message) {
|
|
81
|
+
return String(details.message);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Return first field error
|
|
85
|
+
const fieldErrors = this.fieldErrors;
|
|
86
|
+
if (fieldErrors) {
|
|
87
|
+
const firstField = Object.keys(fieldErrors)[0];
|
|
88
|
+
if (firstField) {
|
|
89
|
+
return `${firstField}: ${fieldErrors[firstField]?.join(', ')}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return this.message;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Helper methods for common HTTP status codes
|
|
97
|
+
get isValidationError(): boolean { return this.statusCode === 400; }
|
|
98
|
+
get isAuthError(): boolean { return this.statusCode === 401; }
|
|
99
|
+
get isPermissionError(): boolean { return this.statusCode === 403; }
|
|
100
|
+
get isNotFoundError(): boolean { return this.statusCode === 404; }
|
|
101
|
+
get isServerError(): boolean { return this.statusCode >= 500 && this.statusCode < 600; }
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Network Error (connection failed, timeout, etc.)
|
|
106
|
+
*/
|
|
107
|
+
export class NetworkError extends Error {
|
|
108
|
+
constructor(
|
|
109
|
+
message: string,
|
|
110
|
+
public url: string,
|
|
111
|
+
public originalError?: Error
|
|
112
|
+
) {
|
|
113
|
+
super(message);
|
|
114
|
+
this.name = 'NetworkError';
|
|
115
|
+
}
|
|
116
|
+
}
|