@autonomaai/database-client 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ export { AutonomaSupabaseClient, createSupabaseClient, createSupabaseClientFromEnv, type DatabaseClientConfig, type DatabaseClientDeps } from './supabaseClient.js';
2
+ export { PostgresClient, createPostgresClient, createPostgresClientFromEnv, type PostgresConfig, type PostgresClientDeps } from './postgresClient.js';
3
+ export * from './types.js';
4
+ export { MarketMakerDataService, createMarketMakerDataService, createMarketMakerDataServiceFromEnv, type MarketMakerStrategy, type MarketMakerPerformance, type HummingbotControllerData, type MarketMakerPortfolio } from './marketMakerDataService.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAC3B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,2BAA2B,EAC3B,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,cAAc,YAAY,CAAC;AAE3B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,mCAAmC,EACnC,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EAC1B,MAAM,6BAA6B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { AutonomaSupabaseClient, createSupabaseClient, createSupabaseClientFromEnv } from './supabaseClient.js';
2
+ export { PostgresClient, createPostgresClient, createPostgresClientFromEnv } from './postgresClient.js';
3
+ export * from './types.js';
4
+ export { MarketMakerDataService, createMarketMakerDataService, createMarketMakerDataServiceFromEnv } from './marketMakerDataService.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAG5B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,2BAA2B,EAG5B,MAAM,qBAAqB,CAAC;AAE7B,cAAc,YAAY,CAAC;AAE3B,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,mCAAmC,EAKpC,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { DatabaseClientConfig } from './supabaseClient.js';
2
+ export interface MarketMakerStrategy {
3
+ id?: string;
4
+ controller_id: string;
5
+ name: string;
6
+ trading_pair: string;
7
+ exchange: string;
8
+ strategy_type: string;
9
+ status: 'active' | 'paused' | 'stopped' | 'error';
10
+ inventory_target_base: number;
11
+ inventory_target_quote: number;
12
+ current_inventory_base: number;
13
+ current_inventory_quote: number;
14
+ bid_spread: number;
15
+ ask_spread: number;
16
+ order_amount: number;
17
+ total_pnl: number;
18
+ daily_pnl: number;
19
+ volume_24h: number;
20
+ total_volume: number;
21
+ spread_capture: number;
22
+ created_at?: Date;
23
+ updated_at?: Date;
24
+ started_at?: Date;
25
+ last_trade_at?: Date;
26
+ }
27
+ export interface MarketMakerPerformance {
28
+ id?: string;
29
+ strategy_id: string;
30
+ controller_id: string;
31
+ pnl: number;
32
+ volume_traded: number;
33
+ spread_captured: number;
34
+ orders_filled: number;
35
+ orders_cancelled: number;
36
+ base_inventory: number;
37
+ quote_inventory: number;
38
+ inventory_value_usd: number;
39
+ timestamp: Date;
40
+ period_start: Date;
41
+ period_end: Date;
42
+ }
43
+ export interface HummingbotControllerData {
44
+ id: string;
45
+ name: string;
46
+ strategy: string;
47
+ trading_pair: string;
48
+ exchange: string;
49
+ status: string;
50
+ pnl?: number;
51
+ volume_traded?: number;
52
+ total_volume?: number;
53
+ config?: any;
54
+ }
55
+ export interface MarketMakerPortfolio {
56
+ exchange: string;
57
+ base_balance: number;
58
+ quote_balance: number;
59
+ base_available: number;
60
+ quote_available: number;
61
+ total_value_usd: number;
62
+ last_updated: Date;
63
+ }
64
+ export declare class MarketMakerDataService {
65
+ private client;
66
+ constructor(config: DatabaseClientConfig);
67
+ getActiveStrategies(): Promise<MarketMakerStrategy[]>;
68
+ getAllStrategies(): Promise<MarketMakerStrategy[]>;
69
+ getStrategyById(id: string): Promise<MarketMakerStrategy | null>;
70
+ getStrategyByControllerId(controller_id: string): Promise<MarketMakerStrategy | null>;
71
+ createStrategy(strategy: Omit<MarketMakerStrategy, 'id' | 'created_at' | 'updated_at'>): Promise<MarketMakerStrategy>;
72
+ updateStrategy(id: string, updates: Partial<MarketMakerStrategy>): Promise<MarketMakerStrategy>;
73
+ updateStrategyByControllerId(controller_id: string, updates: Partial<MarketMakerStrategy>): Promise<MarketMakerStrategy[]>;
74
+ recordPerformance(performance: Omit<MarketMakerPerformance, 'id'>): Promise<MarketMakerPerformance>;
75
+ getPerformanceHistory(controller_id: string, limit?: number): Promise<MarketMakerPerformance[]>;
76
+ getLatestPerformance(controller_id: string): Promise<MarketMakerPerformance | null>;
77
+ syncStrategyFromHummingbot(hbData: HummingbotControllerData): Promise<MarketMakerStrategy>;
78
+ private mapHummingbotStatus;
79
+ healthCheck(): Promise<boolean>;
80
+ }
81
+ export declare function createMarketMakerDataService(config: DatabaseClientConfig): MarketMakerDataService;
82
+ export declare function createMarketMakerDataServiceFromEnv(): MarketMakerDataService;
83
+ //# sourceMappingURL=marketMakerDataService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketMakerDataService.d.ts","sourceRoot":"","sources":["../src/marketMakerDataService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ import { AutonomaSupabaseClient } from './supabaseClient.js';
2
+ export class MarketMakerDataService {
3
+ client;
4
+ constructor(config) {
5
+ this.client = new AutonomaSupabaseClient({ config });
6
+ }
7
+ // Strategy Management
8
+ async getActiveStrategies() {
9
+ return this.client.select('market_maker_strategies', { status: 'active' });
10
+ }
11
+ async getAllStrategies() {
12
+ return this.client.select('market_maker_strategies');
13
+ }
14
+ async getStrategyById(id) {
15
+ const results = await this.client.select('market_maker_strategies', { id });
16
+ return results.length > 0 ? results[0] : null;
17
+ }
18
+ async getStrategyByControllerId(controller_id) {
19
+ const results = await this.client.select('market_maker_strategies', { controller_id });
20
+ return results.length > 0 ? results[0] : null;
21
+ }
22
+ async createStrategy(strategy) {
23
+ return this.client.insert('market_maker_strategies', strategy);
24
+ }
25
+ async updateStrategy(id, updates) {
26
+ return this.client.update('market_maker_strategies', id, updates);
27
+ }
28
+ async updateStrategyByControllerId(controller_id, updates) {
29
+ // Note: This requires a custom update method in the client for non-id updates
30
+ const strategies = await this.client.select('market_maker_strategies', { controller_id });
31
+ if (strategies.length > 0) {
32
+ return [await this.client.update('market_maker_strategies', strategies[0].id, updates)];
33
+ }
34
+ return [];
35
+ }
36
+ // Performance Tracking
37
+ async recordPerformance(performance) {
38
+ return this.client.insert('market_maker_performance', performance);
39
+ }
40
+ async getPerformanceHistory(controller_id, limit = 100) {
41
+ return this.client.select('market_maker_performance', { controller_id }, {
42
+ limit,
43
+ orderBy: { column: 'timestamp', ascending: false }
44
+ });
45
+ }
46
+ async getLatestPerformance(controller_id) {
47
+ const results = await this.client.select('market_maker_performance', { controller_id }, {
48
+ limit: 1,
49
+ orderBy: { column: 'timestamp', ascending: false }
50
+ });
51
+ return results.length > 0 ? results[0] : null;
52
+ }
53
+ // Sync methods to update database from Hummingbot API data
54
+ async syncStrategyFromHummingbot(hbData) {
55
+ const existing = await this.getStrategyByControllerId(hbData.id);
56
+ if (existing) {
57
+ // Update existing strategy with fresh data from Hummingbot
58
+ const updates = {
59
+ name: hbData.name,
60
+ strategy_type: hbData.strategy,
61
+ trading_pair: hbData.trading_pair,
62
+ exchange: hbData.exchange,
63
+ status: this.mapHummingbotStatus(hbData.status),
64
+ total_pnl: hbData.pnl || existing.total_pnl,
65
+ total_volume: hbData.volume_traded || hbData.total_volume || existing.total_volume,
66
+ updated_at: new Date()
67
+ };
68
+ return this.client.update('market_maker_strategies', existing.id, updates);
69
+ }
70
+ else {
71
+ // Create new strategy from Hummingbot data
72
+ const newStrategy = {
73
+ controller_id: hbData.id,
74
+ name: hbData.name,
75
+ trading_pair: hbData.trading_pair,
76
+ exchange: hbData.exchange,
77
+ strategy_type: hbData.strategy,
78
+ status: this.mapHummingbotStatus(hbData.status),
79
+ // Default inventory values - these should be updated by the agent
80
+ inventory_target_base: 0,
81
+ inventory_target_quote: 0,
82
+ current_inventory_base: 0,
83
+ current_inventory_quote: 0,
84
+ // Default strategy parameters
85
+ bid_spread: 0.001,
86
+ ask_spread: 0.001,
87
+ order_amount: 0,
88
+ // Performance data from Hummingbot
89
+ total_pnl: hbData.pnl || 0,
90
+ daily_pnl: 0,
91
+ volume_24h: 0,
92
+ total_volume: hbData.volume_traded || hbData.total_volume || 0,
93
+ spread_capture: 0
94
+ };
95
+ return this.client.insert('market_maker_strategies', newStrategy);
96
+ }
97
+ }
98
+ // Helper methods
99
+ mapHummingbotStatus(hbStatus) {
100
+ const status = hbStatus.toLowerCase();
101
+ if (status.includes('running') || status.includes('active'))
102
+ return 'active';
103
+ if (status.includes('paused'))
104
+ return 'paused';
105
+ if (status.includes('error') || status.includes('failed'))
106
+ return 'error';
107
+ return 'stopped';
108
+ }
109
+ // Health check method
110
+ async healthCheck() {
111
+ try {
112
+ await this.client.select('market_maker_strategies', {}, { limit: 1 });
113
+ return true;
114
+ }
115
+ catch (error) {
116
+ console.error('MarketMakerDataService health check failed:', error);
117
+ return false;
118
+ }
119
+ }
120
+ }
121
+ // Factory function for easy instantiation
122
+ export function createMarketMakerDataService(config) {
123
+ return new MarketMakerDataService(config);
124
+ }
125
+ // Factory from environment variables
126
+ export function createMarketMakerDataServiceFromEnv() {
127
+ const config = {
128
+ url: process.env.NEXT_PUBLIC_SUPABASE_URL || process.env.SUPABASE_URL || '',
129
+ key: process.env.SUPABASE_SERVICE_ROLE_KEY || ''
130
+ };
131
+ if (!config.url || !config.key) {
132
+ throw new Error('Missing Supabase configuration. Please set SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY environment variables.');
133
+ }
134
+ return new MarketMakerDataService(config);
135
+ }
136
+ //# sourceMappingURL=marketMakerDataService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketMakerDataService.js","sourceRoot":"","sources":["../src/marketMakerDataService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { Pool, PoolClient, QueryResult } from 'pg';
2
+ export interface PostgresConfig {
3
+ connectionString?: string;
4
+ host?: string;
5
+ port?: number;
6
+ database?: string;
7
+ user?: string;
8
+ password?: string;
9
+ ssl?: boolean;
10
+ max?: number;
11
+ idleTimeoutMillis?: number;
12
+ connectionTimeoutMillis?: number;
13
+ }
14
+ export interface PostgresClientDeps {
15
+ pool?: Pool;
16
+ config?: PostgresConfig;
17
+ }
18
+ export declare class PostgresClient {
19
+ private pool;
20
+ constructor(deps?: PostgresClientDeps);
21
+ /**
22
+ * Execute a query with parameters
23
+ */
24
+ query(text: string, params?: any[]): Promise<QueryResult>;
25
+ /**
26
+ * Execute a query and return only the rows
27
+ */
28
+ queryRows(text: string, params?: any[]): Promise<any[]>;
29
+ /**
30
+ * Execute a query and return a single row
31
+ */
32
+ queryOne(text: string, params?: any[]): Promise<any | null>;
33
+ /**
34
+ * Execute multiple queries in a transaction
35
+ */
36
+ transaction<T>(callback: (client: PoolClient) => Promise<T>): Promise<T>;
37
+ /**
38
+ * Insert a record and return the inserted row
39
+ */
40
+ insert(table: string, data: Record<string, any>): Promise<any>;
41
+ /**
42
+ * Update records and return updated rows
43
+ */
44
+ update(table: string, data: Record<string, any>, where: Record<string, any>): Promise<any[]>;
45
+ /**
46
+ * Delete records and return deleted rows
47
+ */
48
+ delete(table: string, where: Record<string, any>): Promise<any[]>;
49
+ /**
50
+ * Select records with filters
51
+ */
52
+ select(table: string, options?: {
53
+ columns?: string[];
54
+ where?: Record<string, any>;
55
+ orderBy?: {
56
+ column: string;
57
+ direction?: 'ASC' | 'DESC';
58
+ };
59
+ limit?: number;
60
+ offset?: number;
61
+ }): Promise<any[]>;
62
+ /**
63
+ * Check if the database connection is healthy
64
+ */
65
+ healthCheck(): Promise<boolean>;
66
+ /**
67
+ * Get database pool statistics
68
+ */
69
+ getPoolStats(): {
70
+ totalCount: number;
71
+ idleCount: number;
72
+ waitingCount: number;
73
+ };
74
+ /**
75
+ * Close the database pool
76
+ */
77
+ close(): Promise<void>;
78
+ }
79
+ /**
80
+ * Factory function to create a PostgreSQL client
81
+ */
82
+ export declare function createPostgresClient(config: PostgresConfig): PostgresClient;
83
+ /**
84
+ * Factory function to create a PostgreSQL client from environment variables
85
+ */
86
+ export declare function createPostgresClientFromEnv(envPrefix: string): PostgresClient;
87
+ //# sourceMappingURL=postgresClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresClient.d.ts","sourceRoot":"","sources":["../src/postgresClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAEnD,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAO;gBAEP,IAAI,GAAE,kBAAuB;IAqBzC;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAU/D;;OAEG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAK7D;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAKjE;;OAEG;IACG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAe9E;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAepE;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAsBlG;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAiBvE;;OAEG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QACP,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;SAAE,CAAC;QACzD,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACZ,GACL,OAAO,CAAC,GAAG,EAAE,CAAC;IAiCjB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IASrC;;OAEG;IACH,YAAY;;;;;IAQZ;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAE3E;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAyB7E"}
@@ -0,0 +1,213 @@
1
+ import { Pool } from 'pg';
2
+ export class PostgresClient {
3
+ pool;
4
+ constructor(deps = {}) {
5
+ if (deps.pool) {
6
+ this.pool = deps.pool;
7
+ }
8
+ else if (deps.config) {
9
+ this.pool = new Pool({
10
+ connectionString: deps.config.connectionString,
11
+ host: deps.config.host,
12
+ port: deps.config.port,
13
+ database: deps.config.database,
14
+ user: deps.config.user,
15
+ password: deps.config.password,
16
+ ssl: deps.config.ssl ? { rejectUnauthorized: false } : false,
17
+ max: deps.config.max || 10,
18
+ idleTimeoutMillis: deps.config.idleTimeoutMillis || 30000,
19
+ connectionTimeoutMillis: deps.config.connectionTimeoutMillis || 2000,
20
+ });
21
+ }
22
+ else {
23
+ throw new Error('Either pool or config must be provided');
24
+ }
25
+ }
26
+ /**
27
+ * Execute a query with parameters
28
+ */
29
+ async query(text, params) {
30
+ const client = await this.pool.connect();
31
+ try {
32
+ const result = await client.query(text, params);
33
+ return result;
34
+ }
35
+ finally {
36
+ client.release();
37
+ }
38
+ }
39
+ /**
40
+ * Execute a query and return only the rows
41
+ */
42
+ async queryRows(text, params) {
43
+ const result = await this.query(text, params);
44
+ return result.rows;
45
+ }
46
+ /**
47
+ * Execute a query and return a single row
48
+ */
49
+ async queryOne(text, params) {
50
+ const result = await this.query(text, params);
51
+ return result.rows[0] || null;
52
+ }
53
+ /**
54
+ * Execute multiple queries in a transaction
55
+ */
56
+ async transaction(callback) {
57
+ const client = await this.pool.connect();
58
+ try {
59
+ await client.query('BEGIN');
60
+ const result = await callback(client);
61
+ await client.query('COMMIT');
62
+ return result;
63
+ }
64
+ catch (error) {
65
+ await client.query('ROLLBACK');
66
+ throw error;
67
+ }
68
+ finally {
69
+ client.release();
70
+ }
71
+ }
72
+ /**
73
+ * Insert a record and return the inserted row
74
+ */
75
+ async insert(table, data) {
76
+ const columns = Object.keys(data);
77
+ const values = Object.values(data);
78
+ const placeholders = values.map((_, index) => `$${index + 1}`).join(', ');
79
+ const query = `
80
+ INSERT INTO ${table} (${columns.join(', ')})
81
+ VALUES (${placeholders})
82
+ RETURNING *
83
+ `;
84
+ const result = await this.query(query, values);
85
+ return result.rows[0];
86
+ }
87
+ /**
88
+ * Update records and return updated rows
89
+ */
90
+ async update(table, data, where) {
91
+ const setClause = Object.keys(data)
92
+ .map((key, index) => `${key} = $${index + 1}`)
93
+ .join(', ');
94
+ const whereClause = Object.keys(where)
95
+ .map((key, index) => `${key} = $${index + Object.keys(data).length + 1}`)
96
+ .join(' AND ');
97
+ const values = [...Object.values(data), ...Object.values(where)];
98
+ const query = `
99
+ UPDATE ${table}
100
+ SET ${setClause}
101
+ WHERE ${whereClause}
102
+ RETURNING *
103
+ `;
104
+ const result = await this.query(query, values);
105
+ return result.rows;
106
+ }
107
+ /**
108
+ * Delete records and return deleted rows
109
+ */
110
+ async delete(table, where) {
111
+ const whereClause = Object.keys(where)
112
+ .map((key, index) => `${key} = $${index + 1}`)
113
+ .join(' AND ');
114
+ const values = Object.values(where);
115
+ const query = `
116
+ DELETE FROM ${table}
117
+ WHERE ${whereClause}
118
+ RETURNING *
119
+ `;
120
+ const result = await this.query(query, values);
121
+ return result.rows;
122
+ }
123
+ /**
124
+ * Select records with filters
125
+ */
126
+ async select(table, options = {}) {
127
+ const columns = options.columns ? options.columns.join(', ') : '*';
128
+ let query = `SELECT ${columns} FROM ${table}`;
129
+ const values = [];
130
+ let paramIndex = 1;
131
+ if (options.where && Object.keys(options.where).length > 0) {
132
+ const whereClause = Object.keys(options.where)
133
+ .map(key => `${key} = $${paramIndex++}`)
134
+ .join(' AND ');
135
+ query += ` WHERE ${whereClause}`;
136
+ values.push(...Object.values(options.where));
137
+ }
138
+ if (options.orderBy) {
139
+ const direction = options.orderBy.direction || 'ASC';
140
+ query += ` ORDER BY ${options.orderBy.column} ${direction}`;
141
+ }
142
+ if (options.limit) {
143
+ query += ` LIMIT $${paramIndex++}`;
144
+ values.push(options.limit);
145
+ }
146
+ if (options.offset) {
147
+ query += ` OFFSET $${paramIndex++}`;
148
+ values.push(options.offset);
149
+ }
150
+ const result = await this.query(query, values);
151
+ return result.rows;
152
+ }
153
+ /**
154
+ * Check if the database connection is healthy
155
+ */
156
+ async healthCheck() {
157
+ try {
158
+ await this.query('SELECT 1');
159
+ return true;
160
+ }
161
+ catch {
162
+ return false;
163
+ }
164
+ }
165
+ /**
166
+ * Get database pool statistics
167
+ */
168
+ getPoolStats() {
169
+ return {
170
+ totalCount: this.pool.totalCount,
171
+ idleCount: this.pool.idleCount,
172
+ waitingCount: this.pool.waitingCount,
173
+ };
174
+ }
175
+ /**
176
+ * Close the database pool
177
+ */
178
+ async close() {
179
+ await this.pool.end();
180
+ }
181
+ }
182
+ /**
183
+ * Factory function to create a PostgreSQL client
184
+ */
185
+ export function createPostgresClient(config) {
186
+ return new PostgresClient({ config });
187
+ }
188
+ /**
189
+ * Factory function to create a PostgreSQL client from environment variables
190
+ */
191
+ export function createPostgresClientFromEnv(envPrefix) {
192
+ const connectionString = process.env[`${envPrefix}_DATABASE_URL`];
193
+ if (connectionString) {
194
+ return createPostgresClient({ connectionString });
195
+ }
196
+ const host = process.env[`${envPrefix}_DB_HOST`] || process.env.POSTGRES_HOST;
197
+ const port = parseInt(process.env[`${envPrefix}_DB_PORT`] || process.env.POSTGRES_PORT || '5432');
198
+ const database = process.env[`${envPrefix}_DB_NAME`] || process.env.POSTGRES_DB;
199
+ const user = process.env[`${envPrefix}_DB_USER`] || process.env.POSTGRES_USER;
200
+ const password = process.env[`${envPrefix}_DB_PASSWORD`] || process.env.POSTGRES_PASSWORD;
201
+ if (!host || !database || !user || !password) {
202
+ throw new Error(`Missing PostgreSQL credentials for ${envPrefix}. Please set connection string or individual credentials.`);
203
+ }
204
+ return createPostgresClient({
205
+ host,
206
+ port,
207
+ database,
208
+ user,
209
+ password,
210
+ ssl: process.env.NODE_ENV === 'production'
211
+ });
212
+ }
213
+ //# sourceMappingURL=postgresClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgresClient.js","sourceRoot":"","sources":["../src/postgresClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export declare class SupabaseClient {
2
+ private static instance;
3
+ private supabase;
4
+ private constructor();
5
+ static getInstance(): SupabaseClient;
6
+ private initializeClient;
7
+ getClient(): any;
8
+ getConfig(): any;
9
+ isLocal(): boolean;
10
+ isProduction(): boolean;
11
+ getPublicClient(): any;
12
+ }
13
+ export default SupabaseClient;
14
+ //# sourceMappingURL=supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"AAEA,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAM;IAEtB,OAAO;WAIO,WAAW,IAAI,cAAc;IAO3C,OAAO,CAAC,gBAAgB;IAyBjB,SAAS,IAAI,GAAG;IAIhB,SAAS,IAAI,GAAG;IAQhB,OAAO,IAAI,OAAO;IAIlB,YAAY,IAAI,OAAO;IAKvB,eAAe,IAAI,GAAG;CAW9B;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { createClient } from '@supabase/supabase-js';
2
+ export class SupabaseClient {
3
+ static instance;
4
+ supabase;
5
+ constructor() {
6
+ this.initializeClient();
7
+ }
8
+ static getInstance() {
9
+ if (!SupabaseClient.instance) {
10
+ SupabaseClient.instance = new SupabaseClient();
11
+ }
12
+ return SupabaseClient.instance;
13
+ }
14
+ initializeClient() {
15
+ // Get config from environment variables
16
+ const supabaseUrl = process.env.SUPABASE_URL || '';
17
+ const supabaseServiceKey = process.env.SUPABASE_SERVICE_KEY || '';
18
+ this.supabase = createClient(supabaseUrl, supabaseServiceKey, {
19
+ auth: {
20
+ autoRefreshToken: true,
21
+ persistSession: true,
22
+ detectSessionInUrl: true
23
+ },
24
+ db: {
25
+ schema: 'public'
26
+ },
27
+ global: {
28
+ headers: {
29
+ 'X-Client-Info': 'autonoma-market-maker-agent'
30
+ }
31
+ }
32
+ });
33
+ const env = process.env.NODE_ENV || 'development';
34
+ console.log(`Supabase client initialized for ${env} environment`);
35
+ }
36
+ getClient() {
37
+ return this.supabase;
38
+ }
39
+ getConfig() {
40
+ return {
41
+ url: process.env.SUPABASE_URL || '',
42
+ serviceRoleKey: process.env.SUPABASE_SERVICE_KEY || '',
43
+ anonKey: process.env.SUPABASE_ANON_KEY || ''
44
+ };
45
+ }
46
+ isLocal() {
47
+ return process.env.NODE_ENV !== 'production';
48
+ }
49
+ isProduction() {
50
+ return process.env.NODE_ENV === 'production';
51
+ }
52
+ // Helper method to get public client (for frontend use)
53
+ getPublicClient() {
54
+ const supabaseUrl = process.env.SUPABASE_URL || '';
55
+ const supabaseAnonKey = process.env.SUPABASE_ANON_KEY || '';
56
+ return createClient(supabaseUrl, supabaseAnonKey, {
57
+ auth: {
58
+ autoRefreshToken: true,
59
+ persistSession: true,
60
+ detectSessionInUrl: true
61
+ }
62
+ });
63
+ }
64
+ }
65
+ export default SupabaseClient;
66
+ //# sourceMappingURL=supabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../src/supabase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,OAAO,cAAc;IACjB,MAAM,CAAC,QAAQ,CAAiB;IAChC,QAAQ,CAAM;IAEtB;QACE,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEM,MAAM,CAAC,WAAW;QACvB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,GAAG,IAAI,cAAc,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,cAAc,CAAC,QAAQ,CAAC;IACjC,CAAC;IAEO,gBAAgB;QACtB,wCAAwC;QACxC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QACnD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAElE,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE,kBAAkB,EAAE;YAC5D,IAAI,EAAE;gBACJ,gBAAgB,EAAE,IAAI;gBACtB,cAAc,EAAE,IAAI;gBACpB,kBAAkB,EAAE,IAAI;aACzB;YACD,EAAE,EAAE;gBACF,MAAM,EAAE,QAAQ;aACjB;YACD,MAAM,EAAE;gBACN,OAAO,EAAE;oBACP,eAAe,EAAE,6BAA6B;iBAC/C;aACF;SACF,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,cAAc,CAAC,CAAC;IACpE,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEM,SAAS;QACd,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE;YACnC,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE;YACtD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;SAC7C,CAAC;IACJ,CAAC;IAEM,OAAO;QACZ,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAC/C,CAAC;IAEM,YAAY;QACjB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAC/C,CAAC;IAED,wDAAwD;IACjD,eAAe;QACpB,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;QACnD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE,CAAC;QAC5D,OAAO,YAAY,CAAC,WAAW,EAAE,eAAe,EAAE;YAChD,IAAI,EAAE;gBACJ,gBAAgB,EAAE,IAAI;gBACtB,cAAc,EAAE,IAAI;gBACpB,kBAAkB,EAAE,IAAI;aACzB;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAED,eAAe,cAAc,CAAC"}
@@ -0,0 +1,83 @@
1
+ import { SupabaseClient } from '@supabase/supabase-js';
2
+ export interface DatabaseClientConfig {
3
+ url: string;
4
+ key: string;
5
+ schema?: string;
6
+ }
7
+ export interface DatabaseClientDeps {
8
+ client?: SupabaseClient;
9
+ config?: DatabaseClientConfig;
10
+ }
11
+ export declare class AutonomaSupabaseClient {
12
+ private client;
13
+ constructor(deps?: DatabaseClientDeps);
14
+ /**
15
+ * Insert a single record into a table
16
+ */
17
+ insert(table: string, data: any): Promise<any>;
18
+ /**
19
+ * Insert multiple records into a table
20
+ */
21
+ insertMany(table: string, data: any[]): Promise<any[]>;
22
+ /**
23
+ * Select records from a table with optional filters
24
+ */
25
+ select(table: string, filters?: Record<string, any>, options?: {
26
+ columns?: string;
27
+ limit?: number;
28
+ orderBy?: {
29
+ column: string;
30
+ ascending?: boolean;
31
+ };
32
+ }): Promise<any[]>;
33
+ /**
34
+ * Update records in a table
35
+ */
36
+ update(table: string, id: string, data: any, idColumn?: string): Promise<any>;
37
+ /**
38
+ * Upsert (insert or update) records in a table
39
+ */
40
+ upsert(table: string, data: any | any[], options?: {
41
+ onConflict?: string;
42
+ ignoreDuplicates?: boolean;
43
+ }): Promise<any>;
44
+ /**
45
+ * Delete records from a table
46
+ */
47
+ delete(table: string, filters: Record<string, any>): Promise<any[]>;
48
+ /**
49
+ * Execute a raw SQL query (use with caution)
50
+ */
51
+ query(sql: string, params?: any[]): Promise<any>;
52
+ /**
53
+ * Health check for the database connection
54
+ */
55
+ healthCheck(): Promise<boolean>;
56
+ /**
57
+ * Get the underlying Supabase client for advanced operations
58
+ */
59
+ getClient(): SupabaseClient<any, string, any>;
60
+ /**
61
+ * Count records in a table with optional filters
62
+ */
63
+ count(table: string, filters?: Record<string, any>): Promise<number>;
64
+ /**
65
+ * Access the underlying Supabase client's from() method
66
+ * Allows direct query building when needed
67
+ */
68
+ from(table: string): import("@supabase/postgrest-js").PostgrestQueryBuilder<any, any, any, string, unknown>;
69
+ /**
70
+ * Get the raw Supabase client instance
71
+ * Use with caution - prefer using the wrapped methods
72
+ */
73
+ getRawClient(): SupabaseClient<any, string, any>;
74
+ }
75
+ /**
76
+ * Factory function to create a Supabase client
77
+ */
78
+ export declare function createSupabaseClient(config: DatabaseClientConfig): AutonomaSupabaseClient;
79
+ /**
80
+ * Factory function to create a Supabase client from environment variables
81
+ */
82
+ export declare function createSupabaseClientFromEnv(envPrefix: string): AutonomaSupabaseClient;
83
+ //# sourceMappingURL=supabaseClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabaseClient.d.ts","sourceRoot":"","sources":["../src/supabaseClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAErE,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAmC;gBAErC,IAAI,GAAE,kBAAuB;IAWzC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAcpD;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAa5D;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE;QACnE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;KACnD,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAiDlB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAa,GAAG,OAAO,CAAC,GAAG,CAAC;IAezF;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,GAAG,EAAE,EAAE,OAAO,CAAC,EAAE;QACvD,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GAAG,OAAO,CAAC,GAAG,CAAC;IAuBhB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAqBzE;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAiBtD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAarC;;OAEG;IACH,SAAS,IAAI,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC;IAI7C;;OAEG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB1E;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM;IAIlB;;;OAGG;IACH,YAAY,IAAI,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC;CAGjD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,sBAAsB,CAEzF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CASrF"}
@@ -0,0 +1,256 @@
1
+ import { createClient } from '@supabase/supabase-js';
2
+ export class AutonomaSupabaseClient {
3
+ client;
4
+ constructor(deps = {}) {
5
+ if (deps.client) {
6
+ this.client = deps.client;
7
+ }
8
+ else if (deps.config) {
9
+ const options = deps.config.schema ? { db: { schema: deps.config.schema } } : {};
10
+ this.client = createClient(deps.config.url, deps.config.key, options);
11
+ }
12
+ else {
13
+ throw new Error('Either client or config must be provided');
14
+ }
15
+ }
16
+ /**
17
+ * Insert a single record into a table
18
+ */
19
+ async insert(table, data) {
20
+ const { data: result, error } = await this.client
21
+ .from(table)
22
+ .insert(data)
23
+ .select()
24
+ .single();
25
+ if (error) {
26
+ throw new Error(`Failed to insert into ${table}: ${error.message}`);
27
+ }
28
+ return result;
29
+ }
30
+ /**
31
+ * Insert multiple records into a table
32
+ */
33
+ async insertMany(table, data) {
34
+ const { data: result, error } = await this.client
35
+ .from(table)
36
+ .insert(data)
37
+ .select();
38
+ if (error) {
39
+ throw new Error(`Failed to insert into ${table}: ${error.message}`);
40
+ }
41
+ return result || [];
42
+ }
43
+ /**
44
+ * Select records from a table with optional filters
45
+ */
46
+ async select(table, filters, options) {
47
+ let query = this.client.from(table).select(options?.columns || '*');
48
+ // Apply filters
49
+ if (filters) {
50
+ Object.entries(filters).forEach(([key, value]) => {
51
+ if (value && typeof value === 'object' && 'operator' in value) {
52
+ // Handle operator filters
53
+ const operatorFilter = value;
54
+ switch (operatorFilter.operator) {
55
+ case 'eq':
56
+ query = query.eq(key, operatorFilter.value);
57
+ break;
58
+ case 'neq':
59
+ query = query.neq(key, operatorFilter.value);
60
+ break;
61
+ case 'gt':
62
+ query = query.gt(key, operatorFilter.value);
63
+ break;
64
+ case 'gte':
65
+ query = query.gte(key, operatorFilter.value);
66
+ break;
67
+ case 'lt':
68
+ query = query.lt(key, operatorFilter.value);
69
+ break;
70
+ case 'lte':
71
+ query = query.lte(key, operatorFilter.value);
72
+ break;
73
+ case 'like':
74
+ query = query.like(key, operatorFilter.value);
75
+ break;
76
+ case 'ilike':
77
+ query = query.ilike(key, operatorFilter.value);
78
+ break;
79
+ case 'in':
80
+ query = query.in(key, Array.isArray(operatorFilter.value) ? operatorFilter.value : [operatorFilter.value]);
81
+ break;
82
+ }
83
+ }
84
+ else if (Array.isArray(value)) {
85
+ query = query.in(key, value);
86
+ }
87
+ else if (value !== undefined) {
88
+ query = query.eq(key, value);
89
+ }
90
+ });
91
+ }
92
+ // Apply ordering
93
+ if (options?.orderBy) {
94
+ query = query.order(options.orderBy.column, {
95
+ ascending: options.orderBy.ascending !== false
96
+ });
97
+ }
98
+ // Apply limit
99
+ if (options?.limit) {
100
+ query = query.limit(options.limit);
101
+ }
102
+ const { data, error } = await query;
103
+ if (error) {
104
+ throw new Error(`Failed to select from ${table}: ${error.message}`);
105
+ }
106
+ return data || [];
107
+ }
108
+ /**
109
+ * Update records in a table
110
+ */
111
+ async update(table, id, data, idColumn = 'id') {
112
+ const { data: result, error } = await this.client
113
+ .from(table)
114
+ .update(data)
115
+ .eq(idColumn, id)
116
+ .select()
117
+ .single();
118
+ if (error) {
119
+ throw new Error(`Failed to update ${table}: ${error.message}`);
120
+ }
121
+ return result;
122
+ }
123
+ /**
124
+ * Upsert (insert or update) records in a table
125
+ */
126
+ async upsert(table, data, options) {
127
+ const upsertOptions = {};
128
+ if (options?.onConflict) {
129
+ upsertOptions.onConflict = options.onConflict;
130
+ }
131
+ if (options?.ignoreDuplicates) {
132
+ upsertOptions.ignoreDuplicates = options.ignoreDuplicates;
133
+ }
134
+ const { data: result, error } = await this.client
135
+ .from(table)
136
+ .upsert(data, upsertOptions)
137
+ .select();
138
+ if (error) {
139
+ throw new Error(`Failed to upsert into ${table}: ${error.message}`);
140
+ }
141
+ return Array.isArray(data) ? result : result?.[0];
142
+ }
143
+ /**
144
+ * Delete records from a table
145
+ */
146
+ async delete(table, filters) {
147
+ let query = this.client.from(table).delete();
148
+ // Apply filters
149
+ Object.entries(filters).forEach(([key, value]) => {
150
+ if (Array.isArray(value)) {
151
+ query = query.in(key, value);
152
+ }
153
+ else {
154
+ query = query.eq(key, value);
155
+ }
156
+ });
157
+ const { data, error } = await query.select();
158
+ if (error) {
159
+ throw new Error(`Failed to delete from ${table}: ${error.message}`);
160
+ }
161
+ return data || [];
162
+ }
163
+ /**
164
+ * Execute a raw SQL query (use with caution)
165
+ */
166
+ async query(sql, params) {
167
+ try {
168
+ const { data, error } = await this.client.rpc('execute_sql', {
169
+ query: sql,
170
+ parameters: params
171
+ });
172
+ if (error) {
173
+ throw new Error(`SQL query failed: ${error.message}`);
174
+ }
175
+ return data;
176
+ }
177
+ catch (err) {
178
+ throw new Error(`Failed to execute query: ${err.message}`);
179
+ }
180
+ }
181
+ /**
182
+ * Health check for the database connection
183
+ */
184
+ async healthCheck() {
185
+ try {
186
+ const { error } = await this.client
187
+ .from('information_schema.tables')
188
+ .select('table_name')
189
+ .limit(1);
190
+ return !error;
191
+ }
192
+ catch {
193
+ return false;
194
+ }
195
+ }
196
+ /**
197
+ * Get the underlying Supabase client for advanced operations
198
+ */
199
+ getClient() {
200
+ return this.client;
201
+ }
202
+ /**
203
+ * Count records in a table with optional filters
204
+ */
205
+ async count(table, filters) {
206
+ let query = this.client.from(table).select('*', { count: 'exact', head: true });
207
+ // Apply filters
208
+ if (filters) {
209
+ Object.entries(filters).forEach(([key, value]) => {
210
+ if (Array.isArray(value)) {
211
+ query = query.in(key, value);
212
+ }
213
+ else if (value !== undefined) {
214
+ query = query.eq(key, value);
215
+ }
216
+ });
217
+ }
218
+ const { count, error } = await query;
219
+ if (error) {
220
+ throw new Error(`Failed to count records in ${table}: ${error.message}`);
221
+ }
222
+ return count || 0;
223
+ }
224
+ /**
225
+ * Access the underlying Supabase client's from() method
226
+ * Allows direct query building when needed
227
+ */
228
+ from(table) {
229
+ return this.client.from(table);
230
+ }
231
+ /**
232
+ * Get the raw Supabase client instance
233
+ * Use with caution - prefer using the wrapped methods
234
+ */
235
+ getRawClient() {
236
+ return this.client;
237
+ }
238
+ }
239
+ /**
240
+ * Factory function to create a Supabase client
241
+ */
242
+ export function createSupabaseClient(config) {
243
+ return new AutonomaSupabaseClient({ config });
244
+ }
245
+ /**
246
+ * Factory function to create a Supabase client from environment variables
247
+ */
248
+ export function createSupabaseClientFromEnv(envPrefix) {
249
+ const url = process.env[`${envPrefix}_SUPABASE_URL`];
250
+ const key = process.env[`${envPrefix}_SUPABASE_KEY`];
251
+ if (!url || !key) {
252
+ throw new Error(`Missing Supabase credentials for ${envPrefix}. Please set ${envPrefix}_SUPABASE_URL and ${envPrefix}_SUPABASE_KEY`);
253
+ }
254
+ return createSupabaseClient({ url, key });
255
+ }
256
+ //# sourceMappingURL=supabaseClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabaseClient.js","sourceRoot":"","sources":["../src/supabaseClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Common database operation options
3
+ */
4
+ export interface QueryOptions {
5
+ limit?: number;
6
+ offset?: number;
7
+ orderBy?: {
8
+ column: string;
9
+ ascending?: boolean;
10
+ };
11
+ }
12
+ /**
13
+ * Database health status
14
+ */
15
+ export interface DatabaseHealth {
16
+ healthy: boolean;
17
+ latency?: number;
18
+ error?: string;
19
+ timestamp: Date;
20
+ }
21
+ /**
22
+ * Migration status
23
+ */
24
+ export interface MigrationStatus {
25
+ migration_id: string;
26
+ filename: string;
27
+ description?: string;
28
+ executed_at: Date;
29
+ checksum?: string;
30
+ }
31
+ /**
32
+ * Database connection statistics
33
+ */
34
+ export interface ConnectionStats {
35
+ totalConnections: number;
36
+ activeConnections: number;
37
+ idleConnections: number;
38
+ waitingConnections?: number;
39
+ }
40
+ /**
41
+ * Common filter types for database queries
42
+ */
43
+ export type FilterValue = string | number | boolean | Date | null | Array<string | number>;
44
+ export interface OperatorFilter {
45
+ operator: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'like' | 'ilike' | 'in';
46
+ value: FilterValue;
47
+ }
48
+ export interface QueryFilters {
49
+ [key: string]: FilterValue | OperatorFilter;
50
+ }
51
+ /**
52
+ * Database operation result
53
+ */
54
+ export interface DatabaseResult<T = any> {
55
+ data: T;
56
+ count?: number;
57
+ error?: string;
58
+ }
59
+ /**
60
+ * Batch operation options
61
+ */
62
+ export interface BatchOptions {
63
+ batchSize?: number;
64
+ continueOnError?: boolean;
65
+ returnResults?: boolean;
66
+ }
67
+ /**
68
+ * Transaction callback type
69
+ */
70
+ export type TransactionCallback<T> = () => Promise<T>;
71
+ /**
72
+ * Database client interface
73
+ */
74
+ export interface DatabaseClient {
75
+ insert(table: string, data: any): Promise<any>;
76
+ select(table: string, filters?: QueryFilters, options?: QueryOptions): Promise<any[]>;
77
+ update(table: string, id: string, data: any): Promise<any>;
78
+ delete(table: string, filters: QueryFilters): Promise<any[]>;
79
+ healthCheck(): Promise<boolean>;
80
+ count(table: string, filters?: QueryFilters): Promise<number>;
81
+ }
82
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAE3F,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;IAC/E,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,cAAc,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,GAAG;IACrC,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACtF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7D,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/D"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@autonomaai/database-client",
3
+ "version": "1.0.0",
4
+ "description": "Shared database client for autonoma MCP servers",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "build:watch": "tsc --watch",
17
+ "clean": "rm -rf dist",
18
+ "dev": "tsc --watch"
19
+ },
20
+ "keywords": [
21
+ "autonoma",
22
+ "database",
23
+ "supabase",
24
+ "postgresql",
25
+ "mcp"
26
+ ],
27
+ "author": "autonoma Team",
28
+ "license": "MIT",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "https://github.com/Stack3Labs/autonoma-typescript-packages"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "dependencies": {
37
+ "@supabase/supabase-js": "^2.39.0",
38
+ "pg": "^8.11.3"
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^20.0.0",
42
+ "@types/pg": "^8.10.7",
43
+ "typescript": "^5.0.0"
44
+ },
45
+ "peerDependencies": {
46
+ "typescript": "^5.0.0"
47
+ },
48
+ "files": [
49
+ "dist/**/*",
50
+ "README.md"
51
+ ]
52
+ }