@runtypelabs/sdk 0.1.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 (62) hide show
  1. package/README.md +398 -0
  2. package/dist/batch-builder.d.ts +106 -0
  3. package/dist/batch-builder.d.ts.map +1 -0
  4. package/dist/batch-builder.js +124 -0
  5. package/dist/batch-builder.js.map +1 -0
  6. package/dist/batches-namespace.d.ts +132 -0
  7. package/dist/batches-namespace.d.ts.map +1 -0
  8. package/dist/batches-namespace.js +128 -0
  9. package/dist/batches-namespace.js.map +1 -0
  10. package/dist/client.d.ts +121 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +485 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/endpoints.d.ts +560 -0
  15. package/dist/endpoints.d.ts.map +1 -0
  16. package/dist/endpoints.js +725 -0
  17. package/dist/endpoints.js.map +1 -0
  18. package/dist/eval-builder.d.ts +216 -0
  19. package/dist/eval-builder.d.ts.map +1 -0
  20. package/dist/eval-builder.js +225 -0
  21. package/dist/eval-builder.js.map +1 -0
  22. package/dist/evals-namespace.d.ts +205 -0
  23. package/dist/evals-namespace.d.ts.map +1 -0
  24. package/dist/evals-namespace.js +208 -0
  25. package/dist/evals-namespace.js.map +1 -0
  26. package/dist/flow-builder.d.ts +620 -0
  27. package/dist/flow-builder.d.ts.map +1 -0
  28. package/dist/flow-builder.js +565 -0
  29. package/dist/flow-builder.js.map +1 -0
  30. package/dist/flow-result.d.ts +117 -0
  31. package/dist/flow-result.d.ts.map +1 -0
  32. package/dist/flow-result.js +175 -0
  33. package/dist/flow-result.js.map +1 -0
  34. package/dist/flows-namespace.d.ts +430 -0
  35. package/dist/flows-namespace.d.ts.map +1 -0
  36. package/dist/flows-namespace.js +679 -0
  37. package/dist/flows-namespace.js.map +1 -0
  38. package/dist/index.d.ts +23 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +76 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/prompts-namespace.d.ts +236 -0
  43. package/dist/prompts-namespace.d.ts.map +1 -0
  44. package/dist/prompts-namespace.js +222 -0
  45. package/dist/prompts-namespace.js.map +1 -0
  46. package/dist/runtype.d.ts +232 -0
  47. package/dist/runtype.d.ts.map +1 -0
  48. package/dist/runtype.js +367 -0
  49. package/dist/runtype.js.map +1 -0
  50. package/dist/stream-utils.d.ts +58 -0
  51. package/dist/stream-utils.d.ts.map +1 -0
  52. package/dist/stream-utils.js +348 -0
  53. package/dist/stream-utils.js.map +1 -0
  54. package/dist/transform.d.ts +21 -0
  55. package/dist/transform.d.ts.map +1 -0
  56. package/dist/transform.js +170 -0
  57. package/dist/transform.js.map +1 -0
  58. package/dist/types.d.ts +626 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +7 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +61 -0
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ /**
3
+ * SSE Stream Utilities for FlowBuilder
4
+ *
5
+ * Provides utilities for parsing Server-Sent Events (SSE) streams
6
+ * from the Runtype API dispatch endpoint.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.parseSSEChunk = parseSSEChunk;
10
+ exports.parseFinalBuffer = parseFinalBuffer;
11
+ exports.processStream = processStream;
12
+ exports.streamEvents = streamEvents;
13
+ // ============================================================================
14
+ // SSE Parsing Utilities
15
+ // ============================================================================
16
+ /**
17
+ * Parse SSE stream chunks into individual events
18
+ *
19
+ * @param chunk - New chunk from the stream
20
+ * @param buffer - Previous incomplete buffer
21
+ * @returns Parsed events and remaining buffer
22
+ */
23
+ function parseSSEChunk(chunk, buffer) {
24
+ buffer += chunk;
25
+ const lines = buffer.split('\n');
26
+ const remainingBuffer = lines.pop() || '';
27
+ const events = [];
28
+ for (const line of lines) {
29
+ if (line.startsWith('data: ')) {
30
+ const jsonStr = line.slice(6).trim();
31
+ if (jsonStr && jsonStr !== '[DONE]') {
32
+ events.push(jsonStr);
33
+ }
34
+ }
35
+ }
36
+ return { events, remainingBuffer };
37
+ }
38
+ /**
39
+ * Parse final buffer if it contains a complete event
40
+ *
41
+ * @param buffer - Remaining buffer after stream ends
42
+ * @returns Parsed event JSON string or null
43
+ */
44
+ function parseFinalBuffer(buffer) {
45
+ if (buffer.trim() && buffer.startsWith('data: ')) {
46
+ const jsonStr = buffer.slice(6).trim();
47
+ if (jsonStr && jsonStr !== '[DONE]') {
48
+ return jsonStr;
49
+ }
50
+ }
51
+ return null;
52
+ }
53
+ // ============================================================================
54
+ // Stream Processing
55
+ // ============================================================================
56
+ /**
57
+ * Process a streaming response with callbacks
58
+ *
59
+ * @param response - Fetch Response object with streaming body
60
+ * @param callbacks - Callbacks for different event types
61
+ * @returns Promise resolving to FlowSummary when complete
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * const response = await client.dispatch(config)
66
+ * const summary = await processStream(response, {
67
+ * onStepChunk: (chunk) => process.stdout.write(chunk),
68
+ * onFlowComplete: (event) => console.log('Done!'),
69
+ * })
70
+ * ```
71
+ */
72
+ async function processStream(response, callbacks = {}) {
73
+ if (!response.ok) {
74
+ const error = new Error(`HTTP ${response.status}: ${response.statusText}`);
75
+ callbacks.onError?.(error);
76
+ throw error;
77
+ }
78
+ const reader = response.body?.getReader();
79
+ if (!reader) {
80
+ const error = new Error('Response body is not readable');
81
+ callbacks.onError?.(error);
82
+ throw error;
83
+ }
84
+ const decoder = new TextDecoder();
85
+ let buffer = '';
86
+ // Track results for summary
87
+ const results = new Map();
88
+ let flowSummary = {
89
+ flowId: '',
90
+ flowName: '',
91
+ totalSteps: 0,
92
+ successfulSteps: 0,
93
+ failedSteps: 0,
94
+ executionTime: 0,
95
+ success: true,
96
+ };
97
+ // Check if content-type is application/json (non-streaming response)
98
+ const contentType = response.headers.get('content-type');
99
+ if (contentType?.includes('application/json')) {
100
+ try {
101
+ const data = await response.json();
102
+ // Check if this is a structured non-streaming response with events
103
+ if (data.events && Array.isArray(data.events)) {
104
+ for (const event of data.events) {
105
+ handleEvent(event, callbacks, results, flowSummary);
106
+ }
107
+ // Also populate summary from top-level fields if available
108
+ if (data.flowId)
109
+ flowSummary.flowId = data.flowId;
110
+ if (data.recordId)
111
+ flowSummary.flowName = data.recordId; // Mapping might be loose here
112
+ // Use execution summary if present
113
+ if (data.executionSummary) {
114
+ const s = data.executionSummary;
115
+ if (s.flowId)
116
+ flowSummary.flowId = s.flowId;
117
+ if (s.flowName)
118
+ flowSummary.flowName = s.flowName;
119
+ if (s.totalSteps)
120
+ flowSummary.totalSteps = s.totalSteps;
121
+ if (s.successfulSteps)
122
+ flowSummary.successfulSteps = s.successfulSteps;
123
+ if (s.failedSteps)
124
+ flowSummary.failedSteps = s.failedSteps;
125
+ if (s.executionTime)
126
+ flowSummary.executionTime = s.executionTime;
127
+ }
128
+ return {
129
+ flowId: flowSummary.flowId || '',
130
+ flowName: flowSummary.flowName || '',
131
+ totalSteps: flowSummary.totalSteps || 0,
132
+ successfulSteps: flowSummary.successfulSteps || 0,
133
+ failedSteps: flowSummary.failedSteps || 0,
134
+ executionTime: flowSummary.executionTime || 0,
135
+ results,
136
+ success: flowSummary.success ?? true,
137
+ };
138
+ }
139
+ // Handle JSON responses without events array (API returned non-streaming response)
140
+ // This can happen if stream_response wasn't properly sent to the API
141
+ if (data.error) {
142
+ const error = new Error(data.error);
143
+ callbacks.onError?.(error);
144
+ throw error;
145
+ }
146
+ // For unexpected JSON formats, throw an error rather than falling through
147
+ // to SSE parsing (the body is already consumed)
148
+ throw new Error(`Unexpected API response format. Expected SSE stream but received JSON: ${JSON.stringify(data).slice(0, 200)}`);
149
+ }
150
+ catch (e) {
151
+ // Only fall back to stream parsing if JSON parsing itself failed (SyntaxError)
152
+ // NOT if we got valid JSON with unexpected structure
153
+ if (e instanceof SyntaxError) {
154
+ console.warn('Failed to parse JSON response, falling back to stream parsing', e);
155
+ }
156
+ else {
157
+ // Re-throw structural/API errors
158
+ flowSummary.success = false;
159
+ throw e;
160
+ }
161
+ }
162
+ }
163
+ try {
164
+ while (true) {
165
+ const { done, value } = await reader.read();
166
+ if (done)
167
+ break;
168
+ const chunk = decoder.decode(value, { stream: true });
169
+ const { events, remainingBuffer } = parseSSEChunk(chunk, buffer);
170
+ buffer = remainingBuffer;
171
+ for (const eventStr of events) {
172
+ try {
173
+ const event = JSON.parse(eventStr);
174
+ handleEvent(event, callbacks, results, flowSummary);
175
+ }
176
+ catch (parseError) {
177
+ // Skip malformed JSON
178
+ console.warn('Failed to parse SSE event:', eventStr);
179
+ }
180
+ }
181
+ }
182
+ // Process final buffer
183
+ const finalEvent = parseFinalBuffer(buffer);
184
+ if (finalEvent) {
185
+ try {
186
+ const event = JSON.parse(finalEvent);
187
+ handleEvent(event, callbacks, results, flowSummary);
188
+ }
189
+ catch (parseError) {
190
+ // Skip malformed JSON
191
+ }
192
+ }
193
+ }
194
+ catch (error) {
195
+ flowSummary.success = false;
196
+ const err = error instanceof Error ? error : new Error(String(error));
197
+ callbacks.onError?.(err);
198
+ throw err;
199
+ }
200
+ finally {
201
+ reader.releaseLock();
202
+ }
203
+ return {
204
+ flowId: flowSummary.flowId || '',
205
+ flowName: flowSummary.flowName || '',
206
+ totalSteps: flowSummary.totalSteps || 0,
207
+ successfulSteps: flowSummary.successfulSteps || 0,
208
+ failedSteps: flowSummary.failedSteps || 0,
209
+ executionTime: flowSummary.executionTime || 0,
210
+ results,
211
+ success: flowSummary.success ?? true,
212
+ };
213
+ }
214
+ /**
215
+ * Handle a single SSE event
216
+ */
217
+ function handleEvent(event, callbacks, results, summary) {
218
+ switch (event.type) {
219
+ case 'flow_start':
220
+ summary.flowId = event.flowId;
221
+ summary.flowName = event.flowName;
222
+ summary.totalSteps = event.totalSteps;
223
+ callbacks.onFlowStart?.(event);
224
+ break;
225
+ case 'step_start':
226
+ callbacks.onStepStart?.(event);
227
+ break;
228
+ case 'step_chunk':
229
+ // Normalize API's 'text' field to 'chunk' for consistency
230
+ // The API sends 'text' but our types use 'chunk'
231
+ const chunkText = event.chunk || event.text || '';
232
+ callbacks.onStepChunk?.(chunkText, event);
233
+ break;
234
+ case 'step_complete':
235
+ results.set(event.name, event.result);
236
+ callbacks.onStepComplete?.(event.result, event);
237
+ break;
238
+ case 'flow_complete':
239
+ summary.totalSteps = event.totalSteps;
240
+ summary.successfulSteps = event.successfulSteps;
241
+ summary.failedSteps = event.failedSteps;
242
+ summary.executionTime = event.executionTime;
243
+ summary.success = event.failedSteps === 0;
244
+ callbacks.onFlowComplete?.(event);
245
+ break;
246
+ case 'flow_error':
247
+ summary.success = false;
248
+ callbacks.onError?.(new Error(event.error));
249
+ break;
250
+ case 'flow_paused':
251
+ // Not strictly part of standard FlowSummary but useful for debugging
252
+ // The client.ts runWithLocalTools handles this for logic flow
253
+ break;
254
+ case 'step_waiting_local':
255
+ // Notification that local tool execution is pending
256
+ break;
257
+ }
258
+ }
259
+ // ============================================================================
260
+ // Async Iterator for Advanced Use Cases
261
+ // ============================================================================
262
+ /**
263
+ * Create an async iterator over SSE events
264
+ *
265
+ * @param response - Fetch Response object with streaming body
266
+ * @yields Parsed SSE events
267
+ *
268
+ * @example
269
+ * ```typescript
270
+ * const response = await client.dispatch(config)
271
+ * for await (const event of streamEvents(response)) {
272
+ * console.log(event.type, event)
273
+ * }
274
+ * ```
275
+ */
276
+ async function* streamEvents(response) {
277
+ if (!response.ok) {
278
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
279
+ }
280
+ // Check if content-type is application/json (non-streaming response)
281
+ const contentType = response.headers.get('content-type');
282
+ if (contentType?.includes('application/json')) {
283
+ try {
284
+ const data = await response.json();
285
+ // Yield events from array if present
286
+ if (data.events && Array.isArray(data.events)) {
287
+ for (const event of data.events) {
288
+ yield event;
289
+ }
290
+ }
291
+ return;
292
+ }
293
+ catch (e) {
294
+ console.warn('Failed to parse JSON response in streamEvents', e);
295
+ // Fall through to stream parsing if JSON parsing fails?
296
+ // No, body is consumed.
297
+ throw e;
298
+ }
299
+ }
300
+ const reader = response.body?.getReader();
301
+ if (!reader) {
302
+ throw new Error('Response body is not readable');
303
+ }
304
+ const decoder = new TextDecoder();
305
+ let buffer = '';
306
+ try {
307
+ while (true) {
308
+ const { done, value } = await reader.read();
309
+ if (done)
310
+ break;
311
+ const chunk = decoder.decode(value, { stream: true });
312
+ const { events, remainingBuffer } = parseSSEChunk(chunk, buffer);
313
+ buffer = remainingBuffer;
314
+ for (const eventStr of events) {
315
+ try {
316
+ const event = JSON.parse(eventStr);
317
+ // Normalize API's 'text' field to 'chunk' for step_chunk events
318
+ if (event.type === 'step_chunk' && 'text' in event && !('chunk' in event)) {
319
+ event.chunk = event.text;
320
+ }
321
+ yield event;
322
+ }
323
+ catch {
324
+ // Skip malformed JSON
325
+ }
326
+ }
327
+ }
328
+ // Process final buffer
329
+ const finalEvent = parseFinalBuffer(buffer);
330
+ if (finalEvent) {
331
+ try {
332
+ const event = JSON.parse(finalEvent);
333
+ // Normalize API's 'text' field to 'chunk' for step_chunk events
334
+ if (event.type === 'step_chunk' && 'text' in event && !('chunk' in event)) {
335
+ event.chunk = event.text;
336
+ }
337
+ yield event;
338
+ }
339
+ catch {
340
+ // Skip malformed JSON
341
+ }
342
+ }
343
+ }
344
+ finally {
345
+ reader.releaseLock();
346
+ }
347
+ }
348
+ //# sourceMappingURL=stream-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../src/stream-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Transformation utilities for converting between camelCase (client) and snake_case (API)
3
+ */
4
+ /**
5
+ * Transform API response from snake_case to camelCase
6
+ * Special handling: preserves metadata field keys
7
+ */
8
+ export declare function transformResponse<T>(data: any): T;
9
+ /**
10
+ * Transform client request from camelCase to snake_case
11
+ */
12
+ export declare function transformRequest(data: any): any;
13
+ /**
14
+ * Transform URL query parameters from camelCase to snake_case
15
+ */
16
+ export declare function transformQueryParams(params: {
17
+ [key: string]: any;
18
+ }): {
19
+ [key: string]: string;
20
+ };
21
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"AAAA;;GAEG;AAoEH;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,CAMjD;AAwED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAM/C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAe9F"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ /**
3
+ * Transformation utilities for converting between camelCase (client) and snake_case (API)
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.transformResponse = transformResponse;
7
+ exports.transformRequest = transformRequest;
8
+ exports.transformQueryParams = transformQueryParams;
9
+ /**
10
+ * Convert snake_case string to camelCase
11
+ */
12
+ function snakeToCamel(str) {
13
+ return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
14
+ }
15
+ /**
16
+ * Recursively convert object keys from snake_case to camelCase
17
+ * Special handling: preserves keys within 'metadata', 'metadataSchema', and 'parametersSchema.properties'
18
+ */
19
+ function convertKeysToCamelCase(obj, preserveKeys = false) {
20
+ if (Array.isArray(obj)) {
21
+ return obj.map(item => convertKeysToCamelCase(item, preserveKeys));
22
+ }
23
+ else if (obj !== null && typeof obj === 'object' && !(obj instanceof Date)) {
24
+ return Object.keys(obj).reduce((result, key) => {
25
+ const camelKey = preserveKeys ? key : snakeToCamel(key);
26
+ // Special handling for metadataSchema: convert top-level keys but preserve nested content
27
+ if (key === 'metadata_schema') {
28
+ result[camelKey] = Object.keys(obj[key]).reduce((schemaResult, schemaKey) => {
29
+ const camelSchemaKey = snakeToCamel(schemaKey);
30
+ // Preserve contents of key_types and keys, but convert the rest
31
+ const shouldPreserveContent = schemaKey === 'key_types' || schemaKey === 'keys';
32
+ schemaResult[camelSchemaKey] = convertKeysToCamelCase(obj[key][schemaKey], shouldPreserveContent);
33
+ return schemaResult;
34
+ }, {});
35
+ return result;
36
+ }
37
+ // Special handling for parametersSchema: convert top-level keys but preserve property names
38
+ if (key === 'parameters_schema') {
39
+ result[camelKey] = Object.keys(obj[key]).reduce((schemaResult, schemaKey) => {
40
+ const camelSchemaKey = snakeToCamel(schemaKey);
41
+ // Special handling for 'properties': preserve property names but convert their attributes
42
+ if (schemaKey === 'properties') {
43
+ schemaResult[camelSchemaKey] = Object.keys(obj[key][schemaKey]).reduce((propsResult, propName) => {
44
+ // Preserve the property name (e.g., 'param1', 'param2', 'testParam')
45
+ // But convert the property attributes (default_value -> defaultValue, min_length -> minLength, etc.)
46
+ propsResult[propName] = convertKeysToCamelCase(obj[key][schemaKey][propName], false);
47
+ return propsResult;
48
+ }, {});
49
+ }
50
+ else {
51
+ schemaResult[camelSchemaKey] = convertKeysToCamelCase(obj[key][schemaKey], false);
52
+ }
53
+ return schemaResult;
54
+ }, {});
55
+ return result;
56
+ }
57
+ // Preserve original keys within metadata fields and HTTP headers
58
+ // Headers like 'Accept', 'X-Auth-Token' should not be converted
59
+ const shouldPreserveNextLevel = key === 'metadata' ||
60
+ key === 'metadata_labels' ||
61
+ key === 'headers' ||
62
+ preserveKeys;
63
+ result[camelKey] = convertKeysToCamelCase(obj[key], shouldPreserveNextLevel);
64
+ return result;
65
+ }, {});
66
+ }
67
+ return obj;
68
+ }
69
+ /**
70
+ * Transform API response from snake_case to camelCase
71
+ * Special handling: preserves metadata field keys
72
+ */
73
+ function transformResponse(data) {
74
+ if (data === null || data === undefined) {
75
+ return data;
76
+ }
77
+ return convertKeysToCamelCase(data);
78
+ }
79
+ /**
80
+ * Convert camelCase string to snake_case
81
+ */
82
+ function camelToSnake(str) {
83
+ return str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);
84
+ }
85
+ /**
86
+ * Recursively convert object keys from camelCase to snake_case
87
+ * Special handling: preserves keys within 'metadata', 'metadataSchema', and 'parametersSchema.properties'
88
+ */
89
+ function convertKeysToSnakeCase(obj, preserveKeys = false) {
90
+ if (Array.isArray(obj)) {
91
+ return obj.map(item => convertKeysToSnakeCase(item, preserveKeys));
92
+ }
93
+ else if (obj !== null && typeof obj === 'object' && !(obj instanceof Date)) {
94
+ return Object.keys(obj).reduce((result, key) => {
95
+ const snakeKey = preserveKeys ? key : camelToSnake(key);
96
+ // Special handling for metadataSchema: convert top-level keys but preserve nested content
97
+ if (key === 'metadataSchema' || snakeKey === 'metadata_schema') {
98
+ const schemaKey = camelToSnake(key);
99
+ result[schemaKey] = Object.keys(obj[key]).reduce((schemaResult, schemaKey) => {
100
+ const snakeSchemaKey = camelToSnake(schemaKey);
101
+ // Preserve contents of keyTypes and keys, but convert the rest
102
+ const shouldPreserveContent = schemaKey === 'keyTypes' || schemaKey === 'keys' ||
103
+ snakeSchemaKey === 'key_types' || snakeSchemaKey === 'keys';
104
+ schemaResult[snakeSchemaKey] = convertKeysToSnakeCase(obj[key][schemaKey], shouldPreserveContent);
105
+ return schemaResult;
106
+ }, {});
107
+ return result;
108
+ }
109
+ // Special handling for parametersSchema: convert top-level keys but preserve property names
110
+ if (key === 'parametersSchema' || snakeKey === 'parameters_schema') {
111
+ const schemaKey = camelToSnake(key);
112
+ result[schemaKey] = Object.keys(obj[key]).reduce((schemaResult, schemaKey) => {
113
+ const snakeSchemaKey = camelToSnake(schemaKey);
114
+ // Special handling for 'properties': preserve property names but convert their attributes
115
+ if (schemaKey === 'properties' || snakeSchemaKey === 'properties') {
116
+ schemaResult[snakeSchemaKey] = Object.keys(obj[key][schemaKey]).reduce((propsResult, propName) => {
117
+ // Preserve the property name (e.g., 'param1', 'param2', 'testParam')
118
+ // But convert the property attributes (defaultValue -> default_value, minLength -> min_length, etc.)
119
+ propsResult[propName] = convertKeysToSnakeCase(obj[key][schemaKey][propName], false);
120
+ return propsResult;
121
+ }, {});
122
+ }
123
+ else {
124
+ schemaResult[snakeSchemaKey] = convertKeysToSnakeCase(obj[key][schemaKey], false);
125
+ }
126
+ return schemaResult;
127
+ }, {});
128
+ return result;
129
+ }
130
+ // Preserve original keys within metadata fields and HTTP headers
131
+ // Headers like 'Accept', 'X-Auth-Token' should not be converted
132
+ const shouldPreserveNextLevel = key === 'metadata' ||
133
+ key === 'metadataLabels' ||
134
+ snakeKey === 'metadata_labels' ||
135
+ key === 'headers' ||
136
+ preserveKeys;
137
+ result[snakeKey] = convertKeysToSnakeCase(obj[key], shouldPreserveNextLevel);
138
+ return result;
139
+ }, {});
140
+ }
141
+ return obj;
142
+ }
143
+ /**
144
+ * Transform client request from camelCase to snake_case
145
+ */
146
+ function transformRequest(data) {
147
+ if (data === null || data === undefined) {
148
+ return data;
149
+ }
150
+ return convertKeysToSnakeCase(data);
151
+ }
152
+ /**
153
+ * Transform URL query parameters from camelCase to snake_case
154
+ */
155
+ function transformQueryParams(params) {
156
+ const transformed = transformRequest(params);
157
+ const result = {};
158
+ for (const [key, value] of Object.entries(transformed)) {
159
+ if (value !== undefined && value !== null) {
160
+ if (Array.isArray(value)) {
161
+ result[key] = value.join(',');
162
+ }
163
+ else {
164
+ result[key] = String(value);
165
+ }
166
+ }
167
+ }
168
+ return result;
169
+ }
170
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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"}