UNPKG

@riverfl0w/dune-client

Version:

A TypeScript client for querying the Dune API, designed to simplify the integration of Dune's powerful analytics into your projects.

1 lines 18.1 kB
{"version":3,"sources":["../src/index.ts","../src/DuneError.ts","../src/schemas/ErrorResponse.ts","../src/clients/BaseClient.ts","../src/schemas/CancelExecutionResponse.ts","../src/schemas/ExecutionResultsResponse.ts","../src/schemas/ResultMetadata.ts","../src/schemas/ExecutionStatusResponse.ts","../src/clients/ExecutionClient.ts","../src/schemas/ExecuteQueryResponse.ts","../src/clients/QueryClient.ts","../src/DuneClient.ts"],"sourcesContent":["// clients\nexport { default as BaseClient, type CallOptions } from './clients/BaseClient.js';\nexport { default as ExecutionClient } from './clients/ExecutionClient.js';\nexport { default as QueryClient } from './clients/QueryClient.js';\n\n// schemas\nexport { default as CancelQueryResponse } from './schemas/CancelExecutionResponse.js';\nexport { default as ErrorResponse } from './schemas/ErrorResponse.js';\nexport { default as ExecuteQueryResponse } from './schemas/ExecuteQueryResponse.js';\nexport { default as ExecutionResultResponse } from './schemas/ExecutionResultsResponse.js';\nexport { default as ExecutionStatusResponse } from './schemas/ExecutionStatusResponse.js';\nexport { default as ResultMetadata } from './schemas/ResultMetadata.js';\n\n// root\nexport { default as DuneError } from './DuneError.js';\nexport { default as DuneClient } from './DuneClient.js';\n","/**\n * Custom error class for Dune.\n */\nexport default class DuneError extends Error {}\n","import { z } from 'zod';\n\nconst ErrorResponse = z.object({\n error: z.string(),\n});\ntype ErrorResponse = z.infer<typeof ErrorResponse>;\n\nexport default ErrorResponse;\n","import type { ZodSchema, z } from 'zod';\nimport DuneError from '../DuneError.js';\nimport ErrorResponse from '../schemas/ErrorResponse.js';\n\nexport interface CallOptions<S extends ZodSchema> extends RequestInit {\n path: string;\n searchParams?: URLSearchParams;\n schema: S;\n delay?: number;\n}\n\nconst MAX_RATE_LIMIT_DELAY = 60000;\n\n/**\n * Base client for Dune API. It handles the API key and error handling.\n */\nexport default class BaseClient {\n private readonly base = 'https://api.dune.com/api';\n\n constructor(private readonly apiKey: string) {}\n\n protected async call<S extends ZodSchema>({\n path,\n searchParams,\n schema,\n delay = 0,\n ...options\n }: CallOptions<S>): Promise<z.infer<S>> {\n if (searchParams) {\n const search = searchParams.toString();\n\n if (search.length > 0) {\n path += `?${search}`;\n }\n }\n\n const response = await fetch(`${this.base}${path}`, {\n ...options,\n headers: {\n ...options.headers,\n 'x-dune-api-key': this.apiKey,\n },\n });\n const data = await response.json();\n\n const hasError = await ErrorResponse.safeParseAsync(data);\n if (hasError.success) {\n if (hasError.data.error.match(/too many requests/)) {\n // We are being rate limited, so we should wait and try again\n await new Promise((resolve) => setTimeout(resolve, delay));\n\n if (delay < MAX_RATE_LIMIT_DELAY) {\n const newDelay = (delay + Math.floor(Math.random() * 1000)) * 2;\n return this.call({ path, searchParams, schema, delay: newDelay, ...options });\n }\n\n // If we have been waiting for more than a minute, we should throw an error\n }\n\n throw new DuneError(hasError.data.error);\n }\n\n // console.log(`${options.method} ${path}`, data);\n return await schema.parseAsync(data);\n }\n}\n","import { z } from 'zod';\n\nconst CancelExecutionResponse = z.object({\n success: z.boolean(),\n});\ntype CancelExecutionResponse = z.infer<typeof CancelExecutionResponse>;\n\nexport default CancelExecutionResponse;\n","import { z } from 'zod';\nimport ResultMetadata from './ResultMetadata.js';\n\nconst ExecutionResultsResponse = z\n .object({\n execution_id: z.string(),\n query_id: z.number(),\n is_execution_finished: z.boolean(),\n })\n .and(\n z.discriminatedUnion('state', [\n z.object({\n state: z.literal('QUERY_STATE_FAILED'),\n submitted_at: z.string().datetime(),\n expires_at: z.string().datetime(),\n execution_started_at: z.string().datetime(),\n execution_ended_at: z.string().datetime(),\n error: z.object({\n type: z.string(),\n message: z.string(),\n metadata: z.record(z.unknown()),\n }),\n }),\n z.object({\n state: z.literal('QUERY_STATE_COMPLETED'),\n submitted_at: z.string().datetime(),\n expires_at: z.string().datetime(),\n execution_started_at: z.string().datetime(),\n execution_ended_at: z.string().datetime(),\n result: z.object({\n rows: z.array(z.record(z.unknown())),\n metadata: ResultMetadata,\n }),\n }),\n z.object({\n state: z.literal('QUERY_STATE_CANCELLED'),\n submitted_at: z.string().datetime(),\n expires_at: z.string().datetime(),\n cancelled_at: z.string().datetime(),\n }),\n z.object({\n state: z.literal('QUERY_STATE_EXPIRED'),\n // TODO: Add more fields\n }),\n ]),\n );\nexport type ExecutionResultResponse = z.infer<typeof ExecutionResultsResponse>;\n\nexport default ExecutionResultsResponse;\n","import { z } from 'zod';\n\nconst ResultMetadata = z.object({\n column_names: z.array(z.string()),\n result_set_bytes: z.number().int().nonnegative(),\n total_row_count: z.number().int().nonnegative(),\n datapoint_count: z.number().int().nonnegative(),\n pending_time_millis: z.number().int().nonnegative(),\n execution_time_millis: z.number().int().nonnegative(),\n});\ntype ResultMetadata = z.infer<typeof ResultMetadata>;\n\nexport default ResultMetadata;\n","import { z } from 'zod';\nimport ResultMetadata from './ResultMetadata.js';\n\nconst ExecutionStatusResponse = z\n .object({\n execution_id: z.string(),\n query_id: z.number(),\n is_execution_finished: z.boolean(),\n })\n .and(\n z.discriminatedUnion('state', [\n z.object({\n state: z.literal('QUERY_STATE_PENDING'),\n queue_position: z.number().int().nonnegative().optional(),\n submitted_at: z.string().datetime(),\n }),\n z.object({\n state: z.literal('QUERY_STATE_EXECUTING'),\n submitted_at: z.string().datetime(),\n execution_started_at: z.string().datetime(),\n }),\n z.object({\n state: z.literal('QUERY_STATE_FAILED'),\n submitted_at: z.string().datetime(),\n expires_at: z.string().datetime(),\n execution_started_at: z.string().datetime(),\n execution_ended_at: z.string().datetime(),\n }),\n z.object({\n state: z.literal('QUERY_STATE_COMPLETED'),\n submitted_at: z.string().datetime(),\n expires_at: z.string().datetime(),\n execution_started_at: z.string().datetime(),\n execution_ended_at: z.string().datetime(),\n result_metadata: ResultMetadata,\n }),\n z.object({\n state: z.literal('QUERY_STATE_CANCELLED'),\n submitted_at: z.string().datetime(),\n expires_at: z.string().datetime(),\n cancelled_at: z.string().datetime(),\n }),\n z.object({\n state: z.literal('QUERY_STATE_EXPIRED'),\n // TODO: Add more fields\n }),\n ]),\n );\nexport type ExecutionStatusResponse = z.infer<typeof ExecutionStatusResponse>;\n\nexport type ExecutionStatus = ExecutionStatusResponse['state'];\n\nexport default ExecutionStatusResponse;\n","import CancelExecutionResponse from '../schemas/CancelExecutionResponse.js';\nimport type ExecutionResultsArgs from '../schemas/ExecutionResultsArgs.js';\nimport ExecutionResultsResponse from '../schemas/ExecutionResultsResponse.js';\nimport type ExecutionStatusArgs from '../schemas/ExecutionStatusArgs.js';\nimport ExecutionStatusResponse from '../schemas/ExecutionStatusResponse.js';\nimport BaseClient from './BaseClient.js';\n\nexport default class ExecutionClient extends BaseClient {\n /**\n * Get the status of an execution.\n * @see https://dune.com/docs/api/api-reference/get-results/execution-status/\n */\n status({ execution_id }: ExecutionStatusArgs) {\n return this.call({\n method: 'GET',\n path: `/v1/execution/${execution_id}/status`,\n schema: ExecutionStatusResponse,\n });\n }\n\n /**\n * Cancel an execution.\n * @see https://dune.com/docs/api/api-reference/execute-queries/cancel-execution/\n */\n cancel({ execution_id }: ExecutionStatusArgs) {\n return this.call({\n method: 'POST',\n path: `/v1/execution/${execution_id}/cancel`,\n schema: CancelExecutionResponse,\n });\n }\n\n /**\n * Get the results of an execution.\n * @see https://dune.com/docs/api/api-reference/get-results/execution-status/\n */\n results({ execution_id }: ExecutionResultsArgs) {\n return this.call({\n method: 'GET',\n path: `/v1/execution/${execution_id}/results`,\n schema: ExecutionResultsResponse,\n });\n }\n}\n","import { z } from 'zod';\n\nconst ExecuteQueryResponse = z\n .object({\n execution_id: z.string(),\n })\n .and(\n z.discriminatedUnion('state', [\n z.object({\n state: z.literal('QUERY_STATE_PENDING'),\n }),\n z.object({\n state: z.literal('QUERY_STATE_EXECUTING'),\n }),\n ]),\n );\ntype ExecuteQueryResponse = z.infer<typeof ExecuteQueryResponse>;\n\nexport default ExecuteQueryResponse;\n","import type ExecuteQueryArgs from '../schemas/ExecuteQueryArgs.js';\nimport ExecuteQueryResponse from '../schemas/ExecuteQueryResponse.js';\nimport ExecutionResultsResponse from '../schemas/ExecutionResultsResponse.js';\nimport BaseClient from './BaseClient.js';\n\nexport interface ResultsOptions {\n query_id: string | number;\n ignore_max_datapoints_per_request?: boolean;\n}\n\nexport default class QueryClient extends BaseClient {\n /**\n * Execute am existing Dune query.\n * @see https://dune.com/docs/api/api-reference/execute-queries/execute-query-id/\n */\n execute({ query_id, ...options }: ExecuteQueryArgs) {\n return this.call({\n method: 'POST',\n path: `/v1/query/${query_id}/execute`,\n schema: ExecuteQueryResponse,\n body: JSON.stringify(options),\n });\n }\n\n /**\n * Get the latedst results of a Dune query. This method does NOT execute the query.\n * @see https://dune.com/docs/api/api-reference/get-results/latest-results/\n */\n results({ query_id, ignore_max_datapoints_per_request }: ResultsOptions) {\n const searchParams = new URLSearchParams();\n if (ignore_max_datapoints_per_request) {\n searchParams.set('ignore_max_datapoints_per_request', 'true');\n }\n\n return this.call({\n method: 'GET',\n path: `/v1/query/${query_id}/results`,\n searchParams,\n schema: ExecutionResultsResponse,\n });\n }\n}\n","import ExecutionClient from './clients/ExecutionClient.js';\nimport QueryClient from './clients/QueryClient.js';\nimport type RefreshQueryArgs from './schemas/RefreshQueryArgs.js';\n\n/**\n * Public API client for Dune Analytics. It contains the following sub-clients:\n * - `execution` for managing query executions\n * - `query` for querying the results of a query\n */\nexport default class DuneClient {\n readonly execution: ExecutionClient;\n readonly query: QueryClient;\n\n constructor(apiKey: string) {\n this.execution = new ExecutionClient(apiKey);\n this.query = new QueryClient(apiKey);\n }\n\n /**\n * Convenience method to refresh the results of a query.\n * It will wait for the query to finish and return the results.\n * @param param0\n * @returns\n */\n async refresh({ cooldown = 500, ...args }: RefreshQueryArgs) {\n const { execution_id } = await this.query.execute(args);\n\n // Simple polling loop to wait for the query to finish\n for (;;) {\n const { state } = await this.execution.status({ execution_id });\n\n if (state === 'QUERY_STATE_PENDING' || state === 'QUERY_STATE_EXECUTING') {\n await new Promise((resolve) => setTimeout(resolve, cooldown));\n continue;\n }\n\n break;\n }\n\n return await this.execution.results({ execution_id });\n }\n}\n"],"mappings":"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","names":["import_zod","import_zod","import_zod","import_zod","import_zod"]}