@attrove/sdk 0.1.2 → 0.1.4

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.
Files changed (107) hide show
  1. package/cjs/README.md +247 -0
  2. package/cjs/package.json +56 -0
  3. package/cjs/src/__mocks__/version.js +17 -0
  4. package/cjs/src/__mocks__/version.js.map +1 -0
  5. package/cjs/src/admin-client.js +221 -0
  6. package/cjs/src/admin-client.js.map +1 -0
  7. package/cjs/src/client.js +312 -0
  8. package/cjs/src/client.js.map +1 -0
  9. package/cjs/src/constants.js +69 -0
  10. package/cjs/src/constants.js.map +1 -0
  11. package/cjs/src/errors/index.js +307 -0
  12. package/cjs/src/errors/index.js.map +1 -0
  13. package/cjs/src/index.js +98 -0
  14. package/cjs/src/index.js.map +1 -0
  15. package/cjs/src/resources/conversations.js +95 -0
  16. package/cjs/src/resources/conversations.js.map +1 -0
  17. package/cjs/src/resources/index.js +17 -0
  18. package/cjs/src/resources/index.js.map +1 -0
  19. package/cjs/src/resources/integrations.js +69 -0
  20. package/cjs/src/resources/integrations.js.map +1 -0
  21. package/cjs/src/resources/messages.js +98 -0
  22. package/cjs/src/resources/messages.js.map +1 -0
  23. package/cjs/src/resources/query.js +143 -0
  24. package/cjs/src/resources/query.js.map +1 -0
  25. package/cjs/src/resources/users.js +91 -0
  26. package/cjs/src/resources/users.js.map +1 -0
  27. package/cjs/src/types/index.js +292 -0
  28. package/cjs/src/types/index.js.map +1 -0
  29. package/cjs/src/utils/fetch.js +417 -0
  30. package/cjs/src/utils/fetch.js.map +1 -0
  31. package/cjs/src/utils/index.js +12 -0
  32. package/cjs/src/utils/index.js.map +1 -0
  33. package/cjs/src/utils/streaming.js +368 -0
  34. package/cjs/src/utils/streaming.js.map +1 -0
  35. package/cjs/src/version.js +31 -0
  36. package/cjs/src/version.js.map +1 -0
  37. package/esm/README.md +247 -0
  38. package/esm/package.json +56 -0
  39. package/esm/src/__mocks__/version.js +12 -0
  40. package/esm/src/__mocks__/version.js.map +1 -0
  41. package/esm/src/admin-client.js +216 -0
  42. package/esm/src/admin-client.js.map +1 -0
  43. package/esm/src/client.js +308 -0
  44. package/esm/src/client.js.map +1 -0
  45. package/esm/src/constants.js +65 -0
  46. package/esm/src/constants.js.map +1 -0
  47. package/esm/src/errors/index.js +285 -0
  48. package/esm/src/errors/index.js.map +1 -0
  49. package/esm/src/index.js +68 -0
  50. package/esm/src/index.js.map +1 -0
  51. package/esm/src/resources/conversations.js +91 -0
  52. package/esm/src/resources/conversations.js.map +1 -0
  53. package/esm/src/resources/index.js +9 -0
  54. package/esm/src/resources/index.js.map +1 -0
  55. package/esm/src/resources/integrations.js +65 -0
  56. package/esm/src/resources/integrations.js.map +1 -0
  57. package/esm/src/resources/messages.js +94 -0
  58. package/esm/src/resources/messages.js.map +1 -0
  59. package/esm/src/resources/query.js +139 -0
  60. package/esm/src/resources/query.js.map +1 -0
  61. package/esm/src/resources/users.js +87 -0
  62. package/esm/src/resources/users.js.map +1 -0
  63. package/esm/src/types/index.js +277 -0
  64. package/esm/src/types/index.js.map +1 -0
  65. package/esm/src/utils/fetch.js +413 -0
  66. package/esm/src/utils/fetch.js.map +1 -0
  67. package/esm/src/utils/index.js +6 -0
  68. package/esm/src/utils/index.js.map +1 -0
  69. package/esm/src/utils/streaming.js +363 -0
  70. package/esm/src/utils/streaming.js.map +1 -0
  71. package/esm/src/version.js +26 -0
  72. package/esm/src/version.js.map +1 -0
  73. package/package.json +16 -9
  74. package/types/src/__mocks__/version.d.ts +8 -0
  75. package/types/src/__mocks__/version.d.ts.map +1 -0
  76. package/types/src/admin-client.d.ts +144 -0
  77. package/types/src/admin-client.d.ts.map +1 -0
  78. package/types/src/client.d.ts +233 -0
  79. package/types/src/client.d.ts.map +1 -0
  80. package/types/src/constants.d.ts +47 -0
  81. package/types/src/constants.d.ts.map +1 -0
  82. package/types/src/errors/index.d.ts +206 -0
  83. package/types/src/errors/index.d.ts.map +1 -0
  84. package/types/src/index.d.ts +65 -0
  85. package/types/src/index.d.ts.map +1 -0
  86. package/types/src/resources/conversations.d.ts +81 -0
  87. package/types/src/resources/conversations.d.ts.map +1 -0
  88. package/types/src/resources/index.d.ts +12 -0
  89. package/types/src/resources/index.d.ts.map +1 -0
  90. package/types/src/resources/integrations.d.ts +63 -0
  91. package/types/src/resources/integrations.d.ts.map +1 -0
  92. package/types/src/resources/messages.d.ts +69 -0
  93. package/types/src/resources/messages.d.ts.map +1 -0
  94. package/types/src/resources/query.d.ts +86 -0
  95. package/types/src/resources/query.d.ts.map +1 -0
  96. package/types/src/resources/users.d.ts +88 -0
  97. package/types/src/resources/users.d.ts.map +1 -0
  98. package/types/src/types/index.d.ts +807 -0
  99. package/types/src/types/index.d.ts.map +1 -0
  100. package/types/src/utils/fetch.d.ts +161 -0
  101. package/types/src/utils/fetch.d.ts.map +1 -0
  102. package/types/src/utils/index.d.ts +8 -0
  103. package/types/src/utils/index.d.ts.map +1 -0
  104. package/types/src/utils/streaming.d.ts +210 -0
  105. package/types/src/utils/streaming.d.ts.map +1 -0
  106. package/types/src/version.d.ts +21 -0
  107. package/types/src/version.d.ts.map +1 -0
@@ -0,0 +1,413 @@
1
+ /**
2
+ * HTTP Client with Retries
3
+ *
4
+ * Provides a robust fetch wrapper with automatic retries, timeout handling,
5
+ * and proper error mapping.
6
+ */
7
+ import { AttroveError, ValidationError, NetworkError, TimeoutError, ServerError, createErrorFromStatus, } from '../errors';
8
+ import { ErrorCodes } from '../types';
9
+ import { SDK_VERSION, DEFAULT_TIMEOUT, DEFAULT_MAX_RETRIES, INITIAL_RETRY_DELAY, RETRYABLE_STATUS_SET, } from '../constants';
10
+ /**
11
+ * Delay execution during retry backoff.
12
+ * Used between retry attempts to avoid overwhelming the server.
13
+ */
14
+ function sleep(ms) {
15
+ return new Promise((resolve) => setTimeout(resolve, ms));
16
+ }
17
+ /**
18
+ * Calculate retry delay with exponential backoff and jitter.
19
+ */
20
+ function calculateRetryDelay(attempt, retryAfter) {
21
+ if (retryAfter !== undefined && retryAfter > 0) {
22
+ return retryAfter * 1000;
23
+ }
24
+ // Exponential backoff with jitter
25
+ const exponentialDelay = INITIAL_RETRY_DELAY * Math.pow(2, attempt);
26
+ const jitter = Math.random() * 0.3 * exponentialDelay;
27
+ return Math.floor(exponentialDelay + jitter);
28
+ }
29
+ /**
30
+ * Parse the Retry-After header value.
31
+ * Returns undefined if the header is missing, invalid, or not a positive number.
32
+ */
33
+ function parseRetryAfter(header) {
34
+ if (!header)
35
+ return undefined;
36
+ // Try parsing as seconds (integer)
37
+ const seconds = parseInt(header, 10);
38
+ if (!Number.isNaN(seconds) && seconds > 0) {
39
+ return seconds;
40
+ }
41
+ // Try parsing as HTTP date
42
+ const date = Date.parse(header);
43
+ if (!Number.isNaN(date)) {
44
+ const diffSeconds = Math.ceil((date - Date.now()) / 1000);
45
+ return diffSeconds > 0 ? diffSeconds : undefined;
46
+ }
47
+ return undefined;
48
+ }
49
+ /**
50
+ * Convert legacy config to new config format.
51
+ * @throws {ValidationError} If partial credentials are provided
52
+ */
53
+ function normalizeConfig(config) {
54
+ let auth;
55
+ // Check for partial API key credentials
56
+ if (config.apiKey && !config.userId) {
57
+ throw new ValidationError('userId is required when using apiKey authentication', ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: 'userId', providedFields: ['apiKey'] });
58
+ }
59
+ if (!config.apiKey && config.userId) {
60
+ throw new ValidationError('apiKey is required when using user authentication', ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: 'apiKey', providedFields: ['userId'] });
61
+ }
62
+ // Check for partial partner credentials
63
+ if (config.clientId && !config.clientSecret) {
64
+ throw new ValidationError('clientSecret is required when using partner authentication', ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: 'clientSecret', providedFields: ['clientId'] });
65
+ }
66
+ if (!config.clientId && config.clientSecret) {
67
+ throw new ValidationError('clientId is required when using partner authentication', ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: 'clientId', providedFields: ['clientSecret'] });
68
+ }
69
+ if (config.apiKey && config.userId) {
70
+ auth = { type: 'apiKey', apiKey: config.apiKey, userId: config.userId };
71
+ }
72
+ else if (config.clientId && config.clientSecret) {
73
+ auth = { type: 'partner', clientId: config.clientId, clientSecret: config.clientSecret };
74
+ }
75
+ else {
76
+ auth = { type: 'none' };
77
+ }
78
+ return {
79
+ baseUrl: config.baseUrl.replace(/\/$/, ''),
80
+ auth,
81
+ timeout: config.timeout ?? DEFAULT_TIMEOUT,
82
+ maxRetries: config.maxRetries ?? DEFAULT_MAX_RETRIES,
83
+ onRetry: config.onRetry,
84
+ };
85
+ }
86
+ /**
87
+ * HTTP client with automatic retries and error handling.
88
+ *
89
+ * Features:
90
+ * - Automatic retries with exponential backoff
91
+ * - Respects Retry-After headers
92
+ * - Proper error mapping to SDK error types
93
+ * - Support for API key and partner authentication
94
+ * - Optional retry callbacks for monitoring
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * const client = new HttpClient({
99
+ * baseUrl: 'https://api.attrove.com',
100
+ * apiKey: 'sk_...',
101
+ * userId: 'user-uuid',
102
+ * onRetry: (info) => console.log(`Retrying (${info.attempt}/${info.maxRetries})...`)
103
+ * });
104
+ * ```
105
+ */
106
+ export class HttpClient {
107
+ constructor(config) {
108
+ this.config = normalizeConfig(config);
109
+ }
110
+ /**
111
+ * Build the full URL for a request.
112
+ */
113
+ buildUrl(path, params) {
114
+ const url = new URL(path, this.config.baseUrl);
115
+ if (params) {
116
+ for (const [key, value] of Object.entries(params)) {
117
+ if (value !== undefined) {
118
+ if (Array.isArray(value)) {
119
+ value.forEach((v) => url.searchParams.append(key, v));
120
+ }
121
+ else {
122
+ url.searchParams.set(key, value);
123
+ }
124
+ }
125
+ }
126
+ }
127
+ return url.toString();
128
+ }
129
+ /**
130
+ * Build headers for a request.
131
+ */
132
+ buildHeaders(customHeaders) {
133
+ const headers = {
134
+ 'Content-Type': 'application/json',
135
+ 'Accept': 'application/json',
136
+ 'User-Agent': `@attrove/sdk/${SDK_VERSION}`,
137
+ ...customHeaders,
138
+ };
139
+ const { auth } = this.config;
140
+ if (auth.type === 'apiKey') {
141
+ headers['Authorization'] = `Bearer ${auth.apiKey}`;
142
+ headers['X-Auth-Type'] = 'api';
143
+ headers['X-User-Id'] = auth.userId;
144
+ }
145
+ else if (auth.type === 'partner') {
146
+ headers['Authorization'] = `Bearer ${auth.clientSecret}`;
147
+ headers['X-Auth-Type'] = 'partner';
148
+ }
149
+ return headers;
150
+ }
151
+ /**
152
+ * Parse error from API response.
153
+ * Normalizes string errors to ApiError format.
154
+ */
155
+ parseApiError(body, status) {
156
+ // Handle structured error response
157
+ if (body && typeof body === 'object' && 'error' in body) {
158
+ const errorResponse = body;
159
+ const error = errorResponse.error;
160
+ if (typeof error === 'string') {
161
+ return createErrorFromStatus(error, status);
162
+ }
163
+ return createErrorFromStatus(error.message, status, error.code, error.details);
164
+ }
165
+ // Handle unknown error format - include response preview for debugging
166
+ let message;
167
+ if (typeof body === 'string') {
168
+ message = body || 'Empty error response';
169
+ }
170
+ else {
171
+ try {
172
+ message = `Unexpected error format: ${JSON.stringify(body).substring(0, 100)}`;
173
+ }
174
+ catch (serializeError) {
175
+ // Preserve serialization error context for debugging
176
+ const reason = serializeError instanceof Error ? serializeError.message : 'Unknown reason';
177
+ message = `Unknown error occurred (response not serializable: ${reason})`;
178
+ }
179
+ }
180
+ return createErrorFromStatus(message, status);
181
+ }
182
+ /**
183
+ * Make a request with automatic retries.
184
+ *
185
+ * @param path - API path (relative to base URL)
186
+ * @param config - Request configuration
187
+ * @param queryParams - Optional query parameters
188
+ * @returns Parsed response data
189
+ *
190
+ * @throws {AuthenticationError} When authentication fails (401)
191
+ * @throws {AuthorizationError} When authorization fails (403)
192
+ * @throws {NotFoundError} When resource is not found (404)
193
+ * @throws {ValidationError} When request validation fails (400)
194
+ * @throws {RateLimitError} When rate limits are exceeded (429)
195
+ * @throws {TimeoutError} When request times out
196
+ * @throws {NetworkError} When network errors occur
197
+ * @throws {ServerError} When server errors occur (5xx)
198
+ */
199
+ async request(path, config = {}, queryParams) {
200
+ const method = config.method ?? 'GET';
201
+ const url = this.buildUrl(path, queryParams);
202
+ const headers = this.buildHeaders(config.headers);
203
+ const timeout = config.timeout ?? this.config.timeout;
204
+ let lastError;
205
+ for (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {
206
+ try {
207
+ const controller = new AbortController();
208
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
209
+ const fetchOptions = {
210
+ method,
211
+ headers,
212
+ signal: controller.signal,
213
+ };
214
+ if (config.body && method !== 'GET') {
215
+ fetchOptions.body = JSON.stringify(config.body);
216
+ }
217
+ const response = await fetch(url, fetchOptions);
218
+ clearTimeout(timeoutId);
219
+ // Parse response body with explicit JSON error handling
220
+ let body;
221
+ const contentType = response.headers.get('content-type');
222
+ if (contentType?.includes('application/json')) {
223
+ const text = await response.text();
224
+ try {
225
+ body = JSON.parse(text);
226
+ }
227
+ catch (parseError) {
228
+ // JSON parse errors are not retryable
229
+ throw new ServerError(`Server returned invalid JSON: ${parseError instanceof Error ? parseError.message : 'Parse failed'}`, response.status, { responsePreview: text.substring(0, 200) });
230
+ }
231
+ }
232
+ else {
233
+ body = await response.text();
234
+ }
235
+ // Handle successful response
236
+ if (response.ok) {
237
+ // Handle wrapped API responses
238
+ if (body && typeof body === 'object' && 'success' in body) {
239
+ const apiResponse = body;
240
+ if (apiResponse.success) {
241
+ // Paginated responses have a `pagination` field - preserve the full structure
242
+ if ('pagination' in body) {
243
+ return body;
244
+ }
245
+ return apiResponse.data;
246
+ }
247
+ // API returned success: false
248
+ throw this.parseApiError(body, response.status);
249
+ }
250
+ return body;
251
+ }
252
+ // Handle error response
253
+ const error = this.parseApiError(body, response.status);
254
+ // Check if we should retry
255
+ if (attempt < this.config.maxRetries && RETRYABLE_STATUS_SET.has(response.status)) {
256
+ const retryAfterSeconds = parseRetryAfter(response.headers.get('retry-after'));
257
+ const delay = calculateRetryDelay(attempt, retryAfterSeconds);
258
+ // Call retry callback if provided
259
+ if (this.config.onRetry) {
260
+ this.config.onRetry({
261
+ attempt: attempt + 1,
262
+ maxRetries: this.config.maxRetries,
263
+ error,
264
+ delayMs: delay,
265
+ url,
266
+ method,
267
+ });
268
+ }
269
+ lastError = error;
270
+ await sleep(delay);
271
+ continue;
272
+ }
273
+ throw error;
274
+ }
275
+ catch (err) {
276
+ // Handle abort/timeout
277
+ if (err instanceof Error && err.name === 'AbortError') {
278
+ const timeoutError = new TimeoutError(`Request timed out after ${timeout}ms`);
279
+ if (attempt < this.config.maxRetries) {
280
+ const delay = calculateRetryDelay(attempt);
281
+ if (this.config.onRetry) {
282
+ this.config.onRetry({
283
+ attempt: attempt + 1,
284
+ maxRetries: this.config.maxRetries,
285
+ error: timeoutError,
286
+ delayMs: delay,
287
+ url,
288
+ method,
289
+ });
290
+ }
291
+ lastError = timeoutError;
292
+ await sleep(delay);
293
+ continue;
294
+ }
295
+ throw timeoutError;
296
+ }
297
+ // Handle network errors
298
+ if (err instanceof TypeError && err.message.includes('fetch')) {
299
+ const networkError = new NetworkError(`Network error: ${err.message}. Check your connection and ensure the API endpoint is accessible.`);
300
+ if (attempt < this.config.maxRetries) {
301
+ const delay = calculateRetryDelay(attempt);
302
+ if (this.config.onRetry) {
303
+ this.config.onRetry({
304
+ attempt: attempt + 1,
305
+ maxRetries: this.config.maxRetries,
306
+ error: networkError,
307
+ delayMs: delay,
308
+ url,
309
+ method,
310
+ });
311
+ }
312
+ lastError = networkError;
313
+ await sleep(delay);
314
+ continue;
315
+ }
316
+ throw networkError;
317
+ }
318
+ // Re-throw AttroveErrors (including ServerError from JSON parse)
319
+ if (err instanceof AttroveError) {
320
+ throw err;
321
+ }
322
+ // Handle unexpected errors - preserve as much context as possible
323
+ const originalError = err instanceof Error ? err : new Error(String(err));
324
+ const errorDetails = {
325
+ originalErrorName: originalError.name,
326
+ originalErrorMessage: originalError.message,
327
+ };
328
+ if (originalError.stack) {
329
+ errorDetails.originalStack = originalError.stack.split('\n').slice(0, 5).join('\n');
330
+ }
331
+ // Wrap in ServerError to indicate this was an unexpected failure
332
+ const wrappedError = new ServerError(`Unexpected error during request: ${originalError.message}`, undefined, // No status code for unexpected errors
333
+ errorDetails);
334
+ lastError = wrappedError;
335
+ if (attempt < this.config.maxRetries) {
336
+ const delay = calculateRetryDelay(attempt);
337
+ if (this.config.onRetry) {
338
+ this.config.onRetry({
339
+ attempt: attempt + 1,
340
+ maxRetries: this.config.maxRetries,
341
+ error: wrappedError,
342
+ delayMs: delay,
343
+ url,
344
+ method,
345
+ });
346
+ }
347
+ await sleep(delay);
348
+ continue;
349
+ }
350
+ throw wrappedError;
351
+ }
352
+ }
353
+ // Should not reach here, but just in case - use ServerError for consistency
354
+ throw lastError || new ServerError('Max retries exceeded', undefined, { maxRetries: this.config.maxRetries });
355
+ }
356
+ /**
357
+ * Make a GET request.
358
+ *
359
+ * @throws {AuthenticationError} When authentication fails (401)
360
+ * @throws {AuthorizationError} When authorization fails (403)
361
+ * @throws {NotFoundError} When resource is not found (404)
362
+ * @throws {RateLimitError} When rate limits are exceeded (429)
363
+ * @throws {NetworkError} When network errors occur
364
+ */
365
+ get(path, params, config) {
366
+ return this.request(path, { ...config, method: 'GET' }, params);
367
+ }
368
+ /**
369
+ * Make a POST request.
370
+ *
371
+ * @throws {AuthenticationError} When authentication fails (401)
372
+ * @throws {ValidationError} When request validation fails (400)
373
+ * @throws {RateLimitError} When rate limits are exceeded (429)
374
+ * @throws {NetworkError} When network errors occur
375
+ */
376
+ post(path, body, config) {
377
+ return this.request(path, { ...config, method: 'POST', body });
378
+ }
379
+ /**
380
+ * Make a PUT request.
381
+ *
382
+ * @throws {AuthenticationError} When authentication fails (401)
383
+ * @throws {ValidationError} When request validation fails (400)
384
+ * @throws {NotFoundError} When resource is not found (404)
385
+ * @throws {NetworkError} When network errors occur
386
+ */
387
+ put(path, body, config) {
388
+ return this.request(path, { ...config, method: 'PUT', body });
389
+ }
390
+ /**
391
+ * Make a PATCH request.
392
+ *
393
+ * @throws {AuthenticationError} When authentication fails (401)
394
+ * @throws {ValidationError} When request validation fails (400)
395
+ * @throws {NotFoundError} When resource is not found (404)
396
+ * @throws {NetworkError} When network errors occur
397
+ */
398
+ patch(path, body, config) {
399
+ return this.request(path, { ...config, method: 'PATCH', body });
400
+ }
401
+ /**
402
+ * Make a DELETE request.
403
+ *
404
+ * @throws {AuthenticationError} When authentication fails (401)
405
+ * @throws {AuthorizationError} When authorization fails (403)
406
+ * @throws {NotFoundError} When resource is not found (404)
407
+ * @throws {NetworkError} When network errors occur
408
+ */
409
+ delete(path, config) {
410
+ return this.request(path, { ...config, method: 'DELETE' });
411
+ }
412
+ }
413
+ //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../../../packages/sdk/src/utils/fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Utility exports
3
+ */
4
+ export { HttpClient } from './fetch';
5
+ export { StreamingClient, generateMessageId } from './streaming';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/sdk/src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}