phenoml 13.0.0 → 13.1.0

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 (75) hide show
  1. package/dist/cjs/BaseClient.d.ts +3 -0
  2. package/dist/cjs/BaseClient.js +17 -2
  3. package/dist/cjs/api/resources/agent/client/Client.js +17 -9
  4. package/dist/cjs/api/resources/agent/resources/prompts/client/Client.js +7 -7
  5. package/dist/cjs/api/resources/authtoken/resources/auth/client/Client.js +1 -1
  6. package/dist/cjs/api/resources/cohort/client/Client.js +1 -1
  7. package/dist/cjs/api/resources/construe/client/Client.js +39 -11
  8. package/dist/cjs/api/resources/fhir/client/Client.js +10 -6
  9. package/dist/cjs/api/resources/fhirProvider/client/Client.js +7 -7
  10. package/dist/cjs/api/resources/lang2Fhir/client/Client.js +6 -6
  11. package/dist/cjs/api/resources/summary/client/Client.js +6 -6
  12. package/dist/cjs/api/resources/tools/client/Client.js +4 -4
  13. package/dist/cjs/api/resources/tools/resources/mcpServer/client/Client.js +4 -4
  14. package/dist/cjs/api/resources/tools/resources/mcpServer/resources/tools/client/Client.js +4 -4
  15. package/dist/cjs/api/resources/workflows/client/Client.js +22 -6
  16. package/dist/cjs/core/auth/AuthProvider.d.ts +1 -0
  17. package/dist/cjs/core/auth/AuthProvider.js +7 -0
  18. package/dist/cjs/core/auth/BasicAuth.d.ts +2 -2
  19. package/dist/cjs/core/auth/BasicAuth.js +7 -1
  20. package/dist/cjs/core/auth/index.d.ts +1 -1
  21. package/dist/cjs/core/auth/index.js +3 -1
  22. package/dist/cjs/core/fetcher/Fetcher.d.ts +8 -0
  23. package/dist/cjs/core/fetcher/Fetcher.js +13 -8
  24. package/dist/cjs/core/fetcher/requestWithRetries.js +4 -1
  25. package/dist/cjs/core/url/QueryStringBuilder.d.ts +47 -0
  26. package/dist/cjs/core/url/QueryStringBuilder.js +83 -0
  27. package/dist/cjs/core/url/index.d.ts +1 -0
  28. package/dist/cjs/core/url/index.js +3 -1
  29. package/dist/cjs/core/url/qs.d.ts +2 -1
  30. package/dist/cjs/core/url/qs.js +24 -12
  31. package/dist/cjs/errors/handleNonStatusCodeError.js +4 -1
  32. package/dist/cjs/errors/phenomlError.d.ts +3 -1
  33. package/dist/cjs/errors/phenomlError.js +4 -1
  34. package/dist/cjs/errors/phenomlTimeoutError.d.ts +4 -1
  35. package/dist/cjs/errors/phenomlTimeoutError.js +4 -1
  36. package/dist/cjs/version.d.ts +1 -1
  37. package/dist/cjs/version.js +1 -1
  38. package/dist/esm/BaseClient.d.mts +3 -0
  39. package/dist/esm/BaseClient.mjs +17 -2
  40. package/dist/esm/api/resources/agent/client/Client.mjs +17 -9
  41. package/dist/esm/api/resources/agent/resources/prompts/client/Client.mjs +7 -7
  42. package/dist/esm/api/resources/authtoken/resources/auth/client/Client.mjs +1 -1
  43. package/dist/esm/api/resources/cohort/client/Client.mjs +1 -1
  44. package/dist/esm/api/resources/construe/client/Client.mjs +39 -11
  45. package/dist/esm/api/resources/fhir/client/Client.mjs +10 -6
  46. package/dist/esm/api/resources/fhirProvider/client/Client.mjs +7 -7
  47. package/dist/esm/api/resources/lang2Fhir/client/Client.mjs +6 -6
  48. package/dist/esm/api/resources/summary/client/Client.mjs +6 -6
  49. package/dist/esm/api/resources/tools/client/Client.mjs +4 -4
  50. package/dist/esm/api/resources/tools/resources/mcpServer/client/Client.mjs +4 -4
  51. package/dist/esm/api/resources/tools/resources/mcpServer/resources/tools/client/Client.mjs +4 -4
  52. package/dist/esm/api/resources/workflows/client/Client.mjs +22 -6
  53. package/dist/esm/core/auth/AuthProvider.d.mts +1 -0
  54. package/dist/esm/core/auth/AuthProvider.mjs +6 -1
  55. package/dist/esm/core/auth/BasicAuth.d.mts +2 -2
  56. package/dist/esm/core/auth/BasicAuth.mjs +7 -1
  57. package/dist/esm/core/auth/index.d.mts +1 -1
  58. package/dist/esm/core/auth/index.mjs +1 -0
  59. package/dist/esm/core/fetcher/Fetcher.d.mts +8 -0
  60. package/dist/esm/core/fetcher/Fetcher.mjs +13 -8
  61. package/dist/esm/core/fetcher/requestWithRetries.mjs +4 -1
  62. package/dist/esm/core/url/QueryStringBuilder.d.mts +47 -0
  63. package/dist/esm/core/url/QueryStringBuilder.mjs +80 -0
  64. package/dist/esm/core/url/index.d.mts +1 -0
  65. package/dist/esm/core/url/index.mjs +1 -0
  66. package/dist/esm/core/url/qs.d.mts +2 -1
  67. package/dist/esm/core/url/qs.mjs +24 -12
  68. package/dist/esm/errors/handleNonStatusCodeError.mjs +4 -1
  69. package/dist/esm/errors/phenomlError.d.mts +3 -1
  70. package/dist/esm/errors/phenomlError.mjs +4 -1
  71. package/dist/esm/errors/phenomlTimeoutError.d.mts +4 -1
  72. package/dist/esm/errors/phenomlTimeoutError.mjs +4 -1
  73. package/dist/esm/version.d.mts +1 -1
  74. package/dist/esm/version.mjs +1 -1
  75. package/package.json +2 -2
@@ -108,7 +108,7 @@ class ToolsClient {
108
108
  method: "POST",
109
109
  headers: _headers,
110
110
  contentType: "application/json",
111
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
111
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
112
112
  requestType: "json",
113
113
  body: _body,
114
114
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
@@ -187,7 +187,7 @@ class ToolsClient {
187
187
  method: "POST",
188
188
  headers: _headers,
189
189
  contentType: "application/json",
190
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
190
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
191
191
  requestType: "json",
192
192
  body: _body,
193
193
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
@@ -261,7 +261,7 @@ class ToolsClient {
261
261
  method: "POST",
262
262
  headers: _headers,
263
263
  contentType: "application/json",
264
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
264
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
265
265
  requestType: "json",
266
266
  body: _body,
267
267
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
@@ -335,7 +335,7 @@ class ToolsClient {
335
335
  method: "POST",
336
336
  headers: _headers,
337
337
  contentType: "application/json",
338
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
338
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
339
339
  requestType: "json",
340
340
  body: _body,
341
341
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
@@ -90,7 +90,7 @@ class McpServerClient {
90
90
  method: "POST",
91
91
  headers: _headers,
92
92
  contentType: "application/json",
93
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
93
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
94
94
  requestType: "json",
95
95
  body: request,
96
96
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
@@ -147,7 +147,7 @@ class McpServerClient {
147
147
  url: core.url.join((_d = (_c = (yield core.Supplier.get(this._options.baseUrl))) !== null && _c !== void 0 ? _c : (yield core.Supplier.get(this._options.environment))) !== null && _d !== void 0 ? _d : environments.phenomlEnvironment.Default, "tools/mcp-server/list"),
148
148
  method: "GET",
149
149
  headers: _headers,
150
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
150
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
151
151
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
152
152
  maxRetries: (_h = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _h !== void 0 ? _h : (_j = this._options) === null || _j === void 0 ? void 0 : _j.maxRetries,
153
153
  abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
@@ -201,7 +201,7 @@ class McpServerClient {
201
201
  url: core.url.join((_d = (_c = (yield core.Supplier.get(this._options.baseUrl))) !== null && _c !== void 0 ? _c : (yield core.Supplier.get(this._options.environment))) !== null && _d !== void 0 ? _d : environments.phenomlEnvironment.Default, `tools/mcp-server/${core.url.encodePathParam(mcp_server_id)}`),
202
202
  method: "GET",
203
203
  headers: _headers,
204
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
204
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
205
205
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
206
206
  maxRetries: (_h = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _h !== void 0 ? _h : (_j = this._options) === null || _j === void 0 ? void 0 : _j.maxRetries,
207
207
  abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
@@ -255,7 +255,7 @@ class McpServerClient {
255
255
  url: core.url.join((_d = (_c = (yield core.Supplier.get(this._options.baseUrl))) !== null && _c !== void 0 ? _c : (yield core.Supplier.get(this._options.environment))) !== null && _d !== void 0 ? _d : environments.phenomlEnvironment.Default, `tools/mcp-server/${core.url.encodePathParam(mcp_server_id)}`),
256
256
  method: "DELETE",
257
257
  headers: _headers,
258
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
258
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
259
259
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
260
260
  maxRetries: (_h = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _h !== void 0 ? _h : (_j = this._options) === null || _j === void 0 ? void 0 : _j.maxRetries,
261
261
  abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
@@ -80,7 +80,7 @@ class ToolsClient {
80
80
  url: core.url.join((_d = (_c = (yield core.Supplier.get(this._options.baseUrl))) !== null && _c !== void 0 ? _c : (yield core.Supplier.get(this._options.environment))) !== null && _d !== void 0 ? _d : environments.phenomlEnvironment.Default, `tools/mcp-server/${core.url.encodePathParam(mcp_server_id)}/list`),
81
81
  method: "GET",
82
82
  headers: _headers,
83
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
83
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
84
84
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
85
85
  maxRetries: (_h = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _h !== void 0 ? _h : (_j = this._options) === null || _j === void 0 ? void 0 : _j.maxRetries,
86
86
  abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
@@ -134,7 +134,7 @@ class ToolsClient {
134
134
  url: core.url.join((_d = (_c = (yield core.Supplier.get(this._options.baseUrl))) !== null && _c !== void 0 ? _c : (yield core.Supplier.get(this._options.environment))) !== null && _d !== void 0 ? _d : environments.phenomlEnvironment.Default, `tools/mcp-server/tool/${core.url.encodePathParam(mcp_server_tool_id)}`),
135
135
  method: "GET",
136
136
  headers: _headers,
137
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
137
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
138
138
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
139
139
  maxRetries: (_h = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _h !== void 0 ? _h : (_j = this._options) === null || _j === void 0 ? void 0 : _j.maxRetries,
140
140
  abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
@@ -188,7 +188,7 @@ class ToolsClient {
188
188
  url: core.url.join((_d = (_c = (yield core.Supplier.get(this._options.baseUrl))) !== null && _c !== void 0 ? _c : (yield core.Supplier.get(this._options.environment))) !== null && _d !== void 0 ? _d : environments.phenomlEnvironment.Default, `tools/mcp-server/tool/${core.url.encodePathParam(mcp_server_tool_id)}`),
189
189
  method: "DELETE",
190
190
  headers: _headers,
191
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
191
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
192
192
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
193
193
  maxRetries: (_h = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _h !== void 0 ? _h : (_j = this._options) === null || _j === void 0 ? void 0 : _j.maxRetries,
194
194
  abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
@@ -249,7 +249,7 @@ class ToolsClient {
249
249
  method: "POST",
250
250
  headers: _headers,
251
251
  contentType: "application/json",
252
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
252
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
253
253
  requestType: "json",
254
254
  body: request,
255
255
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
@@ -97,7 +97,11 @@ class WorkflowsClient {
97
97
  url: core.url.join((_d = (_c = (yield core.Supplier.get(this._options.baseUrl))) !== null && _c !== void 0 ? _c : (yield core.Supplier.get(this._options.environment))) !== null && _d !== void 0 ? _d : environments.phenomlEnvironment.Default, "workflows"),
98
98
  method: "GET",
99
99
  headers: _headers,
100
- queryParameters: Object.assign(Object.assign({}, _queryParams), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams),
100
+ queryString: core.url
101
+ .queryBuilder()
102
+ .addMany(_queryParams)
103
+ .mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams)
104
+ .build(),
101
105
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
102
106
  maxRetries: (_h = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _h !== void 0 ? _h : (_j = this._options) === null || _j === void 0 ? void 0 : _j.maxRetries,
103
107
  abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
@@ -170,7 +174,11 @@ class WorkflowsClient {
170
174
  method: "POST",
171
175
  headers: _headers,
172
176
  contentType: "application/json",
173
- queryParameters: Object.assign(Object.assign({}, _queryParams), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams),
177
+ queryString: core.url
178
+ .queryBuilder()
179
+ .addMany(_queryParams)
180
+ .mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams)
181
+ .build(),
174
182
  requestType: "json",
175
183
  body: _body,
176
184
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
@@ -239,7 +247,11 @@ class WorkflowsClient {
239
247
  url: core.url.join((_d = (_c = (yield core.Supplier.get(this._options.baseUrl))) !== null && _c !== void 0 ? _c : (yield core.Supplier.get(this._options.environment))) !== null && _d !== void 0 ? _d : environments.phenomlEnvironment.Default, `workflows/${core.url.encodePathParam(id)}`),
240
248
  method: "GET",
241
249
  headers: _headers,
242
- queryParameters: Object.assign(Object.assign({}, _queryParams), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams),
250
+ queryString: core.url
251
+ .queryBuilder()
252
+ .addMany(_queryParams)
253
+ .mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams)
254
+ .build(),
243
255
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
244
256
  maxRetries: (_h = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _h !== void 0 ? _h : (_j = this._options) === null || _j === void 0 ? void 0 : _j.maxRetries,
245
257
  abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
@@ -316,7 +328,11 @@ class WorkflowsClient {
316
328
  method: "PUT",
317
329
  headers: _headers,
318
330
  contentType: "application/json",
319
- queryParameters: Object.assign(Object.assign({}, _queryParams), requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams),
331
+ queryString: core.url
332
+ .queryBuilder()
333
+ .addMany(_queryParams)
334
+ .mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams)
335
+ .build(),
320
336
  requestType: "json",
321
337
  body: _body,
322
338
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
@@ -380,7 +396,7 @@ class WorkflowsClient {
380
396
  url: core.url.join((_d = (_c = (yield core.Supplier.get(this._options.baseUrl))) !== null && _c !== void 0 ? _c : (yield core.Supplier.get(this._options.environment))) !== null && _d !== void 0 ? _d : environments.phenomlEnvironment.Default, `workflows/${core.url.encodePathParam(id)}`),
381
397
  method: "DELETE",
382
398
  headers: _headers,
383
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
399
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
384
400
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
385
401
  maxRetries: (_h = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.maxRetries) !== null && _h !== void 0 ? _h : (_j = this._options) === null || _j === void 0 ? void 0 : _j.maxRetries,
386
402
  abortSignal: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.abortSignal,
@@ -450,7 +466,7 @@ class WorkflowsClient {
450
466
  method: "POST",
451
467
  headers: _headers,
452
468
  contentType: "application/json",
453
- queryParameters: requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams,
469
+ queryString: core.url.queryBuilder().mergeAdditional(requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.queryParams).build(),
454
470
  requestType: "json",
455
471
  body: request,
456
472
  timeoutMs: ((_g = (_e = requestOptions === null || requestOptions === void 0 ? void 0 : requestOptions.timeoutInSeconds) !== null && _e !== void 0 ? _e : (_f = this._options) === null || _f === void 0 ? void 0 : _f.timeoutInSeconds) !== null && _g !== void 0 ? _g : 60) * 1000,
@@ -5,3 +5,4 @@ export interface AuthProvider {
5
5
  endpointMetadata?: EndpointMetadata;
6
6
  }): Promise<AuthRequest>;
7
7
  }
8
+ export declare function isAuthProvider(value: unknown): value is AuthProvider;
@@ -1,2 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isAuthProvider = isAuthProvider;
4
+ function isAuthProvider(value) {
5
+ return (typeof value === "object" &&
6
+ value !== null &&
7
+ "getAuthRequest" in value &&
8
+ typeof value.getAuthRequest === "function");
9
+ }
@@ -1,6 +1,6 @@
1
1
  export interface BasicAuth {
2
- username: string;
3
- password: string;
2
+ username?: string;
3
+ password?: string;
4
4
  }
5
5
  export declare const BasicAuth: {
6
6
  toAuthorizationHeader: (basicAuth: BasicAuth | undefined) => string | undefined;
@@ -5,10 +5,16 @@ const base64_js_1 = require("../base64.js");
5
5
  const BASIC_AUTH_HEADER_PREFIX = /^Basic /i;
6
6
  exports.BasicAuth = {
7
7
  toAuthorizationHeader: (basicAuth) => {
8
+ var _a, _b;
8
9
  if (basicAuth == null) {
9
10
  return undefined;
10
11
  }
11
- const token = (0, base64_js_1.base64Encode)(`${basicAuth.username}:${basicAuth.password}`);
12
+ const username = (_a = basicAuth.username) !== null && _a !== void 0 ? _a : "";
13
+ const password = (_b = basicAuth.password) !== null && _b !== void 0 ? _b : "";
14
+ if (username === "" && password === "") {
15
+ return undefined;
16
+ }
17
+ const token = (0, base64_js_1.base64Encode)(`${username}:${password}`);
12
18
  return `Basic ${token}`;
13
19
  },
14
20
  fromAuthorizationHeader: (header) => {
@@ -1,4 +1,4 @@
1
- export type { AuthProvider } from "./AuthProvider.js";
1
+ export { type AuthProvider, isAuthProvider } from "./AuthProvider.js";
2
2
  export type { AuthRequest } from "./AuthRequest.js";
3
3
  export { BasicAuth } from "./BasicAuth.js";
4
4
  export { BearerToken } from "./BearerToken.js";
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NoOpAuthProvider = exports.BearerToken = exports.BasicAuth = void 0;
3
+ exports.NoOpAuthProvider = exports.BearerToken = exports.BasicAuth = exports.isAuthProvider = void 0;
4
+ var AuthProvider_js_1 = require("./AuthProvider.js");
5
+ Object.defineProperty(exports, "isAuthProvider", { enumerable: true, get: function () { return AuthProvider_js_1.isAuthProvider; } });
4
6
  var BasicAuth_js_1 = require("./BasicAuth.js");
5
7
  Object.defineProperty(exports, "BasicAuth", { enumerable: true, get: function () { return BasicAuth_js_1.BasicAuth; } });
6
8
  var BearerToken_js_1 = require("./BearerToken.js");
@@ -8,7 +8,13 @@ export declare namespace Fetcher {
8
8
  method: string;
9
9
  contentType?: string;
10
10
  headers?: Record<string, unknown>;
11
+ /**
12
+ * @deprecated Prefer `queryString` (produced by `core.url.queryBuilder()`).
13
+ * Retained for backwards compatibility with custom fetchers and callers that
14
+ * still construct request args with a query-parameter object.
15
+ */
11
16
  queryParameters?: Record<string, unknown>;
17
+ queryString?: string;
12
18
  body?: unknown;
13
19
  timeoutMs?: number;
14
20
  maxRetries?: number;
@@ -38,10 +44,12 @@ export declare namespace Fetcher {
38
44
  }
39
45
  interface TimeoutError {
40
46
  reason: "timeout";
47
+ cause?: unknown;
41
48
  }
42
49
  interface UnknownError {
43
50
  reason: "unknown";
44
51
  errorMessage: string;
52
+ cause?: unknown;
45
53
  }
46
54
  }
47
55
  export declare function fetcherImpl<R = unknown>(args: Fetcher.Args): Promise<APIResponse<R, Fetcher.Error>>;
@@ -75,16 +75,11 @@ const SENSITIVE_QUERY_PARAMS = new Set([
75
75
  ]);
76
76
  function redactQueryParameters(queryParameters) {
77
77
  if (queryParameters == null) {
78
- return queryParameters;
78
+ return undefined;
79
79
  }
80
80
  const redacted = {};
81
81
  for (const [key, value] of Object.entries(queryParameters)) {
82
- if (SENSITIVE_QUERY_PARAMS.has(key.toLowerCase())) {
83
- redacted[key] = "[REDACTED]";
84
- }
85
- else {
86
- redacted[key] = value;
87
- }
82
+ redacted[key] = SENSITIVE_QUERY_PARAMS.has(key.toLowerCase()) ? "[REDACTED]" : value;
88
83
  }
89
84
  return redacted;
90
85
  }
@@ -186,7 +181,13 @@ function getHeaders(args) {
186
181
  function fetcherImpl(args) {
187
182
  return __awaiter(this, void 0, void 0, function* () {
188
183
  var _a, _b, _c;
189
- const url = (0, createRequestUrl_js_1.createRequestUrl)(args.url, args.queryParameters);
184
+ let url = args.url;
185
+ if (args.queryString != null && args.queryString.length > 0) {
186
+ url = `${url}?${args.queryString}`;
187
+ }
188
+ else {
189
+ url = (0, createRequestUrl_js_1.createRequestUrl)(args.url, args.queryParameters);
190
+ }
190
191
  const requestBody = yield (0, getRequestBody_js_1.getRequestBody)({
191
192
  body: args.body,
192
193
  type: (_a = args.requestType) !== null && _a !== void 0 ? _a : "other",
@@ -261,6 +262,7 @@ function fetcherImpl(args) {
261
262
  error: {
262
263
  reason: "unknown",
263
264
  errorMessage: "The user aborted a request",
265
+ cause: error,
264
266
  },
265
267
  rawResponse: RawResponse_js_1.abortRawResponse,
266
268
  };
@@ -278,6 +280,7 @@ function fetcherImpl(args) {
278
280
  ok: false,
279
281
  error: {
280
282
  reason: "timeout",
283
+ cause: error,
281
284
  },
282
285
  rawResponse: RawResponse_js_1.abortRawResponse,
283
286
  };
@@ -296,6 +299,7 @@ function fetcherImpl(args) {
296
299
  error: {
297
300
  reason: "unknown",
298
301
  errorMessage: error.message,
302
+ cause: error,
299
303
  },
300
304
  rawResponse: RawResponse_js_1.unknownRawResponse,
301
305
  };
@@ -313,6 +317,7 @@ function fetcherImpl(args) {
313
317
  error: {
314
318
  reason: "unknown",
315
319
  errorMessage: (0, json_js_1.toJson)(error),
320
+ cause: error,
316
321
  },
317
322
  rawResponse: RawResponse_js_1.unknownRawResponse,
318
323
  };
@@ -14,6 +14,9 @@ const INITIAL_RETRY_DELAY = 1000; // in milliseconds
14
14
  const MAX_RETRY_DELAY = 60000; // in milliseconds
15
15
  const DEFAULT_MAX_RETRIES = 2;
16
16
  const JITTER_FACTOR = 0.2; // 20% random jitter
17
+ function isRetryableStatusCode(statusCode) {
18
+ return [408, 429].includes(statusCode) || statusCode >= 500;
19
+ }
17
20
  function addPositiveJitter(delay) {
18
21
  const jitterMultiplier = 1 + Math.random() * JITTER_FACTOR;
19
22
  return delay * jitterMultiplier;
@@ -53,7 +56,7 @@ function requestWithRetries(requestFn_1) {
53
56
  return __awaiter(this, arguments, void 0, function* (requestFn, maxRetries = DEFAULT_MAX_RETRIES) {
54
57
  let response = yield requestFn();
55
58
  for (let i = 0; i < maxRetries; ++i) {
56
- if ([408, 429].includes(response.status) || response.status >= 500) {
59
+ if (isRetryableStatusCode(response.status)) {
57
60
  const delay = getRetryDelayFromHeaders(response, i);
58
61
  yield new Promise((resolve) => setTimeout(resolve, delay));
59
62
  response = yield requestFn();
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Creates a fluent builder for constructing URL query strings.
3
+ *
4
+ * Each `.add()` call serializes its value immediately (like C#'s builder),
5
+ * so no format tracking is needed — the style is applied at add-time.
6
+ *
7
+ * Usage (generated code):
8
+ *
9
+ * const qs = core.url.queryBuilder()
10
+ * .add("limit", limit)
11
+ * .add("tags", tags, { style: "comma" }) // explode: false
12
+ * .mergeAdditional(requestOptions?.queryParams)
13
+ * .build();
14
+ */
15
+ export declare function queryBuilder(): QueryStringBuilder;
16
+ declare class QueryStringBuilder {
17
+ private parts;
18
+ /**
19
+ * Adds a query parameter, serializing it immediately.
20
+ *
21
+ * By default arrays use "repeat" format (`key=a&key=b`).
22
+ * Pass `{ style: "comma" }` for OpenAPI `explode: false` parameters
23
+ * to get comma-separated values (`key=a,b,c`).
24
+ *
25
+ * Null / undefined values are silently skipped.
26
+ */
27
+ add(key: string, value: unknown, options?: {
28
+ style?: "comma";
29
+ }): this;
30
+ /**
31
+ * Adds multiple query parameters at once from a record.
32
+ * All parameters use the default "repeat" array format.
33
+ * Null / undefined values are silently skipped.
34
+ */
35
+ addMany(params: Record<string, unknown>): this;
36
+ /**
37
+ * Merges additional query parameters supplied at call-time via
38
+ * `requestOptions.queryParams`. Overrides existing keys (last-write-wins).
39
+ */
40
+ mergeAdditional(additionalParams?: Record<string, unknown>): this;
41
+ /**
42
+ * Returns the assembled query string (without the leading `?`).
43
+ * Returns an empty string when no parameters were added.
44
+ */
45
+ build(): string;
46
+ }
47
+ export {};
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.queryBuilder = queryBuilder;
4
+ const qs_js_1 = require("./qs.js");
5
+ /**
6
+ * Creates a fluent builder for constructing URL query strings.
7
+ *
8
+ * Each `.add()` call serializes its value immediately (like C#'s builder),
9
+ * so no format tracking is needed — the style is applied at add-time.
10
+ *
11
+ * Usage (generated code):
12
+ *
13
+ * const qs = core.url.queryBuilder()
14
+ * .add("limit", limit)
15
+ * .add("tags", tags, { style: "comma" }) // explode: false
16
+ * .mergeAdditional(requestOptions?.queryParams)
17
+ * .build();
18
+ */
19
+ function queryBuilder() {
20
+ return new QueryStringBuilder();
21
+ }
22
+ class QueryStringBuilder {
23
+ constructor() {
24
+ this.parts = new Map();
25
+ }
26
+ /**
27
+ * Adds a query parameter, serializing it immediately.
28
+ *
29
+ * By default arrays use "repeat" format (`key=a&key=b`).
30
+ * Pass `{ style: "comma" }` for OpenAPI `explode: false` parameters
31
+ * to get comma-separated values (`key=a,b,c`).
32
+ *
33
+ * Null / undefined values are silently skipped.
34
+ */
35
+ add(key, value, options) {
36
+ if (value === undefined || value === null) {
37
+ return this;
38
+ }
39
+ const serialized = (0, qs_js_1.toQueryString)({ [key]: value }, { arrayFormat: (options === null || options === void 0 ? void 0 : options.style) === "comma" ? "comma" : "repeat" });
40
+ if (serialized.length > 0) {
41
+ this.parts.set(key, serialized);
42
+ }
43
+ return this;
44
+ }
45
+ /**
46
+ * Adds multiple query parameters at once from a record.
47
+ * All parameters use the default "repeat" array format.
48
+ * Null / undefined values are silently skipped.
49
+ */
50
+ addMany(params) {
51
+ if (params != null) {
52
+ for (const [key, value] of Object.entries(params)) {
53
+ this.add(key, value);
54
+ }
55
+ }
56
+ return this;
57
+ }
58
+ /**
59
+ * Merges additional query parameters supplied at call-time via
60
+ * `requestOptions.queryParams`. Overrides existing keys (last-write-wins).
61
+ */
62
+ mergeAdditional(additionalParams) {
63
+ if (additionalParams != null) {
64
+ for (const [key, value] of Object.entries(additionalParams)) {
65
+ if (value === undefined || value === null) {
66
+ continue;
67
+ }
68
+ const serialized = (0, qs_js_1.toQueryString)({ [key]: value }, { arrayFormat: "repeat" });
69
+ if (serialized.length > 0) {
70
+ this.parts.set(key, serialized);
71
+ }
72
+ }
73
+ }
74
+ return this;
75
+ }
76
+ /**
77
+ * Returns the assembled query string (without the leading `?`).
78
+ * Returns an empty string when no parameters were added.
79
+ */
80
+ build() {
81
+ return [...this.parts.values()].join("&");
82
+ }
83
+ }
@@ -1,3 +1,4 @@
1
1
  export { encodePathParam } from "./encodePathParam.js";
2
2
  export { join } from "./join.js";
3
+ export { queryBuilder } from "./QueryStringBuilder.js";
3
4
  export { toQueryString } from "./qs.js";
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toQueryString = exports.join = exports.encodePathParam = void 0;
3
+ exports.toQueryString = exports.queryBuilder = exports.join = exports.encodePathParam = void 0;
4
4
  var encodePathParam_js_1 = require("./encodePathParam.js");
5
5
  Object.defineProperty(exports, "encodePathParam", { enumerable: true, get: function () { return encodePathParam_js_1.encodePathParam; } });
6
6
  var join_js_1 = require("./join.js");
7
7
  Object.defineProperty(exports, "join", { enumerable: true, get: function () { return join_js_1.join; } });
8
+ var QueryStringBuilder_js_1 = require("./QueryStringBuilder.js");
9
+ Object.defineProperty(exports, "queryBuilder", { enumerable: true, get: function () { return QueryStringBuilder_js_1.queryBuilder; } });
8
10
  var qs_js_1 = require("./qs.js");
9
11
  Object.defineProperty(exports, "toQueryString", { enumerable: true, get: function () { return qs_js_1.toQueryString; } });
@@ -1,5 +1,6 @@
1
+ type ArrayFormat = "indices" | "repeat" | "comma";
1
2
  interface QueryStringOptions {
2
- arrayFormat?: "indices" | "repeat";
3
+ arrayFormat?: ArrayFormat;
3
4
  encode?: boolean;
4
5
  }
5
6
  export declare function toQueryString(obj: unknown, options?: QueryStringOptions): string;
@@ -26,19 +26,31 @@ function stringifyObject(obj, prefix = "", options) {
26
26
  if (value.length === 0) {
27
27
  continue;
28
28
  }
29
- for (let i = 0; i < value.length; i++) {
30
- const item = value[i];
31
- if (item === undefined) {
32
- continue;
29
+ const effectiveFormat = options.arrayFormat;
30
+ if (effectiveFormat === "comma") {
31
+ const encodedKey = options.encode ? encodeURIComponent(fullKey) : fullKey;
32
+ const encodedValues = value
33
+ .filter((item) => item !== undefined && item !== null)
34
+ .map((item) => encodeValue(item, options.encode));
35
+ if (encodedValues.length > 0) {
36
+ parts.push(`${encodedKey}=${encodedValues.join(",")}`);
33
37
  }
34
- if (typeof item === "object" && !Array.isArray(item) && item !== null) {
35
- const arrayKey = options.arrayFormat === "indices" ? `${fullKey}[${i}]` : fullKey;
36
- parts.push(...stringifyObject(item, arrayKey, options));
37
- }
38
- else {
39
- const arrayKey = options.arrayFormat === "indices" ? `${fullKey}[${i}]` : fullKey;
40
- const encodedKey = options.encode ? encodeURIComponent(arrayKey) : arrayKey;
41
- parts.push(`${encodedKey}=${encodeValue(item, options.encode)}`);
38
+ }
39
+ else {
40
+ for (let i = 0; i < value.length; i++) {
41
+ const item = value[i];
42
+ if (item === undefined) {
43
+ continue;
44
+ }
45
+ if (typeof item === "object" && !Array.isArray(item) && item !== null) {
46
+ const arrayKey = effectiveFormat === "indices" ? `${fullKey}[${i}]` : fullKey;
47
+ parts.push(...stringifyObject(item, arrayKey, options));
48
+ }
49
+ else {
50
+ const arrayKey = effectiveFormat === "indices" ? `${fullKey}[${i}]` : fullKey;
51
+ const encodedKey = options.encode ? encodeURIComponent(arrayKey) : arrayKey;
52
+ parts.push(`${encodedKey}=${encodeValue(item, options.encode)}`);
53
+ }
42
54
  }
43
55
  }
44
56
  }
@@ -50,11 +50,14 @@ function handleNonStatusCodeError(error, rawResponse, method, path) {
50
50
  rawResponse: rawResponse,
51
51
  });
52
52
  case "timeout":
53
- throw new errors.phenomlTimeoutError(`Timeout exceeded when calling ${method} ${path}.`);
53
+ throw new errors.phenomlTimeoutError(`Timeout exceeded when calling ${method} ${path}.`, {
54
+ cause: error.cause,
55
+ });
54
56
  case "unknown":
55
57
  throw new errors.phenomlError({
56
58
  message: error.errorMessage,
57
59
  rawResponse: rawResponse,
60
+ cause: error.cause,
58
61
  });
59
62
  default:
60
63
  throw new errors.phenomlError({
@@ -3,10 +3,12 @@ export declare class phenomlError extends Error {
3
3
  readonly statusCode?: number;
4
4
  readonly body?: unknown;
5
5
  readonly rawResponse?: core.RawResponse;
6
- constructor({ message, statusCode, body, rawResponse, }: {
6
+ readonly cause?: unknown;
7
+ constructor({ message, statusCode, body, rawResponse, cause, }: {
7
8
  message?: string;
8
9
  statusCode?: number;
9
10
  body?: unknown;
10
11
  rawResponse?: core.RawResponse;
12
+ cause?: unknown;
11
13
  });
12
14
  }
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.phenomlError = void 0;
5
5
  const json_js_1 = require("../core/json.js");
6
6
  class phenomlError extends Error {
7
- constructor({ message, statusCode, body, rawResponse, }) {
7
+ constructor({ message, statusCode, body, rawResponse, cause, }) {
8
8
  super(buildMessage({ message, statusCode, body }));
9
9
  Object.setPrototypeOf(this, new.target.prototype);
10
10
  if (Error.captureStackTrace) {
@@ -14,6 +14,9 @@ class phenomlError extends Error {
14
14
  this.statusCode = statusCode;
15
15
  this.body = body;
16
16
  this.rawResponse = rawResponse;
17
+ if (cause != null) {
18
+ this.cause = cause;
19
+ }
17
20
  }
18
21
  }
19
22
  exports.phenomlError = phenomlError;
@@ -1,3 +1,6 @@
1
1
  export declare class phenomlTimeoutError extends Error {
2
- constructor(message: string);
2
+ readonly cause?: unknown;
3
+ constructor(message: string, opts?: {
4
+ cause?: unknown;
5
+ });
3
6
  }