@compresr/sdk 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 +263 -0
- package/dist/cjs/clients/compression.d.ts +137 -0
- package/dist/cjs/clients/compression.d.ts.map +1 -0
- package/dist/cjs/clients/compression.js +220 -0
- package/dist/cjs/clients/compression.js.map +1 -0
- package/dist/cjs/clients/index.d.ts +2 -0
- package/dist/cjs/clients/index.d.ts.map +1 -0
- package/dist/cjs/clients/index.js +6 -0
- package/dist/cjs/clients/index.js.map +1 -0
- package/dist/cjs/config/constants.d.ts +61 -0
- package/dist/cjs/config/constants.d.ts.map +1 -0
- package/dist/cjs/config/constants.js +77 -0
- package/dist/cjs/config/constants.js.map +1 -0
- package/dist/cjs/config/endpoints.d.ts +18 -0
- package/dist/cjs/config/endpoints.d.ts.map +1 -0
- package/dist/cjs/config/endpoints.js +25 -0
- package/dist/cjs/config/endpoints.js.map +1 -0
- package/dist/cjs/config/index.d.ts +3 -0
- package/dist/cjs/config/index.d.ts.map +1 -0
- package/dist/cjs/config/index.js +20 -0
- package/dist/cjs/config/index.js.map +1 -0
- package/dist/cjs/errors/exceptions.d.ts +72 -0
- package/dist/cjs/errors/exceptions.d.ts.map +1 -0
- package/dist/cjs/errors/exceptions.js +107 -0
- package/dist/cjs/errors/exceptions.js.map +1 -0
- package/dist/cjs/errors/index.d.ts +2 -0
- package/dist/cjs/errors/index.d.ts.map +1 -0
- package/dist/cjs/errors/index.js +13 -0
- package/dist/cjs/errors/index.js.map +1 -0
- package/dist/cjs/http/client.d.ts +53 -0
- package/dist/cjs/http/client.d.ts.map +1 -0
- package/dist/cjs/http/client.js +268 -0
- package/dist/cjs/http/client.js.map +1 -0
- package/dist/cjs/http/errors.d.ts +19 -0
- package/dist/cjs/http/errors.d.ts.map +1 -0
- package/dist/cjs/http/errors.js +87 -0
- package/dist/cjs/http/errors.js.map +1 -0
- package/dist/cjs/http/index.d.ts +3 -0
- package/dist/cjs/http/index.d.ts.map +1 -0
- package/dist/cjs/http/index.js +8 -0
- package/dist/cjs/http/index.js.map +1 -0
- package/dist/cjs/index.d.ts +33 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +49 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/schemas/common.d.ts +47 -0
- package/dist/cjs/schemas/common.d.ts.map +1 -0
- package/dist/cjs/schemas/common.js +29 -0
- package/dist/cjs/schemas/common.js.map +1 -0
- package/dist/cjs/schemas/compression.d.ts +378 -0
- package/dist/cjs/schemas/compression.d.ts.map +1 -0
- package/dist/cjs/schemas/compression.js +99 -0
- package/dist/cjs/schemas/compression.js.map +1 -0
- package/dist/cjs/schemas/index.d.ts +7 -0
- package/dist/cjs/schemas/index.d.ts.map +1 -0
- package/dist/cjs/schemas/index.js +30 -0
- package/dist/cjs/schemas/index.js.map +1 -0
- package/dist/cjs/schemas/search.d.ts +184 -0
- package/dist/cjs/schemas/search.d.ts.map +1 -0
- package/dist/cjs/schemas/search.js +75 -0
- package/dist/cjs/schemas/search.js.map +1 -0
- package/dist/esm/clients/compression.d.ts +137 -0
- package/dist/esm/clients/compression.d.ts.map +1 -0
- package/dist/esm/clients/compression.js +216 -0
- package/dist/esm/clients/compression.js.map +1 -0
- package/dist/esm/clients/index.d.ts +2 -0
- package/dist/esm/clients/index.d.ts.map +1 -0
- package/dist/esm/clients/index.js +2 -0
- package/dist/esm/clients/index.js.map +1 -0
- package/dist/esm/config/constants.d.ts +61 -0
- package/dist/esm/config/constants.d.ts.map +1 -0
- package/dist/esm/config/constants.js +74 -0
- package/dist/esm/config/constants.js.map +1 -0
- package/dist/esm/config/endpoints.d.ts +18 -0
- package/dist/esm/config/endpoints.d.ts.map +1 -0
- package/dist/esm/config/endpoints.js +22 -0
- package/dist/esm/config/endpoints.js.map +1 -0
- package/dist/esm/config/index.d.ts +3 -0
- package/dist/esm/config/index.d.ts.map +1 -0
- package/dist/esm/config/index.js +3 -0
- package/dist/esm/config/index.js.map +1 -0
- package/dist/esm/errors/exceptions.d.ts +72 -0
- package/dist/esm/errors/exceptions.d.ts.map +1 -0
- package/dist/esm/errors/exceptions.js +96 -0
- package/dist/esm/errors/exceptions.js.map +1 -0
- package/dist/esm/errors/index.d.ts +2 -0
- package/dist/esm/errors/index.d.ts.map +1 -0
- package/dist/esm/errors/index.js +2 -0
- package/dist/esm/errors/index.js.map +1 -0
- package/dist/esm/http/client.d.ts +53 -0
- package/dist/esm/http/client.d.ts.map +1 -0
- package/dist/esm/http/client.js +264 -0
- package/dist/esm/http/client.js.map +1 -0
- package/dist/esm/http/errors.d.ts +19 -0
- package/dist/esm/http/errors.d.ts.map +1 -0
- package/dist/esm/http/errors.js +84 -0
- package/dist/esm/http/errors.js.map +1 -0
- package/dist/esm/http/index.d.ts +3 -0
- package/dist/esm/http/index.d.ts.map +1 -0
- package/dist/esm/http/index.js +3 -0
- package/dist/esm/http/index.js.map +1 -0
- package/dist/esm/index.d.ts +33 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +36 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/schemas/common.d.ts +47 -0
- package/dist/esm/schemas/common.d.ts.map +1 -0
- package/dist/esm/schemas/common.js +26 -0
- package/dist/esm/schemas/common.js.map +1 -0
- package/dist/esm/schemas/compression.d.ts +378 -0
- package/dist/esm/schemas/compression.d.ts.map +1 -0
- package/dist/esm/schemas/compression.js +96 -0
- package/dist/esm/schemas/compression.js.map +1 -0
- package/dist/esm/schemas/index.d.ts +7 -0
- package/dist/esm/schemas/index.d.ts.map +1 -0
- package/dist/esm/schemas/index.js +10 -0
- package/dist/esm/schemas/index.js.map +1 -0
- package/dist/esm/schemas/search.d.ts +184 -0
- package/dist/esm/schemas/search.d.ts.map +1 -0
- package/dist/esm/schemas/search.js +72 -0
- package/dist/esm/schemas/search.js.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base HTTP client for Compresr API
|
|
3
|
+
*
|
|
4
|
+
* Uses native fetch API for Node.js 18+ and browser compatibility.
|
|
5
|
+
*/
|
|
6
|
+
import { API_KEY_PREFIX, DEFAULT_BASE_URL, DEFAULT_TIMEOUT, STREAM_TIMEOUT, HEADERS, } from '../config/constants.js';
|
|
7
|
+
import { AuthenticationError, CompresrError, ConnectionError, } from '../errors/index.js';
|
|
8
|
+
import { handleHttpError } from './errors.js';
|
|
9
|
+
const SDK_VERSION = '1.0.0';
|
|
10
|
+
/**
|
|
11
|
+
* Internal HTTP client for all Compresr API requests
|
|
12
|
+
*/
|
|
13
|
+
export class HttpClient {
|
|
14
|
+
apiKey;
|
|
15
|
+
baseUrl;
|
|
16
|
+
timeout;
|
|
17
|
+
constructor(options) {
|
|
18
|
+
// Validate API key
|
|
19
|
+
if (!options.apiKey) {
|
|
20
|
+
throw new AuthenticationError('API key is required');
|
|
21
|
+
}
|
|
22
|
+
if (!options.apiKey.startsWith(API_KEY_PREFIX)) {
|
|
23
|
+
throw new AuthenticationError(`Invalid API key format. Keys must start with '${API_KEY_PREFIX}'`);
|
|
24
|
+
}
|
|
25
|
+
this.apiKey = options.apiKey;
|
|
26
|
+
this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;
|
|
27
|
+
this.timeout = options.timeout ?? DEFAULT_TIMEOUT;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get default headers for requests
|
|
31
|
+
*/
|
|
32
|
+
get headers() {
|
|
33
|
+
return {
|
|
34
|
+
[HEADERS.API_KEY]: this.apiKey,
|
|
35
|
+
[HEADERS.CONTENT_TYPE]: 'application/json',
|
|
36
|
+
[HEADERS.ACCEPT]: 'application/json',
|
|
37
|
+
[HEADERS.USER_AGENT]: `compresr-typescript-sdk/${SDK_VERSION}`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Build full URL from endpoint
|
|
42
|
+
*/
|
|
43
|
+
url(endpoint) {
|
|
44
|
+
return `${this.baseUrl}${endpoint}`;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Make a POST request
|
|
48
|
+
*/
|
|
49
|
+
async post(endpoint, data) {
|
|
50
|
+
const controller = new AbortController();
|
|
51
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
52
|
+
try {
|
|
53
|
+
const response = await fetch(this.url(endpoint), {
|
|
54
|
+
method: 'POST',
|
|
55
|
+
headers: this.headers,
|
|
56
|
+
body: JSON.stringify(data),
|
|
57
|
+
signal: controller.signal,
|
|
58
|
+
});
|
|
59
|
+
const body = (await response.json());
|
|
60
|
+
if (!response.ok) {
|
|
61
|
+
handleHttpError(response.status, body);
|
|
62
|
+
}
|
|
63
|
+
return body;
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (error instanceof CompresrError) {
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
if (error instanceof Error) {
|
|
70
|
+
if (error.name === 'AbortError') {
|
|
71
|
+
throw new ConnectionError('Request timed out');
|
|
72
|
+
}
|
|
73
|
+
throw new ConnectionError(`Connection failed: ${error.message}`);
|
|
74
|
+
}
|
|
75
|
+
throw new CompresrError(`Request failed: ${String(error)}`);
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
clearTimeout(timeoutId);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Make a GET request
|
|
83
|
+
*/
|
|
84
|
+
async get(endpoint) {
|
|
85
|
+
const controller = new AbortController();
|
|
86
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
87
|
+
try {
|
|
88
|
+
const response = await fetch(this.url(endpoint), {
|
|
89
|
+
method: 'GET',
|
|
90
|
+
headers: this.headers,
|
|
91
|
+
signal: controller.signal,
|
|
92
|
+
});
|
|
93
|
+
const body = (await response.json());
|
|
94
|
+
if (!response.ok) {
|
|
95
|
+
handleHttpError(response.status, body);
|
|
96
|
+
}
|
|
97
|
+
return body;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
if (error instanceof CompresrError) {
|
|
101
|
+
throw error;
|
|
102
|
+
}
|
|
103
|
+
if (error instanceof Error) {
|
|
104
|
+
if (error.name === 'AbortError') {
|
|
105
|
+
throw new ConnectionError('Request timed out');
|
|
106
|
+
}
|
|
107
|
+
throw new ConnectionError(`Connection failed: ${error.message}`);
|
|
108
|
+
}
|
|
109
|
+
throw new CompresrError(`Request failed: ${String(error)}`);
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
clearTimeout(timeoutId);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Make a DELETE request
|
|
117
|
+
*/
|
|
118
|
+
async delete(endpoint) {
|
|
119
|
+
const controller = new AbortController();
|
|
120
|
+
const timeoutId = setTimeout(() => controller.abort(), this.timeout);
|
|
121
|
+
try {
|
|
122
|
+
const response = await fetch(this.url(endpoint), {
|
|
123
|
+
method: 'DELETE',
|
|
124
|
+
headers: this.headers,
|
|
125
|
+
signal: controller.signal,
|
|
126
|
+
});
|
|
127
|
+
const body = (await response.json());
|
|
128
|
+
if (!response.ok) {
|
|
129
|
+
handleHttpError(response.status, body);
|
|
130
|
+
}
|
|
131
|
+
return body;
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
if (error instanceof CompresrError) {
|
|
135
|
+
throw error;
|
|
136
|
+
}
|
|
137
|
+
if (error instanceof Error) {
|
|
138
|
+
if (error.name === 'AbortError') {
|
|
139
|
+
throw new ConnectionError('Request timed out');
|
|
140
|
+
}
|
|
141
|
+
throw new ConnectionError(`Connection failed: ${error.message}`);
|
|
142
|
+
}
|
|
143
|
+
throw new CompresrError(`Request failed: ${String(error)}`);
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
clearTimeout(timeoutId);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Stream response from SSE endpoint
|
|
151
|
+
*/
|
|
152
|
+
async *stream(endpoint, data) {
|
|
153
|
+
const controller = new AbortController();
|
|
154
|
+
const timeoutId = setTimeout(() => controller.abort(), STREAM_TIMEOUT);
|
|
155
|
+
try {
|
|
156
|
+
const response = await fetch(this.url(endpoint), {
|
|
157
|
+
method: 'POST',
|
|
158
|
+
headers: {
|
|
159
|
+
...this.headers,
|
|
160
|
+
[HEADERS.ACCEPT]: 'text/event-stream',
|
|
161
|
+
},
|
|
162
|
+
body: JSON.stringify(data),
|
|
163
|
+
signal: controller.signal,
|
|
164
|
+
});
|
|
165
|
+
if (!response.ok) {
|
|
166
|
+
const body = (await response.json());
|
|
167
|
+
handleHttpError(response.status, body);
|
|
168
|
+
}
|
|
169
|
+
if (!response.body) {
|
|
170
|
+
throw new CompresrError('No response body for stream');
|
|
171
|
+
}
|
|
172
|
+
const reader = response.body.getReader();
|
|
173
|
+
const decoder = new TextDecoder();
|
|
174
|
+
let buffer = '';
|
|
175
|
+
while (true) {
|
|
176
|
+
const { done, value } = await reader.read();
|
|
177
|
+
if (done)
|
|
178
|
+
break;
|
|
179
|
+
buffer += decoder.decode(value, { stream: true });
|
|
180
|
+
const lines = buffer.split('\n');
|
|
181
|
+
buffer = lines.pop() ?? '';
|
|
182
|
+
for (const line of lines) {
|
|
183
|
+
const trimmed = line.trim();
|
|
184
|
+
if (trimmed.startsWith('data: ')) {
|
|
185
|
+
const chunk = trimmed.slice(6);
|
|
186
|
+
if (chunk === '[DONE]') {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
try {
|
|
190
|
+
const parsed = JSON.parse(chunk);
|
|
191
|
+
if (parsed.content) {
|
|
192
|
+
yield parsed.content;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// Yield raw content if not JSON
|
|
197
|
+
if (chunk) {
|
|
198
|
+
yield chunk;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
if (error instanceof CompresrError) {
|
|
207
|
+
throw error;
|
|
208
|
+
}
|
|
209
|
+
if (error instanceof Error) {
|
|
210
|
+
if (error.name === 'AbortError') {
|
|
211
|
+
throw new ConnectionError('Stream timed out');
|
|
212
|
+
}
|
|
213
|
+
throw new ConnectionError(`Stream failed: ${error.message}`);
|
|
214
|
+
}
|
|
215
|
+
throw new CompresrError(`Stream failed: ${String(error)}`);
|
|
216
|
+
}
|
|
217
|
+
finally {
|
|
218
|
+
clearTimeout(timeoutId);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Upload multipart form data (for index creation)
|
|
223
|
+
*/
|
|
224
|
+
async postMultipart(endpoint, files) {
|
|
225
|
+
const controller = new AbortController();
|
|
226
|
+
const timeoutId = setTimeout(() => controller.abort(), STREAM_TIMEOUT);
|
|
227
|
+
try {
|
|
228
|
+
const formData = new FormData();
|
|
229
|
+
for (const [key, file] of Object.entries(files)) {
|
|
230
|
+
formData.append(key, file.data, file.filename);
|
|
231
|
+
}
|
|
232
|
+
const response = await fetch(this.url(endpoint), {
|
|
233
|
+
method: 'POST',
|
|
234
|
+
headers: {
|
|
235
|
+
[HEADERS.API_KEY]: this.apiKey,
|
|
236
|
+
[HEADERS.USER_AGENT]: `compresr-typescript-sdk/${SDK_VERSION}`,
|
|
237
|
+
},
|
|
238
|
+
body: formData,
|
|
239
|
+
signal: controller.signal,
|
|
240
|
+
});
|
|
241
|
+
const body = (await response.json());
|
|
242
|
+
if (!response.ok) {
|
|
243
|
+
handleHttpError(response.status, body);
|
|
244
|
+
}
|
|
245
|
+
return body;
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
if (error instanceof CompresrError) {
|
|
249
|
+
throw error;
|
|
250
|
+
}
|
|
251
|
+
if (error instanceof Error) {
|
|
252
|
+
if (error.name === 'AbortError') {
|
|
253
|
+
throw new ConnectionError('Request timed out');
|
|
254
|
+
}
|
|
255
|
+
throw new ConnectionError(`Connection failed: ${error.message}`);
|
|
256
|
+
}
|
|
257
|
+
throw new CompresrError(`Request failed: ${String(error)}`);
|
|
258
|
+
}
|
|
259
|
+
finally {
|
|
260
|
+
clearTimeout(timeoutId);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/http/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error body from API response
|
|
3
|
+
*/
|
|
4
|
+
export interface ErrorBody {
|
|
5
|
+
error?: string;
|
|
6
|
+
detail?: string | Array<{
|
|
7
|
+
loc?: string[];
|
|
8
|
+
msg?: string;
|
|
9
|
+
}>;
|
|
10
|
+
message?: string;
|
|
11
|
+
field?: string;
|
|
12
|
+
retry_after?: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Map HTTP status code and body to appropriate error class
|
|
16
|
+
* @throws Always throws an appropriate CompresrError subclass
|
|
17
|
+
*/
|
|
18
|
+
export declare function handleHttpError(status: number, body: ErrorBody): never;
|
|
19
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/http/errors.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAyDD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,KAAK,CAgDtE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP error handling utilities
|
|
3
|
+
*/
|
|
4
|
+
import { STATUS_CODES } from '../config/constants.js';
|
|
5
|
+
import { AuthenticationError, CompresrError, NotFoundError, RateLimitError, ScopeError, ServerError, ValidationError, } from '../errors/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Convert ErrorBody to ErrorResponseData (normalizes detail to string)
|
|
8
|
+
*/
|
|
9
|
+
function normalizeErrorBody(body) {
|
|
10
|
+
let detail;
|
|
11
|
+
if (body.detail) {
|
|
12
|
+
if (Array.isArray(body.detail)) {
|
|
13
|
+
detail = body.detail
|
|
14
|
+
.map((e) => {
|
|
15
|
+
const field = e.loc?.join('.') ?? '';
|
|
16
|
+
const msg = e.msg ?? '';
|
|
17
|
+
return field ? `${field}: ${msg}` : msg;
|
|
18
|
+
})
|
|
19
|
+
.join('; ') || 'Validation error';
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
detail = body.detail;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
error: body.error,
|
|
27
|
+
detail,
|
|
28
|
+
field: body.field,
|
|
29
|
+
retry_after: body.retry_after,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Extract user-friendly error message from API response
|
|
34
|
+
*/
|
|
35
|
+
function extractErrorMessage(body) {
|
|
36
|
+
if (body.error) {
|
|
37
|
+
return body.error;
|
|
38
|
+
}
|
|
39
|
+
if (body.detail) {
|
|
40
|
+
if (Array.isArray(body.detail)) {
|
|
41
|
+
const messages = body.detail.map((e) => {
|
|
42
|
+
const field = e.loc?.join('.') ?? '';
|
|
43
|
+
const msg = e.msg ?? '';
|
|
44
|
+
return field ? `${field}: ${msg}` : msg;
|
|
45
|
+
});
|
|
46
|
+
return messages.join('; ') || 'Validation error';
|
|
47
|
+
}
|
|
48
|
+
return body.detail;
|
|
49
|
+
}
|
|
50
|
+
if (body.message) {
|
|
51
|
+
return body.message;
|
|
52
|
+
}
|
|
53
|
+
return 'Unknown error';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Map HTTP status code and body to appropriate error class
|
|
57
|
+
* @throws Always throws an appropriate CompresrError subclass
|
|
58
|
+
*/
|
|
59
|
+
export function handleHttpError(status, body) {
|
|
60
|
+
const msg = extractErrorMessage(body);
|
|
61
|
+
const normalized = normalizeErrorBody(body);
|
|
62
|
+
switch (status) {
|
|
63
|
+
case STATUS_CODES.UNAUTHORIZED:
|
|
64
|
+
throw new AuthenticationError(`Authentication failed: ${msg}. Check your API key is valid.`, normalized);
|
|
65
|
+
case STATUS_CODES.FORBIDDEN:
|
|
66
|
+
throw new ScopeError(`Permission denied: ${msg}. Your API key may lack the required scope.`, undefined, normalized);
|
|
67
|
+
case STATUS_CODES.NOT_FOUND:
|
|
68
|
+
throw new NotFoundError(`Resource not found: ${msg}`, undefined, normalized);
|
|
69
|
+
case STATUS_CODES.VALIDATION_ERROR:
|
|
70
|
+
throw new ValidationError(`Invalid request: ${msg}`, body.field, normalized);
|
|
71
|
+
case STATUS_CODES.RATE_LIMITED: {
|
|
72
|
+
const retryMsg = body.retry_after
|
|
73
|
+
? ` Retry after ${body.retry_after} seconds.`
|
|
74
|
+
: '';
|
|
75
|
+
throw new RateLimitError(`Rate limit exceeded: ${msg}.${retryMsg}`, body.retry_after, normalized);
|
|
76
|
+
}
|
|
77
|
+
default:
|
|
78
|
+
if (status >= 500) {
|
|
79
|
+
throw new ServerError(`Server error: ${msg}. Please try again later or contact support.`, normalized);
|
|
80
|
+
}
|
|
81
|
+
throw new CompresrError(`Request failed (${status}): ${msg}`, 'request_error', normalized);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/http/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA0B,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAkB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compresr TypeScript SDK
|
|
3
|
+
*
|
|
4
|
+
* Intelligent context compression to reduce LLM API costs by 30-70%.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { CompressionClient, MODELS } from 'compresr';
|
|
9
|
+
*
|
|
10
|
+
* const client = new CompressionClient({ apiKey: 'cmp_...' });
|
|
11
|
+
*
|
|
12
|
+
* // Agnostic compression (espresso_v1, default)
|
|
13
|
+
* const result = await client.compress({
|
|
14
|
+
* context: 'Your long context...',
|
|
15
|
+
* });
|
|
16
|
+
* console.log(result.data.compressed_context);
|
|
17
|
+
*
|
|
18
|
+
* // Query-specific compression (latte_v1)
|
|
19
|
+
* const result = await client.compress({
|
|
20
|
+
* context: 'Your long context...',
|
|
21
|
+
* query: 'What is the main conclusion?',
|
|
22
|
+
* compressionModelName: 'latte_v1',
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @packageDocumentation
|
|
27
|
+
*/
|
|
28
|
+
export { CompressionClient, type CompressOptions, type CompressBatchOptions, } from './clients/index.js';
|
|
29
|
+
export { MODELS, type CompressionModel } from './config/index.js';
|
|
30
|
+
export { CompresrError, AuthenticationError, ValidationError, RateLimitError, ScopeError, ServerError, ConnectionError, NotFoundError, type ErrorResponseData, } from './errors/index.js';
|
|
31
|
+
export { type CompressResponse, type CompressResult, type CompressBatchResponse, type CompressBatchResult, type CompressBatchItemResult, type StreamChunk, } from './schemas/index.js';
|
|
32
|
+
export declare const VERSION = "1.0.0";
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EACL,iBAAiB,EACjB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,MAAM,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGlE,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,EACV,WAAW,EACX,eAAe,EACf,aAAa,EACb,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,GACjB,MAAM,oBAAoB,CAAC;AAG5B,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compresr TypeScript SDK
|
|
3
|
+
*
|
|
4
|
+
* Intelligent context compression to reduce LLM API costs by 30-70%.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { CompressionClient, MODELS } from 'compresr';
|
|
9
|
+
*
|
|
10
|
+
* const client = new CompressionClient({ apiKey: 'cmp_...' });
|
|
11
|
+
*
|
|
12
|
+
* // Agnostic compression (espresso_v1, default)
|
|
13
|
+
* const result = await client.compress({
|
|
14
|
+
* context: 'Your long context...',
|
|
15
|
+
* });
|
|
16
|
+
* console.log(result.data.compressed_context);
|
|
17
|
+
*
|
|
18
|
+
* // Query-specific compression (latte_v1)
|
|
19
|
+
* const result = await client.compress({
|
|
20
|
+
* context: 'Your long context...',
|
|
21
|
+
* query: 'What is the main conclusion?',
|
|
22
|
+
* compressionModelName: 'latte_v1',
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @packageDocumentation
|
|
27
|
+
*/
|
|
28
|
+
// Clients
|
|
29
|
+
export { CompressionClient, } from './clients/index.js';
|
|
30
|
+
// Configuration
|
|
31
|
+
export { MODELS } from './config/index.js';
|
|
32
|
+
// Errors
|
|
33
|
+
export { CompresrError, AuthenticationError, ValidationError, RateLimitError, ScopeError, ServerError, ConnectionError, NotFoundError, } from './errors/index.js';
|
|
34
|
+
// Version
|
|
35
|
+
export const VERSION = '1.0.0';
|
|
36
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,UAAU;AACV,OAAO,EACL,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAE5B,gBAAgB;AAChB,OAAO,EAAE,MAAM,EAAyB,MAAM,mBAAmB,CAAC;AAElE,SAAS;AACT,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,EACV,WAAW,EACX,eAAe,EACf,aAAa,GAEd,MAAM,mBAAmB,CAAC;AAY3B,UAAU;AACV,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common/shared schemas
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
/**
|
|
6
|
+
* Base API response schema
|
|
7
|
+
*/
|
|
8
|
+
export declare const BaseResponseSchema: z.ZodObject<{
|
|
9
|
+
success: z.ZodBoolean;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
success: boolean;
|
|
12
|
+
}, {
|
|
13
|
+
success: boolean;
|
|
14
|
+
}>;
|
|
15
|
+
export type BaseResponse = z.infer<typeof BaseResponseSchema>;
|
|
16
|
+
/**
|
|
17
|
+
* Stream chunk schema for SSE responses
|
|
18
|
+
*/
|
|
19
|
+
export declare const StreamChunkSchema: z.ZodObject<{
|
|
20
|
+
content: z.ZodString;
|
|
21
|
+
done: z.ZodDefault<z.ZodBoolean>;
|
|
22
|
+
error: z.ZodOptional<z.ZodString>;
|
|
23
|
+
}, "strip", z.ZodTypeAny, {
|
|
24
|
+
done: boolean;
|
|
25
|
+
content: string;
|
|
26
|
+
error?: string | undefined;
|
|
27
|
+
}, {
|
|
28
|
+
content: string;
|
|
29
|
+
error?: string | undefined;
|
|
30
|
+
done?: boolean | undefined;
|
|
31
|
+
}>;
|
|
32
|
+
export type StreamChunk = z.infer<typeof StreamChunkSchema>;
|
|
33
|
+
/**
|
|
34
|
+
* Health check response
|
|
35
|
+
*/
|
|
36
|
+
export declare const HealthResponseSchema: z.ZodObject<{
|
|
37
|
+
status: z.ZodString;
|
|
38
|
+
timestamp: z.ZodOptional<z.ZodString>;
|
|
39
|
+
}, "strip", z.ZodTypeAny, {
|
|
40
|
+
status: string;
|
|
41
|
+
timestamp?: string | undefined;
|
|
42
|
+
}, {
|
|
43
|
+
status: string;
|
|
44
|
+
timestamp?: string | undefined;
|
|
45
|
+
}>;
|
|
46
|
+
export type HealthResponse = z.infer<typeof HealthResponseSchema>;
|
|
47
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/schemas/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAI5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common/shared schemas
|
|
3
|
+
*/
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
/**
|
|
6
|
+
* Base API response schema
|
|
7
|
+
*/
|
|
8
|
+
export const BaseResponseSchema = z.object({
|
|
9
|
+
success: z.boolean(),
|
|
10
|
+
});
|
|
11
|
+
/**
|
|
12
|
+
* Stream chunk schema for SSE responses
|
|
13
|
+
*/
|
|
14
|
+
export const StreamChunkSchema = z.object({
|
|
15
|
+
content: z.string(),
|
|
16
|
+
done: z.boolean().default(false),
|
|
17
|
+
error: z.string().optional(),
|
|
18
|
+
});
|
|
19
|
+
/**
|
|
20
|
+
* Health check response
|
|
21
|
+
*/
|
|
22
|
+
export const HealthResponseSchema = z.object({
|
|
23
|
+
status: z.string(),
|
|
24
|
+
timestamp: z.string().optional(),
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/schemas/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;CACrB,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;IAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC"}
|