postgresai 0.15.0-dev.3 → 0.15.0-dev.5
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/bin/postgres-ai.ts +275 -50
- package/dist/bin/postgres-ai.js +833 -394
- package/lib/checkup.ts +16 -10
- package/lib/config.ts +3 -0
- package/lib/init.ts +1 -1
- package/lib/issues.ts +72 -72
- package/lib/reports.ts +12 -12
- package/lib/storage.ts +291 -0
- package/lib/util.ts +7 -1
- package/package.json +1 -1
- package/test/compose-cmd.test.ts +120 -0
- package/test/init.test.ts +1 -1
- package/test/issues.cli.test.ts +230 -1
- package/test/mcp-server.test.ts +69 -0
- package/test/reports.test.ts +3 -3
- package/test/storage.test.ts +761 -0
package/lib/checkup.ts
CHANGED
|
@@ -284,7 +284,7 @@ export function parseVersionNum(versionNum: string): { major: string; minor: str
|
|
|
284
284
|
} catch (err) {
|
|
285
285
|
// parseInt shouldn't throw, but handle edge cases defensively
|
|
286
286
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
287
|
-
console.
|
|
287
|
+
console.error(`[parseVersionNum] Warning: Failed to parse "${versionNum}": ${errorMsg}`);
|
|
288
288
|
return { major: "", minor: "" };
|
|
289
289
|
}
|
|
290
290
|
}
|
|
@@ -729,7 +729,7 @@ export async function getStatsReset(client: Client, pgMajorVersion: number = 16)
|
|
|
729
729
|
} catch (err) {
|
|
730
730
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
731
731
|
postmasterStartupError = `Failed to query postmaster start time: ${errorMsg}`;
|
|
732
|
-
console.
|
|
732
|
+
console.error(`[getStatsReset] Warning: ${postmasterStartupError}`);
|
|
733
733
|
}
|
|
734
734
|
|
|
735
735
|
const statsResult: StatsReset = {
|
|
@@ -811,7 +811,7 @@ export async function getRedundantIndexes(client: Client, pgMajorVersion: number
|
|
|
811
811
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
812
812
|
const indexName = String(transformed.index_name || "unknown");
|
|
813
813
|
parseError = `Failed to parse redundant_to_json: ${errorMsg}`;
|
|
814
|
-
console.
|
|
814
|
+
console.error(`[H004] Warning: ${parseError} for index "${indexName}"`);
|
|
815
815
|
}
|
|
816
816
|
|
|
817
817
|
const result: RedundantIndex = {
|
|
@@ -905,7 +905,7 @@ function resolveBuildTs(): string | null {
|
|
|
905
905
|
// package.json not found is expected in some environments (e.g., bundled) - debug only
|
|
906
906
|
if (process.env.DEBUG) {
|
|
907
907
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
908
|
-
console.
|
|
908
|
+
console.error(`[resolveBuildTs] Could not stat package.json, using current time: ${errorMsg}`);
|
|
909
909
|
}
|
|
910
910
|
return new Date().toISOString();
|
|
911
911
|
}
|
|
@@ -1103,7 +1103,7 @@ async function generateD004(client: Client, nodeName: string): Promise<Report> {
|
|
|
1103
1103
|
}
|
|
1104
1104
|
} catch (err) {
|
|
1105
1105
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
1106
|
-
console.
|
|
1106
|
+
console.error(`[D004] Error querying pg_stat_statements: ${errorMsg}`);
|
|
1107
1107
|
pgssError = errorMsg;
|
|
1108
1108
|
}
|
|
1109
1109
|
|
|
@@ -1156,7 +1156,7 @@ async function generateD004(client: Client, nodeName: string): Promise<Report> {
|
|
|
1156
1156
|
}
|
|
1157
1157
|
} catch (err) {
|
|
1158
1158
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
1159
|
-
console.
|
|
1159
|
+
console.error(`[D004] Error querying pg_stat_kcache: ${errorMsg}`);
|
|
1160
1160
|
kcacheError = errorMsg;
|
|
1161
1161
|
}
|
|
1162
1162
|
|
|
@@ -1324,7 +1324,10 @@ async function generateF004(client: Client, nodeName: string): Promise<Report> {
|
|
|
1324
1324
|
});
|
|
1325
1325
|
} catch (err) {
|
|
1326
1326
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
1327
|
-
console.
|
|
1327
|
+
console.error(`[F004] Error estimating table bloat: ${errorMsg}`);
|
|
1328
|
+
if (errorMsg.includes("postgres_ai.")) {
|
|
1329
|
+
console.error(` Hint: Run "postgresai prepare-db <connection>" to create required objects.`);
|
|
1330
|
+
}
|
|
1328
1331
|
}
|
|
1329
1332
|
|
|
1330
1333
|
// Get database info
|
|
@@ -1439,7 +1442,10 @@ async function generateF005(client: Client, nodeName: string): Promise<Report> {
|
|
|
1439
1442
|
});
|
|
1440
1443
|
} catch (err) {
|
|
1441
1444
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
1442
|
-
console.
|
|
1445
|
+
console.error(`[F005] Error estimating index bloat: ${errorMsg}`);
|
|
1446
|
+
if (errorMsg.includes("postgres_ai.")) {
|
|
1447
|
+
console.error(` Hint: Run "postgresai prepare-db <connection>" to create required objects.`);
|
|
1448
|
+
}
|
|
1443
1449
|
}
|
|
1444
1450
|
|
|
1445
1451
|
// Get database info
|
|
@@ -1564,7 +1570,7 @@ async function generateG001(client: Client, nodeName: string): Promise<Report> {
|
|
|
1564
1570
|
}
|
|
1565
1571
|
} catch (err) {
|
|
1566
1572
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
1567
|
-
console.
|
|
1573
|
+
console.error(`[G001] Error calculating memory usage: ${errorMsg}`);
|
|
1568
1574
|
memoryError = errorMsg;
|
|
1569
1575
|
}
|
|
1570
1576
|
|
|
@@ -1642,7 +1648,7 @@ async function generateG003(client: Client, nodeName: string): Promise<Report> {
|
|
|
1642
1648
|
}
|
|
1643
1649
|
} catch (err) {
|
|
1644
1650
|
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
1645
|
-
console.
|
|
1651
|
+
console.error(`[G003] Error querying deadlock stats: ${errorMsg}`);
|
|
1646
1652
|
deadlockError = errorMsg;
|
|
1647
1653
|
}
|
|
1648
1654
|
|
package/lib/config.ts
CHANGED
|
@@ -8,6 +8,7 @@ import * as os from "os";
|
|
|
8
8
|
export interface Config {
|
|
9
9
|
apiKey: string | null;
|
|
10
10
|
baseUrl: string | null;
|
|
11
|
+
storageBaseUrl: string | null;
|
|
11
12
|
orgId: number | null;
|
|
12
13
|
defaultProject: string | null;
|
|
13
14
|
/** Docker Compose project name for monitoring stack */
|
|
@@ -48,6 +49,7 @@ export function readConfig(): Config {
|
|
|
48
49
|
const config: Config = {
|
|
49
50
|
apiKey: null,
|
|
50
51
|
baseUrl: null,
|
|
52
|
+
storageBaseUrl: null,
|
|
51
53
|
orgId: null,
|
|
52
54
|
defaultProject: null,
|
|
53
55
|
projectName: null,
|
|
@@ -61,6 +63,7 @@ export function readConfig(): Config {
|
|
|
61
63
|
const parsed = JSON.parse(content);
|
|
62
64
|
config.apiKey = parsed.apiKey ?? null;
|
|
63
65
|
config.baseUrl = parsed.baseUrl ?? null;
|
|
66
|
+
config.storageBaseUrl = parsed.storageBaseUrl ?? null;
|
|
64
67
|
config.orgId = parsed.orgId ?? null;
|
|
65
68
|
config.defaultProject = parsed.defaultProject ?? null;
|
|
66
69
|
config.projectName = parsed.projectName ?? null;
|
package/lib/init.ts
CHANGED
package/lib/issues.ts
CHANGED
|
@@ -130,10 +130,10 @@ export async function fetchIssues(params: FetchIssuesParams): Promise<IssueListI
|
|
|
130
130
|
|
|
131
131
|
if (debug) {
|
|
132
132
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
133
|
-
console.
|
|
134
|
-
console.
|
|
135
|
-
console.
|
|
136
|
-
console.
|
|
133
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
134
|
+
console.error(`Debug: GET URL: ${url.toString()}`);
|
|
135
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
136
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
const response = await fetch(url.toString(), {
|
|
@@ -142,8 +142,8 @@ export async function fetchIssues(params: FetchIssuesParams): Promise<IssueListI
|
|
|
142
142
|
});
|
|
143
143
|
|
|
144
144
|
if (debug) {
|
|
145
|
-
console.
|
|
146
|
-
console.
|
|
145
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
146
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
const data = await response.text();
|
|
@@ -188,10 +188,10 @@ export async function fetchIssueComments(params: FetchIssueCommentsParams): Prom
|
|
|
188
188
|
|
|
189
189
|
if (debug) {
|
|
190
190
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
191
|
-
console.
|
|
192
|
-
console.
|
|
193
|
-
console.
|
|
194
|
-
console.
|
|
191
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
192
|
+
console.error(`Debug: GET URL: ${url.toString()}`);
|
|
193
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
194
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
const response = await fetch(url.toString(), {
|
|
@@ -200,8 +200,8 @@ export async function fetchIssueComments(params: FetchIssueCommentsParams): Prom
|
|
|
200
200
|
});
|
|
201
201
|
|
|
202
202
|
if (debug) {
|
|
203
|
-
console.
|
|
204
|
-
console.
|
|
203
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
204
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
205
205
|
}
|
|
206
206
|
|
|
207
207
|
const data = await response.text();
|
|
@@ -248,10 +248,10 @@ export async function fetchIssue(params: FetchIssueParams): Promise<IssueDetail
|
|
|
248
248
|
|
|
249
249
|
if (debug) {
|
|
250
250
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
251
|
-
console.
|
|
252
|
-
console.
|
|
253
|
-
console.
|
|
254
|
-
console.
|
|
251
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
252
|
+
console.error(`Debug: GET URL: ${url.toString()}`);
|
|
253
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
254
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
255
255
|
}
|
|
256
256
|
|
|
257
257
|
const response = await fetch(url.toString(), {
|
|
@@ -260,8 +260,8 @@ export async function fetchIssue(params: FetchIssueParams): Promise<IssueDetail
|
|
|
260
260
|
});
|
|
261
261
|
|
|
262
262
|
if (debug) {
|
|
263
|
-
console.
|
|
264
|
-
console.
|
|
263
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
264
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
const data = await response.text();
|
|
@@ -369,11 +369,11 @@ export async function createIssue(params: CreateIssueParams): Promise<CreatedIss
|
|
|
369
369
|
|
|
370
370
|
if (debug) {
|
|
371
371
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
372
|
-
console.
|
|
373
|
-
console.
|
|
374
|
-
console.
|
|
375
|
-
console.
|
|
376
|
-
console.
|
|
372
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
373
|
+
console.error(`Debug: POST URL: ${url.toString()}`);
|
|
374
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
375
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
376
|
+
console.error(`Debug: Request body: ${body}`);
|
|
377
377
|
}
|
|
378
378
|
|
|
379
379
|
const response = await fetch(url.toString(), {
|
|
@@ -383,8 +383,8 @@ export async function createIssue(params: CreateIssueParams): Promise<CreatedIss
|
|
|
383
383
|
});
|
|
384
384
|
|
|
385
385
|
if (debug) {
|
|
386
|
-
console.
|
|
387
|
-
console.
|
|
386
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
387
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
388
388
|
}
|
|
389
389
|
|
|
390
390
|
const data = await response.text();
|
|
@@ -442,11 +442,11 @@ export async function createIssueComment(params: CreateIssueCommentParams): Prom
|
|
|
442
442
|
|
|
443
443
|
if (debug) {
|
|
444
444
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
445
|
-
console.
|
|
446
|
-
console.
|
|
447
|
-
console.
|
|
448
|
-
console.
|
|
449
|
-
console.
|
|
445
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
446
|
+
console.error(`Debug: POST URL: ${url.toString()}`);
|
|
447
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
448
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
449
|
+
console.error(`Debug: Request body: ${body}`);
|
|
450
450
|
}
|
|
451
451
|
|
|
452
452
|
const response = await fetch(url.toString(), {
|
|
@@ -456,8 +456,8 @@ export async function createIssueComment(params: CreateIssueCommentParams): Prom
|
|
|
456
456
|
});
|
|
457
457
|
|
|
458
458
|
if (debug) {
|
|
459
|
-
console.
|
|
460
|
-
console.
|
|
459
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
460
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
461
461
|
}
|
|
462
462
|
|
|
463
463
|
const data = await response.text();
|
|
@@ -550,11 +550,11 @@ export async function updateIssue(params: UpdateIssueParams): Promise<UpdatedIss
|
|
|
550
550
|
|
|
551
551
|
if (debug) {
|
|
552
552
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
553
|
-
console.
|
|
554
|
-
console.
|
|
555
|
-
console.
|
|
556
|
-
console.
|
|
557
|
-
console.
|
|
553
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
554
|
+
console.error(`Debug: POST URL: ${url.toString()}`);
|
|
555
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
556
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
557
|
+
console.error(`Debug: Request body: ${body}`);
|
|
558
558
|
}
|
|
559
559
|
|
|
560
560
|
const response = await fetch(url.toString(), {
|
|
@@ -564,8 +564,8 @@ export async function updateIssue(params: UpdateIssueParams): Promise<UpdatedIss
|
|
|
564
564
|
});
|
|
565
565
|
|
|
566
566
|
if (debug) {
|
|
567
|
-
console.
|
|
568
|
-
console.
|
|
567
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
568
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
569
569
|
}
|
|
570
570
|
|
|
571
571
|
const data = await response.text();
|
|
@@ -639,11 +639,11 @@ export async function updateIssueComment(params: UpdateIssueCommentParams): Prom
|
|
|
639
639
|
|
|
640
640
|
if (debug) {
|
|
641
641
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
642
|
-
console.
|
|
643
|
-
console.
|
|
644
|
-
console.
|
|
645
|
-
console.
|
|
646
|
-
console.
|
|
642
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
643
|
+
console.error(`Debug: POST URL: ${url.toString()}`);
|
|
644
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
645
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
646
|
+
console.error(`Debug: Request body: ${body}`);
|
|
647
647
|
}
|
|
648
648
|
|
|
649
649
|
const response = await fetch(url.toString(), {
|
|
@@ -653,8 +653,8 @@ export async function updateIssueComment(params: UpdateIssueCommentParams): Prom
|
|
|
653
653
|
});
|
|
654
654
|
|
|
655
655
|
if (debug) {
|
|
656
|
-
console.
|
|
657
|
-
console.
|
|
656
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
657
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
658
658
|
}
|
|
659
659
|
|
|
660
660
|
const data = await response.text();
|
|
@@ -736,10 +736,10 @@ export async function fetchActionItem(params: FetchActionItemParams): Promise<Is
|
|
|
736
736
|
|
|
737
737
|
if (debug) {
|
|
738
738
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
739
|
-
console.
|
|
740
|
-
console.
|
|
741
|
-
console.
|
|
742
|
-
console.
|
|
739
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
740
|
+
console.error(`Debug: GET URL: ${url.toString()}`);
|
|
741
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
742
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
743
743
|
}
|
|
744
744
|
|
|
745
745
|
const response = await fetch(url.toString(), {
|
|
@@ -748,8 +748,8 @@ export async function fetchActionItem(params: FetchActionItemParams): Promise<Is
|
|
|
748
748
|
});
|
|
749
749
|
|
|
750
750
|
if (debug) {
|
|
751
|
-
console.
|
|
752
|
-
console.
|
|
751
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
752
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
753
753
|
}
|
|
754
754
|
|
|
755
755
|
const data = await response.text();
|
|
@@ -814,10 +814,10 @@ export async function fetchActionItems(params: FetchActionItemsParams): Promise<
|
|
|
814
814
|
|
|
815
815
|
if (debug) {
|
|
816
816
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
817
|
-
console.
|
|
818
|
-
console.
|
|
819
|
-
console.
|
|
820
|
-
console.
|
|
817
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
818
|
+
console.error(`Debug: GET URL: ${url.toString()}`);
|
|
819
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
820
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
821
821
|
}
|
|
822
822
|
|
|
823
823
|
const response = await fetch(url.toString(), {
|
|
@@ -826,8 +826,8 @@ export async function fetchActionItems(params: FetchActionItemsParams): Promise<
|
|
|
826
826
|
});
|
|
827
827
|
|
|
828
828
|
if (debug) {
|
|
829
|
-
console.
|
|
830
|
-
console.
|
|
829
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
830
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
831
831
|
}
|
|
832
832
|
|
|
833
833
|
const data = await response.text();
|
|
@@ -913,11 +913,11 @@ export async function createActionItem(params: CreateActionItemParams): Promise<
|
|
|
913
913
|
|
|
914
914
|
if (debug) {
|
|
915
915
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
916
|
-
console.
|
|
917
|
-
console.
|
|
918
|
-
console.
|
|
919
|
-
console.
|
|
920
|
-
console.
|
|
916
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
917
|
+
console.error(`Debug: POST URL: ${url.toString()}`);
|
|
918
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
919
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
920
|
+
console.error(`Debug: Request body: ${body}`);
|
|
921
921
|
}
|
|
922
922
|
|
|
923
923
|
const response = await fetch(url.toString(), {
|
|
@@ -927,8 +927,8 @@ export async function createActionItem(params: CreateActionItemParams): Promise<
|
|
|
927
927
|
});
|
|
928
928
|
|
|
929
929
|
if (debug) {
|
|
930
|
-
console.
|
|
931
|
-
console.
|
|
930
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
931
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
932
932
|
}
|
|
933
933
|
|
|
934
934
|
const data = await response.text();
|
|
@@ -1035,11 +1035,11 @@ export async function updateActionItem(params: UpdateActionItemParams): Promise<
|
|
|
1035
1035
|
|
|
1036
1036
|
if (debug) {
|
|
1037
1037
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
1038
|
-
console.
|
|
1039
|
-
console.
|
|
1040
|
-
console.
|
|
1041
|
-
console.
|
|
1042
|
-
console.
|
|
1038
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
1039
|
+
console.error(`Debug: POST URL: ${url.toString()}`);
|
|
1040
|
+
console.error(`Debug: Auth scheme: access-token`);
|
|
1041
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
1042
|
+
console.error(`Debug: Request body: ${body}`);
|
|
1043
1043
|
}
|
|
1044
1044
|
|
|
1045
1045
|
const response = await fetch(url.toString(), {
|
|
@@ -1049,8 +1049,8 @@ export async function updateActionItem(params: UpdateActionItemParams): Promise<
|
|
|
1049
1049
|
});
|
|
1050
1050
|
|
|
1051
1051
|
if (debug) {
|
|
1052
|
-
console.
|
|
1053
|
-
console.
|
|
1052
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
1053
|
+
console.error(`Debug: Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`);
|
|
1054
1054
|
}
|
|
1055
1055
|
|
|
1056
1056
|
if (!response.ok) {
|
package/lib/reports.ts
CHANGED
|
@@ -143,15 +143,15 @@ export async function fetchReports(params: FetchReportsParams): Promise<CheckupR
|
|
|
143
143
|
|
|
144
144
|
if (debug) {
|
|
145
145
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
146
|
-
console.
|
|
147
|
-
console.
|
|
148
|
-
console.
|
|
146
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
147
|
+
console.error(`Debug: GET URL: ${url.toString()}`);
|
|
148
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
149
149
|
}
|
|
150
150
|
|
|
151
151
|
const response = await fetch(url.toString(), { method: "GET", headers });
|
|
152
152
|
|
|
153
153
|
if (debug) {
|
|
154
|
-
console.
|
|
154
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
155
155
|
}
|
|
156
156
|
|
|
157
157
|
const data = await response.text();
|
|
@@ -220,15 +220,15 @@ export async function fetchReportFiles(params: FetchReportFilesParams): Promise<
|
|
|
220
220
|
|
|
221
221
|
if (debug) {
|
|
222
222
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
223
|
-
console.
|
|
224
|
-
console.
|
|
225
|
-
console.
|
|
223
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
224
|
+
console.error(`Debug: GET URL: ${url.toString()}`);
|
|
225
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
226
226
|
}
|
|
227
227
|
|
|
228
228
|
const response = await fetch(url.toString(), { method: "GET", headers });
|
|
229
229
|
|
|
230
230
|
if (debug) {
|
|
231
|
-
console.
|
|
231
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
232
232
|
}
|
|
233
233
|
|
|
234
234
|
const data = await response.text();
|
|
@@ -275,15 +275,15 @@ export async function fetchReportFileData(params: FetchReportFileDataParams): Pr
|
|
|
275
275
|
|
|
276
276
|
if (debug) {
|
|
277
277
|
const debugHeaders: Record<string, string> = { ...headers, "access-token": maskSecret(apiKey) };
|
|
278
|
-
console.
|
|
279
|
-
console.
|
|
280
|
-
console.
|
|
278
|
+
console.error(`Debug: Resolved API base URL: ${base}`);
|
|
279
|
+
console.error(`Debug: GET URL: ${url.toString()}`);
|
|
280
|
+
console.error(`Debug: Request headers: ${JSON.stringify(debugHeaders)}`);
|
|
281
281
|
}
|
|
282
282
|
|
|
283
283
|
const response = await fetch(url.toString(), { method: "GET", headers });
|
|
284
284
|
|
|
285
285
|
if (debug) {
|
|
286
|
-
console.
|
|
286
|
+
console.error(`Debug: Response status: ${response.status}`);
|
|
287
287
|
}
|
|
288
288
|
|
|
289
289
|
const data = await response.text();
|