This NPM package implements all the basic routes defined in the Dune API Docs. It also introduces a convenience method refresh which combines executeQuery, getExecutionStatus and gettExecutionResults in a way that makes it nearly trivial to fetch query execution results.
Install the package
pnpm add @duneanalytics/client-sdkimport { QueryParameter, DuneClient, RunQueryArgs } from "@duneanalytics/client-sdk"; const { DUNE_API_KEY } = process.env; const client = new DuneClient(DUNE_API_KEY ?? ""); const queryId = 1215383; const opts: RunQueryArgs = { queryId, query_parameters: [ QueryParameter.text("TextField", "Plain Text"), QueryParameter.number("NumberField", 3.1415926535), QueryParameter.date("DateField", "2022-05-04 00:00:00"), QueryParameter.enum("ListField", "Option 1"), ], }; client .runQuery(opts) .then((executionResult) => console.log(executionResult.result?.rows)); // should look like // [ // { // date_field: "2022-05-04 00:00:00.000", // list_field: "Option 1", // number_field: "3.1415926535", // text_field: "Plain Text", // }, // ]You can execute raw SQL queries directly using the executeSql method:
const { DUNE_API_KEY } = process.env; const client = new DuneClient(DUNE_API_KEY ?? ""); const execution = await client.exec.executeSql({ sql: "SELECT * FROM dex.trades WHERE block_time > now() - interval '1' day LIMIT 10", performance: QueryEngine.Medium, // optional }); const executionId = execution.execution_id; const status = await client.exec.getExecutionStatus(executionId); const results = await client.exec.getExecutionResults(executionId);const { DUNE_API_KEY } = process.env; const client = new DuneClient(DUNE_API_KEY ?? ""); const results = await client.custom.getResults({ username: "your_username", slug: "endpoint-slug" // optional arguments: see `GetResultParams` limit: 100, });Get information about your API usage, including credits and storage:
const { DUNE_API_KEY } = process.env; const client = new DuneClient(DUNE_API_KEY ?? ""); const usage = await client.usage.getUsage(); console.log(`Credits used: ${usage.billing_periods[0].credits_used}`); console.log(`Private queries: ${usage.private_queries}`); console.log(`Storage: ${usage.bytes_used} / ${usage.bytes_allowed} bytes`);Note also that the client has methods executeQuery, getExecutionStatus, getExecutionResult and cancelExecution
Check out this Demo Project!