postgresai 0.14.0-dev.42 → 0.14.0-dev.44

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.
Files changed (58) hide show
  1. package/bin/postgres-ai.ts +649 -310
  2. package/bun.lock +258 -0
  3. package/dist/bin/postgres-ai.js +29491 -1910
  4. package/dist/sql/01.role.sql +16 -0
  5. package/dist/sql/02.permissions.sql +37 -0
  6. package/dist/sql/03.optional_rds.sql +6 -0
  7. package/dist/sql/04.optional_self_managed.sql +8 -0
  8. package/dist/sql/05.helpers.sql +415 -0
  9. package/lib/auth-server.ts +58 -97
  10. package/lib/checkup-api.ts +175 -0
  11. package/lib/checkup.ts +833 -0
  12. package/lib/config.ts +3 -0
  13. package/lib/init.ts +106 -74
  14. package/lib/issues.ts +121 -194
  15. package/lib/mcp-server.ts +6 -17
  16. package/lib/metrics-loader.ts +156 -0
  17. package/package.json +13 -9
  18. package/sql/02.permissions.sql +9 -5
  19. package/sql/05.helpers.sql +415 -0
  20. package/test/checkup.test.ts +953 -0
  21. package/test/init.integration.test.ts +396 -0
  22. package/test/init.test.ts +345 -0
  23. package/test/schema-validation.test.ts +188 -0
  24. package/tsconfig.json +12 -20
  25. package/dist/bin/postgres-ai.d.ts +0 -3
  26. package/dist/bin/postgres-ai.d.ts.map +0 -1
  27. package/dist/bin/postgres-ai.js.map +0 -1
  28. package/dist/lib/auth-server.d.ts +0 -31
  29. package/dist/lib/auth-server.d.ts.map +0 -1
  30. package/dist/lib/auth-server.js +0 -263
  31. package/dist/lib/auth-server.js.map +0 -1
  32. package/dist/lib/config.d.ts +0 -45
  33. package/dist/lib/config.d.ts.map +0 -1
  34. package/dist/lib/config.js +0 -181
  35. package/dist/lib/config.js.map +0 -1
  36. package/dist/lib/init.d.ts +0 -85
  37. package/dist/lib/init.d.ts.map +0 -1
  38. package/dist/lib/init.js +0 -644
  39. package/dist/lib/init.js.map +0 -1
  40. package/dist/lib/issues.d.ts +0 -75
  41. package/dist/lib/issues.d.ts.map +0 -1
  42. package/dist/lib/issues.js +0 -336
  43. package/dist/lib/issues.js.map +0 -1
  44. package/dist/lib/mcp-server.d.ts +0 -9
  45. package/dist/lib/mcp-server.d.ts.map +0 -1
  46. package/dist/lib/mcp-server.js +0 -168
  47. package/dist/lib/mcp-server.js.map +0 -1
  48. package/dist/lib/pkce.d.ts +0 -32
  49. package/dist/lib/pkce.d.ts.map +0 -1
  50. package/dist/lib/pkce.js +0 -101
  51. package/dist/lib/pkce.js.map +0 -1
  52. package/dist/lib/util.d.ts +0 -27
  53. package/dist/lib/util.d.ts.map +0 -1
  54. package/dist/lib/util.js +0 -46
  55. package/dist/lib/util.js.map +0 -1
  56. package/dist/package.json +0 -46
  57. package/test/init.integration.test.cjs +0 -382
  58. package/test/init.test.cjs +0 -392
@@ -1,181 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.getConfigDir = getConfigDir;
37
- exports.getConfigPath = getConfigPath;
38
- exports.getLegacyConfigPath = getLegacyConfigPath;
39
- exports.readConfig = readConfig;
40
- exports.writeConfig = writeConfig;
41
- exports.deleteConfigKeys = deleteConfigKeys;
42
- exports.configExists = configExists;
43
- const fs = __importStar(require("fs"));
44
- const path = __importStar(require("path"));
45
- const os = __importStar(require("os"));
46
- /**
47
- * Get the user-level config directory path
48
- * @returns Path to ~/.config/postgresai
49
- */
50
- function getConfigDir() {
51
- const configHome = process.env.XDG_CONFIG_HOME || path.join(os.homedir(), ".config");
52
- return path.join(configHome, "postgresai");
53
- }
54
- /**
55
- * Get the user-level config file path
56
- * @returns Path to ~/.config/postgresai/config.json
57
- */
58
- function getConfigPath() {
59
- return path.join(getConfigDir(), "config.json");
60
- }
61
- /**
62
- * Get the legacy project-local config file path
63
- * @returns Path to .pgwatch-config in current directory
64
- */
65
- function getLegacyConfigPath() {
66
- return path.resolve(process.cwd(), ".pgwatch-config");
67
- }
68
- /**
69
- * Read configuration from file
70
- * Tries user-level config first, then falls back to legacy project-local config
71
- * @returns Configuration object with apiKey, baseUrl, orgId
72
- */
73
- function readConfig() {
74
- const config = {
75
- apiKey: null,
76
- baseUrl: null,
77
- orgId: null,
78
- };
79
- // Try user-level config first
80
- const userConfigPath = getConfigPath();
81
- if (fs.existsSync(userConfigPath)) {
82
- try {
83
- const content = fs.readFileSync(userConfigPath, "utf8");
84
- const parsed = JSON.parse(content);
85
- config.apiKey = parsed.apiKey || null;
86
- config.baseUrl = parsed.baseUrl || null;
87
- config.orgId = parsed.orgId || null;
88
- return config;
89
- }
90
- catch (err) {
91
- const message = err instanceof Error ? err.message : String(err);
92
- console.error(`Warning: Failed to read config from ${userConfigPath}: ${message}`);
93
- }
94
- }
95
- // Fall back to legacy project-local config
96
- const legacyPath = getLegacyConfigPath();
97
- if (fs.existsSync(legacyPath)) {
98
- try {
99
- const stats = fs.statSync(legacyPath);
100
- if (stats.isFile()) {
101
- const content = fs.readFileSync(legacyPath, "utf8");
102
- const lines = content.split(/\r?\n/);
103
- for (const line of lines) {
104
- const match = line.match(/^api_key=(.+)$/);
105
- if (match) {
106
- config.apiKey = match[1].trim();
107
- break;
108
- }
109
- }
110
- }
111
- }
112
- catch (err) {
113
- const message = err instanceof Error ? err.message : String(err);
114
- console.error(`Warning: Failed to read legacy config from ${legacyPath}: ${message}`);
115
- }
116
- }
117
- return config;
118
- }
119
- /**
120
- * Write configuration to user-level config file
121
- * @param config - Configuration object with apiKey, baseUrl, orgId
122
- */
123
- function writeConfig(config) {
124
- const configDir = getConfigDir();
125
- const configPath = getConfigPath();
126
- // Ensure config directory exists
127
- if (!fs.existsSync(configDir)) {
128
- fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });
129
- }
130
- // Read existing config and merge
131
- let existingConfig = {};
132
- if (fs.existsSync(configPath)) {
133
- try {
134
- const content = fs.readFileSync(configPath, "utf8");
135
- existingConfig = JSON.parse(content);
136
- }
137
- catch (err) {
138
- // Ignore parse errors, will overwrite
139
- }
140
- }
141
- const mergedConfig = {
142
- ...existingConfig,
143
- ...config,
144
- };
145
- // Write config file with restricted permissions
146
- fs.writeFileSync(configPath, JSON.stringify(mergedConfig, null, 2) + "\n", {
147
- mode: 0o600,
148
- });
149
- }
150
- /**
151
- * Delete specific keys from configuration
152
- * @param keys - Array of keys to delete (e.g., ['apiKey'])
153
- */
154
- function deleteConfigKeys(keys) {
155
- const configPath = getConfigPath();
156
- if (!fs.existsSync(configPath)) {
157
- return;
158
- }
159
- try {
160
- const content = fs.readFileSync(configPath, "utf8");
161
- const config = JSON.parse(content);
162
- for (const key of keys) {
163
- delete config[key];
164
- }
165
- fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n", {
166
- mode: 0o600,
167
- });
168
- }
169
- catch (err) {
170
- const message = err instanceof Error ? err.message : String(err);
171
- console.error(`Warning: Failed to update config: ${message}`);
172
- }
173
- }
174
- /**
175
- * Check if config file exists
176
- * @returns True if config exists
177
- */
178
- function configExists() {
179
- return fs.existsSync(getConfigPath()) || fs.existsSync(getLegacyConfigPath());
180
- }
181
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- import type { ConnectionOptions as TlsConnectionOptions } from "tls";
2
- import type { Client as PgClient } from "pg";
3
- export declare const DEFAULT_MONITORING_USER = "postgres_ai_mon";
4
- export type PgClientConfig = {
5
- connectionString?: string;
6
- host?: string;
7
- port?: number;
8
- user?: string;
9
- password?: string;
10
- database?: string;
11
- ssl?: boolean | TlsConnectionOptions;
12
- };
13
- export type AdminConnection = {
14
- clientConfig: PgClientConfig;
15
- display: string;
16
- /** True if SSL fallback is enabled (try SSL first, fall back to non-SSL on failure). */
17
- sslFallbackEnabled?: boolean;
18
- };
19
- /**
20
- * Connect to PostgreSQL with sslmode=prefer-like behavior.
21
- * If sslFallbackEnabled is true, tries SSL first, then falls back to non-SSL on failure.
22
- */
23
- export declare function connectWithSslFallback(ClientClass: new (config: PgClientConfig) => PgClient, adminConn: AdminConnection, verbose?: boolean): Promise<{
24
- client: PgClient;
25
- usedSsl: boolean;
26
- }>;
27
- export type InitStep = {
28
- name: string;
29
- sql: string;
30
- params?: unknown[];
31
- optional?: boolean;
32
- };
33
- export type InitPlan = {
34
- monitoringUser: string;
35
- database: string;
36
- steps: InitStep[];
37
- };
38
- export declare function redactPasswordsInSql(sql: string): string;
39
- export declare function maskConnectionString(dbUrl: string): string;
40
- export declare function parseLibpqConninfo(input: string): PgClientConfig;
41
- export declare function describePgConfig(cfg: PgClientConfig): string;
42
- export declare function resolveAdminConnection(opts: {
43
- conn?: string;
44
- dbUrlFlag?: string;
45
- host?: string;
46
- port?: string | number;
47
- username?: string;
48
- dbname?: string;
49
- adminPassword?: string;
50
- envPassword?: string;
51
- }): AdminConnection;
52
- export declare function resolveMonitoringPassword(opts: {
53
- passwordFlag?: string;
54
- passwordEnv?: string;
55
- monitoringUser: string;
56
- }): Promise<{
57
- password: string;
58
- generated: boolean;
59
- }>;
60
- export declare function buildInitPlan(params: {
61
- database: string;
62
- monitoringUser?: string;
63
- monitoringPassword: string;
64
- includeOptionalPermissions: boolean;
65
- }): Promise<InitPlan>;
66
- export declare function applyInitPlan(params: {
67
- client: PgClient;
68
- plan: InitPlan;
69
- verbose?: boolean;
70
- }): Promise<{
71
- applied: string[];
72
- skippedOptional: string[];
73
- }>;
74
- export type VerifyInitResult = {
75
- ok: boolean;
76
- missingRequired: string[];
77
- missingOptional: string[];
78
- };
79
- export declare function verifyInitSetup(params: {
80
- client: PgClient;
81
- database: string;
82
- monitoringUser: string;
83
- includeOptionalPermissions: boolean;
84
- }): Promise<VerifyInitResult>;
85
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../lib/init.ts"],"names":[],"mappings":"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"}