@tudovu/api-client 0.1.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,173 @@
1
+ export type Finding = {
2
+ id: string;
3
+ title: string;
4
+ description?: string;
5
+ severity: "CRITICAL" | "HIGH" | "MEDIUM" | "LOW" | "INFORMATIONAL";
6
+ status: "NEW" | "NOTIFIED" | "RESOLVED" | "SUPPRESSED";
7
+ source: string;
8
+ resourceType?: string;
9
+ resourceId?: string;
10
+ region?: string;
11
+ remediation?: string;
12
+ controlId?: string;
13
+ [key: string]: unknown;
14
+ };
15
+ export type FindingsResponse = {
16
+ securityHub: Finding[];
17
+ inspector: Finding[];
18
+ guardduty: Finding[];
19
+ errors?: Record<string, string>;
20
+ };
21
+ export declare class TudovuApiError extends Error {
22
+ readonly status: number;
23
+ readonly body?: unknown | undefined;
24
+ constructor(message: string, status: number, body?: unknown | undefined);
25
+ }
26
+ export declare class TudovuClient {
27
+ private readonly baseUrl;
28
+ private readonly apiKey;
29
+ constructor(opts: {
30
+ baseUrl: string;
31
+ apiKey?: string;
32
+ });
33
+ private headers;
34
+ private request;
35
+ authMe(): Promise<{
36
+ authEnabled?: boolean;
37
+ authenticated?: boolean;
38
+ user?: {
39
+ id: string;
40
+ email: string;
41
+ name: string;
42
+ };
43
+ org?: {
44
+ id: string;
45
+ slug: string;
46
+ name: string;
47
+ };
48
+ expires?: string;
49
+ }>;
50
+ setupConfig(): Promise<{
51
+ persisted?: boolean;
52
+ deployRoleArn?: string;
53
+ deployRoleVerified?: boolean;
54
+ githubRepoUrl?: string;
55
+ githubDefaultBranch?: string;
56
+ githubIacRootPath?: string;
57
+ [key: string]: unknown;
58
+ }>;
59
+ awsConnectStatus(): Promise<{
60
+ configured?: boolean;
61
+ connected?: boolean;
62
+ roleArn?: string | null;
63
+ [key: string]: unknown;
64
+ }>;
65
+ ask(input: {
66
+ messages: {
67
+ role: "user" | "assistant";
68
+ content: string;
69
+ }[];
70
+ environmentSnapshot?: string;
71
+ githubRepoUrl?: string;
72
+ githubDefaultBranch?: string;
73
+ region?: string;
74
+ }): Promise<{
75
+ text: string;
76
+ blocks: Array<{
77
+ content: string;
78
+ validation?: unknown;
79
+ }>;
80
+ fallback?: boolean;
81
+ }>;
82
+ openArchitectPr(input: {
83
+ repoUrl: string;
84
+ findingId: string;
85
+ templateContent: string;
86
+ findingTitle?: string;
87
+ findingDescription?: string;
88
+ baseBranch?: string;
89
+ iacRootPath?: string;
90
+ targetPrNumber?: number;
91
+ confirmedOverrides?: string[];
92
+ source?: string;
93
+ }): Promise<{
94
+ pullUrl: string;
95
+ branch: string;
96
+ path: string;
97
+ prNumber?: number;
98
+ mode?: string;
99
+ }>;
100
+ listPulls(repoUrl: string, opts?: {
101
+ state?: "open" | "closed" | "all";
102
+ page?: number;
103
+ perPage?: number;
104
+ }): Promise<{
105
+ pulls: unknown[];
106
+ page: number;
107
+ perPage: number;
108
+ hasMore: boolean;
109
+ demo?: boolean;
110
+ }>;
111
+ getPull(repoUrl: string, number: number): Promise<{
112
+ review: unknown;
113
+ }>;
114
+ deployRuns(repoUrl: string): Promise<{
115
+ runs: unknown[];
116
+ workflowPresent?: boolean | null;
117
+ demo?: boolean;
118
+ }>;
119
+ orgPullRequests(): Promise<{
120
+ persisted?: boolean;
121
+ pullRequests?: unknown[];
122
+ }>;
123
+ pullFindings(region?: string): Promise<FindingsResponse>;
124
+ flattenFindings(res: FindingsResponse): Finding[];
125
+ evaluateChecks(region?: string): Promise<{
126
+ accountId?: string;
127
+ region?: string;
128
+ evaluatedAt?: string;
129
+ results?: Array<{
130
+ checkId: string;
131
+ name: string;
132
+ status: string;
133
+ severity: string;
134
+ detail?: string;
135
+ region?: string;
136
+ }>;
137
+ [key: string]: unknown;
138
+ }>;
139
+ /**
140
+ * Latest persisted check run (full PASS/FAIL matrix). Does not evaluate live.
141
+ * When no run exists, `missing` is true and `hint` explains how to populate it.
142
+ */
143
+ getLatestChecks(): Promise<{
144
+ run: {
145
+ id?: string;
146
+ accountId?: string;
147
+ region?: string;
148
+ regions?: string[];
149
+ evaluatedAt?: string;
150
+ source?: string;
151
+ results?: Array<{
152
+ checkId: string;
153
+ name: string;
154
+ status: string;
155
+ severity: string;
156
+ detail?: string;
157
+ region?: string;
158
+ }>;
159
+ markdown?: string | null;
160
+ postureScore?: number | null;
161
+ totalChecks?: number | null;
162
+ passed?: number | null;
163
+ failed?: number | null;
164
+ [key: string]: unknown;
165
+ } | null;
166
+ missing: boolean;
167
+ hint?: string;
168
+ }>;
169
+ postureHistory(limit?: number): Promise<{
170
+ runs: unknown[];
171
+ }>;
172
+ }
173
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js ADDED
@@ -0,0 +1,165 @@
1
+ // Thin HTTP client over the Tudovu / Infranitum app API.
2
+ //
3
+ // Auth: Authorization: Bearer <org API key> when set. Mint keys in Config → MCP
4
+ // (`/api/org/api-keys`). Against a host with auth disabled (demo / no
5
+ // DATABASE_URL), cookie-less calls still resolve to the anonymous session.
6
+ // Against auth-enabled hosts, omit the key and you get 401.
7
+ export class TudovuApiError extends Error {
8
+ status;
9
+ body;
10
+ constructor(message, status, body) {
11
+ super(message);
12
+ this.status = status;
13
+ this.body = body;
14
+ this.name = "TudovuApiError";
15
+ }
16
+ }
17
+ export class TudovuClient {
18
+ baseUrl;
19
+ apiKey;
20
+ constructor(opts) {
21
+ this.baseUrl = opts.baseUrl.replace(/\/+$/, "");
22
+ this.apiKey = opts.apiKey?.trim() || undefined;
23
+ }
24
+ headers(extra) {
25
+ const h = {
26
+ "Content-Type": "application/json",
27
+ Accept: "application/json",
28
+ ...extra,
29
+ };
30
+ if (this.apiKey)
31
+ h.Authorization = `Bearer ${this.apiKey}`;
32
+ return h;
33
+ }
34
+ async request(path, init = {}) {
35
+ const res = await fetch(`${this.baseUrl}${path}`, {
36
+ ...init,
37
+ headers: { ...this.headers(), ...init.headers },
38
+ });
39
+ const text = await res.text();
40
+ let body;
41
+ try {
42
+ body = text ? JSON.parse(text) : undefined;
43
+ }
44
+ catch {
45
+ body = text;
46
+ }
47
+ if (!res.ok) {
48
+ const message = (body && typeof body === "object" && "error" in body && typeof body.error === "string"
49
+ ? body.error
50
+ : undefined) ?? `${res.status} ${res.statusText}`;
51
+ throw new TudovuApiError(message, res.status, body);
52
+ }
53
+ return body;
54
+ }
55
+ // ── whoami / connections ─────────────────────────────────────────────────
56
+ async authMe() {
57
+ return this.request("/api/auth/me", { method: "GET" });
58
+ }
59
+ async setupConfig() {
60
+ return this.request("/api/org/setup-config", { method: "GET" });
61
+ }
62
+ async awsConnectStatus() {
63
+ return this.request("/api/aws/connect", { method: "GET" });
64
+ }
65
+ // ── Architect (SSE) — plan only, never opens a PR ───────────────────────
66
+ async ask(input) {
67
+ const res = await fetch(`${this.baseUrl}/api/architect/chat`, {
68
+ method: "POST",
69
+ headers: this.headers({ Accept: "text/event-stream" }),
70
+ body: JSON.stringify(input),
71
+ });
72
+ if (!res.ok) {
73
+ const text = await res.text().catch(() => "");
74
+ throw new TudovuApiError(`Architect request failed: ${res.status}`, res.status, text);
75
+ }
76
+ const raw = await res.text();
77
+ let text = "";
78
+ let blocks = [];
79
+ let fallback;
80
+ for (const line of raw.split("\n")) {
81
+ const trimmed = line.trim();
82
+ if (!trimmed.startsWith("data:"))
83
+ continue;
84
+ const payload = trimmed.slice(5).trim();
85
+ if (!payload || payload === "[DONE]")
86
+ continue;
87
+ try {
88
+ const evt = JSON.parse(payload);
89
+ if (evt.type === "delta" && evt.text)
90
+ text += evt.text;
91
+ else if (evt.type === "done") {
92
+ if (evt.blocks)
93
+ blocks = evt.blocks;
94
+ if (typeof evt.fallback === "boolean")
95
+ fallback = evt.fallback;
96
+ }
97
+ else if (evt.type === "error" && evt.error) {
98
+ throw new TudovuApiError(evt.error, 500);
99
+ }
100
+ }
101
+ catch (e) {
102
+ if (e instanceof TudovuApiError)
103
+ throw e;
104
+ // ignore unparseable keep-alive lines
105
+ }
106
+ }
107
+ return { text, blocks, fallback };
108
+ }
109
+ // ── Apply (open / update PR) ────────────────────────────────────────────
110
+ async openArchitectPr(input) {
111
+ return this.request("/api/findings/pr", {
112
+ method: "POST",
113
+ body: JSON.stringify({ ...input, source: input.source ?? "architect" }),
114
+ });
115
+ }
116
+ // ── Status ──────────────────────────────────────────────────────────────
117
+ async listPulls(repoUrl, opts) {
118
+ const qs = new URLSearchParams({ repoUrl });
119
+ if (opts?.state)
120
+ qs.set("state", opts.state);
121
+ if (opts?.page != null)
122
+ qs.set("page", String(opts.page));
123
+ if (opts?.perPage != null)
124
+ qs.set("perPage", String(opts.perPage));
125
+ return this.request(`/api/github/pulls?${qs}`, { method: "GET" });
126
+ }
127
+ async getPull(repoUrl, number) {
128
+ const qs = new URLSearchParams({ repoUrl });
129
+ return this.request(`/api/github/pulls/${number}?${qs}`, { method: "GET" });
130
+ }
131
+ async deployRuns(repoUrl) {
132
+ const qs = new URLSearchParams({ repoUrl });
133
+ return this.request(`/api/github/deploy-runs?${qs}`, { method: "GET" });
134
+ }
135
+ async orgPullRequests() {
136
+ return this.request("/api/org/pull-requests", { method: "GET" });
137
+ }
138
+ // ── Review (security posture snapshot) ──────────────────────────────────
139
+ async pullFindings(region) {
140
+ return this.request("/api/aws/findings", {
141
+ method: "POST",
142
+ body: JSON.stringify(region ? { region } : {}),
143
+ });
144
+ }
145
+ flattenFindings(res) {
146
+ return [...(res.securityHub ?? []), ...(res.inspector ?? []), ...(res.guardduty ?? [])];
147
+ }
148
+ async evaluateChecks(region) {
149
+ return this.request("/api/infranitum/checks/evaluate", {
150
+ method: "POST",
151
+ body: JSON.stringify(region ? { region } : {}),
152
+ });
153
+ }
154
+ /**
155
+ * Latest persisted check run (full PASS/FAIL matrix). Does not evaluate live.
156
+ * When no run exists, `missing` is true and `hint` explains how to populate it.
157
+ */
158
+ async getLatestChecks() {
159
+ return this.request("/api/infranitum/checks/latest", { method: "GET" });
160
+ }
161
+ async postureHistory(limit = 5) {
162
+ return this.request(`/api/posture/history?limit=${limit}`, { method: "GET" });
163
+ }
164
+ }
165
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { TudovuApiError, TudovuClient, type Finding, type FindingsResponse, } from "./client.js";
2
+ //# 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,cAAc,EACd,YAAY,EACZ,KAAK,OAAO,EACZ,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { TudovuApiError, TudovuClient, } from "./client.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,YAAY,GAGb,MAAM,aAAa,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@tudovu/api-client",
3
+ "version": "0.1.0",
4
+ "description": "Shared HTTP client for Tudovu Architect (MCP, CLI).",
5
+ "license": "UNLICENSED",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "engines": {
22
+ "node": ">=18"
23
+ },
24
+ "scripts": {
25
+ "build": "tsc",
26
+ "typecheck": "tsc --noEmit",
27
+ "clean": "rm -rf dist"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^20.19.43",
31
+ "typescript": "^5.6.0"
32
+ }
33
+ }