{"version":3,"sources":["../src/modules/torii-sql-fetcher.ts"],"sourcesContent":["export interface FetchToriiSqlResult {\n  data: any[];\n  errors?: Error[];\n  metadata?: {\n    totalEndpoints: number;\n    successfulEndpoints: number;\n    failedEndpoints: number;\n  };\n}\n\nconst ARCADE_MAIN_PROJECT = \"arcade-main\";\n\nfunction getToriiUrl(project: string): string {\n  const resolvedProject = project || ARCADE_MAIN_PROJECT;\n  return `https://api.cartridge.gg/x/${resolvedProject}/torii`;\n}\n\nasync function fetchSqlFromEndpoint(\n  endpoint: string,\n  toriiUrl: string,\n  sql: string,\n  signal: AbortSignal,\n): Promise<any> {\n  const response = await fetch(`${toriiUrl}/sql`, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n    },\n    body: sql,\n    signal,\n  });\n\n  if (!response.ok) {\n    throw new Error(\n      `HTTP error! status: ${response.status}, statusText: ${response.statusText}, endpoint: ${endpoint}`,\n    );\n  }\n\n  const data = await response.json();\n  return { endpoint, data };\n}\n\nexport async function fetchToriisSql(\n  endpoints: string[],\n  sql: string,\n): Promise<FetchToriiSqlResult> {\n  const abortController = new AbortController();\n  const signal = abortController.signal;\n\n  const results: any[] = [];\n  const errors: Error[] = [];\n\n  const promises = endpoints.map(async (endpoint) => {\n    const toriiUrl = getToriiUrl(endpoint);\n\n    try {\n      const result = await fetchSqlFromEndpoint(\n        endpoint,\n        toriiUrl,\n        sql,\n        signal,\n      );\n      return { success: true as const, data: result, endpoint };\n    } catch (error) {\n      const err =\n        error instanceof Error\n          ? error\n          : new Error(`Failed to fetch from ${endpoint}: ${String(error)}`);\n      return { success: false as const, error: err, endpoint };\n    }\n  });\n\n  const responses = await Promise.allSettled(promises);\n\n  let successCount = 0;\n  let failCount = 0;\n\n  for (const response of responses) {\n    if (response.status === \"fulfilled\") {\n      const result = response.value;\n      if (result.success) {\n        results.push(result.data);\n        successCount++;\n        continue;\n      }\n      errors.push(result.error);\n      failCount++;\n      continue;\n    }\n    const reason = response.reason as any;\n    errors.push(\n      new Error(`Promise rejected: ${reason?.message || \"Unknown error\"}`),\n    );\n    failCount++;\n  }\n\n  return {\n    data: results,\n    errors: errors.length > 0 ? errors : undefined,\n    metadata: {\n      totalEndpoints: endpoints.length,\n      successfulEndpoints: successCount,\n      failedEndpoints: failCount,\n    },\n  };\n}\n"],"mappings":";AAUA,IAAM,sBAAsB;AAE5B,SAAS,YAAY,SAAyB;AAC5C,QAAM,kBAAkB,WAAW;AACnC,SAAO,8BAA8B,eAAe;AACtD;AAEA,eAAe,qBACb,UACA,UACA,KACA,QACc;AACd,QAAM,WAAW,MAAM,MAAM,GAAG,QAAQ,QAAQ;AAAA,IAC9C,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM;AAAA,IACN;AAAA,EACF,CAAC;AAED,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI;AAAA,MACR,uBAAuB,SAAS,MAAM,iBAAiB,SAAS,UAAU,eAAe,QAAQ;AAAA,IACnG;AAAA,EACF;AAEA,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,SAAO,EAAE,UAAU,KAAK;AAC1B;AAEA,eAAsB,eACpB,WACA,KAC8B;AAC9B,QAAM,kBAAkB,IAAI,gBAAgB;AAC5C,QAAM,SAAS,gBAAgB;AAE/B,QAAM,UAAiB,CAAC;AACxB,QAAM,SAAkB,CAAC;AAEzB,QAAM,WAAW,UAAU,IAAI,OAAO,aAAa;AACjD,UAAM,WAAW,YAAY,QAAQ;AAErC,QAAI;AACF,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,aAAO,EAAE,SAAS,MAAe,MAAM,QAAQ,SAAS;AAAA,IAC1D,SAAS,OAAO;AACd,YAAM,MACJ,iBAAiB,QACb,QACA,IAAI,MAAM,wBAAwB,QAAQ,KAAK,OAAO,KAAK,CAAC,EAAE;AACpE,aAAO,EAAE,SAAS,OAAgB,OAAO,KAAK,SAAS;AAAA,IACzD;AAAA,EACF,CAAC;AAED,QAAM,YAAY,MAAM,QAAQ,WAAW,QAAQ;AAEnD,MAAI,eAAe;AACnB,MAAI,YAAY;AAEhB,aAAW,YAAY,WAAW;AAChC,QAAI,SAAS,WAAW,aAAa;AACnC,YAAM,SAAS,SAAS;AACxB,UAAI,OAAO,SAAS;AAClB,gBAAQ,KAAK,OAAO,IAAI;AACxB;AACA;AAAA,MACF;AACA,aAAO,KAAK,OAAO,KAAK;AACxB;AACA;AAAA,IACF;AACA,UAAM,SAAS,SAAS;AACxB,WAAO;AAAA,MACL,IAAI,MAAM,qBAAqB,QAAQ,WAAW,eAAe,EAAE;AAAA,IACrE;AACA;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,OAAO,SAAS,IAAI,SAAS;AAAA,IACrC,UAAU;AAAA,MACR,gBAAgB,UAAU;AAAA,MAC1B,qBAAqB;AAAA,MACrB,iBAAiB;AAAA,IACnB;AAAA,EACF;AACF;","names":[]}