UNPKG

pocketsmith-mcp

Version:

MCP server for managing budgets via PocketSmith API

135 lines (134 loc) 5.36 kB
/** * @fileoverview Defines types and interfaces for the DuckDB service. * @module services/duck-db/types */ import * as duckdb from "@duckdb/node-api"; /** * Configuration options for initializing the DuckDB service. */ export interface DuckDBServiceConfig { /** * The path to the database file. * Use ':memory:' for an in-memory database. * If undefined, defaults to an in-memory database. */ dbPath?: string; /** * Optional DuckDB launch configurations. * Refer to DuckDB documentation for available options. * Example: { allow_unsigned_extensions: 'true' } */ launchConfig?: Record<string, string>; /** * List of extensions to install and load upon initialization. * Example: ['httpfs', 'json'] */ extensions?: string[]; } /** * Represents a query to be executed. */ export interface DuckDBQuery { sql: string; params?: unknown[]; } /** * Represents the result of a query execution. */ export interface DuckDBQueryResult<T = Record<string, unknown>> { rows: T[]; columnNames: string[]; columnTypes: duckdb.DuckDBTypeId[]; rowCount: number; } /** * Interface for the DuckDB service. */ export interface IDuckDBService { /** * Initializes the DuckDB service with the given configuration. * Must be called before any other operations. * @param {DuckDBServiceConfig} config - The configuration for the DuckDB service. * @returns {Promise<void>} * @throws {McpError} If initialization fails. */ initialize(config?: DuckDBServiceConfig): Promise<void>; /** * Executes a SQL query that does not return a large result set (e.g., CREATE, INSERT, UPDATE, DELETE). * @param {string} sql - The SQL query string. * @param {unknown[]} [params] - Optional parameters for the query. * @returns {Promise<void>} * @throws {McpError} If the query fails or the service is not initialized. */ run(sql: string, params?: unknown[]): Promise<void>; /** * Executes a SQL query and returns all resulting rows. * Suitable for queries that return a manageable number of rows. * @template T - The expected type of the row objects. * @param {string} sql - The SQL query string. * @param {unknown[]} [params] - Optional parameters for the query. * @returns {Promise<DuckDBQueryResult<T>>} The query result. * @throws {McpError} If the query fails or the service is not initialized. */ query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<DuckDBQueryResult<T>>; /** * Executes a SQL query and provides a streaming result reader. * Suitable for queries that return very large result sets. * The caller is responsible for closing the stream. * @param {string} sql - The SQL query string. * @param {unknown[]} [params] - Optional parameters for the query. * @returns {Promise<duckdb.DuckDBStreamingResult>} A streaming result object. * @throws {McpError} If the query fails or the service is not initialized. */ stream(sql: string, params?: unknown[]): Promise<duckdb.DuckDBResult>; /** * Creates a prepared statement. * @param {string} sql - The SQL query string for the prepared statement. * @returns {Promise<duckdb.DuckDBPreparedStatement>} The prepared statement object. * @throws {McpError} If preparing the statement fails or the service is not initialized. */ prepare(sql: string): Promise<duckdb.DuckDBPreparedStatement>; /** * Begins a new transaction. * @returns {Promise<void>} * @throws {McpError} If starting the transaction fails or the service is not initialized. */ beginTransaction(): Promise<void>; /** * Commits the current transaction. * @returns {Promise<void>} * @throws {McpError} If committing the transaction fails or the service is not initialized. */ commitTransaction(): Promise<void>; /** * Rolls back the current transaction. * @returns {Promise<void>} * @throws {McpError} If rolling back the transaction fails or the service is not initialized. */ rollbackTransaction(): Promise<void>; /** * Installs and loads a DuckDB extension. * @param {string} extensionName - The name of the extension to install and load. * @returns {Promise<void>} * @throws {McpError} If installing or loading the extension fails or the service is not initialized. */ loadExtension(extensionName: string): Promise<void>; /** * Closes the DuckDB connection and instance. * @returns {Promise<void>} * @throws {McpError} If closing fails. */ close(): Promise<void>; /** * Gets the underlying DuckDB connection object. * Use with caution, primarily for advanced scenarios not covered by the service interface. * @returns {duckdb.DuckDBConnection | null} The connection object, or null if not initialized. */ getRawConnection(): duckdb.DuckDBConnection | null; /** * Gets the underlying DuckDB instance object. * Use with caution, primarily for advanced scenarios not covered by the service interface. * @returns {duckdb.DuckDBInstance | null} The instance object, or null if not initialized. */ getRawInstance(): duckdb.DuckDBInstance | null; }