@builtwith/sdk 1.4.0 → 1.4.1
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 +39 -0
- package/package.json +1 -1
- package/src/index.js +3 -5
package/README.md
CHANGED
|
@@ -63,6 +63,8 @@ if (result.ok) {
|
|
|
63
63
|
| `payment_discovery()` | — | Agent Payment API: credit balance |
|
|
64
64
|
| `payment_configuration()` | — | Agent Payment API: spending limits |
|
|
65
65
|
| `payment_purchase({ credits })` | Integer ≥ 2000 | Agent Payment API: purchase credits |
|
|
66
|
+
| `BuiltWithClient.agent_auth_start()` | — | Start Device-Code Authorization (static, no key required) |
|
|
67
|
+
| `BuiltWithClient.agent_auth_token(device_code)` | Device code string | Poll for auth result and access token (static, no key required) |
|
|
66
68
|
|
|
67
69
|
### Response Format
|
|
68
70
|
|
|
@@ -132,6 +134,8 @@ All methods accept a `CancellationToken` as an optional last parameter.
|
|
|
132
134
|
| `payment_discovery()` | — | Agent Payment API: credit balance |
|
|
133
135
|
| `payment_configuration()` | — | Agent Payment API: spending limits |
|
|
134
136
|
| `payment_purchase(credits)` | `int` ≥ 2000 | Agent Payment API: purchase credits |
|
|
137
|
+
| `BuiltWithClient.agent_auth_start()` | — | Start Device-Code Authorization (static, no key required) |
|
|
138
|
+
| `BuiltWithClient.agent_auth_token(deviceCode)` | `string` | Poll for auth result and access token (static, no key required) |
|
|
135
139
|
|
|
136
140
|
### Response Format
|
|
137
141
|
|
|
@@ -154,6 +158,41 @@ BUILTWITH_API_KEY=your-key dotnet run
|
|
|
154
158
|
|
|
155
159
|
---
|
|
156
160
|
|
|
161
|
+
## Agent Device-Code Authorization
|
|
162
|
+
|
|
163
|
+
Agents can obtain a temporary `bw-` prefixed API token without the user pasting their key. These are **static methods** — no API key or client instance required.
|
|
164
|
+
|
|
165
|
+
```js
|
|
166
|
+
// Node.js
|
|
167
|
+
const { BuiltWithClient } = require('@builtwith/sdk');
|
|
168
|
+
|
|
169
|
+
// Step 1: start the flow
|
|
170
|
+
const start = await BuiltWithClient.agent_auth_start();
|
|
171
|
+
// start.data => { device_code, verification_uri }
|
|
172
|
+
|
|
173
|
+
console.log(`Open in browser: ${start.data.verification_uri}`);
|
|
174
|
+
|
|
175
|
+
// Step 2: poll every 5 seconds
|
|
176
|
+
const token = await BuiltWithClient.agent_auth_token(start.data.device_code);
|
|
177
|
+
// token.data => { status: 'pending' | 'approved' | 'denied', access_token? }
|
|
178
|
+
|
|
179
|
+
if (token.data.status === 'approved') {
|
|
180
|
+
const client = new BuiltWithClient(token.data.access_token);
|
|
181
|
+
// use client normally
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
```csharp
|
|
186
|
+
// C#
|
|
187
|
+
var start = await BuiltWithClient.agent_auth_start();
|
|
188
|
+
// start.Data => { device_code, verification_uri }
|
|
189
|
+
|
|
190
|
+
var token = await BuiltWithClient.agent_auth_token(deviceCode);
|
|
191
|
+
// token.Data => { status, access_token }
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
157
196
|
## Agent Payment API
|
|
158
197
|
|
|
159
198
|
The payment methods let AI agents check credit balances, view spending configuration, and purchase credits. They route through the standard MCP endpoint using your existing API key. Configure billing at [payments.builtwith.com/agent-payment-api-config](https://payments.builtwith.com/agent-payment-api-config).
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -398,7 +398,7 @@ class BuiltWithClient {
|
|
|
398
398
|
|
|
399
399
|
static async agent_auth_start() {
|
|
400
400
|
try {
|
|
401
|
-
const res = await _http_post('https://api.builtwith.com/agent-auth
|
|
401
|
+
const res = await _http_post('https://api.builtwith.com/agent-auth-start', {}, {}, 30000);
|
|
402
402
|
if (res.status < 200 || res.status >= 300) {
|
|
403
403
|
return _err(new BuiltWithError('HTTP_ERROR', `HTTP ${res.status}: ${res.body.substring(0, 200)}`, res.status), 'agent-auth-start');
|
|
404
404
|
}
|
|
@@ -415,14 +415,12 @@ class BuiltWithClient {
|
|
|
415
415
|
static async agent_auth_token(device_code) {
|
|
416
416
|
_validate_string('device_code', device_code);
|
|
417
417
|
try {
|
|
418
|
-
const res = await _http_post('https://api.builtwith.com/agent-auth
|
|
419
|
-
if (res.status < 200 || res.status >= 300) {
|
|
420
|
-
return _err(new BuiltWithError('HTTP_ERROR', `HTTP ${res.status}: ${res.body.substring(0, 200)}`, res.status), 'agent-auth-token');
|
|
421
|
-
}
|
|
418
|
+
const res = await _http_post('https://api.builtwith.com/agent-auth-token', { device_code }, {}, 30000);
|
|
422
419
|
let data;
|
|
423
420
|
try { data = JSON.parse(res.body); } catch (_) {
|
|
424
421
|
return _err(new BuiltWithError('PARSE_ERROR', 'Failed to parse agent-auth-token response.', res.status), 'agent-auth-token');
|
|
425
422
|
}
|
|
423
|
+
// Pass through body even on 4xx — error field carries meaningful status (access_denied, expired_token)
|
|
426
424
|
return _ok(data, data, 'agent-auth-token');
|
|
427
425
|
} catch (err) {
|
|
428
426
|
return _err(new BuiltWithError('NETWORK_ERROR', err.message, 0, null, 'Check network connectivity.'), 'agent-auth-token');
|