@@ -99,7 +99,13 @@ export const query = new Elysia({ prefix: '/v1/query' })
9999 try {
100100 if ( Array . isArray ( body ) ) {
101101 const uniqueWebsiteIds = [
102- ...new Set ( body . flatMap ( ( req ) => req . parameters ) ) ,
102+ ...new Set (
103+ body . flatMap ( ( req ) =>
104+ req . parameters . map ( ( param ) =>
105+ typeof param === 'string' ? param : param . name
106+ )
107+ )
108+ ) ,
103109 ] ;
104110 const domainCache = await getCachedWebsiteDomain ( uniqueWebsiteIds ) ;
105111
@@ -201,18 +207,48 @@ async function executeDynamicQuery(
201207 }
202208
203209 async function processParameter (
204- parameter : string ,
210+ parameterInput :
211+ | string
212+ | {
213+ name : string ;
214+ start_date ?: string ;
215+ end_date ?: string ;
216+ granularity ?: string ;
217+ id ?: string ;
218+ } ,
205219 dynamicRequest : DynamicQueryRequestType ,
206220 params : QueryParams ,
207221 siteId : string | undefined ,
208- start : string | undefined ,
209- end : string | undefined ,
222+ defaultStart : string | undefined ,
223+ defaultEnd : string | undefined ,
210224 domain : string | null
211225 ) {
212- const validation = validateParameterRequest ( parameter , siteId , start , end ) ;
226+ const isObject = typeof parameterInput === 'object' ;
227+ const parameterName = isObject ? parameterInput . name : parameterInput ;
228+ const customId =
229+ isObject && parameterInput . id ? parameterInput . id : parameterName ;
230+ const paramStart =
231+ isObject && parameterInput . start_date
232+ ? parameterInput . start_date
233+ : defaultStart ;
234+ const paramEnd =
235+ isObject && parameterInput . end_date
236+ ? parameterInput . end_date
237+ : defaultEnd ;
238+ const paramGranularity =
239+ isObject && parameterInput . granularity
240+ ? parameterInput . granularity
241+ : dynamicRequest . granularity ;
242+
243+ const validation = validateParameterRequest (
244+ parameterName ,
245+ siteId ,
246+ paramStart ,
247+ paramEnd
248+ ) ;
213249 if ( ! validation . success ) {
214250 return {
215- parameter,
251+ parameter : customId ,
216252 success : false ,
217253 error : validation . error ,
218254 data : [ ] ,
@@ -222,10 +258,10 @@ async function executeDynamicQuery(
222258 try {
223259 const queryRequest = {
224260 projectId : validation . siteId ,
225- type : parameter ,
261+ type : parameterName ,
226262 from : validation . start ,
227263 to : validation . end ,
228- timeUnit : getTimeUnit ( dynamicRequest . granularity ) ,
264+ timeUnit : getTimeUnit ( paramGranularity ) ,
229265 filters : dynamicRequest . filters || [ ] ,
230266 limit : dynamicRequest . limit || 100 ,
231267 offset : dynamicRequest . page
@@ -237,13 +273,13 @@ async function executeDynamicQuery(
237273 const data = await executeQuery ( queryRequest , domain , params . timezone ) ;
238274
239275 return {
240- parameter,
276+ parameter : customId ,
241277 success : true ,
242278 data : data || [ ] ,
243279 } ;
244280 } catch ( error ) {
245281 return {
246- parameter,
282+ parameter : customId ,
247283 success : false ,
248284 error : error instanceof Error ? error . message : 'Query failed' ,
249285 data : [ ] ,
@@ -252,7 +288,7 @@ async function executeDynamicQuery(
252288 }
253289
254290 const parameterResults = await Promise . all (
255- request . parameters . map ( ( param : string ) => {
291+ request . parameters . map ( ( param ) => {
256292 return processParameter (
257293 param ,
258294 request ,
0 commit comments