@bevorai/sdk 0.1.1 → 0.2.0-rc2
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/README.md +18 -15
- package/dist/client.d.ts +9 -8
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +21 -19
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +42 -27
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +45 -29
- package/dist/errors.js.map +1 -1
- package/dist/graph/call-node.d.ts +9 -27
- package/dist/graph/call-node.d.ts.map +1 -1
- package/dist/graph/call-node.js +75 -41
- package/dist/graph/call-node.js.map +1 -1
- package/dist/graph/cursor.d.ts +7 -7
- package/dist/graph/cursor.d.ts.map +1 -1
- package/dist/graph/cursor.js.map +1 -1
- package/dist/graph/field-metadata.d.ts +11 -11
- package/dist/graph/field-metadata.d.ts.map +1 -1
- package/dist/graph/field-metadata.js +2 -18
- package/dist/graph/field-metadata.js.map +1 -1
- package/dist/graph/graph.d.ts +22 -22
- package/dist/graph/graph.d.ts.map +1 -1
- package/dist/graph/graph.js.map +1 -1
- package/dist/helpers/sarif.d.ts +7 -7
- package/dist/helpers/sarif.d.ts.map +1 -1
- package/dist/helpers/sarif.js.map +1 -1
- package/dist/index.d.ts +3 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/node.js +1 -1
- package/dist/pagination.d.ts +1 -1
- package/dist/pagination.d.ts.map +1 -1
- package/dist/resources/analyses.d.ts +204 -76
- package/dist/resources/analyses.d.ts.map +1 -1
- package/dist/resources/analyses.js +147 -33
- package/dist/resources/analyses.js.map +1 -1
- package/dist/resources/chats.d.ts +52 -27
- package/dist/resources/chats.d.ts.map +1 -1
- package/dist/resources/chats.js +45 -9
- package/dist/resources/chats.js.map +1 -1
- package/dist/resources/codes.d.ts +102 -41
- package/dist/resources/codes.d.ts.map +1 -1
- package/dist/resources/codes.js +78 -18
- package/dist/resources/codes.js.map +1 -1
- package/dist/resources/files.d.ts +22 -12
- package/dist/resources/files.d.ts.map +1 -1
- package/dist/resources/files.js +12 -2
- package/dist/resources/files.js.map +1 -1
- package/dist/resources/findings.d.ts +68 -32
- package/dist/resources/findings.d.ts.map +1 -1
- package/dist/resources/findings.js +49 -10
- package/dist/resources/findings.js.map +1 -1
- package/dist/resources/nodes.d.ts +28 -18
- package/dist/resources/nodes.d.ts.map +1 -1
- package/dist/resources/nodes.js +12 -2
- package/dist/resources/nodes.js.map +1 -1
- package/dist/resources/projects.d.ts +7 -3
- package/dist/resources/projects.d.ts.map +1 -1
- package/dist/resources/projects.js +5 -1
- package/dist/resources/projects.js.map +1 -1
- package/dist/resources/summary.d.ts +4 -3
- package/dist/resources/summary.d.ts.map +1 -1
- package/dist/resources/summary.js.map +1 -1
- package/dist/resources/transitions.d.ts +16 -12
- package/dist/resources/transitions.d.ts.map +1 -1
- package/dist/resources/transitions.js +9 -2
- package/dist/resources/transitions.js.map +1 -1
- package/dist/resources/users.d.ts +14 -9
- package/dist/resources/users.d.ts.map +1 -1
- package/dist/resources/users.js +6 -1
- package/dist/resources/users.js.map +1 -1
- package/dist/resources/versions.d.ts +29 -13
- package/dist/resources/versions.d.ts.map +1 -1
- package/dist/resources/versions.js +24 -5
- package/dist/resources/versions.js.map +1 -1
- package/dist/streaming.d.ts +1 -2
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +2 -2
- package/dist/streaming.js.map +1 -1
- package/dist/types/events.d.ts +53 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +2 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/generics.d.ts +18 -0
- package/dist/types/generics.d.ts.map +1 -0
- package/dist/types/generics.js +2 -0
- package/dist/types/generics.js.map +1 -0
- package/dist/types/graph_data.d.ts +137 -0
- package/dist/types/graph_data.d.ts.map +1 -0
- package/dist/types/graph_data.js +3 -0
- package/dist/types/graph_data.js.map +1 -0
- package/dist/types/literals.d.ts +11 -22
- package/dist/types/literals.d.ts.map +1 -1
- package/dist/types/literals.js +2 -15
- package/dist/types/literals.js.map +1 -1
- package/dist/types/requests.d.ts +246 -177
- package/dist/types/requests.d.ts.map +1 -1
- package/dist/types/requests.js +2 -2
- package/dist/types/requests.js.map +1 -1
- package/dist/types/responses.d.ts +592 -381
- package/dist/types/responses.d.ts.map +1 -1
- package/dist/types/responses.js +2 -10
- package/dist/types/responses.js.map +1 -1
- package/dist/types/shared.d.ts +8 -0
- package/dist/types/shared.d.ts.map +1 -0
- package/dist/types/shared.js +2 -0
- package/dist/types/shared.js.map +1 -0
- package/package.json +1 -1
- package/dist/helpers/call-chain.d.ts +0 -11
- package/dist/helpers/call-chain.d.ts.map +0 -1
- package/dist/helpers/call-chain.js +0 -79
- package/dist/helpers/call-chain.js.map +0 -1
- package/dist/helpers/static-analysis.d.ts +0 -18
- package/dist/helpers/static-analysis.d.ts.map +0 -1
- package/dist/helpers/static-analysis.js +0 -89
- package/dist/helpers/static-analysis.js.map +0 -1
- package/dist/types/graph-data.d.ts +0 -62
- package/dist/types/graph-data.d.ts.map +0 -1
- package/dist/types/graph-data.js +0 -2
- package/dist/types/graph-data.js.map +0 -1
- package/dist/types/static-analysis.d.ts +0 -28
- package/dist/types/static-analysis.d.ts.map +0 -1
- package/dist/types/static-analysis.js +0 -93
- package/dist/types/static-analysis.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @bevorai/sdk
|
|
2
2
|
|
|
3
3
|
TypeScript SDK for the [Bevor](https://bevor.io) API: smart contract security analysis for Solidity.
|
|
4
4
|
|
|
@@ -7,12 +7,12 @@ TypeScript SDK for the [Bevor](https://bevor.io) API: smart contract security an
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
npm install @
|
|
10
|
+
npm install @bevorai/sdk
|
|
11
11
|
# or
|
|
12
|
-
pnpm add @
|
|
12
|
+
pnpm add @bevorai/sdk
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
Requires Node
|
|
15
|
+
Requires Node 22+ (or any runtime with `fetch` and `AbortSignal.any`). The package is ESM.
|
|
16
16
|
|
|
17
17
|
## Quickstart
|
|
18
18
|
|
|
@@ -20,7 +20,7 @@ Create an API key in the Bevor dashboard, then:
|
|
|
20
20
|
|
|
21
21
|
```ts
|
|
22
22
|
import { readFile } from "node:fs/promises";
|
|
23
|
-
import { BevorClient } from "@
|
|
23
|
+
import { BevorClient } from "@bevorai/sdk";
|
|
24
24
|
|
|
25
25
|
const client = new BevorClient({ apiKey: "bvr_..." });
|
|
26
26
|
|
|
@@ -29,8 +29,11 @@ const code = await client.codes.createPaste({
|
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
const created = await client.analyses.createRoot({ code_id: code.id });
|
|
32
|
-
if (!created.is_created)
|
|
33
|
-
|
|
32
|
+
if (!created.is_created) {
|
|
33
|
+
// this code already has analyses in the project; reuse one, or pass on_collision: "force"
|
|
34
|
+
console.log(created.candidates.map((c) => c.analysis_meta.id));
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
34
37
|
const { analysis } = created;
|
|
35
38
|
|
|
36
39
|
const run = await client.analyses.run(analysis.id, undefined, {
|
|
@@ -103,8 +106,8 @@ for await (const message of client.chats.stream(chatId, token, {
|
|
|
103
106
|
### Uploading a folder
|
|
104
107
|
|
|
105
108
|
```ts
|
|
106
|
-
import { fingerprintSource } from "@
|
|
107
|
-
import { directoryFiles } from "@
|
|
109
|
+
import { fingerprintSource } from "@bevorai/sdk";
|
|
110
|
+
import { directoryFiles } from "@bevorai/sdk/node";
|
|
108
111
|
|
|
109
112
|
const { zip, nFiles, versionFingerprint } = await fingerprintSource(
|
|
110
113
|
await directoryFiles("./contracts"),
|
|
@@ -129,7 +132,7 @@ code version's `version_fingerprint`.
|
|
|
129
132
|
`Graph` loads a code version's nodes, edges and files for local traversal:
|
|
130
133
|
|
|
131
134
|
```ts
|
|
132
|
-
import { Graph } from "@
|
|
135
|
+
import { Graph } from "@bevorai/sdk";
|
|
133
136
|
|
|
134
137
|
const graph = new Graph(client, codeId);
|
|
135
138
|
await graph.build();
|
|
@@ -144,12 +147,12 @@ const source = await graph.reconstructChunk(entrypointId, {
|
|
|
144
147
|
|
|
145
148
|
### Errors
|
|
146
149
|
|
|
147
|
-
Error responses with a known code throw a typed subclass of `
|
|
148
|
-
`
|
|
149
|
-
Any other non-2xx response throws `
|
|
150
|
+
Error responses with a known code throw a typed subclass of `BevorError` (`NotFoundError`,
|
|
151
|
+
`InvalidStateError`, `RateLimitError`, ...) carrying `code`, `statusCode` and `message`.
|
|
152
|
+
Any other non-2xx response throws `BevorError` with the `status` and raw `body`.
|
|
150
153
|
|
|
151
154
|
```ts
|
|
152
|
-
import { NotFoundError } from "@
|
|
155
|
+
import { NotFoundError } from "@bevorai/sdk";
|
|
153
156
|
|
|
154
157
|
try {
|
|
155
158
|
await client.findings.get(findingId);
|
|
@@ -162,7 +165,7 @@ try {
|
|
|
162
165
|
### SARIF
|
|
163
166
|
|
|
164
167
|
```ts
|
|
165
|
-
import { bevorToSarif, sarifToBevor } from "@
|
|
168
|
+
import { bevorToSarif, sarifToBevor } from "@bevorai/sdk";
|
|
166
169
|
|
|
167
170
|
const sarif = await bevorToSarif(graph, findings.results);
|
|
168
171
|
await client.analyses.addFindings(analysisId, {
|
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { PaginatedResource } from "./pagination.js";
|
|
2
1
|
import { AnalysisResources } from "./resources/analyses.js";
|
|
3
2
|
import { ChatResources } from "./resources/chats.js";
|
|
4
3
|
import { CodesResources } from "./resources/codes.js";
|
|
@@ -7,7 +6,6 @@ import { ProjectResources } from "./resources/projects.js";
|
|
|
7
6
|
import { AnalysisSummaryResources } from "./resources/summary.js";
|
|
8
7
|
import { TransitionResources } from "./resources/transitions.js";
|
|
9
8
|
import { AnalysisVersionsResources } from "./resources/versions.js";
|
|
10
|
-
import type { Pagination } from "./types/responses.js";
|
|
11
9
|
export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
12
10
|
type QueryScalar = string | number | boolean;
|
|
13
11
|
export type QueryValue = QueryScalar | readonly QueryScalar[] | null | undefined;
|
|
@@ -51,8 +49,15 @@ export interface RequestConfig<Q, B> extends RequestOptions {
|
|
|
51
49
|
}
|
|
52
50
|
/** Drops null, undefined and empty-string values; repeats the key for arrays. */
|
|
53
51
|
export declare const buildQuery: <Q extends QueryInput<Q>>(query: Q | undefined) => URLSearchParams;
|
|
54
|
-
/** Raises the registered error for a non-2xx response, or an `
|
|
52
|
+
/** Raises the registered error for a non-2xx response, or an `BevorError` when the body has no known code. */
|
|
55
53
|
export declare const throwForResponse: (response: Response) => Promise<never>;
|
|
54
|
+
/**
|
|
55
|
+
* Client for the Bevor API, scoped to the workspace and project of `apiKey`.
|
|
56
|
+
*
|
|
57
|
+
* In an integration project, requests act on behalf of one of the project's users: send their ID
|
|
58
|
+
* in the `bevor-user-id` header, through `defaultHeaders` or any method's `headers`.
|
|
59
|
+
* `projects.get` and `projects.users.create` don't need it.
|
|
60
|
+
*/
|
|
56
61
|
export declare class BevorClient {
|
|
57
62
|
#private;
|
|
58
63
|
readonly baseURL: string;
|
|
@@ -69,7 +74,7 @@ export declare class BevorClient {
|
|
|
69
74
|
constructor(options: ClientOptions);
|
|
70
75
|
/**
|
|
71
76
|
* Sends a request and returns the parsed JSON body (`null` for empty responses).
|
|
72
|
-
* Throws a registered `
|
|
77
|
+
* Throws a registered `BevorError` subclass, or `BevorError`, for non-2xx responses.
|
|
73
78
|
*/
|
|
74
79
|
request<T, Q extends QueryInput<Q> = QueryRecord, B = never>(method: HttpMethod, path: string, init?: RequestConfig<Q, B>): Promise<T>;
|
|
75
80
|
/**
|
|
@@ -77,10 +82,6 @@ export declare class BevorClient {
|
|
|
77
82
|
* `timeout` is the max idle time between chunks, not a total deadline.
|
|
78
83
|
*/
|
|
79
84
|
streamLines<Q extends QueryInput<Q> = QueryRecord, B = never>(method: HttpMethod, path: string, init?: RequestConfig<Q, B>): AsyncGenerator<string>;
|
|
80
|
-
/** GETs a paginated list; with `withPagination`, wraps it to fetch further pages. */
|
|
81
|
-
paginate<T, Q extends QueryInput<Q> & {
|
|
82
|
-
page?: number | null;
|
|
83
|
-
}>(path: string, query: Q | undefined, options: PaginationOptions): Promise<Pagination<T> | PaginatedResource<T>>;
|
|
84
85
|
}
|
|
85
86
|
export {};
|
|
86
87
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { APIError, ERROR_REGISTRY } from "./errors.js";
|
|
2
|
-
import { PaginatedResource } from "./pagination.js";
|
|
3
2
|
import { AnalysisResources } from "./resources/analyses.js";
|
|
4
3
|
import { ChatResources } from "./resources/chats.js";
|
|
5
4
|
import { CodesResources } from "./resources/codes.js";
|
|
@@ -33,8 +32,9 @@ export const buildQuery = (query) => {
|
|
|
33
32
|
};
|
|
34
33
|
const isJsonObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
35
34
|
const toText = (value) => typeof value === "string" ? value : JSON.stringify(value);
|
|
36
|
-
/** Raises the registered error for a non-2xx response, or an `
|
|
35
|
+
/** Raises the registered error for a non-2xx response, or an `BevorError` when the body has no known code. */
|
|
37
36
|
export const throwForResponse = async (response) => {
|
|
37
|
+
const requestId = response.headers.get("bevor-request-id");
|
|
38
38
|
const text = await response.text().catch(() => "");
|
|
39
39
|
let body = null;
|
|
40
40
|
try {
|
|
@@ -46,17 +46,19 @@ export const throwForResponse = async (response) => {
|
|
|
46
46
|
if (!isJsonObject(body) || body.code === null || body.code === undefined) {
|
|
47
47
|
throw new APIError(response.status, text);
|
|
48
48
|
}
|
|
49
|
-
const
|
|
50
|
-
|
|
49
|
+
const ErrorClass = ERROR_REGISTRY[toText(body.code)];
|
|
50
|
+
if (!ErrorClass)
|
|
51
|
+
throw new APIError(response.status, text);
|
|
52
|
+
const { message, detail, extra } = body;
|
|
51
53
|
const resolved = message !== null && message !== undefined
|
|
52
54
|
? toText(message)
|
|
53
55
|
: detail !== null && detail !== undefined
|
|
54
56
|
? toText(detail)
|
|
55
57
|
: JSON.stringify(body);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
throw new ErrorClass(resolved, {
|
|
59
|
+
requestId,
|
|
60
|
+
extra: Array.isArray(extra) ? extra.filter(isJsonObject) : [],
|
|
61
|
+
});
|
|
60
62
|
};
|
|
61
63
|
const idleTimeout = (ms, signal) => {
|
|
62
64
|
const controller = new AbortController();
|
|
@@ -75,6 +77,13 @@ const idleTimeout = (ms, signal) => {
|
|
|
75
77
|
stop,
|
|
76
78
|
};
|
|
77
79
|
};
|
|
80
|
+
/**
|
|
81
|
+
* Client for the Bevor API, scoped to the workspace and project of `apiKey`.
|
|
82
|
+
*
|
|
83
|
+
* In an integration project, requests act on behalf of one of the project's users: send their ID
|
|
84
|
+
* in the `bevor-user-id` header, through `defaultHeaders` or any method's `headers`.
|
|
85
|
+
* `projects.get` and `projects.users.create` don't need it.
|
|
86
|
+
*/
|
|
78
87
|
export class BevorClient {
|
|
79
88
|
baseURL;
|
|
80
89
|
defaultHeaders;
|
|
@@ -106,7 +115,7 @@ export class BevorClient {
|
|
|
106
115
|
}
|
|
107
116
|
/**
|
|
108
117
|
* Sends a request and returns the parsed JSON body (`null` for empty responses).
|
|
109
|
-
* Throws a registered `
|
|
118
|
+
* Throws a registered `BevorError` subclass, or `BevorError`, for non-2xx responses.
|
|
110
119
|
*/
|
|
111
120
|
async request(method, path, init = {}) {
|
|
112
121
|
const deadline = AbortSignal.timeout(init.timeout ?? this.timeout);
|
|
@@ -139,16 +148,6 @@ export class BevorClient {
|
|
|
139
148
|
idle.stop();
|
|
140
149
|
}
|
|
141
150
|
}
|
|
142
|
-
/** GETs a paginated list; with `withPagination`, wraps it to fetch further pages. */
|
|
143
|
-
async paginate(path, query, options) {
|
|
144
|
-
const { withPagination, ...requestOptions } = options;
|
|
145
|
-
const fetchPage = (page) => this.request("GET", path, {
|
|
146
|
-
...requestOptions,
|
|
147
|
-
query: { ...query, page },
|
|
148
|
-
});
|
|
149
|
-
const first = await fetchPage(query?.page ?? 0);
|
|
150
|
-
return withPagination ? new PaginatedResource(first, fetchPage) : first;
|
|
151
|
-
}
|
|
152
151
|
#send(method, path, init, signal) {
|
|
153
152
|
const query = buildQuery(init.query).toString();
|
|
154
153
|
const url = `${this.baseURL}/${trimSlashes(path)}${query ? `?${query}` : ""}`;
|
|
@@ -165,6 +164,9 @@ export class BevorClient {
|
|
|
165
164
|
}
|
|
166
165
|
for (const [name, value] of Object.entries(init.headers ?? {}))
|
|
167
166
|
headers.set(name, value);
|
|
167
|
+
// unauthenticated means no credentials, whatever the defaults carry
|
|
168
|
+
if (init.authenticated === false)
|
|
169
|
+
headers.delete("Authorization");
|
|
168
170
|
return this.#fetch(url, { method, headers, body, signal });
|
|
169
171
|
}
|
|
170
172
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type
|
|
1
|
+
export type BevorErrorTypes = "auth.session_expired" | "auth.unauthorized" | "auth.unauthenticated" | "auth.payment_required" | "auth.invalid_permissions" | "auth.invalid_scope" | "error.bad_request" | "error.payload_too_large" | "error.not_found" | "error.plan_limit" | "error.invalid_state" | "error.integrity" | "error.database" | "error.validation" | "error.server" | "code.unsupported" | "code.conflict" | "app.rate_limit" | "payment.error" | "payment.failed";
|
|
2
2
|
/**
|
|
3
3
|
* A non-2xx response that carries no recognised Bevor error code
|
|
4
4
|
* (proxies, gateways, validation errors, unknown codes).
|
|
@@ -9,53 +9,61 @@ export declare class APIError extends Error {
|
|
|
9
9
|
constructor(status: number, body: string);
|
|
10
10
|
}
|
|
11
11
|
/** Base class for errors the API reports with a known `code`. */
|
|
12
|
-
export
|
|
13
|
-
|
|
12
|
+
export interface BevorErrorOptions {
|
|
13
|
+
requestId?: string | null;
|
|
14
|
+
extra?: Record<string, any>[];
|
|
15
|
+
}
|
|
16
|
+
/** Base class for errors the API reports with a known `code`. */
|
|
17
|
+
export declare abstract class BevorError extends Error {
|
|
18
|
+
abstract readonly code: BevorErrorTypes;
|
|
14
19
|
abstract readonly statusCode: number;
|
|
15
|
-
|
|
20
|
+
readonly requestId: string | null;
|
|
21
|
+
readonly extra: BevorErrorOptions[];
|
|
22
|
+
constructor(message?: string | null, options?: BevorErrorOptions);
|
|
16
23
|
get details(): {
|
|
17
24
|
message: string;
|
|
18
|
-
code:
|
|
25
|
+
code: BevorErrorTypes;
|
|
19
26
|
};
|
|
27
|
+
toString(): string;
|
|
20
28
|
}
|
|
21
29
|
/** Base class for all authentication/authorization errors. */
|
|
22
|
-
export declare abstract class
|
|
30
|
+
export declare abstract class AuthError extends BevorError {
|
|
23
31
|
}
|
|
24
32
|
/** Base class for all code-related errors. */
|
|
25
|
-
export declare abstract class
|
|
33
|
+
export declare abstract class CodeError extends BevorError {
|
|
26
34
|
}
|
|
27
35
|
/** Base class for all payment-related errors. */
|
|
28
|
-
export declare class
|
|
29
|
-
readonly code:
|
|
36
|
+
export declare class PaymentError extends BevorError {
|
|
37
|
+
readonly code: BevorErrorTypes;
|
|
30
38
|
readonly statusCode: number;
|
|
31
39
|
}
|
|
32
40
|
/** Too many requests. Retrying later succeeds. */
|
|
33
|
-
export declare class
|
|
41
|
+
export declare class RateLimitError extends BevorError {
|
|
34
42
|
readonly code = "app.rate_limit";
|
|
35
43
|
readonly statusCode = 429;
|
|
36
44
|
}
|
|
37
|
-
export declare class SessionExpiredError extends
|
|
45
|
+
export declare class SessionExpiredError extends AuthError {
|
|
38
46
|
readonly code = "auth.session_expired";
|
|
39
47
|
readonly statusCode = 401;
|
|
40
48
|
}
|
|
41
|
-
export declare class UnauthenticatedError extends
|
|
49
|
+
export declare class UnauthenticatedError extends AuthError {
|
|
42
50
|
readonly code = "auth.unauthenticated";
|
|
43
51
|
readonly statusCode = 401;
|
|
44
52
|
}
|
|
45
|
-
export declare class PaymentRequiredError extends
|
|
53
|
+
export declare class PaymentRequiredError extends AuthError {
|
|
46
54
|
readonly code = "auth.payment_required";
|
|
47
55
|
readonly statusCode = 402;
|
|
48
56
|
}
|
|
49
|
-
export declare class UnauthorizedError extends
|
|
57
|
+
export declare class UnauthorizedError extends AuthError {
|
|
50
58
|
readonly code = "auth.unauthorized";
|
|
51
59
|
readonly statusCode = 403;
|
|
52
60
|
}
|
|
53
61
|
/** Authenticated, but not allowed. Re-authenticating won't fix it. */
|
|
54
|
-
export declare class InvalidPermissionsError extends
|
|
62
|
+
export declare class InvalidPermissionsError extends AuthError {
|
|
55
63
|
readonly code = "auth.invalid_permissions";
|
|
56
64
|
readonly statusCode = 403;
|
|
57
65
|
}
|
|
58
|
-
export declare class InvalidScopeError extends
|
|
66
|
+
export declare class InvalidScopeError extends AuthError {
|
|
59
67
|
readonly code = "auth.invalid_scope";
|
|
60
68
|
readonly statusCode = 403;
|
|
61
69
|
}
|
|
@@ -63,12 +71,19 @@ export declare class InvalidScopeError extends AuthException {
|
|
|
63
71
|
* The request is wrong for this endpoint, regardless of any resource's state.
|
|
64
72
|
* e.g. a required header is missing, or the project kind doesn't support the route.
|
|
65
73
|
*/
|
|
66
|
-
export declare class
|
|
74
|
+
export declare class BadRequestError extends BevorError {
|
|
67
75
|
readonly code = "error.bad_request";
|
|
68
76
|
readonly statusCode = 400;
|
|
69
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* For endpoints that accept arbitrary bytes, primarly for folder uploads.
|
|
80
|
+
*/
|
|
81
|
+
export declare class PayloadTooLargeError extends BevorError {
|
|
82
|
+
readonly code = "error.payload_too_large";
|
|
83
|
+
readonly statusCode = 413;
|
|
84
|
+
}
|
|
70
85
|
/** Doesn't exist, was deleted, or isn't visible to the caller. */
|
|
71
|
-
export declare class NotFoundError extends
|
|
86
|
+
export declare class NotFoundError extends BevorError {
|
|
72
87
|
readonly code = "error.not_found";
|
|
73
88
|
readonly statusCode = 404;
|
|
74
89
|
}
|
|
@@ -76,34 +91,34 @@ export declare class NotFoundError extends BaseError {
|
|
|
76
91
|
* The resource's current state forbids the action. e.g. a pipeline is running,
|
|
77
92
|
* changes are staged, or it already exists.
|
|
78
93
|
*/
|
|
79
|
-
export declare class
|
|
94
|
+
export declare class InvalidStateError extends BevorError {
|
|
80
95
|
readonly code = "error.invalid_state";
|
|
81
96
|
readonly statusCode = 409;
|
|
82
97
|
}
|
|
83
98
|
/** Our failure, or an upstream service's. Retrying may succeed. */
|
|
84
|
-
export declare class
|
|
99
|
+
export declare class ServerError extends BevorError {
|
|
85
100
|
readonly code = "error.server";
|
|
86
101
|
readonly statusCode = 500;
|
|
87
102
|
}
|
|
88
103
|
/** A plan or usage limit was reached. Retrying won't help, upgrading will. */
|
|
89
|
-
export declare class
|
|
104
|
+
export declare class PlanLimitError extends BevorError {
|
|
90
105
|
readonly code = "error.plan_limit";
|
|
91
106
|
readonly statusCode = 402;
|
|
92
107
|
}
|
|
93
|
-
export declare class
|
|
108
|
+
export declare class CodeUnsupportedError extends CodeError {
|
|
94
109
|
readonly code = "code.unsupported";
|
|
95
110
|
readonly statusCode = 400;
|
|
96
111
|
}
|
|
97
|
-
export declare class
|
|
112
|
+
export declare class CodeConflictError extends CodeError {
|
|
98
113
|
readonly code = "code.conflict";
|
|
99
114
|
readonly statusCode = 409;
|
|
100
115
|
}
|
|
101
|
-
export declare class
|
|
102
|
-
readonly code:
|
|
116
|
+
export declare class PaymentFailedError extends PaymentError {
|
|
117
|
+
readonly code: BevorErrorTypes;
|
|
103
118
|
readonly statusCode: number;
|
|
104
119
|
}
|
|
105
|
-
type ErrorClass = new (message?: string | null) =>
|
|
120
|
+
type ErrorClass = new (message?: string | null, options?: BevorErrorOptions) => BevorError;
|
|
106
121
|
/** Used to reconstruct typed errors from HTTP error response bodies. */
|
|
107
|
-
export declare const ERROR_REGISTRY: Partial<Record<
|
|
122
|
+
export declare const ERROR_REGISTRY: Partial<Record<BevorErrorTypes, ErrorClass>>;
|
|
108
123
|
export {};
|
|
109
124
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.js
CHANGED
|
@@ -13,55 +13,63 @@ export class APIError extends Error {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
/** Base class for errors the API reports with a known `code`. */
|
|
16
|
-
export class
|
|
17
|
-
|
|
16
|
+
export class BevorError extends Error {
|
|
17
|
+
requestId;
|
|
18
|
+
extra;
|
|
19
|
+
constructor(message, options = {}) {
|
|
18
20
|
super(message ?? "");
|
|
19
21
|
this.name = new.target.name;
|
|
22
|
+
this.requestId = options.requestId ?? null;
|
|
23
|
+
this.extra = options.extra ?? [];
|
|
20
24
|
}
|
|
21
25
|
get details() {
|
|
22
26
|
return { message: this.message, code: this.code };
|
|
23
27
|
}
|
|
28
|
+
toString() {
|
|
29
|
+
const base = `${this.name}: ${this.message}`;
|
|
30
|
+
return this.requestId ? `${base} (request ID: ${this.requestId})` : base;
|
|
31
|
+
}
|
|
24
32
|
}
|
|
25
33
|
// base classes
|
|
26
34
|
/** Base class for all authentication/authorization errors. */
|
|
27
|
-
export class
|
|
35
|
+
export class AuthError extends BevorError {
|
|
28
36
|
}
|
|
29
37
|
/** Base class for all code-related errors. */
|
|
30
|
-
export class
|
|
38
|
+
export class CodeError extends BevorError {
|
|
31
39
|
}
|
|
32
40
|
/** Base class for all payment-related errors. */
|
|
33
|
-
export class
|
|
41
|
+
export class PaymentError extends BevorError {
|
|
34
42
|
code = "payment.error";
|
|
35
43
|
statusCode = 402;
|
|
36
44
|
}
|
|
37
45
|
/** Too many requests. Retrying later succeeds. */
|
|
38
|
-
export class
|
|
46
|
+
export class RateLimitError extends BevorError {
|
|
39
47
|
code = "app.rate_limit";
|
|
40
48
|
statusCode = 429;
|
|
41
49
|
}
|
|
42
50
|
// auth
|
|
43
|
-
export class SessionExpiredError extends
|
|
51
|
+
export class SessionExpiredError extends AuthError {
|
|
44
52
|
code = "auth.session_expired";
|
|
45
53
|
statusCode = 401;
|
|
46
54
|
}
|
|
47
|
-
export class UnauthenticatedError extends
|
|
55
|
+
export class UnauthenticatedError extends AuthError {
|
|
48
56
|
code = "auth.unauthenticated";
|
|
49
57
|
statusCode = 401;
|
|
50
58
|
}
|
|
51
|
-
export class PaymentRequiredError extends
|
|
59
|
+
export class PaymentRequiredError extends AuthError {
|
|
52
60
|
code = "auth.payment_required";
|
|
53
61
|
statusCode = 402;
|
|
54
62
|
}
|
|
55
|
-
export class UnauthorizedError extends
|
|
63
|
+
export class UnauthorizedError extends AuthError {
|
|
56
64
|
code = "auth.unauthorized";
|
|
57
65
|
statusCode = 403;
|
|
58
66
|
}
|
|
59
67
|
/** Authenticated, but not allowed. Re-authenticating won't fix it. */
|
|
60
|
-
export class InvalidPermissionsError extends
|
|
68
|
+
export class InvalidPermissionsError extends AuthError {
|
|
61
69
|
code = "auth.invalid_permissions";
|
|
62
70
|
statusCode = 403;
|
|
63
71
|
}
|
|
64
|
-
export class InvalidScopeError extends
|
|
72
|
+
export class InvalidScopeError extends AuthError {
|
|
65
73
|
code = "auth.invalid_scope";
|
|
66
74
|
statusCode = 403;
|
|
67
75
|
}
|
|
@@ -70,12 +78,19 @@ export class InvalidScopeError extends AuthException {
|
|
|
70
78
|
* The request is wrong for this endpoint, regardless of any resource's state.
|
|
71
79
|
* e.g. a required header is missing, or the project kind doesn't support the route.
|
|
72
80
|
*/
|
|
73
|
-
export class
|
|
81
|
+
export class BadRequestError extends BevorError {
|
|
74
82
|
code = "error.bad_request";
|
|
75
83
|
statusCode = 400;
|
|
76
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* For endpoints that accept arbitrary bytes, primarly for folder uploads.
|
|
87
|
+
*/
|
|
88
|
+
export class PayloadTooLargeError extends BevorError {
|
|
89
|
+
code = "error.payload_too_large";
|
|
90
|
+
statusCode = 413;
|
|
91
|
+
}
|
|
77
92
|
/** Doesn't exist, was deleted, or isn't visible to the caller. */
|
|
78
|
-
export class NotFoundError extends
|
|
93
|
+
export class NotFoundError extends BevorError {
|
|
79
94
|
code = "error.not_found";
|
|
80
95
|
statusCode = 404;
|
|
81
96
|
}
|
|
@@ -83,30 +98,30 @@ export class NotFoundError extends BaseError {
|
|
|
83
98
|
* The resource's current state forbids the action. e.g. a pipeline is running,
|
|
84
99
|
* changes are staged, or it already exists.
|
|
85
100
|
*/
|
|
86
|
-
export class
|
|
101
|
+
export class InvalidStateError extends BevorError {
|
|
87
102
|
code = "error.invalid_state";
|
|
88
103
|
statusCode = 409;
|
|
89
104
|
}
|
|
90
105
|
/** Our failure, or an upstream service's. Retrying may succeed. */
|
|
91
|
-
export class
|
|
106
|
+
export class ServerError extends BevorError {
|
|
92
107
|
code = "error.server";
|
|
93
108
|
statusCode = 500;
|
|
94
109
|
}
|
|
95
110
|
/** A plan or usage limit was reached. Retrying won't help, upgrading will. */
|
|
96
|
-
export class
|
|
111
|
+
export class PlanLimitError extends BevorError {
|
|
97
112
|
code = "error.plan_limit";
|
|
98
113
|
statusCode = 402;
|
|
99
114
|
}
|
|
100
115
|
// domain
|
|
101
|
-
export class
|
|
116
|
+
export class CodeUnsupportedError extends CodeError {
|
|
102
117
|
code = "code.unsupported";
|
|
103
118
|
statusCode = 400;
|
|
104
119
|
}
|
|
105
|
-
export class
|
|
120
|
+
export class CodeConflictError extends CodeError {
|
|
106
121
|
code = "code.conflict";
|
|
107
122
|
statusCode = 409;
|
|
108
123
|
}
|
|
109
|
-
export class
|
|
124
|
+
export class PaymentFailedError extends PaymentError {
|
|
110
125
|
code = "payment.failed";
|
|
111
126
|
statusCode = 402;
|
|
112
127
|
}
|
|
@@ -118,15 +133,16 @@ export const ERROR_REGISTRY = {
|
|
|
118
133
|
"auth.payment_required": PaymentRequiredError,
|
|
119
134
|
"auth.invalid_permissions": InvalidPermissionsError,
|
|
120
135
|
"auth.invalid_scope": InvalidScopeError,
|
|
121
|
-
"error.bad_request":
|
|
136
|
+
"error.bad_request": BadRequestError,
|
|
137
|
+
"error.payload_too_large": PayloadTooLargeError,
|
|
122
138
|
"error.not_found": NotFoundError,
|
|
123
|
-
"error.plan_limit":
|
|
124
|
-
"error.invalid_state":
|
|
125
|
-
"error.server":
|
|
126
|
-
"app.rate_limit":
|
|
127
|
-
"payment.error":
|
|
128
|
-
"payment.failed":
|
|
129
|
-
"code.unsupported":
|
|
130
|
-
"code.conflict":
|
|
139
|
+
"error.plan_limit": PlanLimitError,
|
|
140
|
+
"error.invalid_state": InvalidStateError,
|
|
141
|
+
"error.server": ServerError,
|
|
142
|
+
"app.rate_limit": RateLimitError,
|
|
143
|
+
"payment.error": PaymentError,
|
|
144
|
+
"payment.failed": PaymentFailedError,
|
|
145
|
+
"code.unsupported": CodeUnsupportedError,
|
|
146
|
+
"code.conflict": CodeConflictError,
|
|
131
147
|
};
|
|
132
148
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|