@nvisy/sdk 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.
- package/CHANGELOG.md +49 -0
- package/CONTRIBUTING.md +72 -0
- package/LICENSE.txt +21 -0
- package/README.md +108 -0
- package/dist/builder-BEUIGfoZ.d.ts +138 -0
- package/dist/builder.d.ts +2 -0
- package/dist/builder.js +424 -0
- package/dist/builder.js.map +1 -0
- package/dist/client.d.ts +2 -0
- package/dist/client.js +424 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +124 -0
- package/dist/errors.js +201 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +555 -0
- package/dist/index.js.map +1 -0
- package/package.json +92 -0
package/dist/errors.js
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// src/errors.ts
|
|
2
|
+
var ClientError = class extends Error {
|
|
3
|
+
name;
|
|
4
|
+
constructor(message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = this.constructor.name;
|
|
7
|
+
if (Error.captureStackTrace) {
|
|
8
|
+
Error.captureStackTrace(this, this.constructor);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Convert error to JSON representation
|
|
13
|
+
*/
|
|
14
|
+
toJSON() {
|
|
15
|
+
return {
|
|
16
|
+
name: this.name,
|
|
17
|
+
message: this.message,
|
|
18
|
+
context: ""
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
var ConfigError = class _ConfigError extends ClientError {
|
|
23
|
+
/** Field that caused the error (for validation errors) */
|
|
24
|
+
field;
|
|
25
|
+
/** Reason why the configuration is invalid */
|
|
26
|
+
reason;
|
|
27
|
+
constructor(message, options) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.field = options?.field;
|
|
30
|
+
this.reason = options?.reason;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create error for missing API key
|
|
34
|
+
*/
|
|
35
|
+
static missingApiKey() {
|
|
36
|
+
return new _ConfigError("API key is required", {
|
|
37
|
+
field: "apiKey",
|
|
38
|
+
reason: "API key must be provided in configuration"
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create error for invalid configuration field
|
|
43
|
+
*/
|
|
44
|
+
static invalidField(field, reason) {
|
|
45
|
+
return new _ConfigError(`Invalid configuration for ${field}: ${reason}`, {
|
|
46
|
+
field,
|
|
47
|
+
reason
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create error for missing required field
|
|
52
|
+
*/
|
|
53
|
+
static missingField(field) {
|
|
54
|
+
return new _ConfigError(`Missing required configuration field: ${field}`, {
|
|
55
|
+
field,
|
|
56
|
+
reason: "This field is required"
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Convert error to JSON representation
|
|
61
|
+
*/
|
|
62
|
+
toJSON() {
|
|
63
|
+
return {
|
|
64
|
+
name: this.name,
|
|
65
|
+
message: this.message,
|
|
66
|
+
context: this.field || this.reason ? `field: ${this.field}, reason: ${this.reason}` : ""
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
var NetworkError = class _NetworkError extends ClientError {
|
|
71
|
+
/** Original error that caused this network error */
|
|
72
|
+
cause;
|
|
73
|
+
constructor(message, cause) {
|
|
74
|
+
super(message);
|
|
75
|
+
this.cause = cause;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create error for network/connection issues
|
|
79
|
+
*/
|
|
80
|
+
static connection(message, cause) {
|
|
81
|
+
return new _NetworkError(message, cause);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Create error for request timeout
|
|
85
|
+
*/
|
|
86
|
+
static timeout(timeoutMs) {
|
|
87
|
+
return new _NetworkError(`Request timed out after ${timeoutMs}ms`);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create error for aborted request
|
|
91
|
+
*/
|
|
92
|
+
static aborted() {
|
|
93
|
+
return new _NetworkError("Request was aborted");
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create error for DNS resolution failure
|
|
97
|
+
*/
|
|
98
|
+
static dnsResolution(hostname) {
|
|
99
|
+
return new _NetworkError(`Failed to resolve hostname: ${hostname}`);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Convert error to JSON representation
|
|
103
|
+
*/
|
|
104
|
+
toJSON() {
|
|
105
|
+
return {
|
|
106
|
+
name: this.name,
|
|
107
|
+
message: this.message,
|
|
108
|
+
context: this.cause ? `cause: ${this.cause.message}` : ""
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
var ApiError = class _ApiError extends ClientError {
|
|
113
|
+
/** Error response from server */
|
|
114
|
+
errorResponse;
|
|
115
|
+
/** HTTP status code */
|
|
116
|
+
statusCode;
|
|
117
|
+
/** Request ID for debugging */
|
|
118
|
+
requestId;
|
|
119
|
+
constructor(message, statusCode, options) {
|
|
120
|
+
super(message);
|
|
121
|
+
this.statusCode = statusCode;
|
|
122
|
+
this.errorResponse = options?.errorResponse;
|
|
123
|
+
this.requestId = options?.requestId;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create error from HTTP response
|
|
127
|
+
*/
|
|
128
|
+
static fromResponse(response, errorData, requestId) {
|
|
129
|
+
const message = errorData?.message || `HTTP ${response.status}: ${response.statusText}`;
|
|
130
|
+
return new _ApiError(message, response.status, {
|
|
131
|
+
errorResponse: errorData,
|
|
132
|
+
requestId
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Create error for rate limiting
|
|
137
|
+
*/
|
|
138
|
+
static rateLimited(retryAfter, requestId) {
|
|
139
|
+
const message = retryAfter ? `Rate limited. Retry after ${retryAfter} seconds` : "Rate limited";
|
|
140
|
+
return new _ApiError(message, 429, {
|
|
141
|
+
requestId,
|
|
142
|
+
errorResponse: {
|
|
143
|
+
name: "RateLimitError",
|
|
144
|
+
message,
|
|
145
|
+
context: retryAfter ? `retryAfter: ${retryAfter}` : ""
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Check if error is a client error (4xx)
|
|
151
|
+
*/
|
|
152
|
+
isClientError() {
|
|
153
|
+
return this.statusCode ? this.statusCode >= 400 && this.statusCode < 500 : false;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Check if error is a server error (5xx)
|
|
157
|
+
*/
|
|
158
|
+
isServerError() {
|
|
159
|
+
return this.statusCode ? this.statusCode >= 500 : false;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Check if error is retryable based on HTTP status
|
|
163
|
+
*/
|
|
164
|
+
isRetryable() {
|
|
165
|
+
if (!this.statusCode) return false;
|
|
166
|
+
return this.statusCode >= 500 || // Server errors
|
|
167
|
+
this.statusCode === 408 || // Request timeout
|
|
168
|
+
this.statusCode === 429;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get retry delay in milliseconds (returns null if not retryable)
|
|
172
|
+
*/
|
|
173
|
+
getRetryDelay() {
|
|
174
|
+
if (!this.isRetryable()) return null;
|
|
175
|
+
if (this.statusCode === 429 && this.errorResponse?.context) {
|
|
176
|
+
const match = this.errorResponse.context.match(/retryAfter: (\d+)/);
|
|
177
|
+
if (match) {
|
|
178
|
+
const retryAfter = parseInt(match[1], 10);
|
|
179
|
+
return retryAfter * 1e3;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (this.statusCode >= 500) {
|
|
183
|
+
return 1e3;
|
|
184
|
+
}
|
|
185
|
+
return 1e3;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Convert error to JSON representation
|
|
189
|
+
*/
|
|
190
|
+
toJSON() {
|
|
191
|
+
return {
|
|
192
|
+
name: this.name,
|
|
193
|
+
message: this.message,
|
|
194
|
+
context: `statusCode: ${this.statusCode}${this.requestId ? `, requestId: ${this.requestId}` : ""}${this.errorResponse ? `, errorResponse: ${JSON.stringify(this.errorResponse)}` : ""}`
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
export { ApiError, ClientError, ConfigError, NetworkError };
|
|
200
|
+
//# sourceMappingURL=errors.js.map
|
|
201
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts"],"names":[],"mappings":"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","file":"errors.js","sourcesContent":["/**\n * Error response structure from server\n */\nexport interface ErrorResponse {\n\t/** Error type/name */\n\tname: string;\n\t/** Human-readable error message */\n\tmessage: string;\n\t/** Additional error context */\n\tcontext: string;\n}\n\n/**\n * Abstract base error class for all Nvisy SDK errors\n */\nexport abstract class ClientError extends Error {\n\tpublic readonly name: string;\n\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = this.constructor.name;\n\n\t\t// Maintains proper stack trace for where our error was thrown (only available on V8)\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, this.constructor);\n\t\t}\n\t}\n\n\t/**\n\t * Convert error to JSON representation\n\t */\n\ttoJSON(): ErrorResponse {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tcontext: \"\",\n\t\t};\n\t}\n}\n\n/**\n * Configuration error - thrown when client configuration is invalid\n */\nexport class ConfigError extends ClientError {\n\t/** Field that caused the error (for validation errors) */\n\tpublic readonly field?: string;\n\t/** Reason why the configuration is invalid */\n\tpublic readonly reason?: string;\n\n\tconstructor(\n\t\tmessage: string,\n\t\toptions?: {\n\t\t\tfield?: string;\n\t\t\treason?: string;\n\t\t},\n\t) {\n\t\tsuper(message);\n\t\tthis.field = options?.field;\n\t\tthis.reason = options?.reason;\n\t}\n\n\t/**\n\t * Create error for missing API key\n\t */\n\tstatic missingApiKey(): ConfigError {\n\t\treturn new ConfigError(\"API key is required\", {\n\t\t\tfield: \"apiKey\",\n\t\t\treason: \"API key must be provided in configuration\",\n\t\t});\n\t}\n\n\t/**\n\t * Create error for invalid configuration field\n\t */\n\tstatic invalidField(field: string, reason: string): ConfigError {\n\t\treturn new ConfigError(`Invalid configuration for ${field}: ${reason}`, {\n\t\t\tfield,\n\t\t\treason,\n\t\t});\n\t}\n\n\t/**\n\t * Create error for missing required field\n\t */\n\tstatic missingField(field: string): ConfigError {\n\t\treturn new ConfigError(`Missing required configuration field: ${field}`, {\n\t\t\tfield,\n\t\t\treason: \"This field is required\",\n\t\t});\n\t}\n\n\t/**\n\t * Convert error to JSON representation\n\t */\n\ttoJSON(): ErrorResponse {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tcontext:\n\t\t\t\tthis.field || this.reason\n\t\t\t\t\t? `field: ${this.field}, reason: ${this.reason}`\n\t\t\t\t\t: \"\",\n\t\t};\n\t}\n}\n\n/**\n * Network error - thrown when network requests fail\n */\nexport class NetworkError extends ClientError {\n\t/** Original error that caused this network error */\n\tpublic readonly cause?: Error;\n\n\tconstructor(message: string, cause?: Error) {\n\t\tsuper(message);\n\t\tthis.cause = cause;\n\t}\n\n\t/**\n\t * Create error for network/connection issues\n\t */\n\tstatic connection(message: string, cause?: Error): NetworkError {\n\t\treturn new NetworkError(message, cause);\n\t}\n\n\t/**\n\t * Create error for request timeout\n\t */\n\tstatic timeout(timeoutMs: number): NetworkError {\n\t\treturn new NetworkError(`Request timed out after ${timeoutMs}ms`);\n\t}\n\n\t/**\n\t * Create error for aborted request\n\t */\n\tstatic aborted(): NetworkError {\n\t\treturn new NetworkError(\"Request was aborted\");\n\t}\n\n\t/**\n\t * Create error for DNS resolution failure\n\t */\n\tstatic dnsResolution(hostname: string): NetworkError {\n\t\treturn new NetworkError(`Failed to resolve hostname: ${hostname}`);\n\t}\n\n\t/**\n\t * Convert error to JSON representation\n\t */\n\ttoJSON(): ErrorResponse {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tcontext: this.cause ? `cause: ${this.cause.message}` : \"\",\n\t\t};\n\t}\n}\n\n/**\n * API error - thrown when server responds with an error\n */\nexport class ApiError extends ClientError {\n\t/** Error response from server */\n\tpublic readonly errorResponse?: ErrorResponse;\n\t/** HTTP status code */\n\tpublic readonly statusCode: number;\n\t/** Request ID for debugging */\n\tpublic readonly requestId?: string;\n\n\tconstructor(\n\t\tmessage: string,\n\t\tstatusCode: number,\n\t\toptions?: {\n\t\t\terrorResponse?: ErrorResponse;\n\t\t\trequestId?: string;\n\t\t},\n\t) {\n\t\tsuper(message);\n\t\tthis.statusCode = statusCode;\n\t\tthis.errorResponse = options?.errorResponse;\n\t\tthis.requestId = options?.requestId;\n\t}\n\n\t/**\n\t * Create error from HTTP response\n\t */\n\tstatic fromResponse(\n\t\tresponse: Response,\n\t\terrorData?: ErrorResponse,\n\t\trequestId?: string,\n\t): ApiError {\n\t\tconst message =\n\t\t\terrorData?.message || `HTTP ${response.status}: ${response.statusText}`;\n\n\t\treturn new ApiError(message, response.status, {\n\t\t\terrorResponse: errorData,\n\t\t\trequestId,\n\t\t});\n\t}\n\n\t/**\n\t * Create error for rate limiting\n\t */\n\tstatic rateLimited(retryAfter?: number, requestId?: string): ApiError {\n\t\tconst message = retryAfter\n\t\t\t? `Rate limited. Retry after ${retryAfter} seconds`\n\t\t\t: \"Rate limited\";\n\n\t\treturn new ApiError(message, 429, {\n\t\t\trequestId,\n\t\t\terrorResponse: {\n\t\t\t\tname: \"RateLimitError\",\n\t\t\t\tmessage,\n\t\t\t\tcontext: retryAfter ? `retryAfter: ${retryAfter}` : \"\",\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Check if error is a client error (4xx)\n\t */\n\tisClientError(): boolean {\n\t\treturn this.statusCode\n\t\t\t? this.statusCode >= 400 && this.statusCode < 500\n\t\t\t: false;\n\t}\n\n\t/**\n\t * Check if error is a server error (5xx)\n\t */\n\tisServerError(): boolean {\n\t\treturn this.statusCode ? this.statusCode >= 500 : false;\n\t}\n\n\t/**\n\t * Check if error is retryable based on HTTP status\n\t */\n\tisRetryable(): boolean {\n\t\tif (!this.statusCode) return false;\n\n\t\t// Retry on server errors and specific client errors\n\t\treturn (\n\t\t\tthis.statusCode >= 500 || // Server errors\n\t\t\tthis.statusCode === 408 || // Request timeout\n\t\t\tthis.statusCode === 429 // Rate limited\n\t\t);\n\t}\n\n\t/**\n\t * Get retry delay in milliseconds (returns null if not retryable)\n\t */\n\tgetRetryDelay(): number | null {\n\t\tif (!this.isRetryable()) return null;\n\n\t\t// For rate limiting, check if we have retry-after info\n\t\tif (this.statusCode === 429 && this.errorResponse?.context) {\n\t\t\tconst match = this.errorResponse.context.match(/retryAfter: (\\d+)/);\n\t\t\tif (match) {\n\t\t\t\tconst retryAfter = parseInt(match[1], 10);\n\t\t\t\treturn retryAfter * 1000; // Convert seconds to milliseconds\n\t\t\t}\n\t\t}\n\n\t\t// Default delays based on error type\n\t\tif (this.statusCode >= 500) {\n\t\t\treturn 1000; // 1 second for server errors\n\t\t}\n\n\t\treturn 1000; // Default 1 second\n\t}\n\n\t/**\n\t * Convert error to JSON representation\n\t */\n\ttoJSON(): ErrorResponse {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tcontext: `statusCode: ${this.statusCode}${\n\t\t\t\tthis.requestId ? `, requestId: ${this.requestId}` : \"\"\n\t\t\t}${\n\t\t\t\tthis.errorResponse\n\t\t\t\t\t? `, errorResponse: ${JSON.stringify(this.errorResponse)}`\n\t\t\t\t\t: \"\"\n\t\t\t}`,\n\t\t};\n\t}\n}\n"]}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { a as Client, C as ClientBuilder, b as ClientConfig, R as ResolvedClientConfig, g as getEnvironmentVariables, l as loadConfigFromEnv, r as resolveConfig } from './builder-BEUIGfoZ.js';
|
|
2
|
+
export { ApiError, ClientError, ConfigError, ErrorResponse, NetworkError } from './errors.js';
|
|
3
|
+
import 'openapi-fetch';
|