@qverisai/sdk 0.2.0 → 0.3.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 +33 -0
- package/LICENSE +1 -1
- package/README.md +36 -0
- package/dist/client.d.ts +10 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +108 -67
- package/dist/client.js.map +1 -1
- package/dist/integrations/ai.d.ts +768 -0
- package/dist/integrations/ai.d.ts.map +1 -0
- package/dist/integrations/ai.js +87 -0
- package/dist/integrations/ai.js.map +1 -0
- package/dist/retry.d.ts +42 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +63 -0
- package/dist/retry.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +22 -3
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@qverisai/sdk` are documented here.
|
|
4
|
+
|
|
5
|
+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow [Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.3.0] - 2026-07-09
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Vercel AI SDK adapter: `getQverisTools(qveris)` from `@qverisai/sdk/ai` returns `qveris_discover` / `qveris_inspect` / `qveris_call` tools for `generateText`/`streamText` (`ai` and `zod` as optional peer dependencies). ([#134])
|
|
14
|
+
- Rate-limited (`429`) and transient (`503`) responses are retried automatically: honors `Retry-After`, otherwise exponential backoff with jitter, bounded by the `maxRetries` config option (default 3; `0` disables); `rateLimitRetryCount` exposes the backoff. ([#143])
|
|
15
|
+
|
|
16
|
+
## [0.2.0] - 2026-07-06
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- First release of the typed QVeris REST client: `discover` / `inspect` / `call` / `credits` / `usage` / `ledger`, zero dependencies (native fetch, Node 18+). ([#106])
|
|
21
|
+
- Wire semantics aligned with the Python SDK and MCP server: success-envelope unwrapping, region auto-detection from the key prefix, structured `QverisApiError` with observability context.
|
|
22
|
+
- Response types cover category objects, capability descriptors, `why_recommended`, and `expected_cost`.
|
|
23
|
+
|
|
24
|
+
### Note
|
|
25
|
+
|
|
26
|
+
- `0.1.x` under this npm name was an early MCP-focused SDK, superseded by `@qverisai/mcp`.
|
|
27
|
+
|
|
28
|
+
[Unreleased]: https://github.com/QVerisAI/qveris-agent-toolkit/compare/js-sdk-v0.3.0...HEAD
|
|
29
|
+
[0.3.0]: https://github.com/QVerisAI/qveris-agent-toolkit/compare/js-sdk-v0.2.0...js-sdk-v0.3.0
|
|
30
|
+
[0.2.0]: https://github.com/QVerisAI/qveris-agent-toolkit/releases/tag/js-sdk-v0.2.0
|
|
31
|
+
[#143]: https://github.com/QVerisAI/qveris-agent-toolkit/pull/143
|
|
32
|
+
[#134]: https://github.com/QVerisAI/qveris-agent-toolkit/pull/134
|
|
33
|
+
[#106]: https://github.com/QVerisAI/qveris-agent-toolkit/issues/106
|
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -60,6 +60,19 @@ const credits = await qveris.credits();
|
|
|
60
60
|
| `baseUrl` / `QVERIS_BASE_URL` | Override API base URL (highest priority) |
|
|
61
61
|
| `QVERIS_REGION` | Force region: `global` or `cn`. Otherwise auto-detected from the key prefix (`sk-cn-…` → China) |
|
|
62
62
|
| `timeoutMs` | Default request timeout (30s; `call` defaults to 120s) |
|
|
63
|
+
| `maxRetries` | Retries for rate-limited (429) / transient (503) responses (default 3; `0` disables) |
|
|
64
|
+
|
|
65
|
+
## Rate limiting & retries
|
|
66
|
+
|
|
67
|
+
The client transparently retries rate-limited (`429`) and transient (`503`) responses: it honors the `Retry-After` header when present, otherwise backs off exponentially with full jitter. Each wait is capped and retries are bounded by `maxRetries`, so a call never hangs.
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
const qveris = new Qveris({ apiKey: process.env.QVERIS_API_KEY!, maxRetries: 5 });
|
|
71
|
+
// ... after some calls under load:
|
|
72
|
+
qveris.rateLimitRetryCount; // how many times it backed off (pressure, not failures)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Set `maxRetries: 0` to disable. Rate-limit backoff is retried pressure rather than failure — read `rateLimitRetryCount` to observe it instead of treating the retried `429`s as errors.
|
|
63
76
|
|
|
64
77
|
## Errors
|
|
65
78
|
|
|
@@ -77,6 +90,29 @@ try {
|
|
|
77
90
|
}
|
|
78
91
|
```
|
|
79
92
|
|
|
93
|
+
## Framework integrations
|
|
94
|
+
|
|
95
|
+
Expose the QVeris workflow as [Vercel AI SDK](https://sdk.vercel.ai) tools. `ai` and `zod` are peer dependencies:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
npm install @qverisai/sdk ai zod
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
import { generateText } from 'ai';
|
|
103
|
+
import { openai } from '@ai-sdk/openai';
|
|
104
|
+
import { Qveris } from '@qverisai/sdk';
|
|
105
|
+
import { getQverisTools } from '@qverisai/sdk/ai';
|
|
106
|
+
|
|
107
|
+
const qveris = new Qveris({ apiKey: process.env.QVERIS_API_KEY! });
|
|
108
|
+
const { text } = await generateText({
|
|
109
|
+
model: openai('gpt-4o'),
|
|
110
|
+
tools: getQverisTools(qveris), // qveris_discover / qveris_inspect / qveris_call
|
|
111
|
+
maxSteps: 6,
|
|
112
|
+
prompt: 'Find a stock quote capability and quote AAPL.',
|
|
113
|
+
});
|
|
114
|
+
```
|
|
115
|
+
|
|
80
116
|
## Version history note
|
|
81
117
|
|
|
82
118
|
Versions `0.1.x` of this npm package were an early MCP-focused SDK, since superseded by [`@qverisai/mcp`](https://www.npmjs.com/package/@qverisai/mcp). The typed REST client documented here starts at **`0.2.0`**.
|
package/dist/client.d.ts
CHANGED
|
@@ -64,7 +64,17 @@ export declare class Qveris {
|
|
|
64
64
|
private readonly apiKey;
|
|
65
65
|
private readonly baseUrl;
|
|
66
66
|
private readonly defaultTimeoutMs;
|
|
67
|
+
private readonly maxRetries;
|
|
68
|
+
private rateLimitRetries;
|
|
67
69
|
constructor(config: QverisClientConfig);
|
|
70
|
+
/**
|
|
71
|
+
* How many times the client has backed off on a rate-limited (429) /
|
|
72
|
+
* transient (503) response so far. Rate-limit backoff is retried pressure,
|
|
73
|
+
* not failure — observe this rather than counting the retried responses.
|
|
74
|
+
*/
|
|
75
|
+
get rateLimitRetryCount(): number;
|
|
76
|
+
/** Sleep for `ms` (a seam so tests can stub out the wait). */
|
|
77
|
+
private sleep;
|
|
68
78
|
/**
|
|
69
79
|
* Create a client from the QVERIS_API_KEY environment variable.
|
|
70
80
|
* Region is auto-detected from the key prefix (sk-cn-xxx -> cn), or
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,OAAO,KAAK,EAEV,QAAQ,EAGR,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAoCpB,2CAA2C;AAC3C,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,0CAA0C;AAC1C,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mFAAmF;IACnF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,gBAAgB,CAAK;gBAEjB,MAAM,EAAE,kBAAkB;IActC;;;;OAIG;IACH,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,8DAA8D;YAChD,KAAK;IAKnB;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,MAAM;IAYtE;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAcrF;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,cAAc,CAAC;IAkBhG;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAiB1E,qDAAqD;IAC/C,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAIzC,+CAA+C;IACzC,KAAK,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAW5E,0CAA0C;IACpC,MAAM,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAWhF;;OAEG;YACW,OAAO;IA2IrB;;;;OAIG;IACH,OAAO,CAAC,cAAc;CAqBvB;AAkCD,YAAY,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/client.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* @module client
|
|
12
12
|
*/
|
|
13
13
|
import { QverisApiError } from './errors.js';
|
|
14
|
+
import { computeRetryDelayMs, DEFAULT_BASE_DELAY_MS, DEFAULT_MAX_DELAY_MS, parseRetryAfterMs, resolveMaxRetries, RETRYABLE_STATUS, } from './retry.js';
|
|
14
15
|
/** Region-specific API base URLs */
|
|
15
16
|
const REGION_URLS = {
|
|
16
17
|
global: 'https://qveris.ai/api/v1',
|
|
@@ -65,6 +66,8 @@ export class Qveris {
|
|
|
65
66
|
apiKey;
|
|
66
67
|
baseUrl;
|
|
67
68
|
defaultTimeoutMs;
|
|
69
|
+
maxRetries;
|
|
70
|
+
rateLimitRetries = 0;
|
|
68
71
|
constructor(config) {
|
|
69
72
|
if (!config.apiKey) {
|
|
70
73
|
throw new Error('QVeris API key is required.\n' +
|
|
@@ -74,6 +77,21 @@ export class Qveris {
|
|
|
74
77
|
this.apiKey = config.apiKey;
|
|
75
78
|
this.baseUrl = resolveBaseUrl(config.apiKey, config.baseUrl);
|
|
76
79
|
this.defaultTimeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
80
|
+
this.maxRetries = resolveMaxRetries(config.maxRetries);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* How many times the client has backed off on a rate-limited (429) /
|
|
84
|
+
* transient (503) response so far. Rate-limit backoff is retried pressure,
|
|
85
|
+
* not failure — observe this rather than counting the retried responses.
|
|
86
|
+
*/
|
|
87
|
+
get rateLimitRetryCount() {
|
|
88
|
+
return this.rateLimitRetries;
|
|
89
|
+
}
|
|
90
|
+
/** Sleep for `ms` (a seam so tests can stub out the wait). */
|
|
91
|
+
async sleep(ms) {
|
|
92
|
+
if (ms <= 0)
|
|
93
|
+
return;
|
|
94
|
+
await new Promise((resolve) => setTimeout(resolve, ms));
|
|
77
95
|
}
|
|
78
96
|
/**
|
|
79
97
|
* Create a client from the QVERIS_API_KEY environment variable.
|
|
@@ -152,7 +170,6 @@ export class Qveris {
|
|
|
152
170
|
}
|
|
153
171
|
}
|
|
154
172
|
}
|
|
155
|
-
const controller = new AbortController();
|
|
156
173
|
const resolvedTimeoutMs = timeoutMs ?? this.defaultTimeoutMs;
|
|
157
174
|
const queryParams = Object.fromEntries(url.searchParams.entries());
|
|
158
175
|
const requestContext = {
|
|
@@ -164,80 +181,104 @@ export class Qveris {
|
|
|
164
181
|
...(Object.keys(queryParams).length > 0 && { query_params: queryParams }),
|
|
165
182
|
timeout_ms: resolvedTimeoutMs,
|
|
166
183
|
};
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
184
|
+
// Retry rate-limited (429) / transient (503) responses: honor Retry-After,
|
|
185
|
+
// otherwise exponential backoff with jitter, bounded by maxRetries. Each
|
|
186
|
+
// attempt is a fresh fetch with its own timeout.
|
|
187
|
+
for (let attempt = 0;; attempt++) {
|
|
188
|
+
const controller = new AbortController();
|
|
189
|
+
const timeout = setTimeout(() => controller.abort(), resolvedTimeoutMs);
|
|
190
|
+
let retryDelayMs = null;
|
|
191
|
+
try {
|
|
192
|
+
const response = await fetch(url.toString(), {
|
|
193
|
+
method,
|
|
194
|
+
headers: {
|
|
195
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
196
|
+
'Content-Type': 'application/json',
|
|
197
|
+
},
|
|
198
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
199
|
+
signal: controller.signal,
|
|
200
|
+
});
|
|
201
|
+
if (RETRYABLE_STATUS.has(response.status) && attempt < this.maxRetries) {
|
|
202
|
+
retryDelayMs = computeRetryDelayMs({
|
|
203
|
+
retryAfterMs: parseRetryAfterMs(response.headers.get('retry-after')),
|
|
204
|
+
attempt,
|
|
205
|
+
baseDelayMs: DEFAULT_BASE_DELAY_MS,
|
|
206
|
+
maxDelayMs: DEFAULT_MAX_DELAY_MS,
|
|
207
|
+
});
|
|
208
|
+
// Discard the body so the connection is released before we retry.
|
|
209
|
+
// (`.cancel?.()` so a body without cancel — e.g. a test double —
|
|
210
|
+
// can't throw here and mask the rate-limit as a network error.)
|
|
211
|
+
await response.body?.cancel?.().catch(() => undefined);
|
|
212
|
+
this.rateLimitRetries++;
|
|
190
213
|
}
|
|
191
|
-
|
|
192
|
-
|
|
214
|
+
else if (!response.ok) {
|
|
215
|
+
const status = response.status;
|
|
216
|
+
let errorMessage;
|
|
217
|
+
let errorDetails;
|
|
218
|
+
try {
|
|
219
|
+
const errorBody = (await response.json());
|
|
220
|
+
errorMessage =
|
|
221
|
+
errorBody.error_message ||
|
|
222
|
+
errorBody.message ||
|
|
223
|
+
errorBody.error ||
|
|
224
|
+
response.statusText;
|
|
225
|
+
errorDetails = errorBody;
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
errorMessage = response.statusText || `HTTP ${status}`;
|
|
229
|
+
}
|
|
230
|
+
if (status === 402) {
|
|
231
|
+
const pricingHost = this.baseUrl.includes('qveris.cn')
|
|
232
|
+
? 'https://qveris.cn'
|
|
233
|
+
: 'https://qveris.ai';
|
|
234
|
+
errorMessage = `Insufficient credits. ${errorMessage}. Purchase credits at ${pricingHost}/pricing`;
|
|
235
|
+
}
|
|
236
|
+
throw new QverisApiError({
|
|
237
|
+
status,
|
|
238
|
+
message: errorMessage,
|
|
239
|
+
...(errorDetails !== undefined && { details: errorDetails }),
|
|
240
|
+
observability: withErrorContext(requestContext, 'http_error', status, extractRequestId(response)),
|
|
241
|
+
});
|
|
193
242
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
243
|
+
else {
|
|
244
|
+
let payload;
|
|
245
|
+
try {
|
|
246
|
+
payload = await response.json();
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
throw new QverisApiError({
|
|
250
|
+
status: response.status,
|
|
251
|
+
message: 'Invalid or empty JSON response from API',
|
|
252
|
+
observability: withErrorContext(requestContext, 'invalid_json', response.status, extractRequestId(response)),
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
return this.unwrapEnvelope(payload, requestContext);
|
|
199
256
|
}
|
|
200
|
-
throw new QverisApiError({
|
|
201
|
-
status,
|
|
202
|
-
message: errorMessage,
|
|
203
|
-
...(errorDetails !== undefined && { details: errorDetails }),
|
|
204
|
-
observability: withErrorContext(requestContext, 'http_error', status, extractRequestId(response)),
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
let payload;
|
|
208
|
-
try {
|
|
209
|
-
payload = await response.json();
|
|
210
257
|
}
|
|
211
|
-
catch {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
if (err instanceof Error && err.name === 'AbortError') {
|
|
258
|
+
catch (err) {
|
|
259
|
+
if (err instanceof QverisApiError) {
|
|
260
|
+
throw err;
|
|
261
|
+
}
|
|
262
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
263
|
+
throw new QverisApiError({
|
|
264
|
+
status: 408,
|
|
265
|
+
message: 'Request timed out. Check connectivity or increase timeout.',
|
|
266
|
+
observability: withErrorContext(requestContext, 'timeout', 0),
|
|
267
|
+
...(errorCause(err) && { cause: errorCause(err) }),
|
|
268
|
+
});
|
|
269
|
+
}
|
|
225
270
|
throw new QverisApiError({
|
|
226
|
-
status:
|
|
227
|
-
message:
|
|
228
|
-
observability: withErrorContext(requestContext, '
|
|
271
|
+
status: 0,
|
|
272
|
+
message: err instanceof Error && err.message ? err.message : 'Network request failed',
|
|
273
|
+
observability: withErrorContext(requestContext, 'network_error', 0),
|
|
229
274
|
...(errorCause(err) && { cause: errorCause(err) }),
|
|
230
275
|
});
|
|
231
276
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
finally {
|
|
240
|
-
clearTimeout(timeout);
|
|
277
|
+
finally {
|
|
278
|
+
clearTimeout(timeout);
|
|
279
|
+
}
|
|
280
|
+
// Only reached on the retry path (success returns, errors throw above).
|
|
281
|
+
await this.sleep(retryDelayMs ?? 0);
|
|
241
282
|
}
|
|
242
283
|
}
|
|
243
284
|
/**
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|