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
TypeScript
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>;
}