@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.
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/marketMakerDataService.d.ts +83 -0
- package/dist/marketMakerDataService.d.ts.map +1 -0
- package/dist/marketMakerDataService.js +136 -0
- package/dist/marketMakerDataService.js.map +1 -0
- package/dist/postgresClient.d.ts +87 -0
- package/dist/postgresClient.d.ts.map +1 -0
- package/dist/postgresClient.js +213 -0
- package/dist/postgresClient.js.map +1 -0
- package/dist/supabase.d.ts +14 -0
- package/dist/supabase.d.ts.map +1 -0
- package/dist/supabase.js +66 -0
- package/dist/supabase.js.map +1 -0
- package/dist/supabaseClient.d.ts +83 -0
- package/dist/supabaseClient.d.ts.map +1 -0
- package/dist/supabaseClient.js +256 -0
- package/dist/supabaseClient.js.map +1 -0
- package/dist/types.d.ts +82 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +52 -0
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/dist/supabase.js
ADDED
|
@@ -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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"}
|
package/dist/types.d.ts
ADDED
|
@@ -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 @@
|
|
|
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
|
+
}
|