@cefense-npm/cefense-cli 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.
Files changed (118) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/commands/auth.d.ts +9 -0
  3. package/dist/commands/auth.d.ts.map +1 -0
  4. package/dist/commands/auth.js +190 -0
  5. package/dist/commands/auth.js.map +1 -0
  6. package/dist/commands/fix.d.ts +3 -0
  7. package/dist/commands/fix.d.ts.map +1 -0
  8. package/dist/commands/fix.js +146 -0
  9. package/dist/commands/fix.js.map +1 -0
  10. package/dist/commands/fixactions.d.ts +12 -0
  11. package/dist/commands/fixactions.d.ts.map +1 -0
  12. package/dist/commands/fixactions.js +176 -0
  13. package/dist/commands/fixactions.js.map +1 -0
  14. package/dist/commands/link.d.ts +8 -0
  15. package/dist/commands/link.d.ts.map +1 -0
  16. package/dist/commands/link.js +0 -0
  17. package/dist/commands/link.js.map +1 -0
  18. package/dist/commands/observed.d.ts +18 -0
  19. package/dist/commands/observed.d.ts.map +1 -0
  20. package/dist/commands/observed.js +254 -0
  21. package/dist/commands/observed.js.map +1 -0
  22. package/dist/commands/pick.d.ts +3 -0
  23. package/dist/commands/pick.d.ts.map +1 -0
  24. package/dist/commands/pick.js +18 -0
  25. package/dist/commands/pick.js.map +1 -0
  26. package/dist/commands/repo.d.ts +12 -0
  27. package/dist/commands/repo.d.ts.map +1 -0
  28. package/dist/commands/repo.js +330 -0
  29. package/dist/commands/repo.js.map +1 -0
  30. package/dist/commands/scan.d.ts +9 -0
  31. package/dist/commands/scan.d.ts.map +1 -0
  32. package/dist/commands/scan.js +98 -0
  33. package/dist/commands/scan.js.map +1 -0
  34. package/dist/commands/status.d.ts +5 -0
  35. package/dist/commands/status.d.ts.map +1 -0
  36. package/dist/commands/status.js +250 -0
  37. package/dist/commands/status.js.map +1 -0
  38. package/dist/core/client.d.ts +87 -0
  39. package/dist/core/client.d.ts.map +1 -0
  40. package/dist/core/client.js +235 -0
  41. package/dist/core/client.js.map +1 -0
  42. package/dist/core/config.d.ts +24 -0
  43. package/dist/core/config.d.ts.map +1 -0
  44. package/dist/core/config.js +85 -0
  45. package/dist/core/config.js.map +1 -0
  46. package/dist/core/credentials.d.ts +17 -0
  47. package/dist/core/credentials.d.ts.map +1 -0
  48. package/dist/core/credentials.js +139 -0
  49. package/dist/core/credentials.js.map +1 -0
  50. package/dist/core/discovery.d.ts +8 -0
  51. package/dist/core/discovery.d.ts.map +1 -0
  52. package/dist/core/discovery.js +62 -0
  53. package/dist/core/discovery.js.map +1 -0
  54. package/dist/core/errors.d.ts +32 -0
  55. package/dist/core/errors.d.ts.map +1 -0
  56. package/dist/core/errors.js +56 -0
  57. package/dist/core/errors.js.map +1 -0
  58. package/dist/core/index.d.ts +10 -0
  59. package/dist/core/index.d.ts.map +1 -0
  60. package/dist/core/index.js +9 -0
  61. package/dist/core/index.js.map +1 -0
  62. package/dist/core/oauth.d.ts +20 -0
  63. package/dist/core/oauth.d.ts.map +1 -0
  64. package/dist/core/oauth.js +218 -0
  65. package/dist/core/oauth.js.map +1 -0
  66. package/dist/core/repo.d.ts +24 -0
  67. package/dist/core/repo.d.ts.map +1 -0
  68. package/dist/core/repo.js +101 -0
  69. package/dist/core/repo.js.map +1 -0
  70. package/dist/core/session.d.ts +24 -0
  71. package/dist/core/session.d.ts.map +1 -0
  72. package/dist/core/session.js +32 -0
  73. package/dist/core/session.js.map +1 -0
  74. package/dist/core/types.d.ts +309 -0
  75. package/dist/core/types.d.ts.map +1 -0
  76. package/dist/core/types.js +2 -0
  77. package/dist/core/types.js.map +1 -0
  78. package/dist/index.d.ts +3 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +148 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/ui/browser.d.ts +30 -0
  83. package/dist/ui/browser.d.ts.map +1 -0
  84. package/dist/ui/browser.js +350 -0
  85. package/dist/ui/browser.js.map +1 -0
  86. package/dist/ui/format.d.ts +15 -0
  87. package/dist/ui/format.d.ts.map +1 -0
  88. package/dist/ui/format.js +131 -0
  89. package/dist/ui/format.js.map +1 -0
  90. package/dist/ui/output.d.ts +16 -0
  91. package/dist/ui/output.d.ts.map +1 -0
  92. package/dist/ui/output.js +63 -0
  93. package/dist/ui/output.js.map +1 -0
  94. package/dist/ui/prompts.d.ts +39 -0
  95. package/dist/ui/prompts.d.ts.map +1 -0
  96. package/dist/ui/prompts.js +76 -0
  97. package/dist/ui/prompts.js.map +1 -0
  98. package/dist/ui/screen.d.ts +27 -0
  99. package/dist/ui/screen.d.ts.map +1 -0
  100. package/dist/ui/screen.js +120 -0
  101. package/dist/ui/screen.js.map +1 -0
  102. package/dist/ui/spinner.d.ts +8 -0
  103. package/dist/ui/spinner.d.ts.map +1 -0
  104. package/dist/ui/spinner.js +98 -0
  105. package/dist/ui/spinner.js.map +1 -0
  106. package/dist/ui/table.d.ts +14 -0
  107. package/dist/ui/table.d.ts.map +1 -0
  108. package/dist/ui/table.js +47 -0
  109. package/dist/ui/table.js.map +1 -0
  110. package/dist/ui/theme.d.ts +44 -0
  111. package/dist/ui/theme.d.ts.map +1 -0
  112. package/dist/ui/theme.js +85 -0
  113. package/dist/ui/theme.js.map +1 -0
  114. package/dist/version.d.ts +3 -0
  115. package/dist/version.d.ts.map +1 -0
  116. package/dist/version.js +17 -0
  117. package/dist/version.js.map +1 -0
  118. package/package.json +54 -0
@@ -0,0 +1,250 @@
1
+ import open from "open";
2
+ import { openSession } from "../core/session.js";
3
+ import { readRepoDefault } from "../core/config.js";
4
+ import { defaultScope } from "../core/repo.js";
5
+ import { browse } from "../ui/browser.js";
6
+ import * as out from "../ui/output.js";
7
+ import { keyValue, renderTable } from "../ui/table.js";
8
+ import { elapsed, padEnd, progressBar, relativeTime, terminalWidth } from "../ui/format.js";
9
+ import { c, glyph, scanStatusLabel } from "../ui/theme.js";
10
+ import { confirmByTyping } from "../ui/prompts.js";
11
+ import { observedCommand } from "./observed.js";
12
+ import { watchScan } from "./scan.js";
13
+ function isActive(project) {
14
+ return project.scan?.status === "queued" || project.scan?.status === "running";
15
+ }
16
+ function scanCell(project) {
17
+ const scan = project.scan;
18
+ if (!scan)
19
+ return c.dim("never");
20
+ if (scan.status === "running" || scan.status === "queued") {
21
+ const done = scan.filesScanned ?? 0;
22
+ const total = scan.fileCount ?? 0;
23
+ return total > 0 ? `${scan.stage ?? "running"} ${done}/${total}` : (scan.stage ?? "queued");
24
+ }
25
+ if (scan.status === "failed")
26
+ return c.red(scan.error ?? "failed");
27
+ return relativeTime(scan.finishedAt ?? scan.createdAt);
28
+ }
29
+ function headerLines(github, projects, email, apiUrl) {
30
+ const scanning = projects.filter(isActive).length;
31
+ const summary = [
32
+ `${projects.length} connected`,
33
+ scanning > 0 ? c.cyan(`${scanning} scanning`) : "",
34
+ ]
35
+ .filter(Boolean)
36
+ .join(c.dim(" · "));
37
+ return [
38
+ "",
39
+ ` ${c.bold("Cefense")} ${c.dim(`${email} · ${apiUrl.replace(/^https?:\/\//, "")}`)}`,
40
+ "",
41
+ ` ${c.dim(padEnd("GitHub", 10))}${github?.connected ? `connected as ${github.login}` : c.yellow("not connected")}`,
42
+ ` ${c.dim(padEnd("Repos", 10))}${summary}`,
43
+ "",
44
+ ];
45
+ }
46
+ function projectDetail(project, width) {
47
+ const lines = [];
48
+ const push = (value = "") => lines.push(value ? ` ${value}` : "");
49
+ const scan = project.scan;
50
+ push();
51
+ push(`${c.bold(project.fullName)} ${c.dim(`${project.private ? "private" : "public"} · ${project.defaultBranch ?? "default branch"}`)}`);
52
+ push();
53
+ const facts = [
54
+ ["Scan", scan ? `${scanStatusLabel(scan.status)} ${c.dim(relativeTime(scan.createdAt))}` : c.dim("never scanned")],
55
+ ];
56
+ if (scan) {
57
+ if (scan.stage)
58
+ facts.push(["Stage", scan.stage]);
59
+ if (scan.fileCount) {
60
+ const done = scan.filesScanned ?? 0;
61
+ facts.push([
62
+ "Files",
63
+ `${progressBar(done, scan.fileCount, Math.min(24, width - 30))} ${done} / ${scan.fileCount}`,
64
+ ]);
65
+ }
66
+ facts.push(["Findings", String(scan.findingCount)]);
67
+ if (scan.finishedAt)
68
+ facts.push(["Duration", elapsed(scan.createdAt, scan.finishedAt)]);
69
+ if (scan.error)
70
+ facts.push(["Error", c.red(scan.error)]);
71
+ }
72
+ facts.push(["Connected", relativeTime(project.connectedAt)]);
73
+ for (const row of keyValue(facts, 10))
74
+ push(row);
75
+ const languages = project.profile?.languages ?? [];
76
+ const frameworks = project.profile?.frameworks ?? [];
77
+ if (languages.length > 0 || frameworks.length > 0) {
78
+ push();
79
+ push(c.dim("DETECTED STACK"));
80
+ push();
81
+ if (languages.length > 0)
82
+ push(`${c.dim(padEnd("Languages", 12))}${languages.join(", ")}`);
83
+ if (frameworks.length > 0)
84
+ push(`${c.dim(padEnd("Frameworks", 12))}${frameworks.join(", ")}`);
85
+ }
86
+ if (project.htmlUrl) {
87
+ push();
88
+ push(c.dim(project.htmlUrl));
89
+ }
90
+ push();
91
+ return lines;
92
+ }
93
+ export async function statusCommand(globals, options = {}) {
94
+ const session = await openSession(globals, { auth: true });
95
+ const [me, github, listing, initial] = await Promise.all([
96
+ session.client.me(),
97
+ session.client.githubStatus().catch(() => null),
98
+ session.client.githubRepos().catch(() => null),
99
+ session.client.projects(),
100
+ ]);
101
+ let projects = initial.projects;
102
+ const available = (listing?.repos ?? []).filter((repo) => !repo.connected);
103
+ if (out.isJsonMode()) {
104
+ out.json({ apiUrl: session.apiUrl, user: me.user, github, projects, available: available.length });
105
+ return 0;
106
+ }
107
+ if (out.isPiped()) {
108
+ out.lines(headerLines(github, projects, me.user.email, session.apiUrl));
109
+ if (projects.length > 0) {
110
+ out.lines(renderTable(projects, [
111
+ { header: "repository", value: (project) => project.fullName, min: 16 },
112
+ { header: "status", value: (project) => scanStatusLabel(project.scan?.status), min: 8 },
113
+ {
114
+ header: "findings",
115
+ value: (project) => (project.scan ? String(project.scan.findingCount) : "-"),
116
+ align: "right",
117
+ min: 5,
118
+ },
119
+ { header: "last scan", value: scanCell, min: 10 },
120
+ ], { width: terminalWidth() - 4 }).map((row) => ` ${row}`));
121
+ }
122
+ out.line();
123
+ return 0;
124
+ }
125
+ const scope = defaultScope();
126
+ const fallback = readRepoDefault(scope);
127
+ const buildRows = (list) => {
128
+ const rows = list.map((project) => ({ kind: "project", project }));
129
+ if (available.length > 0) {
130
+ rows.push({ kind: "divider" });
131
+ for (const repo of available.slice(0, 8))
132
+ rows.push({ kind: "available", repo });
133
+ }
134
+ return rows;
135
+ };
136
+ let followUp = null;
137
+ await browse(buildRows(projects), {
138
+ header: () => headerLines(github, projects, me.user.email, session.apiUrl),
139
+ renderRow: (row, selected, width) => {
140
+ if (row.kind === "divider") {
141
+ return ["", ` ${c.dim(glyph.rule.repeat(Math.max(8, width - 4)))}`];
142
+ }
143
+ const marker = selected ? c.cyan(glyph.arrow) : " ";
144
+ if (row.kind === "available") {
145
+ return [`${marker} ${c.dim(padEnd(row.repo.fullName, 34))}${c.dim("not connected")}`];
146
+ }
147
+ const project = row.project;
148
+ const isDefault = fallback?.githubRepoId === project.githubRepoId;
149
+ const name = selected ? c.bold(project.fullName) : project.fullName;
150
+ const findings = project.scan ? String(project.scan.findingCount) : "-";
151
+ return [
152
+ `${marker} ${padEnd(name + (isDefault ? c.cyan(" *") : ""), 34)}${padEnd(scanStatusLabel(project.scan?.status), 12)}${padEnd(findings, 10)}${c.dim(scanCell(project))}`,
153
+ ];
154
+ },
155
+ renderDetail: (row, width) => row.kind === "project"
156
+ ? projectDetail(row.project, width)
157
+ : row.kind === "available"
158
+ ? ["", ` ${c.bold(row.repo.fullName)} is not connected.`, "", ` ${c.dim("Press c to connect it.")}`, ""]
159
+ : [""],
160
+ filterText: (row) => row.kind === "project" ? row.project.fullName : row.kind === "available" ? row.repo.fullName : "",
161
+ emptyMessage: "No repositories are connected. Run cf repo connect.",
162
+ refresh: async () => {
163
+ const next = await session.client.projects();
164
+ projects = next.projects;
165
+ return buildRows(projects);
166
+ },
167
+ refreshIntervalMs: 2000,
168
+ shouldKeepRefreshing: () => options.watch === true || projects.some(isActive),
169
+ actions: [
170
+ {
171
+ key: "f",
172
+ label: "findings",
173
+ run: (row, context) => {
174
+ if (row?.kind !== "project")
175
+ return;
176
+ followUp = { action: "findings", project: row.project };
177
+ context.close();
178
+ },
179
+ },
180
+ {
181
+ key: "r",
182
+ label: "rescan",
183
+ run: async (row, context) => {
184
+ if (row?.kind !== "project")
185
+ return;
186
+ followUp = { action: "scan", project: row.project };
187
+ context.close();
188
+ },
189
+ },
190
+ {
191
+ key: "o",
192
+ label: "open",
193
+ run: (row) => {
194
+ const url = row?.kind === "project" ? row.project.htmlUrl : row?.kind === "available" ? row.repo.htmlUrl : null;
195
+ if (url)
196
+ void open(url).catch(() => undefined);
197
+ },
198
+ },
199
+ {
200
+ key: "d",
201
+ label: "disconnect",
202
+ run: async (row, context) => {
203
+ if (row?.kind !== "project")
204
+ return;
205
+ const project = row.project;
206
+ const confirmed = await context.suspend(async () => {
207
+ out.line();
208
+ out.warn(`Disconnecting ${c.bold(project.fullName)} removes its scan history from Cefense.`);
209
+ out.line();
210
+ return confirmByTyping({
211
+ message: `Type ${project.fullName} to confirm`,
212
+ expected: project.fullName,
213
+ });
214
+ });
215
+ if (!confirmed) {
216
+ context.setStatus("Left connected.");
217
+ return;
218
+ }
219
+ await session.client.disconnectRepo(project.githubRepoId);
220
+ await context.refresh();
221
+ context.setStatus(`Disconnected ${project.fullName}`);
222
+ },
223
+ },
224
+ {
225
+ key: "c",
226
+ label: "connect",
227
+ run: async (row, context) => {
228
+ if (row?.kind !== "available")
229
+ return;
230
+ const repo = row.repo;
231
+ await session.client.connectRepo(repo);
232
+ await context.refresh();
233
+ context.setStatus(`Connected ${repo.fullName}. A first scan has started.`);
234
+ },
235
+ },
236
+ ],
237
+ });
238
+ const pending = followUp;
239
+ if (pending?.action === "findings") {
240
+ return observedCommand({ ...globals, repo: pending.project.fullName }, {});
241
+ }
242
+ if (pending?.action === "scan") {
243
+ await session.client.startScan(pending.project.githubRepoId);
244
+ out.line();
245
+ await watchScan(session.client, pending.project.githubRepoId, pending.project.fullName);
246
+ out.line();
247
+ }
248
+ return 0;
249
+ }
250
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import type { Article, ArticleDetail, ArticlesResponse, BillingCatalog, BillingFeature, BillingMe, CefenseProfile, CliConfigResponse, Fix, FindingsResponse, GithubRepo, GithubReposResponse, GithubStatus, HealthResponse, MeResponse, ProfileResponse, Project, ReferralsResponse, StoredCredentials } from "./types.js";
2
+ interface RequestOptions {
3
+ query?: Record<string, string | number | boolean | undefined>;
4
+ body?: unknown;
5
+ signal?: AbortSignal;
6
+ allowUnauthenticated?: boolean;
7
+ }
8
+ export declare class CefenseClient {
9
+ readonly apiUrl: string;
10
+ readonly config: CliConfigResponse | null;
11
+ private credentials;
12
+ private refreshing;
13
+ constructor(options: {
14
+ apiUrl: string;
15
+ config?: CliConfigResponse | null;
16
+ credentials?: StoredCredentials | null;
17
+ });
18
+ get authenticated(): boolean;
19
+ get token(): string | null;
20
+ get refreshToken(): string | null;
21
+ private renew;
22
+ request<T>(method: string, path: string, options?: RequestOptions): Promise<T>;
23
+ private toError;
24
+ health(): Promise<HealthResponse>;
25
+ me(): Promise<MeResponse>;
26
+ githubStatus(): Promise<GithubStatus>;
27
+ githubRepos(): Promise<GithubReposResponse>;
28
+ projects(): Promise<{
29
+ projects: Project[];
30
+ }>;
31
+ connectRepo(repo: GithubRepo): Promise<{
32
+ project: Project;
33
+ scanId: string;
34
+ }>;
35
+ disconnectRepo(githubRepoId: string): Promise<{
36
+ ok: boolean;
37
+ }>;
38
+ disconnectGithubAccount(): Promise<{
39
+ ok: boolean;
40
+ }>;
41
+ startScan(githubRepoId: string): Promise<{
42
+ scanId: string;
43
+ }>;
44
+ findings(githubRepoId: string, query?: {
45
+ limit?: number;
46
+ offset?: number;
47
+ severity?: string;
48
+ category?: string;
49
+ matched?: boolean;
50
+ }): Promise<FindingsResponse>;
51
+ fixForFinding(findingId: string): Promise<{
52
+ fix: Fix | null;
53
+ }>;
54
+ fixesForScan(scanId: string): Promise<{
55
+ fixes: Fix[];
56
+ }>;
57
+ generateFix(findingId: string): Promise<{
58
+ fix: Fix;
59
+ }>;
60
+ publishFix(findingId: string): Promise<{
61
+ fix: Fix;
62
+ }>;
63
+ articles(query?: {
64
+ limit?: number;
65
+ offset?: number;
66
+ githubRepoId?: string;
67
+ }): Promise<ArticlesResponse>;
68
+ article(id: string): Promise<{
69
+ article: ArticleDetail;
70
+ }>;
71
+ profile(): Promise<ProfileResponse>;
72
+ saveProfile(body: Partial<CefenseProfile>): Promise<{
73
+ profile: CefenseProfile;
74
+ }>;
75
+ billing(): Promise<BillingMe>;
76
+ billingCatalog(): Promise<BillingCatalog>;
77
+ checkout(feature: BillingFeature): Promise<{
78
+ url: string;
79
+ }>;
80
+ billingPortal(): Promise<{
81
+ url: string;
82
+ }>;
83
+ referrals(): Promise<ReferralsResponse>;
84
+ redeem(code: string): Promise<unknown>;
85
+ }
86
+ export type { Article, Project, Fix };
87
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,235 @@
1
+ import { CefenseError, AuthRequiredError, FeatureRequiredError } from "./errors.js";
2
+ import { refreshCredentials } from "./oauth.js";
3
+ import { saveCredentials } from "./credentials.js";
4
+ import { USER_AGENT } from "../version.js";
5
+ const RETRYABLE = new Set([429, 502, 503, 504]);
6
+ const MAX_ATTEMPTS = 3;
7
+ function sleep(ms) {
8
+ return new Promise((resolve) => setTimeout(resolve, ms));
9
+ }
10
+ function backoffDelay(attempt, retryAfter) {
11
+ if (retryAfter) {
12
+ const seconds = Number.parseInt(retryAfter, 10);
13
+ if (Number.isFinite(seconds) && seconds >= 0)
14
+ return Math.min(seconds * 1000, 15_000);
15
+ }
16
+ return Math.min(2 ** attempt * 250, 4000) + Math.floor(Math.random() * 200);
17
+ }
18
+ export class CefenseClient {
19
+ apiUrl;
20
+ config;
21
+ credentials;
22
+ refreshing = null;
23
+ constructor(options) {
24
+ this.apiUrl = options.apiUrl;
25
+ this.config = options.config ?? null;
26
+ this.credentials = options.credentials ?? null;
27
+ }
28
+ get authenticated() {
29
+ return Boolean(this.credentials?.accessToken);
30
+ }
31
+ get token() {
32
+ return this.credentials?.accessToken ?? null;
33
+ }
34
+ get refreshToken() {
35
+ return this.credentials?.refreshToken ?? null;
36
+ }
37
+ async renew() {
38
+ if (!this.config || !this.credentials?.refreshToken) {
39
+ throw new AuthRequiredError("Your session has expired.");
40
+ }
41
+ if (!this.refreshing) {
42
+ const refreshToken = this.credentials.refreshToken;
43
+ this.refreshing = refreshCredentials(this.config, refreshToken)
44
+ .then(async (next) => {
45
+ const merged = {
46
+ ...next,
47
+ subject: this.credentials?.subject ?? null,
48
+ email: this.credentials?.email ?? null,
49
+ };
50
+ this.credentials = merged;
51
+ await saveCredentials(this.apiUrl, merged);
52
+ return merged;
53
+ })
54
+ .finally(() => {
55
+ this.refreshing = null;
56
+ });
57
+ }
58
+ return this.refreshing;
59
+ }
60
+ async request(method, path, options = {}) {
61
+ const url = new URL(path, this.apiUrl);
62
+ for (const [key, value] of Object.entries(options.query ?? {})) {
63
+ if (value !== undefined)
64
+ url.searchParams.set(key, String(value));
65
+ }
66
+ if (!options.allowUnauthenticated && !this.credentials?.accessToken) {
67
+ throw new AuthRequiredError();
68
+ }
69
+ let renewed = false;
70
+ for (let attempt = 0;; attempt += 1) {
71
+ const headers = {
72
+ accept: "application/json",
73
+ "user-agent": USER_AGENT,
74
+ };
75
+ if (this.credentials?.accessToken) {
76
+ headers.authorization = `Bearer ${this.credentials.accessToken}`;
77
+ }
78
+ if (options.body !== undefined)
79
+ headers["content-type"] = "application/json";
80
+ let response;
81
+ try {
82
+ response = await fetch(url, {
83
+ method,
84
+ headers,
85
+ body: options.body === undefined ? undefined : JSON.stringify(options.body),
86
+ signal: options.signal ?? AbortSignal.timeout(60_000),
87
+ });
88
+ }
89
+ catch (cause) {
90
+ if (method === "GET" && attempt + 1 < MAX_ATTEMPTS) {
91
+ await sleep(backoffDelay(attempt, null));
92
+ continue;
93
+ }
94
+ throw new CefenseError(`Could not reach ${url.origin}.`, {
95
+ remedy: "Check your connection, or point somewhere else with --api-url.",
96
+ cause,
97
+ });
98
+ }
99
+ if (response.status === 401 && !renewed && this.credentials?.refreshToken && this.config) {
100
+ renewed = true;
101
+ await this.renew();
102
+ continue;
103
+ }
104
+ if (RETRYABLE.has(response.status) && method === "GET" && attempt + 1 < MAX_ATTEMPTS) {
105
+ await sleep(backoffDelay(attempt, response.headers.get("retry-after")));
106
+ continue;
107
+ }
108
+ if (response.ok) {
109
+ if (response.status === 204)
110
+ return undefined;
111
+ const text = await response.text();
112
+ return (text ? JSON.parse(text) : undefined);
113
+ }
114
+ throw await this.toError(response, url);
115
+ }
116
+ }
117
+ async toError(response, url) {
118
+ let payload = {};
119
+ try {
120
+ payload = (await response.json());
121
+ }
122
+ catch {
123
+ payload = {};
124
+ }
125
+ const message = typeof payload.error === "string" ? payload.error : null;
126
+ const webUrl = this.config?.webUrl ?? this.apiUrl;
127
+ if (response.status === 401) {
128
+ return new AuthRequiredError("Your session has expired.");
129
+ }
130
+ if (response.status === 403 && payload.code === "feature_required") {
131
+ return new FeatureRequiredError(String(payload.feature ?? "required"), typeof payload.pricingUrl === "string" ? payload.pricingUrl : null, webUrl);
132
+ }
133
+ if (response.status === 404) {
134
+ return new CefenseError(message ?? "Not found.", {
135
+ remedy: "Check the repository is connected with cf repo list.",
136
+ });
137
+ }
138
+ if (response.status === 409) {
139
+ return new CefenseError(message ?? "The request conflicted with the current state.", {
140
+ remedy: /github/i.test(message ?? "")
141
+ ? `Reconnect GitHub at ${webUrl}/app/repositories.`
142
+ : null,
143
+ });
144
+ }
145
+ if (response.status === 503) {
146
+ return new CefenseError(message ?? "The Cefense API is not fully configured.", {
147
+ remedy: "Run cf doctor to see what is missing.",
148
+ });
149
+ }
150
+ return new CefenseError(message ?? `${url.pathname} returned ${response.status}.`);
151
+ }
152
+ health() {
153
+ return this.request("GET", "/health", { allowUnauthenticated: true });
154
+ }
155
+ me() {
156
+ return this.request("GET", "/api/me");
157
+ }
158
+ githubStatus() {
159
+ return this.request("GET", "/api/github/status");
160
+ }
161
+ githubRepos() {
162
+ return this.request("GET", "/api/github/repos");
163
+ }
164
+ projects() {
165
+ return this.request("GET", "/api/github/projects");
166
+ }
167
+ connectRepo(repo) {
168
+ return this.request("POST", "/api/github/repos/connect", {
169
+ body: {
170
+ githubRepoId: repo.githubRepoId,
171
+ fullName: repo.fullName,
172
+ name: repo.name,
173
+ owner: repo.owner,
174
+ private: repo.private,
175
+ defaultBranch: repo.defaultBranch,
176
+ htmlUrl: repo.htmlUrl,
177
+ },
178
+ });
179
+ }
180
+ disconnectRepo(githubRepoId) {
181
+ return this.request("POST", "/api/github/repos/disconnect", { body: { githubRepoId } });
182
+ }
183
+ disconnectGithubAccount() {
184
+ return this.request("POST", "/api/github/account/disconnect");
185
+ }
186
+ startScan(githubRepoId) {
187
+ return this.request("POST", `/api/github/projects/${encodeURIComponent(githubRepoId)}/scan`);
188
+ }
189
+ findings(githubRepoId, query = {}) {
190
+ return this.request("GET", `/api/github/projects/${encodeURIComponent(githubRepoId)}/findings`, { query });
191
+ }
192
+ fixForFinding(findingId) {
193
+ return this.request("GET", `/api/fix/findings/${encodeURIComponent(findingId)}`);
194
+ }
195
+ fixesForScan(scanId) {
196
+ return this.request("GET", `/api/fix/scans/${encodeURIComponent(scanId)}`);
197
+ }
198
+ generateFix(findingId) {
199
+ return this.request("POST", `/api/fix/findings/${encodeURIComponent(findingId)}/generate`);
200
+ }
201
+ publishFix(findingId) {
202
+ return this.request("POST", `/api/fix/findings/${encodeURIComponent(findingId)}/publish`);
203
+ }
204
+ articles(query = {}) {
205
+ return this.request("GET", "/api/articles", { query });
206
+ }
207
+ article(id) {
208
+ return this.request("GET", `/api/articles/${encodeURIComponent(id)}`);
209
+ }
210
+ profile() {
211
+ return this.request("GET", "/api/profile");
212
+ }
213
+ saveProfile(body) {
214
+ return this.request("POST", "/api/profile", { body });
215
+ }
216
+ billing() {
217
+ return this.request("GET", "/api/billing/me");
218
+ }
219
+ billingCatalog() {
220
+ return this.request("GET", "/api/billing/catalog", { allowUnauthenticated: true });
221
+ }
222
+ checkout(feature) {
223
+ return this.request("POST", "/api/billing/checkout", { body: { feature } });
224
+ }
225
+ billingPortal() {
226
+ return this.request("POST", "/api/billing/portal");
227
+ }
228
+ referrals() {
229
+ return this.request("GET", "/api/referrals/me");
230
+ }
231
+ redeem(code) {
232
+ return this.request("POST", "/api/referrals/redeem", { body: { code } });
233
+ }
234
+ }
235
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAuB3C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAChD,MAAM,YAAY,GAAG,CAAC,CAAC;AASvB,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,UAAyB;IAC9D,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,GAAG,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,OAAO,aAAa;IACf,MAAM,CAAS;IACf,MAAM,CAA2B;IAClC,WAAW,CAA2B;IACtC,UAAU,GAAsC,IAAI,CAAC;IAE7D,YAAY,OAIX;QACC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;IACjD,CAAC;IAED,IAAI,aAAa;QACf,OAAO,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,IAAI,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,CAAC;YACpD,MAAM,IAAI,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;YACnD,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC;iBAC5D,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACnB,MAAM,MAAM,GAAsB;oBAChC,GAAG,IAAI;oBACP,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,IAAI;oBAC1C,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI;iBACvC,CAAC;gBACF,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;gBAC1B,MAAM,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC3C,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;iBACD,OAAO,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACzB,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,UAA0B,EAAE;QACzE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/D,IAAI,KAAK,KAAK,SAAS;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC;YACpE,MAAM,IAAI,iBAAiB,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAA2B;gBACtC,MAAM,EAAE,kBAAkB;gBAC1B,YAAY,EAAE,UAAU;aACzB,CAAC;YACF,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC;gBAClC,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;YACnE,CAAC;YACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;gBAAE,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;YAE7E,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAC1B,MAAM;oBACN,OAAO;oBACP,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC;oBAC3E,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;iBACtD,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,MAAM,KAAK,KAAK,IAAI,OAAO,GAAG,CAAC,GAAG,YAAY,EAAE,CAAC;oBACnD,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;oBACzC,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,YAAY,CAAC,mBAAmB,GAAG,CAAC,MAAM,GAAG,EAAE;oBACvD,MAAM,EAAE,gEAAgE;oBACxE,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACzF,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACnB,SAAS;YACX,CAAC;YAED,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,KAAK,IAAI,OAAO,GAAG,CAAC,GAAG,YAAY,EAAE,CAAC;gBACrF,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBACxE,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;oBAAE,OAAO,SAAc,CAAC;gBACnD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAM,CAAC;YACpD,CAAC;YAED,MAAM,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,QAAkB,EAAE,GAAQ;QAChD,IAAI,OAAO,GAA4B,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAElD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACnE,OAAO,IAAI,oBAAoB,CAC7B,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,EACrC,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAClE,MAAM,CACP,CAAC;QACJ,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,EAAE;gBAC/C,MAAM,EAAE,sDAAsD;aAC/D,CAAC,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,YAAY,CAAC,OAAO,IAAI,gDAAgD,EAAE;gBACnF,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;oBACnC,CAAC,CAAC,uBAAuB,MAAM,oBAAoB;oBACnD,CAAC,CAAC,IAAI;aACT,CAAC,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,IAAI,YAAY,CAAC,OAAO,IAAI,0CAA0C,EAAE;gBAC7E,MAAM,EAAE,uCAAuC;aAChD,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,YAAY,CAAC,OAAO,IAAI,GAAG,GAAG,CAAC,QAAQ,aAAa,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACrF,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAiB,KAAK,EAAE,SAAS,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,EAAE;QACA,OAAO,IAAI,CAAC,OAAO,CAAa,KAAK,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,OAAO,CAAe,KAAK,EAAE,oBAAoB,CAAC,CAAC;IACjE,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAsB,KAAK,EAAE,mBAAmB,CAAC,CAAC;IACvE,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,OAAO,CAA0B,KAAK,EAAE,sBAAsB,CAAC,CAAC;IAC9E,CAAC;IAED,WAAW,CAAC,IAAgB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,EAAE;YACvD,IAAI,EAAE;gBACJ,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;SACF,CAAC,CAAC;IACL,CAAC;IAED,cAAc,CAAC,YAAoB;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,8BAA8B,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,uBAAuB;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC;IAChE,CAAC;IAED,SAAS,CAAC,YAAoB;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,wBAAwB,kBAAkB,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,QAAQ,CACN,YAAoB,EACpB,QAAsG,EAAE;QAExG,OAAO,IAAI,CAAC,OAAO,CACjB,KAAK,EACL,wBAAwB,kBAAkB,CAAC,YAAY,CAAC,WAAW,EACnE,EAAE,KAAK,EAAE,CACV,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,SAAiB;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnF,CAAC;IAED,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IAC7F,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC5F,CAAC;IAED,QAAQ,CAAC,QAAoE,EAAE;QAC7E,OAAO,IAAI,CAAC,OAAO,CAAmB,KAAK,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO,CAAC,EAAU;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAkB,KAAK,EAAE,cAAc,CAAC,CAAC;IAC9D,CAAC;IAED,WAAW,CAAC,IAA6B;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAY,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,OAAO,CAAiB,KAAK,EAAE,sBAAsB,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,QAAQ,CAAC,OAAuB;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACrD,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAoB,KAAK,EAAE,mBAAmB,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,uBAAuB,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ import type { CliConfigResponse } from "./types.js";
2
+ export declare const DEFAULT_API_URL = "https://cefense.com";
3
+ export interface CliPreferences {
4
+ apiUrl?: string;
5
+ colour?: boolean;
6
+ }
7
+ export interface RepoDefault {
8
+ githubRepoId: string;
9
+ fullName: string;
10
+ }
11
+ export declare function dataDir(): string;
12
+ export declare function ensureDataDir(): string;
13
+ export declare function readPreferences(): CliPreferences;
14
+ export declare function writePreferences(preferences: CliPreferences): void;
15
+ export declare function normaliseApiUrl(value: string): string;
16
+ export declare function resolveApiUrl(flag?: string): string;
17
+ export declare function readRepoDefault(scope: string): RepoDefault | null;
18
+ export declare function writeRepoDefault(scope: string, value: RepoDefault): void;
19
+ export declare function clearRepoDefault(scope: string): boolean;
20
+ export declare function readCachedDiscovery(apiUrl: string): CliConfigResponse | null;
21
+ export declare function writeCachedDiscovery(apiUrl: string, config: CliConfigResponse): void;
22
+ export declare function credentialsFilePath(): string;
23
+ export declare function removeCredentialsFile(): void;
24
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAErD,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAmBD,wBAAgB,eAAe,IAAI,cAAc,CAEhD;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,cAAc,GAAG,IAAI,CAElE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGnD;AAID,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAEjE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAIxE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMvD;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAK5E;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAIpF;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAM5C"}