UNPKG

askexperts

Version:

AskExperts SDK: build and use AI experts - ask them questions and pay with bitcoin on an open protocol

210 lines (209 loc) 5.81 kB
import express, { Request } from "express"; import { AuthRequest } from "../common/auth.js"; import { DB } from "./DB.js"; /** * Interface for DB server permissions */ export interface DBServerPerms { /** * Check if the user has permission to perform the requested operation * @param user_id - User ID * @param req - Express request object * @returns Promise that resolves with optional listIds if the user has permission, rejects otherwise */ checkPerms(user_id: string, req: Request): Promise<{ listIds?: string[]; }>; /** * Get the user ID associated with a public key * @param pubkey - Public key of the user * @returns Promise that resolves with the user ID */ getUserId(pubkey: string): Promise<string>; /** * Parse and validate a NIP-98 authentication token * @param origin - Origin URL for validation * @param req - Request object with headers and other properties * @returns Public key if token is valid, empty string otherwise */ parseAuthToken(origin: string, req: AuthRequest): Promise<string>; } /** * Configuration options for DBServer */ export interface DBServerOptions { /** Port to listen on */ port: number; /** Base path for the API (e.g., '/api') */ basePath?: string; /** Server origin for auth token validation (e.g. 'https://yourdomain.com') */ origin?: string; /** Optional permissions interface for authentication and authorization */ perms?: DBServerPerms; } /** * DBServer class that provides an HTTP API for DBInterface operations */ export declare class DBServer { private app; private port; private basePath; private stopped; private server?; private db; private perms?; private serverOrigin; /** * Creates a new DBServer instance * * @param options - Configuration options */ constructor(options: DBServerOptions); getApp(): express.Application; getDB(): DB; /** * Authentication middleware * Parses the auth token and checks permissions */ private authMiddleware; /** * Sets up the API routes * @private */ private setupRoutes; /** * Handles requests to get the current user ID * * @param req - Express request object * @param res - Express response object * @private */ private handleWhoami; /** * Handles requests to list all wallets * * @param req - Express request object * @param res - Express response object * @private */ private handleListWallets; /** * Handles requests to get a wallet by ID * * @param req - Express request object * @param res - Express response object * @private */ private handleGetWallet; /** * Handles requests to get a wallet by name * * @param req - Express request object * @param res - Express response object * @private */ private handleGetWalletByName; /** * Handles requests to get the default wallet * * @param req - Express request object * @param res - Express response object * @private */ private handleGetDefaultWallet; /** * Handles requests to insert a new wallet * * @param req - Express request object * @param res - Express response object * @private */ private handleInsertWallet; /** * Handles requests to update an existing wallet * * @param req - Express request object * @param res - Express response object * @private */ private handleUpdateWallet; /** * Handles requests to delete a wallet * * @param req - Express request object * @param res - Express response object * @private */ private handleDeleteWallet; /** * Handles requests to list all experts * * @param req - Express request object * @param res - Express response object * @private */ private handleListExperts; /** * Handles requests to get an expert by pubkey * * @param req - Express request object * @param res - Express response object * @private */ private handleGetExpert; /** * Handles requests to insert a new expert * * @param req - Express request object * @param res - Express response object * @private */ private handleInsertExpert; /** * Handles requests to update an existing expert * * @param req - Express request object * @param res - Express response object * @private */ private handleUpdateExpert; /** * Handles requests to set the disabled status of an expert * * @param req - Express request object * @param res - Express response object * @private */ private handleSetExpertDisabled; /** * Handles requests to delete an expert * * @param req - Express request object * @param res - Express response object * @private */ private handleDeleteExpert; ensureExternalUser(user_id_ext: string): Promise<string>; addUser(pubkey: string, nwc: string, privkey?: string, user_id_ext?: string): Promise<string>; /** * Handles signup requests * Gets user ID by pubkey or creates a new user if it doesn't exist * * @param req - Express request object * @param res - Express response object * @private */ private handleSignup; /** * Starts the server * * @returns Promise that resolves when the server is started */ start(): Promise<void>; /** * Stops the server * * @returns Promise that resolves when the server is stopped */ stop(): Promise<void>; }