@1claw/sdk 0.15.1 → 0.15.3
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 +60 -4
- package/dist/core/client.d.ts +3 -0
- package/dist/core/client.d.ts.map +1 -1
- package/dist/core/client.js +2 -0
- package/dist/core/client.js.map +1 -1
- package/dist/generated/api-types.d.ts +397 -21
- package/dist/generated/api-types.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/resources/agents.d.ts +7 -1
- package/dist/resources/agents.d.ts.map +1 -1
- package/dist/resources/agents.js +8 -0
- package/dist/resources/agents.js.map +1 -1
- package/dist/resources/billing.d.ts +11 -2
- package/dist/resources/billing.d.ts.map +1 -1
- package/dist/resources/billing.js +17 -1
- package/dist/resources/billing.js.map +1 -1
- package/dist/resources/treasury.d.ts +37 -0
- package/dist/resources/treasury.d.ts.map +1 -0
- package/dist/resources/treasury.js +45 -0
- package/dist/resources/treasury.js.map +1 -0
- package/dist/types.d.ts +44 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -73,16 +73,16 @@ await client.auth.google({ id_token: "..." });
|
|
|
73
73
|
| `client.vault` | `create`, `get`, `list`, `delete` |
|
|
74
74
|
| `client.secrets` | `set`, `get`, `delete`, `list`, `rotate` |
|
|
75
75
|
| `client.access` | `grantHuman`, `grantAgent`, `update`, `revoke`, `listGrants` |
|
|
76
|
-
| `client.agents` | `create`, `getSelf`, `get`, `list`, `update`, `delete`, `rotateKey`, `submitTransaction`, `getTransaction`, `listTransactions`, `simulateTransaction`, `simulateBundle` |
|
|
76
|
+
| `client.agents` | `create`, `getSelf`, `get`, `list`, `update`, `delete`, `rotateKey`, `submitTransaction`, `signTransaction`, `getTransaction`, `listTransactions`, `simulateTransaction`, `simulateBundle` |
|
|
77
77
|
| `client.chains` | `list`, `get`, `adminList`, `create`, `update`, `delete` |
|
|
78
78
|
| `client.sharing` | `create`, `access`, `listOutbound`, `listInbound`, `accept`, `decline`, `revoke` |
|
|
79
79
|
| `client.approvals` | `request`, `list`, `approve`, `deny`, `check`, `subscribe` |
|
|
80
|
-
| `client.billing` | `usage`, `history`
|
|
80
|
+
| `client.billing` | `usage`, `history`, `llmTokenBilling`, `subscribeLlmTokenBilling`, `disableLlmTokenBilling` (LLM token billing / Stripe AI Gateway) |
|
|
81
81
|
| `client.audit` | `query` |
|
|
82
82
|
| `client.org` | `listMembers`, `getAgentKeysVault`, `updateMemberRole`, `removeMember` |
|
|
83
83
|
| `client.auth` | `login`, `signup`, `agentToken`, `apiKeyToken`, `google`, `changePassword`, `logout`, `getMe`, `updateMe`, `deleteMe` |
|
|
84
84
|
| `client.apiKeys` | `create`, `list`, `revoke` |
|
|
85
|
-
| `client.treasury` | `create`, `list`, `get`, `addSigner`, `removeSigner`, `requestAccess`, `listAccessRequests`, `approveAccess`, `denyAccess` |
|
|
85
|
+
| `client.treasury` | `create`, `list`, `get`, `update`, `delete`, `addSigner`, `removeSigner`, `requestAccess`, `listAccessRequests`, `approveAccess`, `denyAccess` |
|
|
86
86
|
| `client.x402` | `getPaymentRequirement`, `pay`, `verifyReceipt`, `withPayment` |
|
|
87
87
|
|
|
88
88
|
**Agent create response:** `agents.create()` returns `{ agent: AgentResponse, api_key?: string }`. The `api_key` is only present for `auth_method: "api_key"` and is shown once — use `data.agent.id` and `data.api_key` from the response.
|
|
@@ -191,6 +191,26 @@ The backend fetches the signing key from the vault, signs the EIP-155 transactio
|
|
|
191
191
|
|
|
192
192
|
The SDK automatically generates an `Idempotency-Key` header (UUID v4) on each `submitTransaction` call, providing replay protection. Duplicate requests within 24 hours return the cached response instead of re-signing.
|
|
193
193
|
|
|
194
|
+
### Sign-only mode (BYORPC)
|
|
195
|
+
|
|
196
|
+
Use `signTransaction` when you want the server to sign but **not** broadcast — for example, to submit via your own RPC (Flashbots, MEV protection, custom relayers):
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
const signRes = await client.agents.signTransaction(agentId, {
|
|
200
|
+
to: "0x000000000000000000000000000000000000dEaD",
|
|
201
|
+
value: "0.01",
|
|
202
|
+
chain: "base",
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
console.log(signRes.data?.signed_tx); // raw signed tx hex
|
|
206
|
+
console.log(signRes.data?.tx_hash); // precomputed keccak hash
|
|
207
|
+
console.log(signRes.data?.from); // derived sender address
|
|
208
|
+
|
|
209
|
+
// Broadcast yourself via ethers, viem, or raw JSON-RPC
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
All agent guardrails (allowlists, value caps, daily limits) are enforced exactly as for submit. The transaction is recorded for audit and daily-limit tracking with `status: "sign_only"`.
|
|
213
|
+
|
|
194
214
|
Key properties:
|
|
195
215
|
|
|
196
216
|
- **Disabled by default** — a human must explicitly enable per-agent
|
|
@@ -318,6 +338,11 @@ const { data } = await client.agents.create({
|
|
|
318
338
|
pii_policy: "redact", // block | redact | warn | allow
|
|
319
339
|
injection_threshold: 0.7,
|
|
320
340
|
|
|
341
|
+
// Model restrictions
|
|
342
|
+
allowed_models: ["gpt-4o-mini", "claude-sonnet-4"], // Whitelist specific models
|
|
343
|
+
denied_models: ["gpt-3.5-turbo"], // Blacklist models
|
|
344
|
+
allowed_providers: ["openai", "anthropic"], // Restrict providers
|
|
345
|
+
|
|
321
346
|
// Threat detection
|
|
322
347
|
unicode_normalization: {
|
|
323
348
|
enabled: true,
|
|
@@ -351,10 +376,41 @@ await client.agents.update(agentId, {
|
|
|
351
376
|
shroud_config: {
|
|
352
377
|
command_injection_detection: { enabled: true, action: "block" },
|
|
353
378
|
social_engineering_detection: { enabled: true, action: "block" },
|
|
379
|
+
allowed_models: ["gpt-4o-mini"], // Restrict to cost-effective models
|
|
354
380
|
},
|
|
355
381
|
});
|
|
356
382
|
```
|
|
357
383
|
|
|
384
|
+
### Specifying Models in Requests
|
|
385
|
+
|
|
386
|
+
When making LLM requests to Shroud, specify the model in one of two ways:
|
|
387
|
+
|
|
388
|
+
**Option 1: Header**
|
|
389
|
+
```typescript
|
|
390
|
+
const res = await fetch("https://shroud.1claw.xyz/v1/chat/completions", {
|
|
391
|
+
method: "POST",
|
|
392
|
+
headers: {
|
|
393
|
+
"X-Shroud-Agent-Key": `${agentId}:${agentApiKey}`,
|
|
394
|
+
"X-Shroud-Provider": "openai",
|
|
395
|
+
"X-Shroud-Model": "gpt-4o-mini", // ← Model in header
|
|
396
|
+
"Content-Type": "application/json",
|
|
397
|
+
},
|
|
398
|
+
body: JSON.stringify({
|
|
399
|
+
messages: [{ role: "user", content: "Hello" }],
|
|
400
|
+
}),
|
|
401
|
+
});
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
**Option 2: Request Body** (for OpenAI-style providers)
|
|
405
|
+
```typescript
|
|
406
|
+
body: JSON.stringify({
|
|
407
|
+
model: "gpt-4o-mini", // ← Model in body
|
|
408
|
+
messages: [{ role: "user", content: "Hello" }],
|
|
409
|
+
})
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
Shroud enforces the agent's `allowed_models` and `denied_models` restrictions automatically — requests using unauthorized models return **403 Forbidden**.
|
|
413
|
+
|
|
358
414
|
See the [Shroud Security Guide](https://docs.1claw.xyz/docs/guides/shroud) for full configuration options.
|
|
359
415
|
|
|
360
416
|
## OpenAPI Types
|
|
@@ -369,7 +425,7 @@ type Vault = ApiSchemas["VaultResponse"];
|
|
|
369
425
|
type Agent = ApiSchemas["AgentResponse"];
|
|
370
426
|
```
|
|
371
427
|
|
|
372
|
-
Regenerate types after spec changes: `npm run generate`
|
|
428
|
+
Regenerate types after spec changes (from the monorepo): `cd packages/sdk && npm run generate` — reads [`../openapi-spec/openapi.yaml`](../openapi-spec/openapi.yaml) via `openapi-typescript`.
|
|
373
429
|
|
|
374
430
|
## MCP Integration (AI Agents)
|
|
375
431
|
|
package/dist/core/client.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { AuthResource } from "../resources/auth";
|
|
|
12
12
|
import { ApiKeysResource } from "../resources/api-keys";
|
|
13
13
|
import { ChainsResource } from "../resources/chains";
|
|
14
14
|
import { X402Resource } from "../resources/x402";
|
|
15
|
+
import { TreasuryResource } from "../resources/treasury";
|
|
15
16
|
/**
|
|
16
17
|
* The main 1Claw SDK client. All API resources are exposed as
|
|
17
18
|
* namespaced properties for discoverability and tree-shaking.
|
|
@@ -61,6 +62,8 @@ export declare class OneclawClient {
|
|
|
61
62
|
readonly chains: ChainsResource;
|
|
62
63
|
/** x402 payment protocol — inspect, pay, and verify micropayments. */
|
|
63
64
|
readonly x402: X402Resource;
|
|
65
|
+
/** Safe multisig treasuries — CRUD, signers, agent access requests. */
|
|
66
|
+
readonly treasury: TreasuryResource;
|
|
64
67
|
constructor(config: OneclawClientConfig);
|
|
65
68
|
private autoAuthenticateUserKey;
|
|
66
69
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAElC,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACtC,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,mDAAmD;IACnD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,wEAAwE;IACxE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,sEAAsE;IACtE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;gBAExB,MAAM,EAAE,mBAAmB;IA2BvC,OAAO,CAAC,uBAAuB;CAclC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAEvE"}
|
package/dist/core/client.js
CHANGED
|
@@ -12,6 +12,7 @@ import { AuthResource } from "../resources/auth";
|
|
|
12
12
|
import { ApiKeysResource } from "../resources/api-keys";
|
|
13
13
|
import { ChainsResource } from "../resources/chains";
|
|
14
14
|
import { X402Resource } from "../resources/x402";
|
|
15
|
+
import { TreasuryResource } from "../resources/treasury";
|
|
15
16
|
/**
|
|
16
17
|
* The main 1Claw SDK client. All API resources are exposed as
|
|
17
18
|
* namespaced properties for discoverability and tree-shaking.
|
|
@@ -56,6 +57,7 @@ export class OneclawClient {
|
|
|
56
57
|
this.apiKeys = new ApiKeysResource(this.http);
|
|
57
58
|
this.chains = new ChainsResource(this.http);
|
|
58
59
|
this.x402 = new X402Resource(this.http, config.x402Signer);
|
|
60
|
+
this.treasury = new TreasuryResource(this.http);
|
|
59
61
|
}
|
|
60
62
|
autoAuthenticateUserKey(config) {
|
|
61
63
|
const authPromise = this.http
|
package/dist/core/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
|