@sdkwork/sdk-common 1.0.1 → 1.0.2

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.
@@ -1,7 +1,4 @@
1
1
  "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
6
3
  const types = require("../core/types.cjs");
7
4
  const errors = require("../errors.cjs");
@@ -10,16 +7,16 @@ const logger = require("../utils/logger.cjs");
10
7
  const cache = require("../utils/cache.cjs");
11
8
  const retry = require("../utils/retry.cjs");
12
9
  class BaseHttpClient {
10
+ config;
11
+ authConfig;
12
+ logger;
13
+ cache;
14
+ interceptors;
15
+ tenantId;
16
+ organizationId;
17
+ platform;
18
+ userId;
13
19
  constructor(config) {
14
- __publicField(this, "config");
15
- __publicField(this, "authConfig");
16
- __publicField(this, "logger");
17
- __publicField(this, "cache");
18
- __publicField(this, "interceptors");
19
- __publicField(this, "tenantId");
20
- __publicField(this, "organizationId");
21
- __publicField(this, "platform");
22
- __publicField(this, "userId");
23
20
  this.config = {
24
21
  baseUrl: config.baseUrl,
25
22
  timeout: config.timeout ?? types.DEFAULT_TIMEOUT,
@@ -81,22 +78,19 @@ class BaseHttpClient {
81
78
  this.authConfig.tokenManager = manager;
82
79
  }
83
80
  setApiKey(apiKey) {
84
- var _a;
85
81
  this.authConfig.apiKey = apiKey;
86
82
  this.authConfig.authMode = "apikey";
87
- (_a = this.authConfig.tokenManager) == null ? void 0 : _a.clearTokens();
83
+ this.authConfig.tokenManager?.clearTokens();
88
84
  }
89
85
  setAuthToken(token) {
90
- var _a;
91
- (_a = this.authConfig.tokenManager) == null ? void 0 : _a.setAuthToken(token);
86
+ this.authConfig.tokenManager?.setAuthToken(token);
92
87
  if (this.authConfig.authMode === "apikey") {
93
88
  this.authConfig.authMode = "dual-token";
94
89
  this.authConfig.apiKey = void 0;
95
90
  }
96
91
  }
97
92
  setAccessToken(token) {
98
- var _a;
99
- (_a = this.authConfig.tokenManager) == null ? void 0 : _a.setAccessToken(token);
93
+ this.authConfig.tokenManager?.setAccessToken(token);
100
94
  if (this.authConfig.authMode === "apikey") {
101
95
  this.authConfig.authMode = "dual-token";
102
96
  this.authConfig.apiKey = void 0;
@@ -115,8 +109,7 @@ class BaseHttpClient {
115
109
  this.userId = userId;
116
110
  }
117
111
  clearAuthToken() {
118
- var _a;
119
- (_a = this.authConfig.tokenManager) == null ? void 0 : _a.clearTokens();
112
+ this.authConfig.tokenManager?.clearTokens();
120
113
  }
121
114
  addRequestInterceptor(interceptor) {
122
115
  this.interceptors.request.push(interceptor);
@@ -149,14 +142,13 @@ class BaseHttpClient {
149
142
  this.cache.clear();
150
143
  }
151
144
  getConfig() {
152
- var _a, _b;
153
145
  return {
154
146
  baseUrl: this.config.baseUrl,
155
147
  timeout: this.config.timeout,
156
148
  authMode: this.authConfig.authMode,
157
149
  apiKey: this.authConfig.apiKey,
158
- accessToken: (_a = this.authConfig.tokenManager) == null ? void 0 : _a.getAccessToken(),
159
- authToken: (_b = this.authConfig.tokenManager) == null ? void 0 : _b.getAuthToken(),
150
+ accessToken: this.authConfig.tokenManager?.getAccessToken(),
151
+ authToken: this.authConfig.tokenManager?.getAuthToken(),
160
152
  tenantId: this.tenantId,
161
153
  organizationId: this.organizationId,
162
154
  platform: this.platform,
@@ -164,8 +156,7 @@ class BaseHttpClient {
164
156
  };
165
157
  }
166
158
  isAuthenticated() {
167
- var _a;
168
- return ((_a = this.authConfig.tokenManager) == null ? void 0 : _a.isValid()) ?? false;
159
+ return this.authConfig.tokenManager?.isValid() ?? false;
169
160
  }
170
161
  buildBaseUrl(path, params) {
171
162
  const baseUrl = this.config.baseUrl.replace(/\/$/, "");
@@ -280,14 +271,14 @@ class BaseHttpClient {
280
271
  await this.handleErrorResponse(response, config);
281
272
  }
282
273
  const contentType = response.headers.get("content-type");
283
- if (contentType == null ? void 0 : contentType.includes(types.MIME_TYPES.JSON)) {
274
+ if (contentType?.includes(types.MIME_TYPES.JSON)) {
284
275
  const result = await response.json();
285
276
  if (!types.SUCCESS_CODES.includes(result.code) && !types.SUCCESS_CODES.includes(String(result.code))) {
286
277
  throw errors.SdkError.fromApiResult(result, response.status);
287
278
  }
288
279
  return result.data;
289
280
  }
290
- if (contentType == null ? void 0 : contentType.includes("text/")) {
281
+ if (contentType?.includes("text/")) {
291
282
  return await response.text();
292
283
  }
293
284
  return await response.json();
@@ -396,13 +387,12 @@ class BaseHttpClient {
396
387
  return response.blob();
397
388
  }
398
389
  async *stream(path, options) {
399
- var _a;
400
390
  const config = {
401
391
  url: path,
402
- method: (options == null ? void 0 : options.method) ?? "POST",
403
- body: options == null ? void 0 : options.body,
404
- headers: options == null ? void 0 : options.headers,
405
- skipAuth: options == null ? void 0 : options.skipAuth
392
+ method: options?.method ?? "POST",
393
+ body: options?.body,
394
+ headers: options?.headers,
395
+ skipAuth: options?.skipAuth
406
396
  };
407
397
  const processedConfig = await this.applyRequestInterceptors(config);
408
398
  const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);
@@ -417,7 +407,7 @@ class BaseHttpClient {
417
407
  if (!response.ok) {
418
408
  await this.handleErrorResponse(response, processedConfig);
419
409
  }
420
- const reader = (_a = response.body) == null ? void 0 : _a.getReader();
410
+ const reader = response.body?.getReader();
421
411
  if (!reader) {
422
412
  throw new errors.NetworkError("No response body");
423
413
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-client.cjs","sources":["../../src/http/base-client.ts"],"sourcesContent":["import type {\n HttpClientConfig,\n RequestConfig,\n RequestOptions,\n QueryParams,\n HttpHeaders,\n ApiResult,\n Interceptors,\n UploadOptions,\n DownloadOptions,\n} from '../core/types';\nimport { DEFAULT_TIMEOUT, SUCCESS_CODES, MIME_TYPES } from '../core/types';\nimport {\n SdkError,\n NetworkError,\n TimeoutError,\n CancelledError,\n} from '../errors';\nimport type { AuthTokenManager, AuthMode } from '../auth';\nimport { DefaultAuthTokenManager, buildAuthHeaders } from '../auth';\nimport { createLogger, type Logger } from '../utils/logger';\nimport { createCacheStore, type CacheStore } from '../utils/cache';\nimport { withRetry } from '../utils/retry';\n\nexport interface HttpClientOptions extends HttpClientConfig {\n apiKey?: string;\n accessToken?: string;\n authToken?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport interface HttpClientAuthConfig {\n authMode: AuthMode;\n apiKey?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport interface RequestExecutor {\n execute<T>(config: RequestConfig): Promise<T>;\n}\n\nexport interface ResponseProcessor {\n process<T>(response: Response, config: RequestConfig): Promise<T>;\n}\n\nexport interface UrlBuilder {\n build(path: string, params?: QueryParams): string;\n}\n\nexport interface HeaderBuilder {\n build(config: RequestConfig, skipAuth?: boolean): HttpHeaders;\n}\n\nexport abstract class BaseHttpClient implements RequestExecutor {\n protected config: Required<Omit<HttpClientConfig, 'interceptors'>> & { baseUrl: string };\n protected authConfig: HttpClientAuthConfig;\n protected logger: Logger;\n protected cache: CacheStore;\n protected interceptors: Interceptors;\n protected tenantId?: string;\n protected organizationId?: string;\n protected platform?: string;\n protected userId?: string | number;\n\n constructor(config: HttpClientOptions) {\n this.config = {\n baseUrl: config.baseUrl,\n timeout: config.timeout ?? DEFAULT_TIMEOUT,\n headers: config.headers ?? {},\n retry: {\n maxRetries: 3,\n retryDelay: 1000,\n retryBackoff: 'exponential',\n maxRetryDelay: 30000,\n ...config.retry,\n },\n cache: {\n enabled: false,\n ttl: 5 * 60 * 1000,\n maxSize: 100,\n ...config.cache,\n },\n logger: {\n level: 'info',\n prefix: '[SDK]',\n timestamp: true,\n colors: true,\n ...config.logger,\n },\n };\n\n this.logger = createLogger(this.config.logger);\n this.cache = createCacheStore(this.config.cache);\n \n this.interceptors = config.interceptors ?? {\n request: [],\n response: [],\n error: [],\n };\n\n const authMode = this.determineAuthMode(config);\n this.authConfig = {\n authMode,\n apiKey: config.apiKey,\n tokenManager: config.tokenManager ?? new DefaultAuthTokenManager({\n accessToken: config.accessToken,\n authToken: config.authToken,\n }),\n };\n }\n\n protected determineAuthMode(config: HttpClientOptions): AuthMode {\n if (config.apiKey) {\n return 'apikey';\n }\n return 'dual-token';\n }\n\n getAuthMode(): AuthMode {\n return this.authConfig.authMode;\n }\n\n setAuthMode(mode: AuthMode): void {\n this.authConfig.authMode = mode;\n }\n\n getTokenManager(): AuthTokenManager | undefined {\n return this.authConfig.tokenManager;\n }\n\n setTokenManager(manager: AuthTokenManager): void {\n this.authConfig.tokenManager = manager;\n }\n\n setApiKey(apiKey: string): void {\n this.authConfig.apiKey = apiKey;\n this.authConfig.authMode = 'apikey';\n this.authConfig.tokenManager?.clearTokens();\n }\n\n setAuthToken(token: string): void {\n this.authConfig.tokenManager?.setAuthToken(token);\n if (this.authConfig.authMode === 'apikey') {\n this.authConfig.authMode = 'dual-token';\n this.authConfig.apiKey = undefined;\n }\n }\n\n setAccessToken(token: string): void {\n this.authConfig.tokenManager?.setAccessToken(token);\n if (this.authConfig.authMode === 'apikey') {\n this.authConfig.authMode = 'dual-token';\n this.authConfig.apiKey = undefined;\n }\n }\n\n setTenantId(tenantId: string): void {\n this.tenantId = tenantId;\n }\n\n setOrganizationId(organizationId: string): void {\n this.organizationId = organizationId;\n }\n\n setPlatform(platform: string): void {\n this.platform = platform;\n }\n\n setUserId(userId: string | number): void {\n this.userId = userId;\n }\n\n clearAuthToken(): void {\n this.authConfig.tokenManager?.clearTokens();\n }\n\n addRequestInterceptor(interceptor: (config: RequestConfig) => RequestConfig | Promise<RequestConfig>): () => void {\n this.interceptors.request.push(interceptor);\n return () => {\n const index = this.interceptors.request.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.request.splice(index, 1);\n }\n };\n }\n\n addResponseInterceptor(interceptor: (response: unknown, config: RequestConfig) => unknown | Promise<unknown>): () => void {\n this.interceptors.response.push(interceptor);\n return () => {\n const index = this.interceptors.response.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.response.splice(index, 1);\n }\n };\n }\n\n addErrorInterceptor(interceptor: (error: Error, config: RequestConfig) => void | Promise<void>): () => void {\n this.interceptors.error.push(interceptor);\n return () => {\n const index = this.interceptors.error.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.error.splice(index, 1);\n }\n };\n }\n\n clearCache(): void {\n this.cache.clear();\n }\n\n getConfig() {\n return {\n baseUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n authMode: this.authConfig.authMode,\n apiKey: this.authConfig.apiKey,\n accessToken: this.authConfig.tokenManager?.getAccessToken(),\n authToken: this.authConfig.tokenManager?.getAuthToken(),\n tenantId: this.tenantId,\n organizationId: this.organizationId,\n platform: this.platform,\n userId: this.userId,\n };\n }\n\n isAuthenticated(): boolean {\n return this.authConfig.tokenManager?.isValid() ?? false;\n }\n\n protected buildBaseUrl(path: string, params?: QueryParams): string {\n const baseUrl = this.config.baseUrl.replace(/\\/$/, '');\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n let url = `${baseUrl}${normalizedPath}`;\n\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n return url;\n }\n\n protected buildHeaders(config: RequestConfig, skipAuth: boolean = false): HttpHeaders {\n const headers: HttpHeaders = {\n 'Content-Type': MIME_TYPES.JSON,\n ...this.config.headers,\n ...config.headers,\n };\n\n if (!skipAuth && !config.skipAuth) {\n const authHeaders = buildAuthHeaders(\n this.authConfig.authMode,\n this.authConfig.apiKey,\n this.authConfig.tokenManager\n );\n Object.assign(headers, authHeaders);\n }\n\n if (this.tenantId) {\n headers['X-Tenant-Id'] = this.tenantId;\n }\n\n if (this.organizationId) {\n headers['X-Organization-Id'] = this.organizationId;\n }\n\n if (this.platform) {\n headers['X-Platform'] = this.platform;\n }\n\n if (this.userId !== undefined) {\n headers['X-User-Id'] = String(this.userId);\n }\n\n return headers;\n }\n\n protected serializeRequestBody(body: unknown, headers: HttpHeaders): BodyInit | string | undefined {\n if (body === undefined || body === null) {\n return undefined;\n }\n\n if (typeof FormData !== 'undefined' && body instanceof FormData) {\n delete headers['Content-Type'];\n return body;\n }\n\n if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {\n headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';\n return body.toString();\n }\n\n if (typeof Blob !== 'undefined' && body instanceof Blob) {\n delete headers['Content-Type'];\n return body;\n }\n\n if (typeof ArrayBuffer !== 'undefined') {\n if (body instanceof ArrayBuffer) {\n delete headers['Content-Type'];\n return body;\n }\n if (ArrayBuffer.isView(body)) {\n delete headers['Content-Type'];\n return body as unknown as BodyInit;\n }\n }\n\n if (typeof body === 'string') {\n headers['Content-Type'] = headers['Content-Type'] || 'text/plain;charset=UTF-8';\n return body;\n }\n\n return JSON.stringify(body);\n }\n\n protected async applyRequestInterceptors(config: RequestConfig): Promise<RequestConfig> {\n let processedConfig = config;\n for (const interceptor of this.interceptors.request) {\n processedConfig = await interceptor(processedConfig);\n }\n return processedConfig;\n }\n\n protected async applyResponseInterceptors<T>(response: T, config: RequestConfig): Promise<T> {\n let processedResponse: T = response;\n for (const interceptor of this.interceptors.response) {\n processedResponse = (await interceptor(processedResponse, config)) as T;\n }\n return processedResponse;\n }\n\n protected async applyErrorInterceptors(error: Error, config: RequestConfig): Promise<void> {\n for (const interceptor of this.interceptors.error) {\n await interceptor(error, config);\n }\n }\n\n protected async handleErrorResponse(response: Response, config: RequestConfig): Promise<never> {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const result = await response.json();\n errorMessage = result.msg || result.message || errorMessage;\n } catch {\n // Ignore JSON parse errors\n }\n\n const error = SdkError.fromHttpStatus(response.status, errorMessage);\n\n await this.applyErrorInterceptors(error, config);\n throw error;\n }\n\n protected async processResponse<T>(response: Response, config: RequestConfig): Promise<T> {\n if (!response.ok) {\n await this.handleErrorResponse(response, config);\n }\n\n const contentType = response.headers.get('content-type');\n\n if (contentType?.includes(MIME_TYPES.JSON)) {\n const result: ApiResult<T> = await response.json();\n\n if (!SUCCESS_CODES.includes(result.code) && !SUCCESS_CODES.includes(String(result.code))) {\n throw SdkError.fromApiResult(result, response.status);\n }\n\n return result.data;\n }\n\n if (contentType?.includes('text/')) {\n return (await response.text()) as unknown as T;\n }\n\n return await response.json() as T;\n }\n\n protected async executeFetch(\n url: string,\n options: {\n method: string;\n headers: HttpHeaders;\n body?: string | BodyInit | null;\n timeout: number;\n signal?: AbortSignal;\n }\n ): Promise<Response> {\n const controller = new AbortController();\n let timedOut = false;\n const timeoutId = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, options.timeout);\n\n const abortHandler = () => controller.abort();\n\n if (options.signal) {\n if (options.signal.aborted) {\n controller.abort();\n } else {\n options.signal.addEventListener('abort', abortHandler, { once: true });\n }\n }\n\n try {\n this.logger.debug(`${options.method} ${url}`);\n\n const response = await fetch(url, {\n method: options.method,\n headers: options.headers,\n body: options.body,\n signal: controller.signal,\n });\n\n return response;\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n if (timedOut) {\n throw new TimeoutError(`Request timeout after ${options.timeout}ms`, options.timeout);\n }\n throw new CancelledError('Request was cancelled');\n }\n throw new NetworkError(error.message);\n }\n\n throw new NetworkError('Unknown network error');\n } finally {\n clearTimeout(timeoutId);\n if (options.signal) {\n options.signal.removeEventListener('abort', abortHandler);\n }\n }\n }\n\n async execute<T>(config: RequestConfig): Promise<T> {\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n const serializedBody = this.serializeRequestBody(processedConfig.body, headers);\n\n const response = await this.executeFetch(url, {\n method: processedConfig.method,\n headers,\n body: serializedBody,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n return this.processResponse<T>(response, processedConfig);\n }\n\n abstract request<T>(path: string, options?: RequestOptions): Promise<T>;\n abstract get<T>(path: string, params?: QueryParams): Promise<T>;\n abstract post<T>(path: string, body?: unknown): Promise<T>;\n abstract put<T>(path: string, body?: unknown): Promise<T>;\n abstract delete<T>(path: string, body?: unknown): Promise<T>;\n abstract patch<T>(path: string, body?: unknown): Promise<T>;\n\n async upload<T>(path: string, options: UploadOptions): Promise<T> {\n const formData = new FormData();\n formData.append(options.fieldName ?? 'file', options.file);\n\n if (options.additionalData) {\n Object.entries(options.additionalData).forEach(([key, value]) => {\n formData.append(key, value);\n });\n }\n\n const config: RequestConfig = {\n url: path,\n method: 'POST',\n body: formData,\n skipAuth: false,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n delete headers['Content-Type'];\n\n const response = await this.executeFetch(url, {\n method: 'POST',\n headers,\n body: formData,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n return this.processResponse<T>(response, processedConfig);\n }\n\n async download(path: string, _options?: DownloadOptions): Promise<Blob> {\n const config: RequestConfig = {\n url: path,\n method: 'GET',\n skipAuth: false,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n\n const response = await this.executeFetch(url, {\n method: 'GET',\n headers,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response, processedConfig);\n }\n\n return response.blob();\n }\n\n async *stream(path: string, options?: RequestOptions): AsyncIterable<string> {\n const config: RequestConfig = {\n url: path,\n method: options?.method ?? 'POST',\n body: options?.body,\n headers: options?.headers,\n skipAuth: options?.skipAuth,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n\n const response = await this.executeFetch(url, {\n method: processedConfig.method,\n headers,\n body: processedConfig.body ? JSON.stringify(processedConfig.body) : undefined,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response, processedConfig);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new NetworkError('No response body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n if (trimmedLine === '' || trimmedLine === 'data: [DONE]') continue;\n if (trimmedLine.startsWith('data: ')) {\n yield trimmedLine.slice(6);\n } else {\n yield trimmedLine;\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n}\n\nexport function createBaseHttpClient(config: HttpClientOptions): BaseHttpClient {\n return new (class extends BaseHttpClient {\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const config: RequestConfig = {\n url: path,\n method: options.method ?? 'GET',\n headers: options.headers,\n params: options.params,\n body: options.body,\n timeout: options.timeout,\n signal: options.signal,\n skipAuth: options.skipAuth,\n };\n\n return withRetry(\n () => this.execute<T>(config),\n { ...this.config.retry, ...options.retry }\n );\n }\n\n async get<T>(path: string, params?: QueryParams): Promise<T> {\n return this.request<T>(path, { method: 'GET', params });\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'POST', body });\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'PUT', body });\n }\n\n async delete<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'DELETE', body });\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'PATCH', body });\n }\n })(config);\n}\n"],"names":["DEFAULT_TIMEOUT","createLogger","createCacheStore","DefaultAuthTokenManager","MIME_TYPES","buildAuthHeaders","SdkError","SUCCESS_CODES","TimeoutError","CancelledError","NetworkError","config","withRetry"],"mappings":"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"}
1
+ {"version":3,"file":"base-client.cjs","sources":["../../src/http/base-client.ts"],"sourcesContent":["import type {\n HttpClientConfig,\n RequestConfig,\n RequestOptions,\n QueryParams,\n HttpHeaders,\n ApiResult,\n Interceptors,\n UploadOptions,\n DownloadOptions,\n} from '../core/types';\nimport { DEFAULT_TIMEOUT, SUCCESS_CODES, MIME_TYPES } from '../core/types';\nimport {\n SdkError,\n NetworkError,\n TimeoutError,\n CancelledError,\n} from '../errors';\nimport type { AuthTokenManager, AuthMode } from '../auth';\nimport { DefaultAuthTokenManager, buildAuthHeaders } from '../auth';\nimport { createLogger, type Logger } from '../utils/logger';\nimport { createCacheStore, type CacheStore } from '../utils/cache';\nimport { withRetry } from '../utils/retry';\n\nexport interface HttpClientOptions extends HttpClientConfig {\n apiKey?: string;\n accessToken?: string;\n authToken?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport interface HttpClientAuthConfig {\n authMode: AuthMode;\n apiKey?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport interface RequestExecutor {\n execute<T>(config: RequestConfig): Promise<T>;\n}\n\nexport interface ResponseProcessor {\n process<T>(response: Response, config: RequestConfig): Promise<T>;\n}\n\nexport interface UrlBuilder {\n build(path: string, params?: QueryParams): string;\n}\n\nexport interface HeaderBuilder {\n build(config: RequestConfig, skipAuth?: boolean): HttpHeaders;\n}\n\nexport abstract class BaseHttpClient implements RequestExecutor {\n protected config: Required<Omit<HttpClientConfig, 'interceptors'>> & { baseUrl: string };\n protected authConfig: HttpClientAuthConfig;\n protected logger: Logger;\n protected cache: CacheStore;\n protected interceptors: Interceptors;\n protected tenantId?: string;\n protected organizationId?: string;\n protected platform?: string;\n protected userId?: string | number;\n\n constructor(config: HttpClientOptions) {\n this.config = {\n baseUrl: config.baseUrl,\n timeout: config.timeout ?? DEFAULT_TIMEOUT,\n headers: config.headers ?? {},\n retry: {\n maxRetries: 3,\n retryDelay: 1000,\n retryBackoff: 'exponential',\n maxRetryDelay: 30000,\n ...config.retry,\n },\n cache: {\n enabled: false,\n ttl: 5 * 60 * 1000,\n maxSize: 100,\n ...config.cache,\n },\n logger: {\n level: 'info',\n prefix: '[SDK]',\n timestamp: true,\n colors: true,\n ...config.logger,\n },\n };\n\n this.logger = createLogger(this.config.logger);\n this.cache = createCacheStore(this.config.cache);\n \n this.interceptors = config.interceptors ?? {\n request: [],\n response: [],\n error: [],\n };\n\n const authMode = this.determineAuthMode(config);\n this.authConfig = {\n authMode,\n apiKey: config.apiKey,\n tokenManager: config.tokenManager ?? new DefaultAuthTokenManager({\n accessToken: config.accessToken,\n authToken: config.authToken,\n }),\n };\n }\n\n protected determineAuthMode(config: HttpClientOptions): AuthMode {\n if (config.apiKey) {\n return 'apikey';\n }\n return 'dual-token';\n }\n\n getAuthMode(): AuthMode {\n return this.authConfig.authMode;\n }\n\n setAuthMode(mode: AuthMode): void {\n this.authConfig.authMode = mode;\n }\n\n getTokenManager(): AuthTokenManager | undefined {\n return this.authConfig.tokenManager;\n }\n\n setTokenManager(manager: AuthTokenManager): void {\n this.authConfig.tokenManager = manager;\n }\n\n setApiKey(apiKey: string): void {\n this.authConfig.apiKey = apiKey;\n this.authConfig.authMode = 'apikey';\n this.authConfig.tokenManager?.clearTokens();\n }\n\n setAuthToken(token: string): void {\n this.authConfig.tokenManager?.setAuthToken(token);\n if (this.authConfig.authMode === 'apikey') {\n this.authConfig.authMode = 'dual-token';\n this.authConfig.apiKey = undefined;\n }\n }\n\n setAccessToken(token: string): void {\n this.authConfig.tokenManager?.setAccessToken(token);\n if (this.authConfig.authMode === 'apikey') {\n this.authConfig.authMode = 'dual-token';\n this.authConfig.apiKey = undefined;\n }\n }\n\n setTenantId(tenantId: string): void {\n this.tenantId = tenantId;\n }\n\n setOrganizationId(organizationId: string): void {\n this.organizationId = organizationId;\n }\n\n setPlatform(platform: string): void {\n this.platform = platform;\n }\n\n setUserId(userId: string | number): void {\n this.userId = userId;\n }\n\n clearAuthToken(): void {\n this.authConfig.tokenManager?.clearTokens();\n }\n\n addRequestInterceptor(interceptor: (config: RequestConfig) => RequestConfig | Promise<RequestConfig>): () => void {\n this.interceptors.request.push(interceptor);\n return () => {\n const index = this.interceptors.request.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.request.splice(index, 1);\n }\n };\n }\n\n addResponseInterceptor(interceptor: (response: unknown, config: RequestConfig) => unknown | Promise<unknown>): () => void {\n this.interceptors.response.push(interceptor);\n return () => {\n const index = this.interceptors.response.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.response.splice(index, 1);\n }\n };\n }\n\n addErrorInterceptor(interceptor: (error: Error, config: RequestConfig) => void | Promise<void>): () => void {\n this.interceptors.error.push(interceptor);\n return () => {\n const index = this.interceptors.error.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.error.splice(index, 1);\n }\n };\n }\n\n clearCache(): void {\n this.cache.clear();\n }\n\n getConfig() {\n return {\n baseUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n authMode: this.authConfig.authMode,\n apiKey: this.authConfig.apiKey,\n accessToken: this.authConfig.tokenManager?.getAccessToken(),\n authToken: this.authConfig.tokenManager?.getAuthToken(),\n tenantId: this.tenantId,\n organizationId: this.organizationId,\n platform: this.platform,\n userId: this.userId,\n };\n }\n\n isAuthenticated(): boolean {\n return this.authConfig.tokenManager?.isValid() ?? false;\n }\n\n protected buildBaseUrl(path: string, params?: QueryParams): string {\n const baseUrl = this.config.baseUrl.replace(/\\/$/, '');\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n let url = `${baseUrl}${normalizedPath}`;\n\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n return url;\n }\n\n protected buildHeaders(config: RequestConfig, skipAuth: boolean = false): HttpHeaders {\n const headers: HttpHeaders = {\n 'Content-Type': MIME_TYPES.JSON,\n ...this.config.headers,\n ...config.headers,\n };\n\n if (!skipAuth && !config.skipAuth) {\n const authHeaders = buildAuthHeaders(\n this.authConfig.authMode,\n this.authConfig.apiKey,\n this.authConfig.tokenManager\n );\n Object.assign(headers, authHeaders);\n }\n\n if (this.tenantId) {\n headers['X-Tenant-Id'] = this.tenantId;\n }\n\n if (this.organizationId) {\n headers['X-Organization-Id'] = this.organizationId;\n }\n\n if (this.platform) {\n headers['X-Platform'] = this.platform;\n }\n\n if (this.userId !== undefined) {\n headers['X-User-Id'] = String(this.userId);\n }\n\n return headers;\n }\n\n protected serializeRequestBody(body: unknown, headers: HttpHeaders): BodyInit | string | undefined {\n if (body === undefined || body === null) {\n return undefined;\n }\n\n if (typeof FormData !== 'undefined' && body instanceof FormData) {\n delete headers['Content-Type'];\n return body;\n }\n\n if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {\n headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';\n return body.toString();\n }\n\n if (typeof Blob !== 'undefined' && body instanceof Blob) {\n delete headers['Content-Type'];\n return body;\n }\n\n if (typeof ArrayBuffer !== 'undefined') {\n if (body instanceof ArrayBuffer) {\n delete headers['Content-Type'];\n return body;\n }\n if (ArrayBuffer.isView(body)) {\n delete headers['Content-Type'];\n return body as unknown as BodyInit;\n }\n }\n\n if (typeof body === 'string') {\n headers['Content-Type'] = headers['Content-Type'] || 'text/plain;charset=UTF-8';\n return body;\n }\n\n return JSON.stringify(body);\n }\n\n protected async applyRequestInterceptors(config: RequestConfig): Promise<RequestConfig> {\n let processedConfig = config;\n for (const interceptor of this.interceptors.request) {\n processedConfig = await interceptor(processedConfig);\n }\n return processedConfig;\n }\n\n protected async applyResponseInterceptors<T>(response: T, config: RequestConfig): Promise<T> {\n let processedResponse: T = response;\n for (const interceptor of this.interceptors.response) {\n processedResponse = (await interceptor(processedResponse, config)) as T;\n }\n return processedResponse;\n }\n\n protected async applyErrorInterceptors(error: Error, config: RequestConfig): Promise<void> {\n for (const interceptor of this.interceptors.error) {\n await interceptor(error, config);\n }\n }\n\n protected async handleErrorResponse(response: Response, config: RequestConfig): Promise<never> {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const result = await response.json();\n errorMessage = result.msg || result.message || errorMessage;\n } catch {\n // Ignore JSON parse errors\n }\n\n const error = SdkError.fromHttpStatus(response.status, errorMessage);\n\n await this.applyErrorInterceptors(error, config);\n throw error;\n }\n\n protected async processResponse<T>(response: Response, config: RequestConfig): Promise<T> {\n if (!response.ok) {\n await this.handleErrorResponse(response, config);\n }\n\n const contentType = response.headers.get('content-type');\n\n if (contentType?.includes(MIME_TYPES.JSON)) {\n const result: ApiResult<T> = await response.json();\n\n if (!SUCCESS_CODES.includes(result.code) && !SUCCESS_CODES.includes(String(result.code))) {\n throw SdkError.fromApiResult(result, response.status);\n }\n\n return result.data;\n }\n\n if (contentType?.includes('text/')) {\n return (await response.text()) as unknown as T;\n }\n\n return await response.json() as T;\n }\n\n protected async executeFetch(\n url: string,\n options: {\n method: string;\n headers: HttpHeaders;\n body?: string | BodyInit | null;\n timeout: number;\n signal?: AbortSignal;\n }\n ): Promise<Response> {\n const controller = new AbortController();\n let timedOut = false;\n const timeoutId = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, options.timeout);\n\n const abortHandler = () => controller.abort();\n\n if (options.signal) {\n if (options.signal.aborted) {\n controller.abort();\n } else {\n options.signal.addEventListener('abort', abortHandler, { once: true });\n }\n }\n\n try {\n this.logger.debug(`${options.method} ${url}`);\n\n const response = await fetch(url, {\n method: options.method,\n headers: options.headers,\n body: options.body,\n signal: controller.signal,\n });\n\n return response;\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n if (timedOut) {\n throw new TimeoutError(`Request timeout after ${options.timeout}ms`, options.timeout);\n }\n throw new CancelledError('Request was cancelled');\n }\n throw new NetworkError(error.message);\n }\n\n throw new NetworkError('Unknown network error');\n } finally {\n clearTimeout(timeoutId);\n if (options.signal) {\n options.signal.removeEventListener('abort', abortHandler);\n }\n }\n }\n\n async execute<T>(config: RequestConfig): Promise<T> {\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n const serializedBody = this.serializeRequestBody(processedConfig.body, headers);\n\n const response = await this.executeFetch(url, {\n method: processedConfig.method,\n headers,\n body: serializedBody,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n return this.processResponse<T>(response, processedConfig);\n }\n\n abstract request<T>(path: string, options?: RequestOptions): Promise<T>;\n abstract get<T>(path: string, params?: QueryParams): Promise<T>;\n abstract post<T>(path: string, body?: unknown): Promise<T>;\n abstract put<T>(path: string, body?: unknown): Promise<T>;\n abstract delete<T>(path: string, body?: unknown): Promise<T>;\n abstract patch<T>(path: string, body?: unknown): Promise<T>;\n\n async upload<T>(path: string, options: UploadOptions): Promise<T> {\n const formData = new FormData();\n formData.append(options.fieldName ?? 'file', options.file);\n\n if (options.additionalData) {\n Object.entries(options.additionalData).forEach(([key, value]) => {\n formData.append(key, value);\n });\n }\n\n const config: RequestConfig = {\n url: path,\n method: 'POST',\n body: formData,\n skipAuth: false,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n delete headers['Content-Type'];\n\n const response = await this.executeFetch(url, {\n method: 'POST',\n headers,\n body: formData,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n return this.processResponse<T>(response, processedConfig);\n }\n\n async download(path: string, _options?: DownloadOptions): Promise<Blob> {\n const config: RequestConfig = {\n url: path,\n method: 'GET',\n skipAuth: false,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n\n const response = await this.executeFetch(url, {\n method: 'GET',\n headers,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response, processedConfig);\n }\n\n return response.blob();\n }\n\n async *stream(path: string, options?: RequestOptions): AsyncIterable<string> {\n const config: RequestConfig = {\n url: path,\n method: options?.method ?? 'POST',\n body: options?.body,\n headers: options?.headers,\n skipAuth: options?.skipAuth,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n\n const response = await this.executeFetch(url, {\n method: processedConfig.method,\n headers,\n body: processedConfig.body ? JSON.stringify(processedConfig.body) : undefined,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response, processedConfig);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new NetworkError('No response body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n if (trimmedLine === '' || trimmedLine === 'data: [DONE]') continue;\n if (trimmedLine.startsWith('data: ')) {\n yield trimmedLine.slice(6);\n } else {\n yield trimmedLine;\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n}\n\nexport function createBaseHttpClient(config: HttpClientOptions): BaseHttpClient {\n return new (class extends BaseHttpClient {\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const config: RequestConfig = {\n url: path,\n method: options.method ?? 'GET',\n headers: options.headers,\n params: options.params,\n body: options.body,\n timeout: options.timeout,\n signal: options.signal,\n skipAuth: options.skipAuth,\n };\n\n return withRetry(\n () => this.execute<T>(config),\n { ...this.config.retry, ...options.retry }\n );\n }\n\n async get<T>(path: string, params?: QueryParams): Promise<T> {\n return this.request<T>(path, { method: 'GET', params });\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'POST', body });\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'PUT', body });\n }\n\n async delete<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'DELETE', body });\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'PATCH', body });\n }\n })(config);\n}\n"],"names":["DEFAULT_TIMEOUT","createLogger","createCacheStore","DefaultAuthTokenManager","MIME_TYPES","buildAuthHeaders","SdkError","SUCCESS_CODES","TimeoutError","CancelledError","NetworkError","config","withRetry"],"mappings":"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"}
@@ -1,6 +1,3 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
1
  import { DEFAULT_TIMEOUT, MIME_TYPES, SUCCESS_CODES } from "../core/types.js";
5
2
  import { SdkError, TimeoutError, CancelledError, NetworkError } from "../errors.js";
6
3
  import { DefaultAuthTokenManager, buildAuthHeaders } from "../auth/token-manager.js";
@@ -8,16 +5,16 @@ import { createLogger } from "../utils/logger.js";
8
5
  import { createCacheStore } from "../utils/cache.js";
9
6
  import { withRetry } from "../utils/retry.js";
10
7
  class BaseHttpClient {
8
+ config;
9
+ authConfig;
10
+ logger;
11
+ cache;
12
+ interceptors;
13
+ tenantId;
14
+ organizationId;
15
+ platform;
16
+ userId;
11
17
  constructor(config) {
12
- __publicField(this, "config");
13
- __publicField(this, "authConfig");
14
- __publicField(this, "logger");
15
- __publicField(this, "cache");
16
- __publicField(this, "interceptors");
17
- __publicField(this, "tenantId");
18
- __publicField(this, "organizationId");
19
- __publicField(this, "platform");
20
- __publicField(this, "userId");
21
18
  this.config = {
22
19
  baseUrl: config.baseUrl,
23
20
  timeout: config.timeout ?? DEFAULT_TIMEOUT,
@@ -79,22 +76,19 @@ class BaseHttpClient {
79
76
  this.authConfig.tokenManager = manager;
80
77
  }
81
78
  setApiKey(apiKey) {
82
- var _a;
83
79
  this.authConfig.apiKey = apiKey;
84
80
  this.authConfig.authMode = "apikey";
85
- (_a = this.authConfig.tokenManager) == null ? void 0 : _a.clearTokens();
81
+ this.authConfig.tokenManager?.clearTokens();
86
82
  }
87
83
  setAuthToken(token) {
88
- var _a;
89
- (_a = this.authConfig.tokenManager) == null ? void 0 : _a.setAuthToken(token);
84
+ this.authConfig.tokenManager?.setAuthToken(token);
90
85
  if (this.authConfig.authMode === "apikey") {
91
86
  this.authConfig.authMode = "dual-token";
92
87
  this.authConfig.apiKey = void 0;
93
88
  }
94
89
  }
95
90
  setAccessToken(token) {
96
- var _a;
97
- (_a = this.authConfig.tokenManager) == null ? void 0 : _a.setAccessToken(token);
91
+ this.authConfig.tokenManager?.setAccessToken(token);
98
92
  if (this.authConfig.authMode === "apikey") {
99
93
  this.authConfig.authMode = "dual-token";
100
94
  this.authConfig.apiKey = void 0;
@@ -113,8 +107,7 @@ class BaseHttpClient {
113
107
  this.userId = userId;
114
108
  }
115
109
  clearAuthToken() {
116
- var _a;
117
- (_a = this.authConfig.tokenManager) == null ? void 0 : _a.clearTokens();
110
+ this.authConfig.tokenManager?.clearTokens();
118
111
  }
119
112
  addRequestInterceptor(interceptor) {
120
113
  this.interceptors.request.push(interceptor);
@@ -147,14 +140,13 @@ class BaseHttpClient {
147
140
  this.cache.clear();
148
141
  }
149
142
  getConfig() {
150
- var _a, _b;
151
143
  return {
152
144
  baseUrl: this.config.baseUrl,
153
145
  timeout: this.config.timeout,
154
146
  authMode: this.authConfig.authMode,
155
147
  apiKey: this.authConfig.apiKey,
156
- accessToken: (_a = this.authConfig.tokenManager) == null ? void 0 : _a.getAccessToken(),
157
- authToken: (_b = this.authConfig.tokenManager) == null ? void 0 : _b.getAuthToken(),
148
+ accessToken: this.authConfig.tokenManager?.getAccessToken(),
149
+ authToken: this.authConfig.tokenManager?.getAuthToken(),
158
150
  tenantId: this.tenantId,
159
151
  organizationId: this.organizationId,
160
152
  platform: this.platform,
@@ -162,8 +154,7 @@ class BaseHttpClient {
162
154
  };
163
155
  }
164
156
  isAuthenticated() {
165
- var _a;
166
- return ((_a = this.authConfig.tokenManager) == null ? void 0 : _a.isValid()) ?? false;
157
+ return this.authConfig.tokenManager?.isValid() ?? false;
167
158
  }
168
159
  buildBaseUrl(path, params) {
169
160
  const baseUrl = this.config.baseUrl.replace(/\/$/, "");
@@ -278,14 +269,14 @@ class BaseHttpClient {
278
269
  await this.handleErrorResponse(response, config);
279
270
  }
280
271
  const contentType = response.headers.get("content-type");
281
- if (contentType == null ? void 0 : contentType.includes(MIME_TYPES.JSON)) {
272
+ if (contentType?.includes(MIME_TYPES.JSON)) {
282
273
  const result = await response.json();
283
274
  if (!SUCCESS_CODES.includes(result.code) && !SUCCESS_CODES.includes(String(result.code))) {
284
275
  throw SdkError.fromApiResult(result, response.status);
285
276
  }
286
277
  return result.data;
287
278
  }
288
- if (contentType == null ? void 0 : contentType.includes("text/")) {
279
+ if (contentType?.includes("text/")) {
289
280
  return await response.text();
290
281
  }
291
282
  return await response.json();
@@ -394,13 +385,12 @@ class BaseHttpClient {
394
385
  return response.blob();
395
386
  }
396
387
  async *stream(path, options) {
397
- var _a;
398
388
  const config = {
399
389
  url: path,
400
- method: (options == null ? void 0 : options.method) ?? "POST",
401
- body: options == null ? void 0 : options.body,
402
- headers: options == null ? void 0 : options.headers,
403
- skipAuth: options == null ? void 0 : options.skipAuth
390
+ method: options?.method ?? "POST",
391
+ body: options?.body,
392
+ headers: options?.headers,
393
+ skipAuth: options?.skipAuth
404
394
  };
405
395
  const processedConfig = await this.applyRequestInterceptors(config);
406
396
  const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);
@@ -415,7 +405,7 @@ class BaseHttpClient {
415
405
  if (!response.ok) {
416
406
  await this.handleErrorResponse(response, processedConfig);
417
407
  }
418
- const reader = (_a = response.body) == null ? void 0 : _a.getReader();
408
+ const reader = response.body?.getReader();
419
409
  if (!reader) {
420
410
  throw new NetworkError("No response body");
421
411
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base-client.js","sources":["../../src/http/base-client.ts"],"sourcesContent":["import type {\n HttpClientConfig,\n RequestConfig,\n RequestOptions,\n QueryParams,\n HttpHeaders,\n ApiResult,\n Interceptors,\n UploadOptions,\n DownloadOptions,\n} from '../core/types';\nimport { DEFAULT_TIMEOUT, SUCCESS_CODES, MIME_TYPES } from '../core/types';\nimport {\n SdkError,\n NetworkError,\n TimeoutError,\n CancelledError,\n} from '../errors';\nimport type { AuthTokenManager, AuthMode } from '../auth';\nimport { DefaultAuthTokenManager, buildAuthHeaders } from '../auth';\nimport { createLogger, type Logger } from '../utils/logger';\nimport { createCacheStore, type CacheStore } from '../utils/cache';\nimport { withRetry } from '../utils/retry';\n\nexport interface HttpClientOptions extends HttpClientConfig {\n apiKey?: string;\n accessToken?: string;\n authToken?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport interface HttpClientAuthConfig {\n authMode: AuthMode;\n apiKey?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport interface RequestExecutor {\n execute<T>(config: RequestConfig): Promise<T>;\n}\n\nexport interface ResponseProcessor {\n process<T>(response: Response, config: RequestConfig): Promise<T>;\n}\n\nexport interface UrlBuilder {\n build(path: string, params?: QueryParams): string;\n}\n\nexport interface HeaderBuilder {\n build(config: RequestConfig, skipAuth?: boolean): HttpHeaders;\n}\n\nexport abstract class BaseHttpClient implements RequestExecutor {\n protected config: Required<Omit<HttpClientConfig, 'interceptors'>> & { baseUrl: string };\n protected authConfig: HttpClientAuthConfig;\n protected logger: Logger;\n protected cache: CacheStore;\n protected interceptors: Interceptors;\n protected tenantId?: string;\n protected organizationId?: string;\n protected platform?: string;\n protected userId?: string | number;\n\n constructor(config: HttpClientOptions) {\n this.config = {\n baseUrl: config.baseUrl,\n timeout: config.timeout ?? DEFAULT_TIMEOUT,\n headers: config.headers ?? {},\n retry: {\n maxRetries: 3,\n retryDelay: 1000,\n retryBackoff: 'exponential',\n maxRetryDelay: 30000,\n ...config.retry,\n },\n cache: {\n enabled: false,\n ttl: 5 * 60 * 1000,\n maxSize: 100,\n ...config.cache,\n },\n logger: {\n level: 'info',\n prefix: '[SDK]',\n timestamp: true,\n colors: true,\n ...config.logger,\n },\n };\n\n this.logger = createLogger(this.config.logger);\n this.cache = createCacheStore(this.config.cache);\n \n this.interceptors = config.interceptors ?? {\n request: [],\n response: [],\n error: [],\n };\n\n const authMode = this.determineAuthMode(config);\n this.authConfig = {\n authMode,\n apiKey: config.apiKey,\n tokenManager: config.tokenManager ?? new DefaultAuthTokenManager({\n accessToken: config.accessToken,\n authToken: config.authToken,\n }),\n };\n }\n\n protected determineAuthMode(config: HttpClientOptions): AuthMode {\n if (config.apiKey) {\n return 'apikey';\n }\n return 'dual-token';\n }\n\n getAuthMode(): AuthMode {\n return this.authConfig.authMode;\n }\n\n setAuthMode(mode: AuthMode): void {\n this.authConfig.authMode = mode;\n }\n\n getTokenManager(): AuthTokenManager | undefined {\n return this.authConfig.tokenManager;\n }\n\n setTokenManager(manager: AuthTokenManager): void {\n this.authConfig.tokenManager = manager;\n }\n\n setApiKey(apiKey: string): void {\n this.authConfig.apiKey = apiKey;\n this.authConfig.authMode = 'apikey';\n this.authConfig.tokenManager?.clearTokens();\n }\n\n setAuthToken(token: string): void {\n this.authConfig.tokenManager?.setAuthToken(token);\n if (this.authConfig.authMode === 'apikey') {\n this.authConfig.authMode = 'dual-token';\n this.authConfig.apiKey = undefined;\n }\n }\n\n setAccessToken(token: string): void {\n this.authConfig.tokenManager?.setAccessToken(token);\n if (this.authConfig.authMode === 'apikey') {\n this.authConfig.authMode = 'dual-token';\n this.authConfig.apiKey = undefined;\n }\n }\n\n setTenantId(tenantId: string): void {\n this.tenantId = tenantId;\n }\n\n setOrganizationId(organizationId: string): void {\n this.organizationId = organizationId;\n }\n\n setPlatform(platform: string): void {\n this.platform = platform;\n }\n\n setUserId(userId: string | number): void {\n this.userId = userId;\n }\n\n clearAuthToken(): void {\n this.authConfig.tokenManager?.clearTokens();\n }\n\n addRequestInterceptor(interceptor: (config: RequestConfig) => RequestConfig | Promise<RequestConfig>): () => void {\n this.interceptors.request.push(interceptor);\n return () => {\n const index = this.interceptors.request.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.request.splice(index, 1);\n }\n };\n }\n\n addResponseInterceptor(interceptor: (response: unknown, config: RequestConfig) => unknown | Promise<unknown>): () => void {\n this.interceptors.response.push(interceptor);\n return () => {\n const index = this.interceptors.response.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.response.splice(index, 1);\n }\n };\n }\n\n addErrorInterceptor(interceptor: (error: Error, config: RequestConfig) => void | Promise<void>): () => void {\n this.interceptors.error.push(interceptor);\n return () => {\n const index = this.interceptors.error.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.error.splice(index, 1);\n }\n };\n }\n\n clearCache(): void {\n this.cache.clear();\n }\n\n getConfig() {\n return {\n baseUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n authMode: this.authConfig.authMode,\n apiKey: this.authConfig.apiKey,\n accessToken: this.authConfig.tokenManager?.getAccessToken(),\n authToken: this.authConfig.tokenManager?.getAuthToken(),\n tenantId: this.tenantId,\n organizationId: this.organizationId,\n platform: this.platform,\n userId: this.userId,\n };\n }\n\n isAuthenticated(): boolean {\n return this.authConfig.tokenManager?.isValid() ?? false;\n }\n\n protected buildBaseUrl(path: string, params?: QueryParams): string {\n const baseUrl = this.config.baseUrl.replace(/\\/$/, '');\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n let url = `${baseUrl}${normalizedPath}`;\n\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n return url;\n }\n\n protected buildHeaders(config: RequestConfig, skipAuth: boolean = false): HttpHeaders {\n const headers: HttpHeaders = {\n 'Content-Type': MIME_TYPES.JSON,\n ...this.config.headers,\n ...config.headers,\n };\n\n if (!skipAuth && !config.skipAuth) {\n const authHeaders = buildAuthHeaders(\n this.authConfig.authMode,\n this.authConfig.apiKey,\n this.authConfig.tokenManager\n );\n Object.assign(headers, authHeaders);\n }\n\n if (this.tenantId) {\n headers['X-Tenant-Id'] = this.tenantId;\n }\n\n if (this.organizationId) {\n headers['X-Organization-Id'] = this.organizationId;\n }\n\n if (this.platform) {\n headers['X-Platform'] = this.platform;\n }\n\n if (this.userId !== undefined) {\n headers['X-User-Id'] = String(this.userId);\n }\n\n return headers;\n }\n\n protected serializeRequestBody(body: unknown, headers: HttpHeaders): BodyInit | string | undefined {\n if (body === undefined || body === null) {\n return undefined;\n }\n\n if (typeof FormData !== 'undefined' && body instanceof FormData) {\n delete headers['Content-Type'];\n return body;\n }\n\n if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {\n headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';\n return body.toString();\n }\n\n if (typeof Blob !== 'undefined' && body instanceof Blob) {\n delete headers['Content-Type'];\n return body;\n }\n\n if (typeof ArrayBuffer !== 'undefined') {\n if (body instanceof ArrayBuffer) {\n delete headers['Content-Type'];\n return body;\n }\n if (ArrayBuffer.isView(body)) {\n delete headers['Content-Type'];\n return body as unknown as BodyInit;\n }\n }\n\n if (typeof body === 'string') {\n headers['Content-Type'] = headers['Content-Type'] || 'text/plain;charset=UTF-8';\n return body;\n }\n\n return JSON.stringify(body);\n }\n\n protected async applyRequestInterceptors(config: RequestConfig): Promise<RequestConfig> {\n let processedConfig = config;\n for (const interceptor of this.interceptors.request) {\n processedConfig = await interceptor(processedConfig);\n }\n return processedConfig;\n }\n\n protected async applyResponseInterceptors<T>(response: T, config: RequestConfig): Promise<T> {\n let processedResponse: T = response;\n for (const interceptor of this.interceptors.response) {\n processedResponse = (await interceptor(processedResponse, config)) as T;\n }\n return processedResponse;\n }\n\n protected async applyErrorInterceptors(error: Error, config: RequestConfig): Promise<void> {\n for (const interceptor of this.interceptors.error) {\n await interceptor(error, config);\n }\n }\n\n protected async handleErrorResponse(response: Response, config: RequestConfig): Promise<never> {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const result = await response.json();\n errorMessage = result.msg || result.message || errorMessage;\n } catch {\n // Ignore JSON parse errors\n }\n\n const error = SdkError.fromHttpStatus(response.status, errorMessage);\n\n await this.applyErrorInterceptors(error, config);\n throw error;\n }\n\n protected async processResponse<T>(response: Response, config: RequestConfig): Promise<T> {\n if (!response.ok) {\n await this.handleErrorResponse(response, config);\n }\n\n const contentType = response.headers.get('content-type');\n\n if (contentType?.includes(MIME_TYPES.JSON)) {\n const result: ApiResult<T> = await response.json();\n\n if (!SUCCESS_CODES.includes(result.code) && !SUCCESS_CODES.includes(String(result.code))) {\n throw SdkError.fromApiResult(result, response.status);\n }\n\n return result.data;\n }\n\n if (contentType?.includes('text/')) {\n return (await response.text()) as unknown as T;\n }\n\n return await response.json() as T;\n }\n\n protected async executeFetch(\n url: string,\n options: {\n method: string;\n headers: HttpHeaders;\n body?: string | BodyInit | null;\n timeout: number;\n signal?: AbortSignal;\n }\n ): Promise<Response> {\n const controller = new AbortController();\n let timedOut = false;\n const timeoutId = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, options.timeout);\n\n const abortHandler = () => controller.abort();\n\n if (options.signal) {\n if (options.signal.aborted) {\n controller.abort();\n } else {\n options.signal.addEventListener('abort', abortHandler, { once: true });\n }\n }\n\n try {\n this.logger.debug(`${options.method} ${url}`);\n\n const response = await fetch(url, {\n method: options.method,\n headers: options.headers,\n body: options.body,\n signal: controller.signal,\n });\n\n return response;\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n if (timedOut) {\n throw new TimeoutError(`Request timeout after ${options.timeout}ms`, options.timeout);\n }\n throw new CancelledError('Request was cancelled');\n }\n throw new NetworkError(error.message);\n }\n\n throw new NetworkError('Unknown network error');\n } finally {\n clearTimeout(timeoutId);\n if (options.signal) {\n options.signal.removeEventListener('abort', abortHandler);\n }\n }\n }\n\n async execute<T>(config: RequestConfig): Promise<T> {\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n const serializedBody = this.serializeRequestBody(processedConfig.body, headers);\n\n const response = await this.executeFetch(url, {\n method: processedConfig.method,\n headers,\n body: serializedBody,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n return this.processResponse<T>(response, processedConfig);\n }\n\n abstract request<T>(path: string, options?: RequestOptions): Promise<T>;\n abstract get<T>(path: string, params?: QueryParams): Promise<T>;\n abstract post<T>(path: string, body?: unknown): Promise<T>;\n abstract put<T>(path: string, body?: unknown): Promise<T>;\n abstract delete<T>(path: string, body?: unknown): Promise<T>;\n abstract patch<T>(path: string, body?: unknown): Promise<T>;\n\n async upload<T>(path: string, options: UploadOptions): Promise<T> {\n const formData = new FormData();\n formData.append(options.fieldName ?? 'file', options.file);\n\n if (options.additionalData) {\n Object.entries(options.additionalData).forEach(([key, value]) => {\n formData.append(key, value);\n });\n }\n\n const config: RequestConfig = {\n url: path,\n method: 'POST',\n body: formData,\n skipAuth: false,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n delete headers['Content-Type'];\n\n const response = await this.executeFetch(url, {\n method: 'POST',\n headers,\n body: formData,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n return this.processResponse<T>(response, processedConfig);\n }\n\n async download(path: string, _options?: DownloadOptions): Promise<Blob> {\n const config: RequestConfig = {\n url: path,\n method: 'GET',\n skipAuth: false,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n\n const response = await this.executeFetch(url, {\n method: 'GET',\n headers,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response, processedConfig);\n }\n\n return response.blob();\n }\n\n async *stream(path: string, options?: RequestOptions): AsyncIterable<string> {\n const config: RequestConfig = {\n url: path,\n method: options?.method ?? 'POST',\n body: options?.body,\n headers: options?.headers,\n skipAuth: options?.skipAuth,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n\n const response = await this.executeFetch(url, {\n method: processedConfig.method,\n headers,\n body: processedConfig.body ? JSON.stringify(processedConfig.body) : undefined,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response, processedConfig);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new NetworkError('No response body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n if (trimmedLine === '' || trimmedLine === 'data: [DONE]') continue;\n if (trimmedLine.startsWith('data: ')) {\n yield trimmedLine.slice(6);\n } else {\n yield trimmedLine;\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n}\n\nexport function createBaseHttpClient(config: HttpClientOptions): BaseHttpClient {\n return new (class extends BaseHttpClient {\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const config: RequestConfig = {\n url: path,\n method: options.method ?? 'GET',\n headers: options.headers,\n params: options.params,\n body: options.body,\n timeout: options.timeout,\n signal: options.signal,\n skipAuth: options.skipAuth,\n };\n\n return withRetry(\n () => this.execute<T>(config),\n { ...this.config.retry, ...options.retry }\n );\n }\n\n async get<T>(path: string, params?: QueryParams): Promise<T> {\n return this.request<T>(path, { method: 'GET', params });\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'POST', body });\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'PUT', body });\n }\n\n async delete<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'DELETE', body });\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'PATCH', body });\n }\n })(config);\n}\n"],"names":["config"],"mappings":"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"}
1
+ {"version":3,"file":"base-client.js","sources":["../../src/http/base-client.ts"],"sourcesContent":["import type {\n HttpClientConfig,\n RequestConfig,\n RequestOptions,\n QueryParams,\n HttpHeaders,\n ApiResult,\n Interceptors,\n UploadOptions,\n DownloadOptions,\n} from '../core/types';\nimport { DEFAULT_TIMEOUT, SUCCESS_CODES, MIME_TYPES } from '../core/types';\nimport {\n SdkError,\n NetworkError,\n TimeoutError,\n CancelledError,\n} from '../errors';\nimport type { AuthTokenManager, AuthMode } from '../auth';\nimport { DefaultAuthTokenManager, buildAuthHeaders } from '../auth';\nimport { createLogger, type Logger } from '../utils/logger';\nimport { createCacheStore, type CacheStore } from '../utils/cache';\nimport { withRetry } from '../utils/retry';\n\nexport interface HttpClientOptions extends HttpClientConfig {\n apiKey?: string;\n accessToken?: string;\n authToken?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport interface HttpClientAuthConfig {\n authMode: AuthMode;\n apiKey?: string;\n tokenManager?: AuthTokenManager;\n}\n\nexport interface RequestExecutor {\n execute<T>(config: RequestConfig): Promise<T>;\n}\n\nexport interface ResponseProcessor {\n process<T>(response: Response, config: RequestConfig): Promise<T>;\n}\n\nexport interface UrlBuilder {\n build(path: string, params?: QueryParams): string;\n}\n\nexport interface HeaderBuilder {\n build(config: RequestConfig, skipAuth?: boolean): HttpHeaders;\n}\n\nexport abstract class BaseHttpClient implements RequestExecutor {\n protected config: Required<Omit<HttpClientConfig, 'interceptors'>> & { baseUrl: string };\n protected authConfig: HttpClientAuthConfig;\n protected logger: Logger;\n protected cache: CacheStore;\n protected interceptors: Interceptors;\n protected tenantId?: string;\n protected organizationId?: string;\n protected platform?: string;\n protected userId?: string | number;\n\n constructor(config: HttpClientOptions) {\n this.config = {\n baseUrl: config.baseUrl,\n timeout: config.timeout ?? DEFAULT_TIMEOUT,\n headers: config.headers ?? {},\n retry: {\n maxRetries: 3,\n retryDelay: 1000,\n retryBackoff: 'exponential',\n maxRetryDelay: 30000,\n ...config.retry,\n },\n cache: {\n enabled: false,\n ttl: 5 * 60 * 1000,\n maxSize: 100,\n ...config.cache,\n },\n logger: {\n level: 'info',\n prefix: '[SDK]',\n timestamp: true,\n colors: true,\n ...config.logger,\n },\n };\n\n this.logger = createLogger(this.config.logger);\n this.cache = createCacheStore(this.config.cache);\n \n this.interceptors = config.interceptors ?? {\n request: [],\n response: [],\n error: [],\n };\n\n const authMode = this.determineAuthMode(config);\n this.authConfig = {\n authMode,\n apiKey: config.apiKey,\n tokenManager: config.tokenManager ?? new DefaultAuthTokenManager({\n accessToken: config.accessToken,\n authToken: config.authToken,\n }),\n };\n }\n\n protected determineAuthMode(config: HttpClientOptions): AuthMode {\n if (config.apiKey) {\n return 'apikey';\n }\n return 'dual-token';\n }\n\n getAuthMode(): AuthMode {\n return this.authConfig.authMode;\n }\n\n setAuthMode(mode: AuthMode): void {\n this.authConfig.authMode = mode;\n }\n\n getTokenManager(): AuthTokenManager | undefined {\n return this.authConfig.tokenManager;\n }\n\n setTokenManager(manager: AuthTokenManager): void {\n this.authConfig.tokenManager = manager;\n }\n\n setApiKey(apiKey: string): void {\n this.authConfig.apiKey = apiKey;\n this.authConfig.authMode = 'apikey';\n this.authConfig.tokenManager?.clearTokens();\n }\n\n setAuthToken(token: string): void {\n this.authConfig.tokenManager?.setAuthToken(token);\n if (this.authConfig.authMode === 'apikey') {\n this.authConfig.authMode = 'dual-token';\n this.authConfig.apiKey = undefined;\n }\n }\n\n setAccessToken(token: string): void {\n this.authConfig.tokenManager?.setAccessToken(token);\n if (this.authConfig.authMode === 'apikey') {\n this.authConfig.authMode = 'dual-token';\n this.authConfig.apiKey = undefined;\n }\n }\n\n setTenantId(tenantId: string): void {\n this.tenantId = tenantId;\n }\n\n setOrganizationId(organizationId: string): void {\n this.organizationId = organizationId;\n }\n\n setPlatform(platform: string): void {\n this.platform = platform;\n }\n\n setUserId(userId: string | number): void {\n this.userId = userId;\n }\n\n clearAuthToken(): void {\n this.authConfig.tokenManager?.clearTokens();\n }\n\n addRequestInterceptor(interceptor: (config: RequestConfig) => RequestConfig | Promise<RequestConfig>): () => void {\n this.interceptors.request.push(interceptor);\n return () => {\n const index = this.interceptors.request.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.request.splice(index, 1);\n }\n };\n }\n\n addResponseInterceptor(interceptor: (response: unknown, config: RequestConfig) => unknown | Promise<unknown>): () => void {\n this.interceptors.response.push(interceptor);\n return () => {\n const index = this.interceptors.response.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.response.splice(index, 1);\n }\n };\n }\n\n addErrorInterceptor(interceptor: (error: Error, config: RequestConfig) => void | Promise<void>): () => void {\n this.interceptors.error.push(interceptor);\n return () => {\n const index = this.interceptors.error.indexOf(interceptor);\n if (index > -1) {\n this.interceptors.error.splice(index, 1);\n }\n };\n }\n\n clearCache(): void {\n this.cache.clear();\n }\n\n getConfig() {\n return {\n baseUrl: this.config.baseUrl,\n timeout: this.config.timeout,\n authMode: this.authConfig.authMode,\n apiKey: this.authConfig.apiKey,\n accessToken: this.authConfig.tokenManager?.getAccessToken(),\n authToken: this.authConfig.tokenManager?.getAuthToken(),\n tenantId: this.tenantId,\n organizationId: this.organizationId,\n platform: this.platform,\n userId: this.userId,\n };\n }\n\n isAuthenticated(): boolean {\n return this.authConfig.tokenManager?.isValid() ?? false;\n }\n\n protected buildBaseUrl(path: string, params?: QueryParams): string {\n const baseUrl = this.config.baseUrl.replace(/\\/$/, '');\n const normalizedPath = path.startsWith('/') ? path : `/${path}`;\n let url = `${baseUrl}${normalizedPath}`;\n\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n url += `?${queryString}`;\n }\n }\n\n return url;\n }\n\n protected buildHeaders(config: RequestConfig, skipAuth: boolean = false): HttpHeaders {\n const headers: HttpHeaders = {\n 'Content-Type': MIME_TYPES.JSON,\n ...this.config.headers,\n ...config.headers,\n };\n\n if (!skipAuth && !config.skipAuth) {\n const authHeaders = buildAuthHeaders(\n this.authConfig.authMode,\n this.authConfig.apiKey,\n this.authConfig.tokenManager\n );\n Object.assign(headers, authHeaders);\n }\n\n if (this.tenantId) {\n headers['X-Tenant-Id'] = this.tenantId;\n }\n\n if (this.organizationId) {\n headers['X-Organization-Id'] = this.organizationId;\n }\n\n if (this.platform) {\n headers['X-Platform'] = this.platform;\n }\n\n if (this.userId !== undefined) {\n headers['X-User-Id'] = String(this.userId);\n }\n\n return headers;\n }\n\n protected serializeRequestBody(body: unknown, headers: HttpHeaders): BodyInit | string | undefined {\n if (body === undefined || body === null) {\n return undefined;\n }\n\n if (typeof FormData !== 'undefined' && body instanceof FormData) {\n delete headers['Content-Type'];\n return body;\n }\n\n if (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams) {\n headers['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';\n return body.toString();\n }\n\n if (typeof Blob !== 'undefined' && body instanceof Blob) {\n delete headers['Content-Type'];\n return body;\n }\n\n if (typeof ArrayBuffer !== 'undefined') {\n if (body instanceof ArrayBuffer) {\n delete headers['Content-Type'];\n return body;\n }\n if (ArrayBuffer.isView(body)) {\n delete headers['Content-Type'];\n return body as unknown as BodyInit;\n }\n }\n\n if (typeof body === 'string') {\n headers['Content-Type'] = headers['Content-Type'] || 'text/plain;charset=UTF-8';\n return body;\n }\n\n return JSON.stringify(body);\n }\n\n protected async applyRequestInterceptors(config: RequestConfig): Promise<RequestConfig> {\n let processedConfig = config;\n for (const interceptor of this.interceptors.request) {\n processedConfig = await interceptor(processedConfig);\n }\n return processedConfig;\n }\n\n protected async applyResponseInterceptors<T>(response: T, config: RequestConfig): Promise<T> {\n let processedResponse: T = response;\n for (const interceptor of this.interceptors.response) {\n processedResponse = (await interceptor(processedResponse, config)) as T;\n }\n return processedResponse;\n }\n\n protected async applyErrorInterceptors(error: Error, config: RequestConfig): Promise<void> {\n for (const interceptor of this.interceptors.error) {\n await interceptor(error, config);\n }\n }\n\n protected async handleErrorResponse(response: Response, config: RequestConfig): Promise<never> {\n let errorMessage = `HTTP ${response.status}: ${response.statusText}`;\n\n try {\n const result = await response.json();\n errorMessage = result.msg || result.message || errorMessage;\n } catch {\n // Ignore JSON parse errors\n }\n\n const error = SdkError.fromHttpStatus(response.status, errorMessage);\n\n await this.applyErrorInterceptors(error, config);\n throw error;\n }\n\n protected async processResponse<T>(response: Response, config: RequestConfig): Promise<T> {\n if (!response.ok) {\n await this.handleErrorResponse(response, config);\n }\n\n const contentType = response.headers.get('content-type');\n\n if (contentType?.includes(MIME_TYPES.JSON)) {\n const result: ApiResult<T> = await response.json();\n\n if (!SUCCESS_CODES.includes(result.code) && !SUCCESS_CODES.includes(String(result.code))) {\n throw SdkError.fromApiResult(result, response.status);\n }\n\n return result.data;\n }\n\n if (contentType?.includes('text/')) {\n return (await response.text()) as unknown as T;\n }\n\n return await response.json() as T;\n }\n\n protected async executeFetch(\n url: string,\n options: {\n method: string;\n headers: HttpHeaders;\n body?: string | BodyInit | null;\n timeout: number;\n signal?: AbortSignal;\n }\n ): Promise<Response> {\n const controller = new AbortController();\n let timedOut = false;\n const timeoutId = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, options.timeout);\n\n const abortHandler = () => controller.abort();\n\n if (options.signal) {\n if (options.signal.aborted) {\n controller.abort();\n } else {\n options.signal.addEventListener('abort', abortHandler, { once: true });\n }\n }\n\n try {\n this.logger.debug(`${options.method} ${url}`);\n\n const response = await fetch(url, {\n method: options.method,\n headers: options.headers,\n body: options.body,\n signal: controller.signal,\n });\n\n return response;\n } catch (error) {\n if (error instanceof Error) {\n if (error.name === 'AbortError') {\n if (timedOut) {\n throw new TimeoutError(`Request timeout after ${options.timeout}ms`, options.timeout);\n }\n throw new CancelledError('Request was cancelled');\n }\n throw new NetworkError(error.message);\n }\n\n throw new NetworkError('Unknown network error');\n } finally {\n clearTimeout(timeoutId);\n if (options.signal) {\n options.signal.removeEventListener('abort', abortHandler);\n }\n }\n }\n\n async execute<T>(config: RequestConfig): Promise<T> {\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n const serializedBody = this.serializeRequestBody(processedConfig.body, headers);\n\n const response = await this.executeFetch(url, {\n method: processedConfig.method,\n headers,\n body: serializedBody,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n return this.processResponse<T>(response, processedConfig);\n }\n\n abstract request<T>(path: string, options?: RequestOptions): Promise<T>;\n abstract get<T>(path: string, params?: QueryParams): Promise<T>;\n abstract post<T>(path: string, body?: unknown): Promise<T>;\n abstract put<T>(path: string, body?: unknown): Promise<T>;\n abstract delete<T>(path: string, body?: unknown): Promise<T>;\n abstract patch<T>(path: string, body?: unknown): Promise<T>;\n\n async upload<T>(path: string, options: UploadOptions): Promise<T> {\n const formData = new FormData();\n formData.append(options.fieldName ?? 'file', options.file);\n\n if (options.additionalData) {\n Object.entries(options.additionalData).forEach(([key, value]) => {\n formData.append(key, value);\n });\n }\n\n const config: RequestConfig = {\n url: path,\n method: 'POST',\n body: formData,\n skipAuth: false,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n delete headers['Content-Type'];\n\n const response = await this.executeFetch(url, {\n method: 'POST',\n headers,\n body: formData,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n return this.processResponse<T>(response, processedConfig);\n }\n\n async download(path: string, _options?: DownloadOptions): Promise<Blob> {\n const config: RequestConfig = {\n url: path,\n method: 'GET',\n skipAuth: false,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n\n const response = await this.executeFetch(url, {\n method: 'GET',\n headers,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response, processedConfig);\n }\n\n return response.blob();\n }\n\n async *stream(path: string, options?: RequestOptions): AsyncIterable<string> {\n const config: RequestConfig = {\n url: path,\n method: options?.method ?? 'POST',\n body: options?.body,\n headers: options?.headers,\n skipAuth: options?.skipAuth,\n };\n\n const processedConfig = await this.applyRequestInterceptors(config);\n const url = this.buildBaseUrl(processedConfig.url, processedConfig.params);\n const headers = this.buildHeaders(processedConfig);\n\n const response = await this.executeFetch(url, {\n method: processedConfig.method,\n headers,\n body: processedConfig.body ? JSON.stringify(processedConfig.body) : undefined,\n timeout: processedConfig.timeout ?? this.config.timeout,\n signal: processedConfig.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response, processedConfig);\n }\n\n const reader = response.body?.getReader();\n if (!reader) {\n throw new NetworkError('No response body');\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n if (trimmedLine === '' || trimmedLine === 'data: [DONE]') continue;\n if (trimmedLine.startsWith('data: ')) {\n yield trimmedLine.slice(6);\n } else {\n yield trimmedLine;\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n}\n\nexport function createBaseHttpClient(config: HttpClientOptions): BaseHttpClient {\n return new (class extends BaseHttpClient {\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const config: RequestConfig = {\n url: path,\n method: options.method ?? 'GET',\n headers: options.headers,\n params: options.params,\n body: options.body,\n timeout: options.timeout,\n signal: options.signal,\n skipAuth: options.skipAuth,\n };\n\n return withRetry(\n () => this.execute<T>(config),\n { ...this.config.retry, ...options.retry }\n );\n }\n\n async get<T>(path: string, params?: QueryParams): Promise<T> {\n return this.request<T>(path, { method: 'GET', params });\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'POST', body });\n }\n\n async put<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'PUT', body });\n }\n\n async delete<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'DELETE', body });\n }\n\n async patch<T>(path: string, body?: unknown): Promise<T> {\n return this.request<T>(path, { method: 'PATCH', body });\n }\n })(config);\n}\n"],"names":["config"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -45,4 +45,5 @@ exports.isNetworkError = errors.isNetworkError;
45
45
  exports.isRetryableError = errors.isRetryableError;
46
46
  exports.isSdkError = errors.isSdkError;
47
47
  exports.BaseHttpClient = baseClient.BaseHttpClient;
48
+ exports.createBaseHttpClient = baseClient.createBaseHttpClient;
48
49
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,6 @@ export { createLogger, noopLogger, createCacheStore, generateCacheKey, withRetry
6
6
  export type { Logger, CacheStore, } from './utils';
7
7
  export { SdkError, NetworkError, TimeoutError, AuthenticationError, TokenExpiredError, ForbiddenError, NotFoundError, ValidationError, RateLimitError, ServerError, CancelledError, isSdkError, isNetworkError, isAuthError, isRetryableError, } from './errors';
8
8
  export type { ErrorCode, ErrorDetail } from './errors';
9
- export { BaseHttpClient } from './http';
10
- export type { HttpClientOptions } from './http';
9
+ export { BaseHttpClient, createBaseHttpClient } from './http';
10
+ export type { HttpClientOptions, HttpClientAuthConfig, RequestExecutor, ResponseProcessor, UrlBuilder, HeaderBuilder, } from './http';
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,UAAU,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,GACV,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,QAAQ,CAAC;AAEhB,YAAY,EACV,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,MAAM,EACN,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,WAAW,EACX,cAAc,EACd,UAAU,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,YAAY,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,QAAQ,EACR,WAAW,EACX,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,UAAU,EACV,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,GACV,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,eAAe,GAChB,MAAM,QAAQ,CAAC;AAEhB,YAAY,EACV,gBAAgB,EAChB,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,KAAK,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAEjB,YAAY,EACV,MAAM,EACN,UAAU,GACX,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,eAAe,EACf,cAAc,EACd,WAAW,EACX,cAAc,EACd,UAAU,EACV,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9D,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,aAAa,GACd,MAAM,QAAQ,CAAC"}
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import { calculateDelay, createRetryConfig, sleep, withRetry } from "./utils/ret
6
6
  import "./utils/string.js";
7
7
  import "./utils/encoding.js";
8
8
  import { AuthenticationError, CancelledError, ForbiddenError, NetworkError, NotFoundError, RateLimitError, SdkError, ServerError, TimeoutError, TokenExpiredError, ValidationError, isAuthError, isNetworkError, isRetryableError, isSdkError } from "./errors.js";
9
- import { BaseHttpClient } from "./http/base-client.js";
9
+ import { BaseHttpClient, createBaseHttpClient } from "./http/base-client.js";
10
10
  export {
11
11
  AuthenticationError,
12
12
  BaseHttpClient,
@@ -30,6 +30,7 @@ export {
30
30
  ValidationError,
31
31
  buildAuthHeaders,
32
32
  calculateDelay,
33
+ createBaseHttpClient,
33
34
  createCacheStore,
34
35
  createLogger,
35
36
  createRetryConfig,
@@ -1,14 +1,11 @@
1
1
  "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
6
3
  const types = require("../core/types.cjs");
7
4
  class MemoryCacheStore {
5
+ cache = /* @__PURE__ */ new Map();
6
+ maxSize;
7
+ defaultTtl;
8
8
  constructor(config = {}) {
9
- __publicField(this, "cache", /* @__PURE__ */ new Map());
10
- __publicField(this, "maxSize");
11
- __publicField(this, "defaultTtl");
12
9
  this.maxSize = config.maxSize ?? types.DEFAULT_CACHE_CONFIG.maxSize;
13
10
  this.defaultTtl = config.ttl ?? types.DEFAULT_CACHE_CONFIG.ttl;
14
11
  }