@attrove/sdk 0.1.5 → 0.1.7

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 (143) hide show
  1. package/cjs/{src/__mocks__ → __mocks__}/version.js +1 -2
  2. package/cjs/{src/admin-client.js → admin-client.js} +23 -22
  3. package/cjs/{src/client.js → client.js} +40 -39
  4. package/cjs/{src/constants.js → constants.js} +20 -22
  5. package/cjs/{src/errors → errors}/index.js +26 -27
  6. package/cjs/{src/index.js → index.js} +35 -36
  7. package/cjs/package.json +1 -56
  8. package/cjs/{src/resources → resources}/conversations.js +1 -2
  9. package/cjs/{src/resources → resources}/index.js +10 -11
  10. package/cjs/{src/resources → resources}/integrations.js +0 -1
  11. package/cjs/{src/resources → resources}/messages.js +3 -4
  12. package/cjs/{src/resources → resources}/query.js +4 -5
  13. package/cjs/{src/resources → resources}/users.js +0 -1
  14. package/cjs/{src/types → types}/index.js +88 -61
  15. package/cjs/{src/utils → utils}/fetch.js +67 -55
  16. package/cjs/{src/utils → utils}/index.js +5 -6
  17. package/cjs/{src/utils → utils}/streaming.js +59 -45
  18. package/cjs/{src/version.js → version.js} +3 -4
  19. package/esm/__mocks__/version.d.ts.map +1 -0
  20. package/esm/{src/__mocks__ → __mocks__}/version.js +1 -1
  21. package/esm/__mocks__/version.js.map +1 -0
  22. package/{types/src → esm}/admin-client.d.ts +2 -2
  23. package/esm/admin-client.d.ts.map +1 -0
  24. package/esm/{src/admin-client.js → admin-client.js} +18 -16
  25. package/esm/admin-client.js.map +1 -0
  26. package/{types/src → esm}/client.d.ts +6 -6
  27. package/esm/client.d.ts.map +1 -0
  28. package/esm/{src/client.js → client.js} +28 -26
  29. package/esm/client.js.map +1 -0
  30. package/{types/src → esm}/constants.d.ts +3 -4
  31. package/esm/constants.d.ts.map +1 -0
  32. package/esm/{src/constants.js → constants.js} +20 -21
  33. package/esm/constants.js.map +1 -0
  34. package/{types/src → esm}/errors/index.d.ts +1 -1
  35. package/{types/src → esm}/errors/index.d.ts.map +1 -1
  36. package/esm/{src/errors → errors}/index.js +13 -13
  37. package/esm/errors/index.js.map +1 -0
  38. package/{types/src → esm}/index.d.ts +14 -14
  39. package/esm/index.d.ts.map +1 -0
  40. package/esm/{src/index.js → index.js} +8 -8
  41. package/esm/index.js.map +1 -0
  42. package/esm/package.json +1 -56
  43. package/{types/src → esm}/resources/conversations.d.ts +2 -2
  44. package/esm/resources/conversations.d.ts.map +1 -0
  45. package/esm/{src/resources → resources}/conversations.js +1 -1
  46. package/esm/resources/conversations.js.map +1 -0
  47. package/esm/resources/index.d.ts +12 -0
  48. package/esm/resources/index.d.ts.map +1 -0
  49. package/esm/resources/index.js +9 -0
  50. package/esm/resources/index.js.map +1 -0
  51. package/{types/src → esm}/resources/integrations.d.ts +2 -2
  52. package/esm/resources/integrations.d.ts.map +1 -0
  53. package/esm/resources/integrations.js.map +1 -0
  54. package/{types/src → esm}/resources/messages.d.ts +2 -2
  55. package/esm/resources/messages.d.ts.map +1 -0
  56. package/esm/{src/resources → resources}/messages.js +3 -3
  57. package/{cjs/src → esm}/resources/messages.js.map +1 -1
  58. package/{types/src → esm}/resources/query.d.ts +2 -2
  59. package/esm/resources/query.d.ts.map +1 -0
  60. package/esm/{src/resources → resources}/query.js +4 -4
  61. package/esm/resources/query.js.map +1 -0
  62. package/{types/src → esm}/resources/users.d.ts +2 -2
  63. package/esm/resources/users.d.ts.map +1 -0
  64. package/esm/resources/users.js.map +1 -0
  65. package/{types/src → esm}/types/index.d.ts +28 -28
  66. package/esm/types/index.d.ts.map +1 -0
  67. package/esm/{src/types → types}/index.js +88 -60
  68. package/esm/types/index.js.map +1 -0
  69. package/{types/src → esm}/utils/fetch.d.ts +10 -10
  70. package/esm/utils/fetch.d.ts.map +1 -0
  71. package/esm/{src/utils → utils}/fetch.js +57 -44
  72. package/esm/utils/fetch.js.map +1 -0
  73. package/esm/utils/index.d.ts +8 -0
  74. package/esm/utils/index.d.ts.map +1 -0
  75. package/esm/utils/index.js +6 -0
  76. package/esm/utils/index.js.map +1 -0
  77. package/{types/src → esm}/utils/streaming.d.ts +5 -5
  78. package/esm/utils/streaming.d.ts.map +1 -0
  79. package/esm/{src/utils → utils}/streaming.js +47 -32
  80. package/esm/utils/streaming.js.map +1 -0
  81. package/{types/src → esm}/version.d.ts +1 -1
  82. package/esm/version.d.ts.map +1 -0
  83. package/esm/{src/version.js → version.js} +2 -2
  84. package/esm/version.js.map +1 -0
  85. package/package.json +13 -10
  86. package/cjs/README.md +0 -247
  87. package/cjs/src/__mocks__/version.js.map +0 -1
  88. package/cjs/src/admin-client.js.map +0 -1
  89. package/cjs/src/client.js.map +0 -1
  90. package/cjs/src/constants.js.map +0 -1
  91. package/cjs/src/errors/index.js.map +0 -1
  92. package/cjs/src/index.js.map +0 -1
  93. package/cjs/src/resources/conversations.js.map +0 -1
  94. package/cjs/src/resources/index.js.map +0 -1
  95. package/cjs/src/resources/integrations.js.map +0 -1
  96. package/cjs/src/resources/query.js.map +0 -1
  97. package/cjs/src/resources/users.js.map +0 -1
  98. package/cjs/src/types/index.js.map +0 -1
  99. package/cjs/src/utils/fetch.js.map +0 -1
  100. package/cjs/src/utils/index.js.map +0 -1
  101. package/cjs/src/utils/streaming.js.map +0 -1
  102. package/cjs/src/version.js.map +0 -1
  103. package/esm/README.md +0 -247
  104. package/esm/src/__mocks__/version.js.map +0 -1
  105. package/esm/src/admin-client.js.map +0 -1
  106. package/esm/src/client.js.map +0 -1
  107. package/esm/src/constants.js.map +0 -1
  108. package/esm/src/errors/index.js.map +0 -1
  109. package/esm/src/index.js.map +0 -1
  110. package/esm/src/resources/conversations.js.map +0 -1
  111. package/esm/src/resources/index.js +0 -9
  112. package/esm/src/resources/index.js.map +0 -1
  113. package/esm/src/resources/integrations.js.map +0 -1
  114. package/esm/src/resources/messages.js.map +0 -1
  115. package/esm/src/resources/query.js.map +0 -1
  116. package/esm/src/resources/users.js.map +0 -1
  117. package/esm/src/types/index.js.map +0 -1
  118. package/esm/src/utils/fetch.js.map +0 -1
  119. package/esm/src/utils/index.js +0 -6
  120. package/esm/src/utils/index.js.map +0 -1
  121. package/esm/src/utils/streaming.js.map +0 -1
  122. package/esm/src/version.js.map +0 -1
  123. package/types/src/__mocks__/version.d.ts.map +0 -1
  124. package/types/src/admin-client.d.ts.map +0 -1
  125. package/types/src/client.d.ts.map +0 -1
  126. package/types/src/constants.d.ts.map +0 -1
  127. package/types/src/index.d.ts.map +0 -1
  128. package/types/src/resources/conversations.d.ts.map +0 -1
  129. package/types/src/resources/index.d.ts +0 -12
  130. package/types/src/resources/index.d.ts.map +0 -1
  131. package/types/src/resources/integrations.d.ts.map +0 -1
  132. package/types/src/resources/messages.d.ts.map +0 -1
  133. package/types/src/resources/query.d.ts.map +0 -1
  134. package/types/src/resources/users.d.ts.map +0 -1
  135. package/types/src/types/index.d.ts.map +0 -1
  136. package/types/src/utils/fetch.d.ts.map +0 -1
  137. package/types/src/utils/index.d.ts +0 -8
  138. package/types/src/utils/index.d.ts.map +0 -1
  139. package/types/src/utils/streaming.d.ts.map +0 -1
  140. package/types/src/version.d.ts.map +0 -1
  141. /package/{types/src → esm}/__mocks__/version.d.ts +0 -0
  142. /package/esm/{src/resources → resources}/integrations.js +0 -0
  143. /package/esm/{src/resources → resources}/users.js +0 -0
@@ -74,11 +74,11 @@ export function isValidUUID(value) {
74
74
  * ```
75
75
  */
76
76
  export function createUserId(value) {
77
- if (!value || typeof value !== 'string') {
78
- return { success: false, error: 'UserId must be a non-empty string' };
77
+ if (!value || typeof value !== "string") {
78
+ return { success: false, error: "UserId must be a non-empty string" };
79
79
  }
80
80
  if (!UUID_REGEX.test(value)) {
81
- return { success: false, error: 'UserId must be a valid UUID format' };
81
+ return { success: false, error: "UserId must be a valid UUID format" };
82
82
  }
83
83
  return { success: true, value: value };
84
84
  }
@@ -86,11 +86,17 @@ export function createUserId(value) {
86
86
  * Validate and create an IntegrationId from a string.
87
87
  */
88
88
  export function createIntegrationId(value) {
89
- if (!value || typeof value !== 'string') {
90
- return { success: false, error: 'IntegrationId must be a non-empty string' };
89
+ if (!value || typeof value !== "string") {
90
+ return {
91
+ success: false,
92
+ error: "IntegrationId must be a non-empty string",
93
+ };
91
94
  }
92
95
  if (!UUID_REGEX.test(value)) {
93
- return { success: false, error: 'IntegrationId must be a valid UUID format' };
96
+ return {
97
+ success: false,
98
+ error: "IntegrationId must be a valid UUID format",
99
+ };
94
100
  }
95
101
  return { success: true, value: value };
96
102
  }
@@ -98,11 +104,11 @@ export function createIntegrationId(value) {
98
104
  * Validate and create a MessageId from a string.
99
105
  */
100
106
  export function createMessageId(value) {
101
- if (!value || typeof value !== 'string') {
102
- return { success: false, error: 'MessageId must be a non-empty string' };
107
+ if (!value || typeof value !== "string") {
108
+ return { success: false, error: "MessageId must be a non-empty string" };
103
109
  }
104
110
  if (!UUID_REGEX.test(value)) {
105
- return { success: false, error: 'MessageId must be a valid UUID format' };
111
+ return { success: false, error: "MessageId must be a valid UUID format" };
106
112
  }
107
113
  return { success: true, value: value };
108
114
  }
@@ -110,11 +116,17 @@ export function createMessageId(value) {
110
116
  * Validate and create a ConversationId from a string.
111
117
  */
112
118
  export function createConversationId(value) {
113
- if (!value || typeof value !== 'string') {
114
- return { success: false, error: 'ConversationId must be a non-empty string' };
119
+ if (!value || typeof value !== "string") {
120
+ return {
121
+ success: false,
122
+ error: "ConversationId must be a non-empty string",
123
+ };
115
124
  }
116
125
  if (!UUID_REGEX.test(value)) {
117
- return { success: false, error: 'ConversationId must be a valid UUID format' };
126
+ return {
127
+ success: false,
128
+ error: "ConversationId must be a valid UUID format",
129
+ };
118
130
  }
119
131
  return { success: true, value: value };
120
132
  }
@@ -130,11 +142,14 @@ export function createConversationId(value) {
130
142
  * ```
131
143
  */
132
144
  export function createApiKey(value) {
133
- if (!value || typeof value !== 'string') {
134
- return { success: false, error: 'ApiKey must be a non-empty string' };
145
+ if (!value || typeof value !== "string") {
146
+ return { success: false, error: "ApiKey must be a non-empty string" };
135
147
  }
136
148
  if (!API_KEY_REGEX.test(value)) {
137
- return { success: false, error: 'ApiKey must start with "sk_" followed by alphanumeric characters' };
149
+ return {
150
+ success: false,
151
+ error: 'ApiKey must start with "sk_" followed by alphanumeric characters',
152
+ };
138
153
  }
139
154
  return { success: true, value: value };
140
155
  }
@@ -150,16 +165,22 @@ export function createApiKey(value) {
150
165
  * ```
151
166
  */
152
167
  export function createISODate(value) {
153
- if (!value || typeof value !== 'string') {
154
- return { success: false, error: 'ISODateString must be a non-empty string' };
168
+ if (!value || typeof value !== "string") {
169
+ return {
170
+ success: false,
171
+ error: "ISODateString must be a non-empty string",
172
+ };
155
173
  }
156
174
  if (!ISO_DATE_REGEX.test(value)) {
157
- return { success: false, error: 'ISODateString must be a valid ISO 8601 date format' };
175
+ return {
176
+ success: false,
177
+ error: "ISODateString must be a valid ISO 8601 date format",
178
+ };
158
179
  }
159
180
  // Additional validation: ensure it parses to a valid date
160
181
  const parsed = Date.parse(value);
161
182
  if (Number.isNaN(parsed)) {
162
- return { success: false, error: 'ISODateString must be a valid date' };
183
+ return { success: false, error: "ISODateString must be a valid date" };
163
184
  }
164
185
  return { success: true, value: value };
165
186
  }
@@ -167,11 +188,11 @@ export function createISODate(value) {
167
188
  * Validate and create a UUID from a string.
168
189
  */
169
190
  export function createUUID(value) {
170
- if (!value || typeof value !== 'string') {
171
- return { success: false, error: 'UUID must be a non-empty string' };
191
+ if (!value || typeof value !== "string") {
192
+ return { success: false, error: "UUID must be a non-empty string" };
172
193
  }
173
194
  if (!UUID_REGEX.test(value)) {
174
- return { success: false, error: 'UUID must be a valid UUID format' };
195
+ return { success: false, error: "UUID must be a valid UUID format" };
175
196
  }
176
197
  return { success: true, value: value };
177
198
  }
@@ -195,37 +216,44 @@ export function isValidISODate(value) {
195
216
  */
196
217
  export const ErrorCodes = {
197
218
  // Authentication errors
198
- AUTH_MISSING_TOKEN: 'AUTH_MISSING_TOKEN',
199
- AUTH_INVALID_TOKEN: 'AUTH_INVALID_TOKEN',
200
- AUTH_EXPIRED_TOKEN: 'AUTH_EXPIRED_TOKEN',
201
- AUTH_USER_MISMATCH: 'AUTH_USER_MISMATCH',
202
- AUTH_INSUFFICIENT_PERMISSIONS: 'AUTH_INSUFFICIENT_PERMISSIONS',
219
+ AUTH_MISSING_TOKEN: "AUTH_MISSING_TOKEN",
220
+ AUTH_INVALID_TOKEN: "AUTH_INVALID_TOKEN",
221
+ AUTH_EXPIRED_TOKEN: "AUTH_EXPIRED_TOKEN",
222
+ AUTH_USER_MISMATCH: "AUTH_USER_MISMATCH",
223
+ AUTH_INSUFFICIENT_PERMISSIONS: "AUTH_INSUFFICIENT_PERMISSIONS",
203
224
  // Resource errors
204
- RESOURCE_NOT_FOUND: 'RESOURCE_NOT_FOUND',
205
- RESOURCE_ACCESS_DENIED: 'RESOURCE_ACCESS_DENIED',
206
- RESOURCE_ALREADY_EXISTS: 'RESOURCE_ALREADY_EXISTS',
207
- RESOURCE_DELETED: 'RESOURCE_DELETED',
225
+ RESOURCE_NOT_FOUND: "RESOURCE_NOT_FOUND",
226
+ RESOURCE_ACCESS_DENIED: "RESOURCE_ACCESS_DENIED",
227
+ RESOURCE_ALREADY_EXISTS: "RESOURCE_ALREADY_EXISTS",
228
+ RESOURCE_DELETED: "RESOURCE_DELETED",
208
229
  // Validation errors
209
- VALIDATION_INVALID_ID: 'VALIDATION_INVALID_ID',
210
- VALIDATION_REQUIRED_FIELD: 'VALIDATION_REQUIRED_FIELD',
211
- VALIDATION_INVALID_FORMAT: 'VALIDATION_INVALID_FORMAT',
212
- VALIDATION_OUT_OF_RANGE: 'VALIDATION_OUT_OF_RANGE',
230
+ VALIDATION_INVALID_ID: "VALIDATION_INVALID_ID",
231
+ VALIDATION_REQUIRED_FIELD: "VALIDATION_REQUIRED_FIELD",
232
+ VALIDATION_INVALID_FORMAT: "VALIDATION_INVALID_FORMAT",
233
+ VALIDATION_OUT_OF_RANGE: "VALIDATION_OUT_OF_RANGE",
213
234
  // Integration errors
214
- INTEGRATION_OAUTH_FAILED: 'INTEGRATION_OAUTH_FAILED',
215
- INTEGRATION_EMAIL_EXISTS: 'INTEGRATION_EMAIL_EXISTS',
216
- INTEGRATION_TOKEN_EXPIRED: 'INTEGRATION_TOKEN_EXPIRED',
217
- INTEGRATION_SYNC_FAILED: 'INTEGRATION_SYNC_FAILED',
218
- INTEGRATION_NOT_CONNECTED: 'INTEGRATION_NOT_CONNECTED',
235
+ INTEGRATION_OAUTH_FAILED: "INTEGRATION_OAUTH_FAILED",
236
+ INTEGRATION_EMAIL_EXISTS: "INTEGRATION_EMAIL_EXISTS",
237
+ INTEGRATION_TOKEN_EXPIRED: "INTEGRATION_TOKEN_EXPIRED",
238
+ INTEGRATION_SYNC_FAILED: "INTEGRATION_SYNC_FAILED",
239
+ INTEGRATION_NOT_CONNECTED: "INTEGRATION_NOT_CONNECTED",
219
240
  // Rate limiting
220
- RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',
241
+ RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED",
221
242
  // Server errors
222
- INTERNAL_ERROR: 'INTERNAL_ERROR',
223
- SERVICE_UNAVAILABLE: 'SERVICE_UNAVAILABLE',
243
+ INTERNAL_ERROR: "INTERNAL_ERROR",
244
+ SERVICE_UNAVAILABLE: "SERVICE_UNAVAILABLE",
224
245
  };
225
246
  /**
226
247
  * Valid stream frame types.
227
248
  */
228
- const VALID_FRAME_TYPES = new Set(['chunk', 'end', 'error', 'state', 'message_ids', 'stream_start']);
249
+ const VALID_FRAME_TYPES = new Set([
250
+ "chunk",
251
+ "end",
252
+ "error",
253
+ "state",
254
+ "message_ids",
255
+ "stream_start",
256
+ ]);
229
257
  /**
230
258
  * Runtime validator for StreamFrame objects.
231
259
  * Validates that parsed JSON has the required structure for a StreamFrame.
@@ -243,32 +271,32 @@ const VALID_FRAME_TYPES = new Set(['chunk', 'end', 'error', 'state', 'message_id
243
271
  * ```
244
272
  */
245
273
  export function isValidStreamFrame(data) {
246
- if (!data || typeof data !== 'object') {
274
+ if (!data || typeof data !== "object") {
247
275
  return false;
248
276
  }
249
277
  const frame = data;
250
278
  // All frames must have type and message_id
251
- if (typeof frame.type !== 'string' || !VALID_FRAME_TYPES.has(frame.type)) {
279
+ if (typeof frame.type !== "string" || !VALID_FRAME_TYPES.has(frame.type)) {
252
280
  return false;
253
281
  }
254
- if (typeof frame.message_id !== 'string') {
282
+ if (typeof frame.message_id !== "string") {
255
283
  return false;
256
284
  }
257
285
  // Type-specific validation
258
286
  switch (frame.type) {
259
- case 'chunk':
260
- return typeof frame.content === 'string';
261
- case 'end':
262
- return typeof frame.reason === 'string' &&
263
- ['completed', 'cancelled', 'error'].includes(frame.reason);
264
- case 'error':
265
- return typeof frame.error === 'string';
266
- case 'state':
267
- return typeof frame.state === 'string';
268
- case 'message_ids':
269
- return Array.isArray(frame.used_message_ids) &&
270
- frame.used_message_ids.every((id) => typeof id === 'string');
271
- case 'stream_start':
287
+ case "chunk":
288
+ return typeof frame.content === "string";
289
+ case "end":
290
+ return (typeof frame.reason === "string" &&
291
+ ["completed", "cancelled", "error"].includes(frame.reason));
292
+ case "error":
293
+ return typeof frame.error === "string";
294
+ case "state":
295
+ return typeof frame.state === "string";
296
+ case "message_ids":
297
+ return (Array.isArray(frame.used_message_ids) &&
298
+ frame.used_message_ids.every((id) => typeof id === "string"));
299
+ case "stream_start":
272
300
  return true;
273
301
  default:
274
302
  return false;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/sdk/src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuDH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAmB,KAAa;IAC7D,OAAO,KAAU,CAAC;AACpB,CAAC;AAED,gFAAgF;AAChF,+BAA+B;AAC/B,gFAAgF;AAChF,EAAE;AACF,6EAA6E;AAC7E,uDAAuD;AACvD,EAAE;AAEF;;;GAGG;AACH,MAAM,UAAU,GACd,iEAAiE,CAAC;AAEpE;;GAEG;AACH,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAE3C;;GAEG;AACH,MAAM,cAAc,GAClB,sEAAsE,CAAC;AAEzE;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AASD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAe,EAAE,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAa;IAEb,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,0CAA0C;SAClD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,2CAA2C;SACnD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAsB,EAAE,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAkB,EAAE,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAa;IAEb,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,2CAA2C;SACnD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,4CAA4C;SACpD,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAuB,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,kEAAkE;SAC1E,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAoB,EAAE,CAAC;AACxD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,0CAA0C;SAClD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,oDAAoD;SAC5D,CAAC;IACJ,CAAC;IACD,0DAA0D;IAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAsB,EAAE,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAa,EAAE,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxE,CAAC;AAgGD,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,wBAAwB;IACxB,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,6BAA6B,EAAE,+BAA+B;IAE9D,kBAAkB;IAClB,kBAAkB,EAAE,oBAAoB;IACxC,sBAAsB,EAAE,wBAAwB;IAChD,uBAAuB,EAAE,yBAAyB;IAClD,gBAAgB,EAAE,kBAAkB;IAEpC,oBAAoB;IACpB,qBAAqB,EAAE,uBAAuB;IAC9C,yBAAyB,EAAE,2BAA2B;IACtD,yBAAyB,EAAE,2BAA2B;IACtD,uBAAuB,EAAE,yBAAyB;IAElD,qBAAqB;IACrB,wBAAwB,EAAE,0BAA0B;IACpD,wBAAwB,EAAE,0BAA0B;IACpD,yBAAyB,EAAE,2BAA2B;IACtD,uBAAuB,EAAE,yBAAyB;IAClD,yBAAyB,EAAE,2BAA2B;IAEtD,gBAAgB;IAChB,mBAAmB,EAAE,qBAAqB;IAE1C,gBAAgB;IAChB,cAAc,EAAE,gBAAgB;IAChC,mBAAmB,EAAE,qBAAqB;CAClC,CAAC;AA6lBX;;GAEG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAChC,OAAO;IACP,KAAK;IACL,OAAO;IACP,OAAO;IACP,aAAa;IACb,cAAc;CACf,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,IAA+B,CAAC;IAE9C,2CAA2C;IAC3C,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2BAA2B;IAC3B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC;QAC3C,KAAK,KAAK;YACR,OAAO,CACL,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;gBAChC,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAC3D,CAAC;QACJ,KAAK,OAAO;YACV,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC;QACzC,KAAK,OAAO;YACV,OAAO,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC;QACzC,KAAK,aAAa;YAChB,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBACrC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAW,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CACtE,CAAC;QACJ,KAAK,cAAc;YACjB,OAAO,IAAI,CAAC;QACd;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -4,11 +4,11 @@
4
4
  * Provides a robust fetch wrapper with automatic retries, timeout handling,
5
5
  * and proper error mapping.
6
6
  */
7
- import { RetryInfo } from '../types';
7
+ import { RetryInfo } from "../types/index.js";
8
8
  /**
9
9
  * HTTP methods supported by the client.
10
10
  */
11
- export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
11
+ export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
12
12
  /**
13
13
  * Configuration for HTTP requests.
14
14
  */
@@ -23,15 +23,15 @@ export interface RequestConfig {
23
23
  * Uses a discriminated union to prevent impossible auth states.
24
24
  */
25
25
  export type HttpClientAuth = {
26
- type: 'apiKey';
26
+ type: "apiKey";
27
27
  apiKey: string;
28
28
  userId: string;
29
29
  } | {
30
- type: 'partner';
30
+ type: "partner";
31
31
  clientId: string;
32
32
  clientSecret: string;
33
33
  } | {
34
- type: 'none';
34
+ type: "none";
35
35
  };
36
36
  /**
37
37
  * Configuration for the HTTP client.
@@ -120,7 +120,7 @@ export declare class HttpClient {
120
120
  * @throws {RateLimitError} When rate limits are exceeded (429)
121
121
  * @throws {NetworkError} When network errors occur
122
122
  */
123
- get<T>(path: string, params?: Record<string, string | string[] | undefined>, config?: Omit<RequestConfig, 'method' | 'body'>): Promise<T>;
123
+ get<T>(path: string, params?: Record<string, string | string[] | undefined>, config?: Omit<RequestConfig, "method" | "body">): Promise<T>;
124
124
  /**
125
125
  * Make a POST request.
126
126
  *
@@ -129,7 +129,7 @@ export declare class HttpClient {
129
129
  * @throws {RateLimitError} When rate limits are exceeded (429)
130
130
  * @throws {NetworkError} When network errors occur
131
131
  */
132
- post<T>(path: string, body?: unknown, config?: Omit<RequestConfig, 'method'>): Promise<T>;
132
+ post<T>(path: string, body?: unknown, config?: Omit<RequestConfig, "method">): Promise<T>;
133
133
  /**
134
134
  * Make a PUT request.
135
135
  *
@@ -138,7 +138,7 @@ export declare class HttpClient {
138
138
  * @throws {NotFoundError} When resource is not found (404)
139
139
  * @throws {NetworkError} When network errors occur
140
140
  */
141
- put<T>(path: string, body?: unknown, config?: Omit<RequestConfig, 'method'>): Promise<T>;
141
+ put<T>(path: string, body?: unknown, config?: Omit<RequestConfig, "method">): Promise<T>;
142
142
  /**
143
143
  * Make a PATCH request.
144
144
  *
@@ -147,7 +147,7 @@ export declare class HttpClient {
147
147
  * @throws {NotFoundError} When resource is not found (404)
148
148
  * @throws {NetworkError} When network errors occur
149
149
  */
150
- patch<T>(path: string, body?: unknown, config?: Omit<RequestConfig, 'method'>): Promise<T>;
150
+ patch<T>(path: string, body?: unknown, config?: Omit<RequestConfig, "method">): Promise<T>;
151
151
  /**
152
152
  * Make a DELETE request.
153
153
  *
@@ -156,6 +156,6 @@ export declare class HttpClient {
156
156
  * @throws {NotFoundError} When resource is not found (404)
157
157
  * @throws {NetworkError} When network errors occur
158
158
  */
159
- delete<T>(path: string, config?: Omit<RequestConfig, 'method' | 'body'>): Promise<T>;
159
+ delete<T>(path: string, config?: Omit<RequestConfig, "method" | "body">): Promise<T>;
160
160
  }
161
161
  //# sourceMappingURL=fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../../../packages/sdk/src/utils/fetch.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,9 @@
4
4
  * Provides a robust fetch wrapper with automatic retries, timeout handling,
5
5
  * and proper error mapping.
6
6
  */
7
- import { AttroveError, ValidationError, NetworkError, TimeoutError, ServerError, createErrorFromStatus, } from '../errors';
8
- import { ErrorCodes } from '../types';
9
- import { SDK_VERSION, DEFAULT_TIMEOUT, DEFAULT_MAX_RETRIES, INITIAL_RETRY_DELAY, RETRYABLE_STATUS_SET, } from '../constants';
7
+ import { AttroveError, ValidationError, NetworkError, TimeoutError, ServerError, createErrorFromStatus, } from "../errors/index.js";
8
+ import { ErrorCodes, } from "../types/index.js";
9
+ import { SDK_VERSION, DEFAULT_TIMEOUT, DEFAULT_MAX_RETRIES, INITIAL_RETRY_DELAY, RETRYABLE_STATUS_SET, } from "../constants.js";
10
10
  /**
11
11
  * Delay execution during retry backoff.
12
12
  * Used between retry attempts to avoid overwhelming the server.
@@ -54,29 +54,33 @@ function normalizeConfig(config) {
54
54
  let auth;
55
55
  // Check for partial API key credentials
56
56
  if (config.apiKey && !config.userId) {
57
- throw new ValidationError('userId is required when using apiKey authentication', ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: 'userId', providedFields: ['apiKey'] });
57
+ throw new ValidationError("userId is required when using apiKey authentication", ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: "userId", providedFields: ["apiKey"] });
58
58
  }
59
59
  if (!config.apiKey && config.userId) {
60
- throw new ValidationError('apiKey is required when using user authentication', ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: 'apiKey', providedFields: ['userId'] });
60
+ throw new ValidationError("apiKey is required when using user authentication", ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: "apiKey", providedFields: ["userId"] });
61
61
  }
62
62
  // Check for partial partner credentials
63
63
  if (config.clientId && !config.clientSecret) {
64
- throw new ValidationError('clientSecret is required when using partner authentication', ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: 'clientSecret', providedFields: ['clientId'] });
64
+ throw new ValidationError("clientSecret is required when using partner authentication", ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: "clientSecret", providedFields: ["clientId"] });
65
65
  }
66
66
  if (!config.clientId && config.clientSecret) {
67
- throw new ValidationError('clientId is required when using partner authentication', ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: 'clientId', providedFields: ['clientSecret'] });
67
+ throw new ValidationError("clientId is required when using partner authentication", ErrorCodes.VALIDATION_REQUIRED_FIELD, { field: "clientId", providedFields: ["clientSecret"] });
68
68
  }
69
69
  if (config.apiKey && config.userId) {
70
- auth = { type: 'apiKey', apiKey: config.apiKey, userId: config.userId };
70
+ auth = { type: "apiKey", apiKey: config.apiKey, userId: config.userId };
71
71
  }
72
72
  else if (config.clientId && config.clientSecret) {
73
- auth = { type: 'partner', clientId: config.clientId, clientSecret: config.clientSecret };
73
+ auth = {
74
+ type: "partner",
75
+ clientId: config.clientId,
76
+ clientSecret: config.clientSecret,
77
+ };
74
78
  }
75
79
  else {
76
- auth = { type: 'none' };
80
+ auth = { type: "none" };
77
81
  }
78
82
  return {
79
- baseUrl: config.baseUrl.replace(/\/$/, ''),
83
+ baseUrl: config.baseUrl.replace(/\/$/, ""),
80
84
  auth,
81
85
  timeout: config.timeout ?? DEFAULT_TIMEOUT,
82
86
  maxRetries: config.maxRetries ?? DEFAULT_MAX_RETRIES,
@@ -131,20 +135,20 @@ export class HttpClient {
131
135
  */
132
136
  buildHeaders(customHeaders) {
133
137
  const headers = {
134
- 'Content-Type': 'application/json',
135
- 'Accept': 'application/json',
136
- 'User-Agent': `@attrove/sdk/${SDK_VERSION}`,
138
+ "Content-Type": "application/json",
139
+ Accept: "application/json",
140
+ "User-Agent": `@attrove/sdk/${SDK_VERSION}`,
137
141
  ...customHeaders,
138
142
  };
139
143
  const { auth } = this.config;
140
- if (auth.type === 'apiKey') {
141
- headers['Authorization'] = `Bearer ${auth.apiKey}`;
142
- headers['X-Auth-Type'] = 'api';
143
- headers['X-User-Id'] = auth.userId;
144
+ if (auth.type === "apiKey") {
145
+ headers["Authorization"] = `Bearer ${auth.apiKey}`;
146
+ headers["X-Auth-Type"] = "api";
147
+ headers["X-User-Id"] = auth.userId;
144
148
  }
145
- else if (auth.type === 'partner') {
146
- headers['Authorization'] = `Bearer ${auth.clientSecret}`;
147
- headers['X-Auth-Type'] = 'partner';
149
+ else if (auth.type === "partner") {
150
+ headers["Authorization"] = `Bearer ${auth.clientSecret}`;
151
+ headers["X-Auth-Type"] = "partner";
148
152
  }
149
153
  return headers;
150
154
  }
@@ -154,18 +158,18 @@ export class HttpClient {
154
158
  */
155
159
  parseApiError(body, status) {
156
160
  // Handle structured error response
157
- if (body && typeof body === 'object' && 'error' in body) {
161
+ if (body && typeof body === "object" && "error" in body) {
158
162
  const errorResponse = body;
159
163
  const error = errorResponse.error;
160
- if (typeof error === 'string') {
164
+ if (typeof error === "string") {
161
165
  return createErrorFromStatus(error, status);
162
166
  }
163
167
  return createErrorFromStatus(error.message, status, error.code, error.details);
164
168
  }
165
169
  // Handle unknown error format - include response preview for debugging
166
170
  let message;
167
- if (typeof body === 'string') {
168
- message = body || 'Empty error response';
171
+ if (typeof body === "string") {
172
+ message = body || "Empty error response";
169
173
  }
170
174
  else {
171
175
  try {
@@ -173,7 +177,9 @@ export class HttpClient {
173
177
  }
174
178
  catch (serializeError) {
175
179
  // Preserve serialization error context for debugging
176
- const reason = serializeError instanceof Error ? serializeError.message : 'Unknown reason';
180
+ const reason = serializeError instanceof Error
181
+ ? serializeError.message
182
+ : "Unknown reason";
177
183
  message = `Unknown error occurred (response not serializable: ${reason})`;
178
184
  }
179
185
  }
@@ -197,7 +203,7 @@ export class HttpClient {
197
203
  * @throws {ServerError} When server errors occur (5xx)
198
204
  */
199
205
  async request(path, config = {}, queryParams) {
200
- const method = config.method ?? 'GET';
206
+ const method = config.method ?? "GET";
201
207
  const url = this.buildUrl(path, queryParams);
202
208
  const headers = this.buildHeaders(config.headers);
203
209
  const timeout = config.timeout ?? this.config.timeout;
@@ -211,22 +217,22 @@ export class HttpClient {
211
217
  headers,
212
218
  signal: controller.signal,
213
219
  };
214
- if (config.body && method !== 'GET') {
220
+ if (config.body && method !== "GET") {
215
221
  fetchOptions.body = JSON.stringify(config.body);
216
222
  }
217
223
  const response = await fetch(url, fetchOptions);
218
224
  clearTimeout(timeoutId);
219
225
  // Parse response body with explicit JSON error handling
220
226
  let body;
221
- const contentType = response.headers.get('content-type');
222
- if (contentType?.includes('application/json')) {
227
+ const contentType = response.headers.get("content-type");
228
+ if (contentType?.includes("application/json")) {
223
229
  const text = await response.text();
224
230
  try {
225
231
  body = JSON.parse(text);
226
232
  }
227
233
  catch (parseError) {
228
234
  // JSON parse errors are not retryable
229
- throw new ServerError(`Server returned invalid JSON: ${parseError instanceof Error ? parseError.message : 'Parse failed'}`, response.status, { responsePreview: text.substring(0, 200) });
235
+ throw new ServerError(`Server returned invalid JSON: ${parseError instanceof Error ? parseError.message : "Parse failed"}`, response.status, { responsePreview: text.substring(0, 200) });
230
236
  }
231
237
  }
232
238
  else {
@@ -235,11 +241,11 @@ export class HttpClient {
235
241
  // Handle successful response
236
242
  if (response.ok) {
237
243
  // Handle wrapped API responses
238
- if (body && typeof body === 'object' && 'success' in body) {
244
+ if (body && typeof body === "object" && "success" in body) {
239
245
  const apiResponse = body;
240
246
  if (apiResponse.success) {
241
247
  // Paginated responses have a `pagination` field - preserve the full structure
242
- if ('pagination' in body) {
248
+ if ("pagination" in body) {
243
249
  return body;
244
250
  }
245
251
  return apiResponse.data;
@@ -252,8 +258,9 @@ export class HttpClient {
252
258
  // Handle error response
253
259
  const error = this.parseApiError(body, response.status);
254
260
  // Check if we should retry
255
- if (attempt < this.config.maxRetries && RETRYABLE_STATUS_SET.has(response.status)) {
256
- const retryAfterSeconds = parseRetryAfter(response.headers.get('retry-after'));
261
+ if (attempt < this.config.maxRetries &&
262
+ RETRYABLE_STATUS_SET.has(response.status)) {
263
+ const retryAfterSeconds = parseRetryAfter(response.headers.get("retry-after"));
257
264
  const delay = calculateRetryDelay(attempt, retryAfterSeconds);
258
265
  // Call retry callback if provided
259
266
  if (this.config.onRetry) {
@@ -274,7 +281,7 @@ export class HttpClient {
274
281
  }
275
282
  catch (err) {
276
283
  // Handle abort/timeout
277
- if (err instanceof Error && err.name === 'AbortError') {
284
+ if (err instanceof Error && err.name === "AbortError") {
278
285
  const timeoutError = new TimeoutError(`Request timed out after ${timeout}ms`);
279
286
  if (attempt < this.config.maxRetries) {
280
287
  const delay = calculateRetryDelay(attempt);
@@ -295,7 +302,7 @@ export class HttpClient {
295
302
  throw timeoutError;
296
303
  }
297
304
  // Handle network errors
298
- if (err instanceof TypeError && err.message.includes('fetch')) {
305
+ if (err instanceof TypeError && err.message.includes("fetch")) {
299
306
  const networkError = new NetworkError(`Network error: ${err.message}. Check your connection and ensure the API endpoint is accessible.`);
300
307
  if (attempt < this.config.maxRetries) {
301
308
  const delay = calculateRetryDelay(attempt);
@@ -326,7 +333,10 @@ export class HttpClient {
326
333
  originalErrorMessage: originalError.message,
327
334
  };
328
335
  if (originalError.stack) {
329
- errorDetails.originalStack = originalError.stack.split('\n').slice(0, 5).join('\n');
336
+ errorDetails.originalStack = originalError.stack
337
+ .split("\n")
338
+ .slice(0, 5)
339
+ .join("\n");
330
340
  }
331
341
  // Wrap in ServerError to indicate this was an unexpected failure
332
342
  const wrappedError = new ServerError(`Unexpected error during request: ${originalError.message}`, undefined, // No status code for unexpected errors
@@ -351,7 +361,10 @@ export class HttpClient {
351
361
  }
352
362
  }
353
363
  // Should not reach here, but just in case - use ServerError for consistency
354
- throw lastError || new ServerError('Max retries exceeded', undefined, { maxRetries: this.config.maxRetries });
364
+ throw (lastError ||
365
+ new ServerError("Max retries exceeded", undefined, {
366
+ maxRetries: this.config.maxRetries,
367
+ }));
355
368
  }
356
369
  /**
357
370
  * Make a GET request.
@@ -363,7 +376,7 @@ export class HttpClient {
363
376
  * @throws {NetworkError} When network errors occur
364
377
  */
365
378
  get(path, params, config) {
366
- return this.request(path, { ...config, method: 'GET' }, params);
379
+ return this.request(path, { ...config, method: "GET" }, params);
367
380
  }
368
381
  /**
369
382
  * Make a POST request.
@@ -374,7 +387,7 @@ export class HttpClient {
374
387
  * @throws {NetworkError} When network errors occur
375
388
  */
376
389
  post(path, body, config) {
377
- return this.request(path, { ...config, method: 'POST', body });
390
+ return this.request(path, { ...config, method: "POST", body });
378
391
  }
379
392
  /**
380
393
  * Make a PUT request.
@@ -385,7 +398,7 @@ export class HttpClient {
385
398
  * @throws {NetworkError} When network errors occur
386
399
  */
387
400
  put(path, body, config) {
388
- return this.request(path, { ...config, method: 'PUT', body });
401
+ return this.request(path, { ...config, method: "PUT", body });
389
402
  }
390
403
  /**
391
404
  * Make a PATCH request.
@@ -396,7 +409,7 @@ export class HttpClient {
396
409
  * @throws {NetworkError} When network errors occur
397
410
  */
398
411
  patch(path, body, config) {
399
- return this.request(path, { ...config, method: 'PATCH', body });
412
+ return this.request(path, { ...config, method: "PATCH", body });
400
413
  }
401
414
  /**
402
415
  * Make a DELETE request.
@@ -407,7 +420,7 @@ export class HttpClient {
407
420
  * @throws {NetworkError} When network errors occur
408
421
  */
409
422
  delete(path, config) {
410
- return this.request(path, { ...config, method: 'DELETE' });
423
+ return this.request(path, { ...config, method: "DELETE" });
411
424
  }
412
425
  }
413
426
  //# sourceMappingURL=fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../../../packages/sdk/src/utils/fetch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,YAAY,EAIZ,eAAe,EAEf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,UAAU,GAGX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAoDzB;;;GAGG;AACH,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAe,EAAE,UAAmB;IAC/D,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO,UAAU,GAAG,IAAI,CAAC;IAC3B,CAAC;IACD,kCAAkC;IAClC,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,gBAAgB,CAAC;IACtD,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,MAAqB;IAC5C,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,mCAAmC;IACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,2BAA2B;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1D,OAAO,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,MAA8B;IACrD,IAAI,IAAoB,CAAC;IAEzB,wCAAwC;IACxC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,eAAe,CACvB,qDAAqD,EACrD,UAAU,CAAC,yBAAyB,EACpC,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE,CAChD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,IAAI,eAAe,CACvB,mDAAmD,EACnD,UAAU,CAAC,yBAAyB,EACpC,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,QAAQ,CAAC,EAAE,CAChD,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,IAAI,eAAe,CACvB,4DAA4D,EAC5D,UAAU,CAAC,yBAAyB,EACpC,EAAE,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,UAAU,CAAC,EAAE,CACxD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,IAAI,eAAe,CACvB,wDAAwD,EACxD,UAAU,CAAC,yBAAyB,EACpC,EAAE,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,cAAc,CAAC,EAAE,CACxD,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC1E,CAAC;SAAM,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAClD,IAAI,GAAG;YACL,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,YAAY,EAAE,MAAM,CAAC,YAAY;SAClC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAC1C,IAAI;QACJ,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,eAAe;QAC1C,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,mBAAmB;QACpD,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,UAAU;IAGrB,YAAY,MAA8B;QACxC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACK,QAAQ,CACd,IAAY,EACZ,MAAsD;QAEtD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxD,CAAC;yBAAM,CAAC;wBACN,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,YAAY,CAClB,aAAsC;QAEtC,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,kBAAkB;YAC1B,YAAY,EAAE,gBAAgB,WAAW,EAAE;YAC3C,GAAG,aAAa;SACjB,CAAC;QAEF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAE7B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;YACnD,OAAO,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;YAC/B,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,YAAY,EAAE,CAAC;YACzD,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;QACrC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACK,aAAa,CAAC,IAAa,EAAE,MAAc;QACjD,mCAAmC;QACnC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACxD,MAAM,aAAa,GAAG,IAAoC,CAAC;YAC3D,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;YAElC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,qBAAqB,CAC1B,KAAK,CAAC,OAAO,EACb,MAAM,EACN,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,CACd,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,IAAI,OAAe,CAAC;QACpB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,GAAG,IAAI,IAAI,sBAAsB,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,OAAO,GAAG,4BAA4B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACjF,CAAC;YAAC,OAAO,cAAc,EAAE,CAAC;gBACxB,qDAAqD;gBACrD,MAAM,MAAM,GACV,cAAc,YAAY,KAAK;oBAC7B,CAAC,CAAC,cAAc,CAAC,OAAO;oBACxB,CAAC,CAAC,gBAAgB,CAAC;gBACvB,OAAO,GAAG,sDAAsD,MAAM,GAAG,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,OAAO,qBAAqB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,SAAwB,EAAE,EAC1B,WAA2D;QAE3D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAEtD,IAAI,SAA4B,CAAC;QAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YACnE,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;gBACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;gBAEhE,MAAM,YAAY,GAAgB;oBAChC,MAAM;oBACN,OAAO;oBACP,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC;gBAEF,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;oBACpC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAClD,CAAC;gBAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;gBAChD,YAAY,CAAC,SAAS,CAAC,CAAC;gBAExB,wDAAwD;gBACxD,IAAI,IAAa,CAAC;gBAClB,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACzD,IAAI,WAAW,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;oBAC9C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACnC,IAAI,CAAC;wBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC;oBAAC,OAAO,UAAU,EAAE,CAAC;wBACpB,sCAAsC;wBACtC,MAAM,IAAI,WAAW,CACnB,iCAAiC,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,EACpG,QAAQ,CAAC,MAAM,EACf,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC5C,CAAC;oBACJ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBAC/B,CAAC;gBAED,6BAA6B;gBAC7B,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAChB,+BAA+B;oBAC/B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;wBAC1D,MAAM,WAAW,GAAG,IAAsB,CAAC;wBAC3C,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;4BACxB,8EAA8E;4BAC9E,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gCACzB,OAAO,IAAS,CAAC;4BACnB,CAAC;4BACD,OAAO,WAAW,CAAC,IAAS,CAAC;wBAC/B,CAAC;wBACD,8BAA8B;wBAC9B,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAClD,CAAC;oBACD,OAAO,IAAS,CAAC;gBACnB,CAAC;gBAED,wBAAwB;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAExD,2BAA2B;gBAC3B,IACE,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;oBAChC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EACzC,CAAC;oBACD,MAAM,iBAAiB,GAAG,eAAe,CACvC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CACpC,CAAC;oBACF,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;oBAE9D,kCAAkC;oBAClC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACxB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;4BAClB,OAAO,EAAE,OAAO,GAAG,CAAC;4BACpB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;4BAClC,KAAK;4BACL,OAAO,EAAE,KAAK;4BACd,GAAG;4BACH,MAAM;yBACP,CAAC,CAAC;oBACL,CAAC;oBAED,SAAS,GAAG,KAAK,CAAC;oBAClB,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;oBACnB,SAAS;gBACX,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,uBAAuB;gBACvB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACtD,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,2BAA2B,OAAO,IAAI,CACvC,CAAC;oBACF,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;wBACrC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;wBAE3C,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;4BACxB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gCAClB,OAAO,EAAE,OAAO,GAAG,CAAC;gCACpB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gCAClC,KAAK,EAAE,YAAY;gCACnB,OAAO,EAAE,KAAK;gCACd,GAAG;gCACH,MAAM;6BACP,CAAC,CAAC;wBACL,CAAC;wBAED,SAAS,GAAG,YAAY,CAAC;wBACzB,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;wBACnB,SAAS;oBACX,CAAC;oBACD,MAAM,YAAY,CAAC;gBACrB,CAAC;gBAED,wBAAwB;gBACxB,IAAI,GAAG,YAAY,SAAS,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC9D,MAAM,YAAY,GAAG,IAAI,YAAY,CACnC,kBAAkB,GAAG,CAAC,OAAO,oEAAoE,CAClG,CAAC;oBACF,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;wBACrC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;wBAE3C,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;4BACxB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gCAClB,OAAO,EAAE,OAAO,GAAG,CAAC;gCACpB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;gCAClC,KAAK,EAAE,YAAY;gCACnB,OAAO,EAAE,KAAK;gCACd,GAAG;gCACH,MAAM;6BACP,CAAC,CAAC;wBACL,CAAC;wBAED,SAAS,GAAG,YAAY,CAAC;wBACzB,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;wBACnB,SAAS;oBACX,CAAC;oBACD,MAAM,YAAY,CAAC;gBACrB,CAAC;gBAED,iEAAiE;gBACjE,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;oBAChC,MAAM,GAAG,CAAC;gBACZ,CAAC;gBAED,kEAAkE;gBAClE,MAAM,aAAa,GACjB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtD,MAAM,YAAY,GAA4B;oBAC5C,iBAAiB,EAAE,aAAa,CAAC,IAAI;oBACrC,oBAAoB,EAAE,aAAa,CAAC,OAAO;iBAC5C,CAAC;gBACF,IAAI,aAAa,CAAC,KAAK,EAAE,CAAC;oBACxB,YAAY,CAAC,aAAa,GAAG,aAAa,CAAC,KAAK;yBAC7C,KAAK,CAAC,IAAI,CAAC;yBACX,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;yBACX,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;gBAED,iEAAiE;gBACjE,MAAM,YAAY,GAAG,IAAI,WAAW,CAClC,oCAAoC,aAAa,CAAC,OAAO,EAAE,EAC3D,SAAS,EAAE,uCAAuC;gBAClD,YAAY,CACb,CAAC;gBACF,SAAS,GAAG,YAAY,CAAC;gBAEzB,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;oBACrC,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;oBAE3C,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACxB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;4BAClB,OAAO,EAAE,OAAO,GAAG,CAAC;4BACpB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;4BAClC,KAAK,EAAE,YAAY;4BACnB,OAAO,EAAE,KAAK;4BACd,GAAG;4BACH,MAAM;yBACP,CAAC,CAAC;oBACL,CAAC;oBAED,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;oBACnB,SAAS;gBACX,CAAC;gBAED,MAAM,YAAY,CAAC;YACrB,CAAC;QACH,CAAC;QAED,4EAA4E;QAC5E,MAAM,CACJ,SAAS;YACT,IAAI,WAAW,CAAC,sBAAsB,EAAE,SAAS,EAAE;gBACjD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU;aACnC,CAAC,CACH,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,GAAG,CACD,IAAY,EACZ,MAAsD,EACtD,MAA+C;QAE/C,OAAO,IAAI,CAAC,OAAO,CAAI,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,CACF,IAAY,EACZ,IAAc,EACd,MAAsC;QAEtC,OAAO,IAAI,CAAC,OAAO,CAAI,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;OAOG;IACH,GAAG,CACD,IAAY,EACZ,IAAc,EACd,MAAsC;QAEtC,OAAO,IAAI,CAAC,OAAO,CAAI,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CACH,IAAY,EACZ,IAAc,EACd,MAAsC;QAEtC,OAAO,IAAI,CAAC,OAAO,CAAI,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CACJ,IAAY,EACZ,MAA+C;QAE/C,OAAO,IAAI,CAAC,OAAO,CAAI,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;CACF"}