@1claw/sdk 0.2.1 → 0.4.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/README.md +99 -2
- package/dist/__tests__/client.test.d.ts +2 -0
- package/dist/__tests__/client.test.d.ts.map +1 -0
- package/dist/__tests__/client.test.js +86 -0
- package/dist/__tests__/client.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +125 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/http.test.d.ts +2 -0
- package/dist/__tests__/http.test.d.ts.map +1 -0
- package/dist/__tests__/http.test.js +200 -0
- package/dist/__tests__/http.test.js.map +1 -0
- package/dist/__tests__/resources.test.d.ts +2 -0
- package/dist/__tests__/resources.test.d.ts.map +1 -0
- package/dist/__tests__/resources.test.js +538 -0
- package/dist/__tests__/resources.test.js.map +1 -0
- package/dist/cmek.d.ts +42 -0
- package/dist/cmek.d.ts.map +1 -0
- package/dist/cmek.js +101 -0
- package/dist/cmek.js.map +1 -0
- package/dist/{client.d.ts → core/client.d.ts} +15 -21
- package/dist/core/client.d.ts.map +1 -0
- package/dist/{client.js → core/client.js} +24 -42
- package/dist/core/client.js.map +1 -0
- package/dist/{errors.d.ts → core/errors.d.ts} +8 -1
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/{errors.js → core/errors.js} +22 -2
- package/dist/core/errors.js.map +1 -0
- package/dist/{http.d.ts → core/http.d.ts} +7 -1
- package/dist/core/http.d.ts.map +1 -0
- package/dist/{http.js → core/http.js} +53 -0
- package/dist/core/http.js.map +1 -0
- package/dist/generated/api-types.d.ts +4213 -0
- package/dist/generated/api-types.d.ts.map +1 -0
- package/dist/generated/api-types.js +6 -0
- package/dist/generated/api-types.js.map +1 -0
- package/dist/index.d.ts +19 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -15
- package/dist/index.js.map +1 -1
- package/dist/mcp/handler.d.ts +1 -1
- package/dist/mcp/handler.d.ts.map +1 -1
- package/dist/plugins/audit-sink.d.ts +48 -0
- package/dist/plugins/audit-sink.d.ts.map +1 -0
- package/dist/plugins/audit-sink.js +2 -0
- package/dist/plugins/audit-sink.js.map +1 -0
- package/dist/plugins/crypto-provider.d.ts +38 -0
- package/dist/plugins/crypto-provider.d.ts.map +1 -0
- package/dist/plugins/crypto-provider.js +2 -0
- package/dist/plugins/crypto-provider.js.map +1 -0
- package/dist/plugins/index.d.ts +16 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +2 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/policy-engine.d.ts +58 -0
- package/dist/plugins/policy-engine.d.ts.map +1 -0
- package/dist/plugins/policy-engine.js +2 -0
- package/dist/plugins/policy-engine.js.map +1 -0
- package/dist/{access.d.ts → resources/access.d.ts} +2 -2
- package/dist/resources/access.d.ts.map +1 -0
- package/dist/resources/access.js.map +1 -0
- package/dist/{agents.d.ts → resources/agents.d.ts} +4 -2
- package/dist/resources/agents.d.ts.map +1 -0
- package/dist/{agents.js → resources/agents.js} +4 -0
- package/dist/resources/agents.js.map +1 -0
- package/dist/{api-keys.d.ts → resources/api-keys.d.ts} +2 -2
- package/dist/resources/api-keys.d.ts.map +1 -0
- package/dist/resources/api-keys.js.map +1 -0
- package/dist/{approvals.d.ts → resources/approvals.d.ts} +2 -2
- package/dist/resources/approvals.d.ts.map +1 -0
- package/dist/resources/approvals.js.map +1 -0
- package/dist/{audit.d.ts → resources/audit.d.ts} +2 -2
- package/dist/resources/audit.d.ts.map +1 -0
- package/dist/resources/audit.js.map +1 -0
- package/dist/{auth.d.ts → resources/auth.d.ts} +8 -2
- package/dist/resources/auth.d.ts.map +1 -0
- package/dist/{auth.js → resources/auth.js} +16 -0
- package/dist/resources/auth.js.map +1 -0
- package/dist/{billing.d.ts → resources/billing.d.ts} +2 -2
- package/dist/resources/billing.d.ts.map +1 -0
- package/dist/resources/billing.js.map +1 -0
- package/dist/{chains.d.ts → resources/chains.d.ts} +2 -2
- package/dist/resources/chains.d.ts.map +1 -0
- package/dist/resources/chains.js.map +1 -0
- package/dist/{org.d.ts → resources/org.d.ts} +2 -2
- package/dist/resources/org.d.ts.map +1 -0
- package/dist/resources/org.js.map +1 -0
- package/dist/{secrets.d.ts → resources/secrets.d.ts} +2 -2
- package/dist/resources/secrets.d.ts.map +1 -0
- package/dist/resources/secrets.js.map +1 -0
- package/dist/{sharing.d.ts → resources/sharing.d.ts} +2 -2
- package/dist/resources/sharing.d.ts.map +1 -0
- package/dist/resources/sharing.js.map +1 -0
- package/dist/resources/vault.d.ts +29 -0
- package/dist/resources/vault.d.ts.map +1 -0
- package/dist/resources/vault.js +55 -0
- package/dist/resources/vault.js.map +1 -0
- package/dist/{x402.d.ts → resources/x402.d.ts} +2 -2
- package/dist/resources/x402.d.ts.map +1 -0
- package/dist/{x402.js → resources/x402.js} +1 -1
- package/dist/resources/x402.js.map +1 -0
- package/dist/types.d.ts +83 -123
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -3
- package/dist/types.js.map +1 -1
- package/package.json +14 -4
- package/dist/access.d.ts.map +0 -1
- package/dist/access.js.map +0 -1
- package/dist/agents.d.ts.map +0 -1
- package/dist/agents.js.map +0 -1
- package/dist/api-keys.d.ts.map +0 -1
- package/dist/api-keys.js.map +0 -1
- package/dist/approvals.d.ts.map +0 -1
- package/dist/approvals.js.map +0 -1
- package/dist/audit.d.ts.map +0 -1
- package/dist/audit.js.map +0 -1
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js.map +0 -1
- package/dist/billing.d.ts.map +0 -1
- package/dist/billing.js.map +0 -1
- package/dist/chains.d.ts.map +0 -1
- package/dist/chains.js.map +0 -1
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/http.d.ts.map +0 -1
- package/dist/http.js.map +0 -1
- package/dist/org.d.ts.map +0 -1
- package/dist/org.js.map +0 -1
- package/dist/secrets.d.ts.map +0 -1
- package/dist/secrets.js.map +0 -1
- package/dist/sharing.d.ts.map +0 -1
- package/dist/sharing.js.map +0 -1
- package/dist/vault.d.ts +0 -18
- package/dist/vault.d.ts.map +0 -1
- package/dist/vault.js +0 -30
- package/dist/vault.js.map +0 -1
- package/dist/x402.d.ts.map +0 -1
- package/dist/x402.js.map +0 -1
- /package/dist/{access.js → resources/access.js} +0 -0
- /package/dist/{api-keys.js → resources/api-keys.js} +0 -0
- /package/dist/{approvals.js → resources/approvals.js} +0 -0
- /package/dist/{audit.js → resources/audit.js} +0 -0
- /package/dist/{billing.js → resources/billing.js} +0 -0
- /package/dist/{chains.js → resources/chains.js} +0 -0
- /package/dist/{org.js → resources/org.js} +0 -0
- /package/dist/{secrets.js → resources/secrets.js} +0 -0
- /package/dist/{sharing.js → resources/sharing.js} +0 -0
package/dist/cmek.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side CMEK (Customer-Managed Encryption Key) utilities.
|
|
3
|
+
*
|
|
4
|
+
* Wire format:
|
|
5
|
+
* [1 byte version = 0x01][12 bytes IV][N bytes ciphertext + 16 bytes GCM tag]
|
|
6
|
+
*
|
|
7
|
+
* The key never leaves the client. Only its SHA-256 fingerprint is sent to the
|
|
8
|
+
* server so the vault can track which key was used without knowing the key.
|
|
9
|
+
*
|
|
10
|
+
* Works in browsers (WebCrypto) and Node.js 18+ (globalThis.crypto).
|
|
11
|
+
*/
|
|
12
|
+
const VERSION_BYTE = 0x01;
|
|
13
|
+
const IV_LENGTH = 12;
|
|
14
|
+
const KEY_LENGTH = 32; // AES-256
|
|
15
|
+
/** Extract a strict ArrayBuffer from a Uint8Array (satisfies WebCrypto BufferSource in TS 5.x strict). */
|
|
16
|
+
function asArrayBuffer(data) {
|
|
17
|
+
const buf = new ArrayBuffer(data.byteLength);
|
|
18
|
+
new Uint8Array(buf).set(data);
|
|
19
|
+
return buf;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Generate a random 256-bit AES-GCM key.
|
|
23
|
+
* Returns the raw key bytes as a Uint8Array (32 bytes).
|
|
24
|
+
*/
|
|
25
|
+
export async function generateCmekKey() {
|
|
26
|
+
const key = new Uint8Array(KEY_LENGTH);
|
|
27
|
+
crypto.getRandomValues(key);
|
|
28
|
+
return key;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Compute the SHA-256 fingerprint of a CMEK key.
|
|
32
|
+
* Returns a 64-character lowercase hex string.
|
|
33
|
+
*/
|
|
34
|
+
export async function cmekFingerprint(key) {
|
|
35
|
+
const hash = await crypto.subtle.digest("SHA-256", asArrayBuffer(key));
|
|
36
|
+
return Array.from(new Uint8Array(hash))
|
|
37
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
38
|
+
.join("");
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Encrypt plaintext with a CMEK key using AES-256-GCM.
|
|
42
|
+
* Returns the versioned wire-format blob as a Uint8Array.
|
|
43
|
+
*/
|
|
44
|
+
export async function cmekEncrypt(plaintext, keyBytes) {
|
|
45
|
+
const cryptoKey = await crypto.subtle.importKey("raw", asArrayBuffer(keyBytes), { name: "AES-GCM", length: 256 }, false, ["encrypt"]);
|
|
46
|
+
const iv = new Uint8Array(IV_LENGTH);
|
|
47
|
+
crypto.getRandomValues(iv);
|
|
48
|
+
const ciphertext = await crypto.subtle.encrypt({ name: "AES-GCM", iv: asArrayBuffer(iv) }, cryptoKey, asArrayBuffer(plaintext));
|
|
49
|
+
const result = new Uint8Array(1 + IV_LENGTH + ciphertext.byteLength);
|
|
50
|
+
result[0] = VERSION_BYTE;
|
|
51
|
+
result.set(iv, 1);
|
|
52
|
+
result.set(new Uint8Array(ciphertext), 1 + IV_LENGTH);
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Decrypt a CMEK wire-format blob with the key.
|
|
57
|
+
* Returns the original plaintext as a Uint8Array.
|
|
58
|
+
*/
|
|
59
|
+
export async function cmekDecrypt(blob, keyBytes) {
|
|
60
|
+
if (blob.length < 1 + IV_LENGTH + 16) {
|
|
61
|
+
throw new Error("CMEK blob too short");
|
|
62
|
+
}
|
|
63
|
+
if (blob[0] !== VERSION_BYTE) {
|
|
64
|
+
throw new Error(`Unsupported CMEK version: ${blob[0]}`);
|
|
65
|
+
}
|
|
66
|
+
const iv = blob.slice(1, 1 + IV_LENGTH);
|
|
67
|
+
const ciphertext = blob.slice(1 + IV_LENGTH);
|
|
68
|
+
const cryptoKey = await crypto.subtle.importKey("raw", asArrayBuffer(keyBytes), { name: "AES-GCM", length: 256 }, false, ["decrypt"]);
|
|
69
|
+
const plaintext = await crypto.subtle.decrypt({ name: "AES-GCM", iv: asArrayBuffer(iv) }, cryptoKey, asArrayBuffer(ciphertext));
|
|
70
|
+
return new Uint8Array(plaintext);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Encode a Uint8Array to a base64 string.
|
|
74
|
+
* Works in browsers and Node.js 18+.
|
|
75
|
+
*/
|
|
76
|
+
export function toBase64(data) {
|
|
77
|
+
if (typeof Buffer !== "undefined") {
|
|
78
|
+
return Buffer.from(data).toString("base64");
|
|
79
|
+
}
|
|
80
|
+
let binary = "";
|
|
81
|
+
for (const byte of data) {
|
|
82
|
+
binary += String.fromCharCode(byte);
|
|
83
|
+
}
|
|
84
|
+
return btoa(binary);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Decode a base64 string to a Uint8Array.
|
|
88
|
+
* Works in browsers and Node.js 18+.
|
|
89
|
+
*/
|
|
90
|
+
export function fromBase64(b64) {
|
|
91
|
+
if (typeof Buffer !== "undefined") {
|
|
92
|
+
return new Uint8Array(Buffer.from(b64, "base64"));
|
|
93
|
+
}
|
|
94
|
+
const binary = atob(b64);
|
|
95
|
+
const bytes = new Uint8Array(binary.length);
|
|
96
|
+
for (let i = 0; i < binary.length; i++) {
|
|
97
|
+
bytes[i] = binary.charCodeAt(i);
|
|
98
|
+
}
|
|
99
|
+
return bytes;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=cmek.js.map
|
package/dist/cmek.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cmek.js","sourceRoot":"","sources":["../src/cmek.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import type { OneclawClientConfig } from "
|
|
2
|
-
import { VaultResource } from "
|
|
3
|
-
import { SecretsResource } from "
|
|
4
|
-
import { AccessResource } from "
|
|
5
|
-
import { AgentsResource } from "
|
|
6
|
-
import { SharingResource } from "
|
|
7
|
-
import { ApprovalsResource } from "
|
|
8
|
-
import { BillingResource } from "
|
|
9
|
-
import { AuditResource } from "
|
|
10
|
-
import { OrgResource } from "
|
|
11
|
-
import { AuthResource } from "
|
|
12
|
-
import { ApiKeysResource } from "
|
|
13
|
-
import { ChainsResource } from "
|
|
14
|
-
import { X402Resource } from "
|
|
1
|
+
import type { OneclawClientConfig } from "../types";
|
|
2
|
+
import { VaultResource } from "../resources/vault";
|
|
3
|
+
import { SecretsResource } from "../resources/secrets";
|
|
4
|
+
import { AccessResource } from "../resources/access";
|
|
5
|
+
import { AgentsResource } from "../resources/agents";
|
|
6
|
+
import { SharingResource } from "../resources/sharing";
|
|
7
|
+
import { ApprovalsResource } from "../resources/approvals";
|
|
8
|
+
import { BillingResource } from "../resources/billing";
|
|
9
|
+
import { AuditResource } from "../resources/audit";
|
|
10
|
+
import { OrgResource } from "../resources/org";
|
|
11
|
+
import { AuthResource } from "../resources/auth";
|
|
12
|
+
import { ApiKeysResource } from "../resources/api-keys";
|
|
13
|
+
import { ChainsResource } from "../resources/chains";
|
|
14
|
+
import { X402Resource } from "../resources/x402";
|
|
15
15
|
/**
|
|
16
16
|
* The main 1Claw SDK client. All API resources are exposed as
|
|
17
17
|
* namespaced properties for discoverability and tree-shaking.
|
|
@@ -62,13 +62,7 @@ export declare class OneclawClient {
|
|
|
62
62
|
/** x402 payment protocol — inspect, pay, and verify micropayments. */
|
|
63
63
|
readonly x402: X402Resource;
|
|
64
64
|
constructor(config: OneclawClientConfig);
|
|
65
|
-
|
|
66
|
-
* When an API key is provided without a pre-existing token, lazily
|
|
67
|
-
* exchange it for a JWT on construction. This is async but fires
|
|
68
|
-
* without blocking the constructor — the first actual request
|
|
69
|
-
* will await token resolution.
|
|
70
|
-
*/
|
|
71
|
-
private autoAuthenticate;
|
|
65
|
+
private autoAuthenticateUserKey;
|
|
72
66
|
}
|
|
73
67
|
/**
|
|
74
68
|
* Factory function to create a new 1Claw SDK client.
|
|
@@ -0,0 +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;AAEjD;;;;;;;;;;;;;;;;;;;;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;gBAEhB,MAAM,EAAE,mBAAmB;IAsBvC,OAAO,CAAC,uBAAuB;CAclC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAEvE"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { HttpClient } from "./http";
|
|
2
|
-
import { VaultResource } from "
|
|
3
|
-
import { SecretsResource } from "
|
|
4
|
-
import { AccessResource } from "
|
|
5
|
-
import { AgentsResource } from "
|
|
6
|
-
import { SharingResource } from "
|
|
7
|
-
import { ApprovalsResource } from "
|
|
8
|
-
import { BillingResource } from "
|
|
9
|
-
import { AuditResource } from "
|
|
10
|
-
import { OrgResource } from "
|
|
11
|
-
import { AuthResource } from "
|
|
12
|
-
import { ApiKeysResource } from "
|
|
13
|
-
import { ChainsResource } from "
|
|
14
|
-
import { X402Resource } from "
|
|
2
|
+
import { VaultResource } from "../resources/vault";
|
|
3
|
+
import { SecretsResource } from "../resources/secrets";
|
|
4
|
+
import { AccessResource } from "../resources/access";
|
|
5
|
+
import { AgentsResource } from "../resources/agents";
|
|
6
|
+
import { SharingResource } from "../resources/sharing";
|
|
7
|
+
import { ApprovalsResource } from "../resources/approvals";
|
|
8
|
+
import { BillingResource } from "../resources/billing";
|
|
9
|
+
import { AuditResource } from "../resources/audit";
|
|
10
|
+
import { OrgResource } from "../resources/org";
|
|
11
|
+
import { AuthResource } from "../resources/auth";
|
|
12
|
+
import { ApiKeysResource } from "../resources/api-keys";
|
|
13
|
+
import { ChainsResource } from "../resources/chains";
|
|
14
|
+
import { X402Resource } from "../resources/x402";
|
|
15
15
|
/**
|
|
16
16
|
* The main 1Claw SDK client. All API resources are exposed as
|
|
17
17
|
* namespaced properties for discoverability and tree-shaking.
|
|
@@ -36,8 +36,8 @@ import { X402Resource } from "./x402";
|
|
|
36
36
|
export class OneclawClient {
|
|
37
37
|
constructor(config) {
|
|
38
38
|
this.http = new HttpClient(config);
|
|
39
|
-
if (config.apiKey && !config.token) {
|
|
40
|
-
this.
|
|
39
|
+
if (config.apiKey && !config.token && !config.agentId) {
|
|
40
|
+
this.autoAuthenticateUserKey(config);
|
|
41
41
|
}
|
|
42
42
|
this.vault = new VaultResource(this.http);
|
|
43
43
|
this.secrets = new SecretsResource(this.http);
|
|
@@ -53,33 +53,15 @@ export class OneclawClient {
|
|
|
53
53
|
this.chains = new ChainsResource(this.http);
|
|
54
54
|
this.x402 = new X402Resource(this.http, config.x402Signer);
|
|
55
55
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
.request("POST", "/v1/auth/agent-token", {
|
|
66
|
-
body: {
|
|
67
|
-
agent_id: config.agentId,
|
|
68
|
-
api_key: config.apiKey,
|
|
69
|
-
},
|
|
70
|
-
})
|
|
71
|
-
.then((res) => {
|
|
72
|
-
if (res.data?.access_token)
|
|
73
|
-
this.http.setToken(res.data.access_token);
|
|
74
|
-
})
|
|
75
|
-
: this.http
|
|
76
|
-
.request("POST", "/v1/auth/api-key-token", {
|
|
77
|
-
body: { api_key: config.apiKey },
|
|
78
|
-
})
|
|
79
|
-
.then((res) => {
|
|
80
|
-
if (res.data?.access_token)
|
|
81
|
-
this.http.setToken(res.data.access_token);
|
|
82
|
-
});
|
|
56
|
+
autoAuthenticateUserKey(config) {
|
|
57
|
+
const authPromise = this.http
|
|
58
|
+
.request("POST", "/v1/auth/api-key-token", {
|
|
59
|
+
body: { api_key: config.apiKey },
|
|
60
|
+
})
|
|
61
|
+
.then((res) => {
|
|
62
|
+
if (res.data?.access_token)
|
|
63
|
+
this.http.setToken(res.data.access_token);
|
|
64
|
+
});
|
|
83
65
|
authPromise.catch(() => {
|
|
84
66
|
/* auth failure will surface on the next request */
|
|
85
67
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PaymentRequirement } from "
|
|
1
|
+
import type { PaymentRequirement } from "../types";
|
|
2
2
|
/**
|
|
3
3
|
* Base error class for all 1Claw SDK errors.
|
|
4
4
|
* Includes the HTTP status code and a machine-readable error type.
|
|
@@ -13,6 +13,13 @@ export declare class OneclawError extends Error {
|
|
|
13
13
|
export declare class AuthError extends OneclawError {
|
|
14
14
|
constructor(message: string, status?: 401 | 403);
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Thrown when a resource limit is exceeded (403 with type "resource_limit_exceeded").
|
|
18
|
+
* The `detail` message includes the current count, limit, and tier.
|
|
19
|
+
*/
|
|
20
|
+
export declare class ResourceLimitExceededError extends OneclawError {
|
|
21
|
+
constructor(message: string);
|
|
22
|
+
}
|
|
16
23
|
/**
|
|
17
24
|
* Thrown on 402 Payment Required responses.
|
|
18
25
|
* Contains the full `PaymentRequirement` so callers can inspect
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEnD;;;GAGG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;gBAGrB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM;CAQtB;AAED,6DAA6D;AAC7D,qBAAa,SAAU,SAAQ,YAAY;gBAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,GAAG,GAAS;CAIvD;AAED;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,YAAY;gBAC5C,OAAO,EAAE,MAAM;CAI9B;AAED;;;;GAIG;AACH,qBAAa,oBAAqB,SAAQ,YAAY;IAClD,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;gBAEpC,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,kBAAkB;CAKtE;AAED;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACnD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;gBAEvB,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAS1D;AAED,yCAAyC;AACzC,qBAAa,aAAc,SAAQ,YAAY;gBAC/B,OAAO,GAAE,MAA6B;CAIrD;AAED,uFAAuF;AACvF,qBAAa,cAAe,SAAQ,YAAY;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;gBAG3B,OAAO,GAAE,MAA8B,EACvC,YAAY,CAAC,EAAE,MAAM;CAM5B;AAED,mEAAmE;AACnE,qBAAa,eAAgB,SAAQ,YAAY;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAK/D;AAED,yCAAyC;AACzC,qBAAa,WAAY,SAAQ,YAAY;gBAErC,OAAO,GAAE,MAAgC,EACzC,MAAM,GAAE,MAAY;CAK3B;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAkD5E"}
|
|
@@ -18,6 +18,16 @@ export class AuthError extends OneclawError {
|
|
|
18
18
|
this.name = "AuthError";
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Thrown when a resource limit is exceeded (403 with type "resource_limit_exceeded").
|
|
23
|
+
* The `detail` message includes the current count, limit, and tier.
|
|
24
|
+
*/
|
|
25
|
+
export class ResourceLimitExceededError extends OneclawError {
|
|
26
|
+
constructor(message) {
|
|
27
|
+
super(message, 403, "resource_limit_exceeded");
|
|
28
|
+
this.name = "ResourceLimitExceededError";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
21
31
|
/**
|
|
22
32
|
* Thrown on 402 Payment Required responses.
|
|
23
33
|
* Contains the full `PaymentRequirement` so callers can inspect
|
|
@@ -91,8 +101,18 @@ export async function errorFromResponse(res) {
|
|
|
91
101
|
case 400:
|
|
92
102
|
return new ValidationError(message, body.fields);
|
|
93
103
|
case 401:
|
|
94
|
-
|
|
95
|
-
|
|
104
|
+
return new AuthError(message, 401);
|
|
105
|
+
case 403: {
|
|
106
|
+
const errorType = body.type;
|
|
107
|
+
if (errorType === "resource_limit_exceeded") {
|
|
108
|
+
return new ResourceLimitExceededError(message);
|
|
109
|
+
}
|
|
110
|
+
if (errorType === "approval_required") {
|
|
111
|
+
const approvalId = body.approval_request_id ?? "";
|
|
112
|
+
return new ApprovalRequiredError(approvalId, message);
|
|
113
|
+
}
|
|
114
|
+
return new AuthError(message, 403);
|
|
115
|
+
}
|
|
96
116
|
case 402: {
|
|
97
117
|
const requirement = body;
|
|
98
118
|
return new PaymentRequiredError(message, requirement);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { OneclawClientConfig, OneclawResponse } from "
|
|
1
|
+
import type { OneclawClientConfig, OneclawResponse } from "../types";
|
|
2
2
|
/**
|
|
3
3
|
* Internal HTTP transport used by every resource module.
|
|
4
4
|
* Handles authentication headers, 402 auto-pay, and error mapping.
|
|
@@ -6,13 +6,19 @@ import type { OneclawClientConfig, OneclawResponse } from "./types";
|
|
|
6
6
|
export declare class HttpClient {
|
|
7
7
|
private baseUrl;
|
|
8
8
|
private token?;
|
|
9
|
+
private tokenExpiresAt;
|
|
9
10
|
private signer?;
|
|
10
11
|
private maxAutoPayUsd;
|
|
12
|
+
private agentCredentials?;
|
|
13
|
+
private refreshPromise?;
|
|
14
|
+
private static readonly REFRESH_BUFFER_MS;
|
|
11
15
|
constructor(config: OneclawClientConfig);
|
|
12
16
|
/** Replace the current Bearer token (called by auth methods). */
|
|
13
17
|
setToken(token: string): void;
|
|
14
18
|
getToken(): string | undefined;
|
|
15
19
|
getBaseUrl(): string;
|
|
20
|
+
private static decodeExpiry;
|
|
21
|
+
private ensureToken;
|
|
16
22
|
/**
|
|
17
23
|
* Perform a typed request against the API and return an envelope.
|
|
18
24
|
* Automatically retries once with an x402 payment header when
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,mBAAmB,EACnB,eAAe,EAGlB,MAAM,UAAU,CAAC;AAGlB;;;GAGG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAC,CAAsC;IAC/D,OAAO,CAAC,cAAc,CAAC,CAAgB;IAEvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAU;gBAEvC,MAAM,EAAE,mBAAmB;IAcvC,iEAAiE;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,QAAQ,IAAI,MAAM,GAAG,SAAS;IAI9B,UAAU,IAAI,MAAM;IAIpB,OAAO,CAAC,MAAM,CAAC,YAAY;YAab,WAAW;IA0CzB;;;;OAIG;IACG,OAAO,CAAC,CAAC,EACX,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACL,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;QACpD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,GACP,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IA+C9B;;;OAGG;IACG,cAAc,CAAC,CAAC,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACL,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;QACpD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC/B,GACP,OAAO,CAAC,CAAC,CAAC;IAqCb,OAAO,CAAC,QAAQ;IAahB;;;OAGG;YACW,aAAa;CA6C9B"}
|
|
@@ -5,14 +5,22 @@ import { errorFromResponse, PaymentRequiredError } from "./errors";
|
|
|
5
5
|
*/
|
|
6
6
|
export class HttpClient {
|
|
7
7
|
constructor(config) {
|
|
8
|
+
this.tokenExpiresAt = 0;
|
|
8
9
|
this.baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
9
10
|
this.token = config.token;
|
|
10
11
|
this.signer = config.x402Signer;
|
|
11
12
|
this.maxAutoPayUsd = config.maxAutoPayUsd ?? 0;
|
|
13
|
+
if (config.agentId && config.apiKey) {
|
|
14
|
+
this.agentCredentials = {
|
|
15
|
+
agentId: config.agentId,
|
|
16
|
+
apiKey: config.apiKey,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
12
19
|
}
|
|
13
20
|
/** Replace the current Bearer token (called by auth methods). */
|
|
14
21
|
setToken(token) {
|
|
15
22
|
this.token = token;
|
|
23
|
+
this.tokenExpiresAt = HttpClient.decodeExpiry(token);
|
|
16
24
|
}
|
|
17
25
|
getToken() {
|
|
18
26
|
return this.token;
|
|
@@ -20,12 +28,55 @@ export class HttpClient {
|
|
|
20
28
|
getBaseUrl() {
|
|
21
29
|
return this.baseUrl;
|
|
22
30
|
}
|
|
31
|
+
static decodeExpiry(jwt) {
|
|
32
|
+
try {
|
|
33
|
+
const parts = jwt.split(".");
|
|
34
|
+
if (parts.length !== 3)
|
|
35
|
+
return 0;
|
|
36
|
+
const payload = JSON.parse(atob(parts[1].replace(/-/g, "+").replace(/_/g, "/")));
|
|
37
|
+
return typeof payload.exp === "number" ? payload.exp * 1000 : 0;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async ensureToken() {
|
|
44
|
+
if (!this.agentCredentials)
|
|
45
|
+
return;
|
|
46
|
+
if (this.token &&
|
|
47
|
+
Date.now() < this.tokenExpiresAt - HttpClient.REFRESH_BUFFER_MS)
|
|
48
|
+
return;
|
|
49
|
+
if (this.refreshPromise) {
|
|
50
|
+
await this.refreshPromise;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.refreshPromise = (async () => {
|
|
54
|
+
const res = await fetch(`${this.baseUrl}/v1/auth/agent-token`, {
|
|
55
|
+
method: "POST",
|
|
56
|
+
headers: { "Content-Type": "application/json" },
|
|
57
|
+
body: JSON.stringify({
|
|
58
|
+
agent_id: this.agentCredentials.agentId,
|
|
59
|
+
api_key: this.agentCredentials.apiKey,
|
|
60
|
+
}),
|
|
61
|
+
});
|
|
62
|
+
if (!res.ok) {
|
|
63
|
+
throw new Error(`Agent token refresh failed: HTTP ${res.status}`);
|
|
64
|
+
}
|
|
65
|
+
const data = (await res.json());
|
|
66
|
+
this.token = data.access_token;
|
|
67
|
+
this.tokenExpiresAt = Date.now() + data.expires_in * 1000;
|
|
68
|
+
})().finally(() => {
|
|
69
|
+
this.refreshPromise = undefined;
|
|
70
|
+
});
|
|
71
|
+
await this.refreshPromise;
|
|
72
|
+
}
|
|
23
73
|
/**
|
|
24
74
|
* Perform a typed request against the API and return an envelope.
|
|
25
75
|
* Automatically retries once with an x402 payment header when
|
|
26
76
|
* a signer is configured and the price is within limits.
|
|
27
77
|
*/
|
|
28
78
|
async request(method, path, options = {}) {
|
|
79
|
+
await this.ensureToken();
|
|
29
80
|
const url = this.buildUrl(path, options.query);
|
|
30
81
|
const headers = {
|
|
31
82
|
"Content-Type": "application/json",
|
|
@@ -69,6 +120,7 @@ export class HttpClient {
|
|
|
69
120
|
* Convenient for callers that prefer exceptions.
|
|
70
121
|
*/
|
|
71
122
|
async requestOrThrow(method, path, options = {}) {
|
|
123
|
+
await this.ensureToken();
|
|
72
124
|
const url = this.buildUrl(path, options.query);
|
|
73
125
|
const headers = {
|
|
74
126
|
"Content-Type": "application/json",
|
|
@@ -142,4 +194,5 @@ export class HttpClient {
|
|
|
142
194
|
return fetch(url, { ...init, headers: retryHeaders });
|
|
143
195
|
}
|
|
144
196
|
}
|
|
197
|
+
HttpClient.REFRESH_BUFFER_MS = 60000;
|
|
145
198
|
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/core/http.ts"],"names":[],"mappings":"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"}
|