({
connection,
dataRequest,
chartId,
getCache,
filters = [],
timezone = "",
variables = {},
auditContext = null,
})
| 233 | } |
| 234 | |
| 235 | async function runDataRequest({ |
| 236 | connection, |
| 237 | dataRequest, |
| 238 | chartId, |
| 239 | getCache, |
| 240 | filters = [], |
| 241 | timezone = "", |
| 242 | variables = {}, |
| 243 | auditContext = null, |
| 244 | }) { |
| 245 | if (getCache) { |
| 246 | const drCache = await checkAndGetCache(connection.id, dataRequest); |
| 247 | if (drCache) { |
| 248 | await completeConnectorAudit(auditContext, { |
| 249 | cacheHit: true, |
| 250 | connectionType: "api", |
| 251 | ...serializeResponsePreview(drCache.responseData), |
| 252 | }); |
| 253 | return drCache; |
| 254 | } |
| 255 | } |
| 256 | |
| 257 | const limit = dataRequest.itemsLimit |
| 258 | ? parseInt(dataRequest.itemsLimit, 10) : 0; |
| 259 | const { variables: requestVariables } = dataRequest; |
| 260 | const savedConnection = await getSavedConnection(connection); |
| 261 | const policyContext = buildApiPolicyContext("api_request_run", savedConnection); |
| 262 | |
| 263 | try { |
| 264 | let processedRoute = dataRequest.route || ""; |
| 265 | let processedHeaders = dataRequest.headers || {}; |
| 266 | let processedBody = dataRequest.body || ""; |
| 267 | |
| 268 | const result = applyApiVariables(dataRequest, variables); |
| 269 | processedRoute = result.processedRoute || processedRoute; |
| 270 | processedHeaders = result.processedHeaders || processedHeaders; |
| 271 | processedBody = result.processedBody || processedBody; |
| 272 | |
| 273 | let tempUrl = savedConnection.getApiUrl(savedConnection); |
| 274 | let route = processedRoute; |
| 275 | if (route && (route[0] !== "/" && route[0] !== "?")) { |
| 276 | route = `/${route}`; |
| 277 | } |
| 278 | |
| 279 | tempUrl += route; |
| 280 | |
| 281 | const queryParams = querystring.parse(tempUrl.split("?")[1]); |
| 282 | |
| 283 | if (queryParams && Object.keys(queryParams).length > 0) { |
| 284 | if (dataRequest.VariableBindings && dataRequest.VariableBindings.length > 0) { |
| 285 | for (const q of Object.keys(queryParams)) { |
| 286 | const paramValue = queryParams[q]; |
| 287 | if (typeof paramValue === "string") { |
| 288 | let processedValue = paramValue; |
| 289 | const variableMatches = [...paramValue.matchAll(/\{\{([^}]+)\}\}/g)]; |
| 290 | |
| 291 | for (const match of variableMatches) { |
| 292 | const variableName = match[1].trim(); |
nothing calls this directly
no test coverage detected