@chanl/sdk 2.0.1

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 (138) hide show
  1. package/README.md +59 -0
  2. package/dist/adapters/openai.d.ts +106 -0
  3. package/dist/adapters/openai.d.ts.map +1 -0
  4. package/dist/adapters/openai.js +185 -0
  5. package/dist/adapters/openai.js.map +1 -0
  6. package/dist/client.d.ts +74 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +293 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/errors/index.d.ts +179 -0
  11. package/dist/errors/index.d.ts.map +1 -0
  12. package/dist/errors/index.js +319 -0
  13. package/dist/errors/index.js.map +1 -0
  14. package/dist/index.d.ts +38 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +76 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/live/index.d.ts +9 -0
  19. package/dist/live/index.d.ts.map +1 -0
  20. package/dist/live/index.js +16 -0
  21. package/dist/live/index.js.map +1 -0
  22. package/dist/live/live-call.d.ts +48 -0
  23. package/dist/live/live-call.d.ts.map +1 -0
  24. package/dist/live/live-call.js +148 -0
  25. package/dist/live/live-call.js.map +1 -0
  26. package/dist/live/live-chat.d.ts +71 -0
  27. package/dist/live/live-chat.d.ts.map +1 -0
  28. package/dist/live/live-chat.js +95 -0
  29. package/dist/live/live-chat.js.map +1 -0
  30. package/dist/live/live-execution.d.ts +55 -0
  31. package/dist/live/live-execution.d.ts.map +1 -0
  32. package/dist/live/live-execution.js +170 -0
  33. package/dist/live/live-execution.js.map +1 -0
  34. package/dist/live/typed-emitter.d.ts +15 -0
  35. package/dist/live/typed-emitter.d.ts.map +1 -0
  36. package/dist/live/typed-emitter.js +40 -0
  37. package/dist/live/typed-emitter.js.map +1 -0
  38. package/dist/live/types.d.ts +24 -0
  39. package/dist/live/types.d.ts.map +1 -0
  40. package/dist/live/types.js +6 -0
  41. package/dist/live/types.js.map +1 -0
  42. package/dist/modules/agents.d.ts +378 -0
  43. package/dist/modules/agents.d.ts.map +1 -0
  44. package/dist/modules/agents.js +259 -0
  45. package/dist/modules/agents.js.map +1 -0
  46. package/dist/modules/alerts.d.ts +43 -0
  47. package/dist/modules/alerts.d.ts.map +1 -0
  48. package/dist/modules/alerts.js +56 -0
  49. package/dist/modules/alerts.js.map +1 -0
  50. package/dist/modules/audio.d.ts +47 -0
  51. package/dist/modules/audio.d.ts.map +1 -0
  52. package/dist/modules/audio.js +75 -0
  53. package/dist/modules/audio.js.map +1 -0
  54. package/dist/modules/auth.d.ts +76 -0
  55. package/dist/modules/auth.d.ts.map +1 -0
  56. package/dist/modules/auth.js +59 -0
  57. package/dist/modules/auth.js.map +1 -0
  58. package/dist/modules/calls.d.ts +825 -0
  59. package/dist/modules/calls.d.ts.map +1 -0
  60. package/dist/modules/calls.js +398 -0
  61. package/dist/modules/calls.js.map +1 -0
  62. package/dist/modules/chat.d.ts +165 -0
  63. package/dist/modules/chat.d.ts.map +1 -0
  64. package/dist/modules/chat.js +169 -0
  65. package/dist/modules/chat.js.map +1 -0
  66. package/dist/modules/health.d.ts +45 -0
  67. package/dist/modules/health.d.ts.map +1 -0
  68. package/dist/modules/health.js +22 -0
  69. package/dist/modules/health.js.map +1 -0
  70. package/dist/modules/knowledge.d.ts +202 -0
  71. package/dist/modules/knowledge.d.ts.map +1 -0
  72. package/dist/modules/knowledge.js +147 -0
  73. package/dist/modules/knowledge.js.map +1 -0
  74. package/dist/modules/mcp.d.ts +140 -0
  75. package/dist/modules/mcp.d.ts.map +1 -0
  76. package/dist/modules/mcp.js +110 -0
  77. package/dist/modules/mcp.js.map +1 -0
  78. package/dist/modules/memory.d.ts +163 -0
  79. package/dist/modules/memory.d.ts.map +1 -0
  80. package/dist/modules/memory.js +208 -0
  81. package/dist/modules/memory.js.map +1 -0
  82. package/dist/modules/personas.d.ts +168 -0
  83. package/dist/modules/personas.d.ts.map +1 -0
  84. package/dist/modules/personas.js +106 -0
  85. package/dist/modules/personas.js.map +1 -0
  86. package/dist/modules/prompts.d.ts +128 -0
  87. package/dist/modules/prompts.d.ts.map +1 -0
  88. package/dist/modules/prompts.js +93 -0
  89. package/dist/modules/prompts.js.map +1 -0
  90. package/dist/modules/scenarios.d.ts +294 -0
  91. package/dist/modules/scenarios.d.ts.map +1 -0
  92. package/dist/modules/scenarios.js +349 -0
  93. package/dist/modules/scenarios.js.map +1 -0
  94. package/dist/modules/scorecard.d.ts +642 -0
  95. package/dist/modules/scorecard.d.ts.map +1 -0
  96. package/dist/modules/scorecard.js +327 -0
  97. package/dist/modules/scorecard.js.map +1 -0
  98. package/dist/modules/tools.d.ts +222 -0
  99. package/dist/modules/tools.d.ts.map +1 -0
  100. package/dist/modules/tools.js +302 -0
  101. package/dist/modules/tools.js.map +1 -0
  102. package/dist/modules/toolsets.d.ts +173 -0
  103. package/dist/modules/toolsets.d.ts.map +1 -0
  104. package/dist/modules/toolsets.js +216 -0
  105. package/dist/modules/toolsets.js.map +1 -0
  106. package/dist/modules/transcript.d.ts +60 -0
  107. package/dist/modules/transcript.d.ts.map +1 -0
  108. package/dist/modules/transcript.js +69 -0
  109. package/dist/modules/transcript.js.map +1 -0
  110. package/dist/modules/workspace.d.ts +48 -0
  111. package/dist/modules/workspace.d.ts.map +1 -0
  112. package/dist/modules/workspace.js +49 -0
  113. package/dist/modules/workspace.js.map +1 -0
  114. package/dist/types/api.d.ts +8 -0
  115. package/dist/types/api.d.ts.map +1 -0
  116. package/dist/types/api.js +25 -0
  117. package/dist/types/api.js.map +1 -0
  118. package/dist/types/config.d.ts +70 -0
  119. package/dist/types/config.d.ts.map +1 -0
  120. package/dist/types/config.js +3 -0
  121. package/dist/types/config.js.map +1 -0
  122. package/dist/types/memory.d.ts +243 -0
  123. package/dist/types/memory.d.ts.map +1 -0
  124. package/dist/types/memory.js +9 -0
  125. package/dist/types/memory.js.map +1 -0
  126. package/dist/types/tool-calls.d.ts +61 -0
  127. package/dist/types/tool-calls.d.ts.map +1 -0
  128. package/dist/types/tool-calls.js +9 -0
  129. package/dist/types/tool-calls.js.map +1 -0
  130. package/dist/types/tools.d.ts +321 -0
  131. package/dist/types/tools.d.ts.map +1 -0
  132. package/dist/types/tools.js +9 -0
  133. package/dist/types/tools.js.map +1 -0
  134. package/dist/types/toolsets.d.ts +149 -0
  135. package/dist/types/toolsets.d.ts.map +1 -0
  136. package/dist/types/toolsets.js +8 -0
  137. package/dist/types/toolsets.js.map +1 -0
  138. package/package.json +60 -0
package/dist/client.js ADDED
@@ -0,0 +1,293 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ChanlSDK = void 0;
4
+ const audio_1 = require("./modules/audio");
5
+ const transcript_1 = require("./modules/transcript");
6
+ const scorecard_1 = require("./modules/scorecard");
7
+ const workspace_1 = require("./modules/workspace");
8
+ const alerts_1 = require("./modules/alerts");
9
+ const auth_1 = require("./modules/auth");
10
+ const health_1 = require("./modules/health");
11
+ const prompts_1 = require("./modules/prompts");
12
+ const tools_1 = require("./modules/tools");
13
+ const toolsets_1 = require("./modules/toolsets");
14
+ const scenarios_1 = require("./modules/scenarios");
15
+ const agents_1 = require("./modules/agents");
16
+ const personas_1 = require("./modules/personas");
17
+ const calls_1 = require("./modules/calls");
18
+ const mcp_1 = require("./modules/mcp");
19
+ const knowledge_1 = require("./modules/knowledge");
20
+ const memory_1 = require("./modules/memory");
21
+ const chat_1 = require("./modules/chat");
22
+ class ChanlSDK {
23
+ constructor(config) {
24
+ this.config = {
25
+ timeout: 30000,
26
+ debug: false,
27
+ retry: {
28
+ maxRetries: 3,
29
+ retryDelay: 1000,
30
+ backoffMultiplier: 2,
31
+ },
32
+ ...config,
33
+ };
34
+ // Initialize modules
35
+ this.audio = new audio_1.AudioModule(this);
36
+ this.transcript = new transcript_1.TranscriptModule(this);
37
+ this.scorecard = new scorecard_1.ScorecardModule(this);
38
+ this.workspace = new workspace_1.WorkspaceModule(this);
39
+ this.alerts = new alerts_1.AlertModule(this);
40
+ this.auth = new auth_1.AuthModule(this);
41
+ this.health = new health_1.HealthModule(this);
42
+ this.prompts = new prompts_1.PromptsModule(this);
43
+ this.tools = new tools_1.ToolsModule(this);
44
+ this.toolsets = new toolsets_1.ToolsetsModule(this);
45
+ this.scenarios = new scenarios_1.ScenariosModule(this);
46
+ this.agents = new agents_1.AgentsModule(this);
47
+ this.personas = new personas_1.PersonasModule(this);
48
+ this.calls = new calls_1.CallsModule(this);
49
+ this.mcp = new mcp_1.McpModule(this);
50
+ this.knowledge = new knowledge_1.KnowledgeModule(this);
51
+ this.memory = new memory_1.MemoryModule(this);
52
+ this.chat = new chat_1.ChatModule(this);
53
+ }
54
+ /**
55
+ * Make a request to the API
56
+ */
57
+ async request(method, url, data, config) {
58
+ // Check if data is FormData (Node.js form-data package or native FormData)
59
+ const isNodeFormData = data != null &&
60
+ typeof data
61
+ .getHeaders === "function";
62
+ const isNativeFormData = typeof FormData !== "undefined" && data instanceof FormData;
63
+ const isFormData = isNodeFormData || isNativeFormData;
64
+ // Build full URL
65
+ const fullUrl = new URL(url, this.config.baseUrl).toString();
66
+ // Build headers
67
+ const headers = {
68
+ ...this.config.headers,
69
+ ...config?.headers,
70
+ };
71
+ // Set Content-Type for non-FormData requests (FormData sets its own boundary)
72
+ if (!isFormData && !headers["Content-Type"]) {
73
+ headers["Content-Type"] = "application/json";
74
+ }
75
+ // Remove Content-Type for FormData to let fetch/runtime set it with boundary
76
+ if (isFormData) {
77
+ delete headers["Content-Type"];
78
+ }
79
+ // Add authentication
80
+ if (this.config.apiKey) {
81
+ headers["X-API-Key"] = this.config.apiKey;
82
+ }
83
+ else if (this.config.jwtToken) {
84
+ headers["Authorization"] = `Bearer ${this.config.jwtToken}`;
85
+ }
86
+ // Add workspace context
87
+ if (this.config.workspaceId) {
88
+ headers["x-workspace-id"] = this.config.workspaceId;
89
+ }
90
+ // Setup timeout via AbortController
91
+ const timeout = config?.timeout ?? this.config.timeout ?? 30000;
92
+ const controller = new AbortController();
93
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
94
+ // Build fetch options
95
+ const fetchOptions = {
96
+ method,
97
+ headers,
98
+ signal: controller.signal,
99
+ };
100
+ // Attach body if present
101
+ if (data != null) {
102
+ if (isFormData) {
103
+ // Pass FormData directly (works for both Node.js form-data and native FormData)
104
+ fetchOptions.body = data;
105
+ }
106
+ else {
107
+ fetchOptions.body = JSON.stringify(data);
108
+ }
109
+ }
110
+ try {
111
+ const response = await fetch(fullUrl, fetchOptions);
112
+ if (!response.ok) {
113
+ // Try to parse error body for a meaningful message
114
+ let errorMessage = "API Error";
115
+ try {
116
+ const errorBody = (await response.json());
117
+ errorMessage =
118
+ errorBody.error?.message || errorBody.message || "API Error";
119
+ }
120
+ catch {
121
+ // JSON parse failed, use status text
122
+ errorMessage = response.statusText || "API Error";
123
+ }
124
+ throw new Error(errorMessage);
125
+ }
126
+ // Handle 204 No Content
127
+ if (response.status === 204) {
128
+ return {};
129
+ }
130
+ const json = await response.json();
131
+ const body = json;
132
+ // Normalize response shape to { success, data, message, timestamp }.
133
+ // API responses come in several shapes depending on the service/gateway:
134
+ // 1. { success, data, message, timestamp } — standard ResponseInterceptor
135
+ // 2. { data: { ... } } — partial wrapper (no success)
136
+ // 3. { agents, pagination } — raw unwrapped
137
+ let normalized;
138
+ if (body['success'] !== undefined) {
139
+ // Case 1: fully wrapped
140
+ normalized = json;
141
+ }
142
+ else if (body['data'] !== undefined && Object.keys(body).length <= 3) {
143
+ // Case 2: has { data } wrapper but no success — add success
144
+ normalized = {
145
+ success: true,
146
+ data: body['data'],
147
+ message: body['message'] || 'Success',
148
+ timestamp: body['timestamp'] || new Date().toISOString(),
149
+ };
150
+ }
151
+ else {
152
+ // Case 3: raw unwrapped — wrap entire body as data
153
+ normalized = {
154
+ success: true,
155
+ data: json,
156
+ message: 'Success',
157
+ timestamp: new Date().toISOString(),
158
+ };
159
+ }
160
+ // Normalize _id → id in response data
161
+ if (normalized.data !== undefined) {
162
+ normalized.data = this.normalizeIds(normalized.data);
163
+ }
164
+ // Unwrap single-entity responses: { agent: {...} } → {...}
165
+ // API get-by-id endpoints return { entityName: { ...entity } }.
166
+ // Unwrap so consumers get the entity directly as `data`.
167
+ if (normalized.data !== null && typeof normalized.data === 'object' && !Array.isArray(normalized.data)) {
168
+ const dataObj = normalized.data;
169
+ const keys = Object.keys(dataObj);
170
+ const singleKey = keys.length === 1 ? keys[0] : undefined;
171
+ if (singleKey) {
172
+ const value = dataObj[singleKey];
173
+ if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
174
+ normalized.data = value;
175
+ }
176
+ }
177
+ }
178
+ return normalized;
179
+ }
180
+ catch (error) {
181
+ if (error instanceof DOMException && error.name === "AbortError") {
182
+ throw new Error(`Request timeout after ${timeout}ms`);
183
+ }
184
+ // Re-throw errors we already created above, or wrap unknown errors
185
+ if (error instanceof Error) {
186
+ throw error;
187
+ }
188
+ throw new Error("Network Error");
189
+ }
190
+ finally {
191
+ clearTimeout(timeoutId);
192
+ }
193
+ }
194
+ /**
195
+ * Make a streaming request that returns the raw Response.
196
+ *
197
+ * Unlike `request()`, this does NOT parse JSON or apply timeout.
198
+ * The caller reads `response.body` via `getReader()`.
199
+ * Used for SSE / chunked-transfer endpoints (e.g., chat streaming).
200
+ */
201
+ async requestStream(method, url, data) {
202
+ const fullUrl = new URL(url, this.config.baseUrl).toString();
203
+ const headers = {
204
+ ...this.config.headers,
205
+ 'Content-Type': 'application/json',
206
+ 'Accept': 'text/event-stream',
207
+ };
208
+ if (this.config.apiKey) {
209
+ headers['X-API-Key'] = this.config.apiKey;
210
+ }
211
+ else if (this.config.jwtToken) {
212
+ headers['Authorization'] = `Bearer ${this.config.jwtToken}`;
213
+ }
214
+ if (this.config.workspaceId) {
215
+ headers['x-workspace-id'] = this.config.workspaceId;
216
+ }
217
+ const fetchOptions = {
218
+ method,
219
+ headers,
220
+ };
221
+ if (data != null) {
222
+ fetchOptions.body = JSON.stringify(data);
223
+ }
224
+ const response = await fetch(fullUrl, fetchOptions);
225
+ if (!response.ok) {
226
+ let errorMessage = 'API Error';
227
+ try {
228
+ const errorBody = (await response.json());
229
+ errorMessage =
230
+ errorBody.error?.message || errorBody.message || 'API Error';
231
+ }
232
+ catch {
233
+ errorMessage = response.statusText || 'API Error';
234
+ }
235
+ throw new Error(errorMessage);
236
+ }
237
+ return response;
238
+ }
239
+ /**
240
+ * Recursively normalize _id → id in response data.
241
+ * Skips if id already exists to avoid overwriting.
242
+ */
243
+ normalizeIds(data) {
244
+ if (data === null || data === undefined || typeof data !== "object") {
245
+ return data;
246
+ }
247
+ if (Array.isArray(data)) {
248
+ return data.map((item) => this.normalizeIds(item));
249
+ }
250
+ const obj = data;
251
+ const result = {};
252
+ for (const [key, value] of Object.entries(obj)) {
253
+ if (key === "_id" && !("id" in obj)) {
254
+ result["id"] = value;
255
+ }
256
+ else if (key === "_id" && "id" in obj) {
257
+ // Skip _id when id already exists
258
+ continue;
259
+ }
260
+ else {
261
+ result[key] = this.normalizeIds(value);
262
+ }
263
+ }
264
+ return result;
265
+ }
266
+ /**
267
+ * Update authentication credentials
268
+ */
269
+ updateAuth(authConfig) {
270
+ if (authConfig.apiKey) {
271
+ this.config.apiKey = authConfig.apiKey;
272
+ delete this.config.jwtToken;
273
+ }
274
+ else if (authConfig.jwtToken) {
275
+ this.config.jwtToken = authConfig.jwtToken;
276
+ delete this.config.apiKey;
277
+ }
278
+ }
279
+ /**
280
+ * Get current configuration
281
+ */
282
+ getConfig() {
283
+ return { ...this.config };
284
+ }
285
+ /**
286
+ * Enable/disable debug logging
287
+ */
288
+ setDebug(enabled) {
289
+ this.config.debug = enabled;
290
+ }
291
+ }
292
+ exports.ChanlSDK = ChanlSDK;
293
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Custom Error Classes for @chanl-ai/sdk
3
+ *
4
+ * TDD Phase: RED - These errors define the error handling contract
5
+ *
6
+ * Design Principles:
7
+ * - Error transparency: Include code, message, and context for debugging
8
+ * - HTTP status awareness: Map API response codes to specific error types
9
+ * - Serializable details: Allow JSON serialization for logging
10
+ */
11
+ /**
12
+ * Options type for ChanlError constructor
13
+ * Uses explicit `| undefined` to be compatible with exactOptionalPropertyTypes
14
+ */
15
+ interface ChanlErrorOptions {
16
+ code?: string | undefined;
17
+ statusCode?: number | undefined;
18
+ details?: Record<string, unknown> | undefined;
19
+ cause?: Error | undefined;
20
+ requestId?: string | undefined;
21
+ }
22
+ /**
23
+ * Base error class for all Chanl SDK errors
24
+ */
25
+ export declare class ChanlError extends Error {
26
+ /** Error code for programmatic handling */
27
+ readonly code: string;
28
+ /** HTTP status code if from API response */
29
+ readonly statusCode?: number;
30
+ /** Additional error details for debugging */
31
+ readonly details?: Record<string, unknown>;
32
+ /** Original error if wrapping another error */
33
+ readonly cause?: Error;
34
+ /** Request ID from API for tracing */
35
+ readonly requestId?: string;
36
+ constructor(message: string, options?: ChanlErrorOptions);
37
+ /**
38
+ * Convert error to JSON for logging/serialization
39
+ */
40
+ toJSON(): Record<string, unknown>;
41
+ }
42
+ /**
43
+ * Error thrown when a requested resource is not found (404)
44
+ */
45
+ export declare class NotFoundError extends ChanlError {
46
+ /** The type of resource that was not found */
47
+ readonly resourceType: string;
48
+ /** The identifier that was used to look up the resource */
49
+ readonly resourceId: string;
50
+ constructor(resourceType: string, resourceId: string, options?: {
51
+ details?: Record<string, unknown> | undefined;
52
+ requestId?: string | undefined;
53
+ });
54
+ }
55
+ /**
56
+ * Error thrown when input validation fails (400)
57
+ */
58
+ export declare class ValidationError extends ChanlError {
59
+ /** Field-level validation errors */
60
+ readonly fieldErrors?: Record<string, string[]>;
61
+ constructor(message: string, options?: {
62
+ fieldErrors?: Record<string, string[]> | undefined;
63
+ details?: Record<string, unknown> | undefined;
64
+ requestId?: string | undefined;
65
+ });
66
+ /**
67
+ * Get validation errors for a specific field
68
+ */
69
+ getFieldErrors(field: string): string[];
70
+ /**
71
+ * Check if a specific field has validation errors
72
+ */
73
+ hasFieldError(field: string): boolean;
74
+ }
75
+ /**
76
+ * Error thrown when authentication fails (401)
77
+ */
78
+ export declare class AuthenticationError extends ChanlError {
79
+ constructor(message?: string, options?: {
80
+ details?: Record<string, unknown> | undefined;
81
+ requestId?: string | undefined;
82
+ });
83
+ }
84
+ /**
85
+ * Error thrown when authorization fails (403)
86
+ */
87
+ export declare class AuthorizationError extends ChanlError {
88
+ /** The action that was attempted */
89
+ readonly action?: string;
90
+ /** The resource that was being accessed */
91
+ readonly resource?: string;
92
+ constructor(message?: string, options?: {
93
+ action?: string | undefined;
94
+ resource?: string | undefined;
95
+ details?: Record<string, unknown> | undefined;
96
+ requestId?: string | undefined;
97
+ });
98
+ }
99
+ /**
100
+ * Error thrown when there's a conflict (409)
101
+ */
102
+ export declare class ConflictError extends ChanlError {
103
+ /** The conflicting resource identifier */
104
+ readonly conflictingResource?: string;
105
+ constructor(message: string, options?: {
106
+ conflictingResource?: string | undefined;
107
+ details?: Record<string, unknown> | undefined;
108
+ requestId?: string | undefined;
109
+ });
110
+ }
111
+ /**
112
+ * Error thrown when rate limit is exceeded (429)
113
+ */
114
+ export declare class RateLimitError extends ChanlError {
115
+ /** When the rate limit resets (Unix timestamp) */
116
+ readonly retryAfter?: number;
117
+ constructor(message?: string, options?: {
118
+ retryAfter?: number | undefined;
119
+ details?: Record<string, unknown> | undefined;
120
+ requestId?: string | undefined;
121
+ });
122
+ }
123
+ /**
124
+ * Error thrown when API server fails (5xx)
125
+ */
126
+ export declare class ServerError extends ChanlError {
127
+ constructor(message?: string, options?: {
128
+ statusCode?: number | undefined;
129
+ details?: Record<string, unknown> | undefined;
130
+ requestId?: string | undefined;
131
+ });
132
+ }
133
+ /**
134
+ * Error thrown for network/connection issues
135
+ */
136
+ export declare class NetworkError extends ChanlError {
137
+ constructor(message?: string, options?: {
138
+ cause?: Error | undefined;
139
+ details?: Record<string, unknown> | undefined;
140
+ });
141
+ }
142
+ /**
143
+ * Error thrown when request times out
144
+ */
145
+ export declare class TimeoutError extends ChanlError {
146
+ /** Timeout duration in milliseconds */
147
+ readonly timeoutMs?: number;
148
+ constructor(message?: string, options?: {
149
+ timeoutMs?: number | undefined;
150
+ details?: Record<string, unknown> | undefined;
151
+ requestId?: string | undefined;
152
+ });
153
+ }
154
+ /**
155
+ * Type guard to check if error is a ChanlError
156
+ */
157
+ export declare function isChanlError(error: unknown): error is ChanlError;
158
+ /**
159
+ * Type guard to check if error is a NotFoundError
160
+ */
161
+ export declare function isNotFoundError(error: unknown): error is NotFoundError;
162
+ /**
163
+ * Type guard to check if error is a ValidationError
164
+ */
165
+ export declare function isValidationError(error: unknown): error is ValidationError;
166
+ /**
167
+ * Type guard to check if error is an AuthenticationError
168
+ */
169
+ export declare function isAuthenticationError(error: unknown): error is AuthenticationError;
170
+ /**
171
+ * Factory function to create appropriate error from API response
172
+ */
173
+ export declare function createErrorFromResponse(statusCode: number, message: string, options?: {
174
+ details?: Record<string, unknown> | undefined;
175
+ requestId?: string | undefined;
176
+ fieldErrors?: Record<string, string[]> | undefined;
177
+ }): ChanlError;
178
+ export {};
179
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}