import type * as plugins from '../plugins.js'; /** * Configuration for S3 connection */ export interface IS3Config { endpoint: string; port?: number; accessKey: string; accessSecret: string; useSsl?: boolean; region?: string; } /** * Configuration for MongoDB connection */ export interface IMongoConfig { mongoDbUrl: string; mongoDbName: string; } /** * Combined configuration for tsview */ export interface ITsViewConfig { s3?: IS3Config; mongo?: IMongoConfig; } /** * Configuration from npmextra.json for @git.zone/tsview */ export interface INpmextraConfig { port?: number; // Fixed port to use (optional) killIfBusy?: boolean; // Kill process on port if busy (default: false) openBrowser?: boolean; // Open browser on start (default: true) } /** * Environment configuration from .nogit/env.json (gitzone service format) */ export interface IEnvConfig { MONGODB_URL?: string; MONGODB_HOST?: string; MONGODB_PORT?: string; MONGODB_USER?: string; MONGODB_PASS?: string; MONGODB_NAME?: string; S3_HOST?: string; S3_PORT?: string; S3_ACCESSKEY?: string; S3_SECRETKEY?: string; S3_BUCKET?: string; S3_ENDPOINT?: string; S3_USESSL?: boolean | string; } // =========================================== // TypedRequest interfaces for S3 API // =========================================== export interface IReq_ListBuckets extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ListBuckets > { method: 'listBuckets'; request: {}; response: { buckets: string[]; }; } export interface IReq_CreateBucket extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_CreateBucket > { method: 'createBucket'; request: { bucketName: string; }; response: { success: boolean; }; } export interface IReq_DeleteBucket extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DeleteBucket > { method: 'deleteBucket'; request: { bucketName: string; }; response: { success: boolean; }; } export interface IS3Object { key: string; size?: number; lastModified?: string; isPrefix?: boolean; } export interface IReq_ListObjects extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ListObjects > { method: 'listObjects'; request: { bucketName: string; prefix?: string; delimiter?: string; }; response: { objects: IS3Object[]; prefixes: string[]; }; } export interface IReq_GetObject extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetObject > { method: 'getObject'; request: { bucketName: string; key: string; }; response: { content: string; // base64 contentType: string; size: number; lastModified: string; }; } export interface IReq_GetObjectMetadata extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetObjectMetadata > { method: 'getObjectMetadata'; request: { bucketName: string; key: string; }; response: { contentType: string; size: number; lastModified: string; }; } export interface IReq_PutObject extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_PutObject > { method: 'putObject'; request: { bucketName: string; key: string; content: string; // base64 contentType: string; }; response: { success: boolean; }; } export interface IReq_DeleteObject extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DeleteObject > { method: 'deleteObject'; request: { bucketName: string; key: string; }; response: { success: boolean; }; } export interface IReq_CopyObject extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_CopyObject > { method: 'copyObject'; request: { sourceBucket: string; sourceKey: string; destBucket: string; destKey: string; }; response: { success: boolean; }; } export interface IReq_DeletePrefix extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DeletePrefix > { method: 'deletePrefix'; request: { bucketName: string; prefix: string; }; response: { success: boolean; }; } export interface IReq_GetObjectUrl extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetObjectUrl > { method: 'getObjectUrl'; request: { bucketName: string; key: string; }; response: { url: string; }; } // =========================================== // TypedRequest interfaces for MongoDB API // =========================================== export interface IMongoDatabase { name: string; sizeOnDisk?: number; empty?: boolean; } export interface IReq_ListDatabases extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ListDatabases > { method: 'listDatabases'; request: {}; response: { databases: IMongoDatabase[]; }; } export interface IMongoCollection { name: string; count?: number; } export interface IReq_ListCollections extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ListCollections > { method: 'listCollections'; request: { databaseName: string; }; response: { collections: IMongoCollection[]; }; } export interface IReq_CreateDatabase extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_CreateDatabase > { method: 'createDatabase'; request: { databaseName: string; }; response: { success: boolean; }; } export interface IReq_DropDatabase extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DropDatabase > { method: 'dropDatabase'; request: { databaseName: string; }; response: { success: boolean; }; } export interface IReq_CreateCollection extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_CreateCollection > { method: 'createCollection'; request: { databaseName: string; collectionName: string; }; response: { success: boolean; }; } export interface IReq_DropCollection extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DropCollection > { method: 'dropCollection'; request: { databaseName: string; collectionName: string; }; response: { success: boolean; }; } export interface IReq_FindDocuments extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_FindDocuments > { method: 'findDocuments'; request: { databaseName: string; collectionName: string; filter?: Record; projection?: Record; sort?: Record; skip?: number; limit?: number; }; response: { documents: Record[]; total: number; }; } export interface IReq_GetDocument extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetDocument > { method: 'getDocument'; request: { databaseName: string; collectionName: string; documentId: string; }; response: { document: Record | null; }; } export interface IReq_InsertDocument extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_InsertDocument > { method: 'insertDocument'; request: { databaseName: string; collectionName: string; document: Record; }; response: { insertedId: string; }; } export interface IReq_UpdateDocument extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_UpdateDocument > { method: 'updateDocument'; request: { databaseName: string; collectionName: string; documentId: string; update: Record; }; response: { success: boolean; modifiedCount: number; }; } export interface IReq_DeleteDocument extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DeleteDocument > { method: 'deleteDocument'; request: { databaseName: string; collectionName: string; documentId: string; }; response: { success: boolean; deletedCount: number; }; } export interface IReq_RunAggregation extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_RunAggregation > { method: 'runAggregation'; request: { databaseName: string; collectionName: string; pipeline: Record[]; }; response: { results: Record[]; }; } export interface IMongoIndex { name: string; keys: Record; unique?: boolean; sparse?: boolean; } export interface IReq_ListIndexes extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_ListIndexes > { method: 'listIndexes'; request: { databaseName: string; collectionName: string; }; response: { indexes: IMongoIndex[]; }; } export interface IReq_CreateIndex extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_CreateIndex > { method: 'createIndex'; request: { databaseName: string; collectionName: string; keys: Record; options?: { unique?: boolean; sparse?: boolean; name?: string; }; }; response: { indexName: string; }; } export interface IReq_DropIndex extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DropIndex > { method: 'dropIndex'; request: { databaseName: string; collectionName: string; indexName: string; }; response: { success: boolean; }; } export interface ICollectionStats { count: number; size: number; avgObjSize: number; storageSize: number; indexCount: number; } export interface IReq_GetCollectionStats extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetCollectionStats > { method: 'getCollectionStats'; request: { databaseName: string; collectionName: string; }; response: { stats: ICollectionStats; }; } export interface IReq_GetServerStatus extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetServerStatus > { method: 'getServerStatus'; request: {}; response: { version: string; uptime: number; connections: { current: number; available: number; }; }; }