@1claw/sdk 0.2.0 → 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.
Files changed (150) hide show
  1. package/README.md +116 -19
  2. package/dist/__tests__/client.test.d.ts +2 -0
  3. package/dist/__tests__/client.test.d.ts.map +1 -0
  4. package/dist/__tests__/client.test.js +86 -0
  5. package/dist/__tests__/client.test.js.map +1 -0
  6. package/dist/__tests__/errors.test.d.ts +2 -0
  7. package/dist/__tests__/errors.test.d.ts.map +1 -0
  8. package/dist/__tests__/errors.test.js +125 -0
  9. package/dist/__tests__/errors.test.js.map +1 -0
  10. package/dist/__tests__/http.test.d.ts +2 -0
  11. package/dist/__tests__/http.test.d.ts.map +1 -0
  12. package/dist/__tests__/http.test.js +200 -0
  13. package/dist/__tests__/http.test.js.map +1 -0
  14. package/dist/__tests__/resources.test.d.ts +2 -0
  15. package/dist/__tests__/resources.test.d.ts.map +1 -0
  16. package/dist/__tests__/resources.test.js +538 -0
  17. package/dist/__tests__/resources.test.js.map +1 -0
  18. package/dist/cmek.d.ts +42 -0
  19. package/dist/cmek.d.ts.map +1 -0
  20. package/dist/cmek.js +101 -0
  21. package/dist/cmek.js.map +1 -0
  22. package/dist/{client.d.ts → core/client.d.ts} +15 -21
  23. package/dist/core/client.d.ts.map +1 -0
  24. package/dist/{client.js → core/client.js} +24 -42
  25. package/dist/core/client.js.map +1 -0
  26. package/dist/{errors.d.ts → core/errors.d.ts} +8 -1
  27. package/dist/core/errors.d.ts.map +1 -0
  28. package/dist/{errors.js → core/errors.js} +22 -2
  29. package/dist/core/errors.js.map +1 -0
  30. package/dist/{http.d.ts → core/http.d.ts} +7 -1
  31. package/dist/core/http.d.ts.map +1 -0
  32. package/dist/{http.js → core/http.js} +53 -0
  33. package/dist/core/http.js.map +1 -0
  34. package/dist/generated/api-types.d.ts +4213 -0
  35. package/dist/generated/api-types.d.ts.map +1 -0
  36. package/dist/generated/api-types.js +6 -0
  37. package/dist/generated/api-types.js.map +1 -0
  38. package/dist/index.d.ts +19 -16
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +19 -15
  41. package/dist/index.js.map +1 -1
  42. package/dist/mcp/handler.d.ts +1 -1
  43. package/dist/mcp/handler.d.ts.map +1 -1
  44. package/dist/plugins/audit-sink.d.ts +48 -0
  45. package/dist/plugins/audit-sink.d.ts.map +1 -0
  46. package/dist/plugins/audit-sink.js +2 -0
  47. package/dist/plugins/audit-sink.js.map +1 -0
  48. package/dist/plugins/crypto-provider.d.ts +38 -0
  49. package/dist/plugins/crypto-provider.d.ts.map +1 -0
  50. package/dist/plugins/crypto-provider.js +2 -0
  51. package/dist/plugins/crypto-provider.js.map +1 -0
  52. package/dist/plugins/index.d.ts +16 -0
  53. package/dist/plugins/index.d.ts.map +1 -0
  54. package/dist/plugins/index.js +2 -0
  55. package/dist/plugins/index.js.map +1 -0
  56. package/dist/plugins/policy-engine.d.ts +58 -0
  57. package/dist/plugins/policy-engine.d.ts.map +1 -0
  58. package/dist/plugins/policy-engine.js +2 -0
  59. package/dist/plugins/policy-engine.js.map +1 -0
  60. package/dist/{access.d.ts → resources/access.d.ts} +2 -2
  61. package/dist/resources/access.d.ts.map +1 -0
  62. package/dist/resources/access.js.map +1 -0
  63. package/dist/{agents.d.ts → resources/agents.d.ts} +13 -2
  64. package/dist/resources/agents.d.ts.map +1 -0
  65. package/dist/{agents.js → resources/agents.js} +18 -0
  66. package/dist/resources/agents.js.map +1 -0
  67. package/dist/{api-keys.d.ts → resources/api-keys.d.ts} +2 -2
  68. package/dist/resources/api-keys.d.ts.map +1 -0
  69. package/dist/resources/api-keys.js.map +1 -0
  70. package/dist/{approvals.d.ts → resources/approvals.d.ts} +2 -2
  71. package/dist/resources/approvals.d.ts.map +1 -0
  72. package/dist/resources/approvals.js.map +1 -0
  73. package/dist/{audit.d.ts → resources/audit.d.ts} +2 -2
  74. package/dist/resources/audit.d.ts.map +1 -0
  75. package/dist/resources/audit.js.map +1 -0
  76. package/dist/{auth.d.ts → resources/auth.d.ts} +8 -2
  77. package/dist/resources/auth.d.ts.map +1 -0
  78. package/dist/{auth.js → resources/auth.js} +16 -0
  79. package/dist/resources/auth.js.map +1 -0
  80. package/dist/{billing.d.ts → resources/billing.d.ts} +2 -2
  81. package/dist/resources/billing.d.ts.map +1 -0
  82. package/dist/resources/billing.js.map +1 -0
  83. package/dist/{chains.d.ts → resources/chains.d.ts} +2 -2
  84. package/dist/resources/chains.d.ts.map +1 -0
  85. package/dist/resources/chains.js.map +1 -0
  86. package/dist/{org.d.ts → resources/org.d.ts} +2 -2
  87. package/dist/resources/org.d.ts.map +1 -0
  88. package/dist/resources/org.js.map +1 -0
  89. package/dist/{secrets.d.ts → resources/secrets.d.ts} +2 -2
  90. package/dist/resources/secrets.d.ts.map +1 -0
  91. package/dist/resources/secrets.js.map +1 -0
  92. package/dist/{sharing.d.ts → resources/sharing.d.ts} +2 -2
  93. package/dist/resources/sharing.d.ts.map +1 -0
  94. package/dist/resources/sharing.js.map +1 -0
  95. package/dist/resources/vault.d.ts +29 -0
  96. package/dist/resources/vault.d.ts.map +1 -0
  97. package/dist/resources/vault.js +55 -0
  98. package/dist/resources/vault.js.map +1 -0
  99. package/dist/{x402.d.ts → resources/x402.d.ts} +2 -2
  100. package/dist/resources/x402.d.ts.map +1 -0
  101. package/dist/{x402.js → resources/x402.js} +1 -1
  102. package/dist/resources/x402.js.map +1 -0
  103. package/dist/types.d.ts +126 -89
  104. package/dist/types.d.ts.map +1 -1
  105. package/dist/types.js +0 -3
  106. package/dist/types.js.map +1 -1
  107. package/package.json +14 -4
  108. package/dist/access.d.ts.map +0 -1
  109. package/dist/access.js.map +0 -1
  110. package/dist/agents.d.ts.map +0 -1
  111. package/dist/agents.js.map +0 -1
  112. package/dist/api-keys.d.ts.map +0 -1
  113. package/dist/api-keys.js.map +0 -1
  114. package/dist/approvals.d.ts.map +0 -1
  115. package/dist/approvals.js.map +0 -1
  116. package/dist/audit.d.ts.map +0 -1
  117. package/dist/audit.js.map +0 -1
  118. package/dist/auth.d.ts.map +0 -1
  119. package/dist/auth.js.map +0 -1
  120. package/dist/billing.d.ts.map +0 -1
  121. package/dist/billing.js.map +0 -1
  122. package/dist/chains.d.ts.map +0 -1
  123. package/dist/chains.js.map +0 -1
  124. package/dist/client.d.ts.map +0 -1
  125. package/dist/client.js.map +0 -1
  126. package/dist/errors.d.ts.map +0 -1
  127. package/dist/errors.js.map +0 -1
  128. package/dist/http.d.ts.map +0 -1
  129. package/dist/http.js.map +0 -1
  130. package/dist/org.d.ts.map +0 -1
  131. package/dist/org.js.map +0 -1
  132. package/dist/secrets.d.ts.map +0 -1
  133. package/dist/secrets.js.map +0 -1
  134. package/dist/sharing.d.ts.map +0 -1
  135. package/dist/sharing.js.map +0 -1
  136. package/dist/vault.d.ts +0 -18
  137. package/dist/vault.d.ts.map +0 -1
  138. package/dist/vault.js +0 -30
  139. package/dist/vault.js.map +0 -1
  140. package/dist/x402.d.ts.map +0 -1
  141. package/dist/x402.js.map +0 -1
  142. /package/dist/{access.js → resources/access.js} +0 -0
  143. /package/dist/{api-keys.js → resources/api-keys.js} +0 -0
  144. /package/dist/{approvals.js → resources/approvals.js} +0 -0
  145. /package/dist/{audit.js → resources/audit.js} +0 -0
  146. /package/dist/{billing.js → resources/billing.js} +0 -0
  147. /package/dist/{chains.js → resources/chains.js} +0 -0
  148. /package/dist/{org.js → resources/org.js} +0 -0
  149. /package/dist/{secrets.js → resources/secrets.js} +0 -0
  150. /package/dist/{sharing.js → resources/sharing.js} +0 -0
package/dist/cmek.d.ts ADDED
@@ -0,0 +1,42 @@
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
+ /**
13
+ * Generate a random 256-bit AES-GCM key.
14
+ * Returns the raw key bytes as a Uint8Array (32 bytes).
15
+ */
16
+ export declare function generateCmekKey(): Promise<Uint8Array>;
17
+ /**
18
+ * Compute the SHA-256 fingerprint of a CMEK key.
19
+ * Returns a 64-character lowercase hex string.
20
+ */
21
+ export declare function cmekFingerprint(key: Uint8Array): Promise<string>;
22
+ /**
23
+ * Encrypt plaintext with a CMEK key using AES-256-GCM.
24
+ * Returns the versioned wire-format blob as a Uint8Array.
25
+ */
26
+ export declare function cmekEncrypt(plaintext: Uint8Array, keyBytes: Uint8Array): Promise<Uint8Array>;
27
+ /**
28
+ * Decrypt a CMEK wire-format blob with the key.
29
+ * Returns the original plaintext as a Uint8Array.
30
+ */
31
+ export declare function cmekDecrypt(blob: Uint8Array, keyBytes: Uint8Array): Promise<Uint8Array>;
32
+ /**
33
+ * Encode a Uint8Array to a base64 string.
34
+ * Works in browsers and Node.js 18+.
35
+ */
36
+ export declare function toBase64(data: Uint8Array): string;
37
+ /**
38
+ * Decode a base64 string to a Uint8Array.
39
+ * Works in browsers and Node.js 18+.
40
+ */
41
+ export declare function fromBase64(b64: string): Uint8Array;
42
+ //# sourceMappingURL=cmek.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmek.d.ts","sourceRoot":"","sources":["../src/cmek.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAaH;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,CAI3D;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAKtE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC7B,SAAS,EAAE,UAAU,EACrB,QAAQ,EAAE,UAAU,GACrB,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,UAAU,GACrB,OAAO,CAAC,UAAU,CAAC,CA0BrB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CASjD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAUlD"}
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
@@ -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 "./types";
2
- import { VaultResource } from "./vault";
3
- import { SecretsResource } from "./secrets";
4
- import { AccessResource } from "./access";
5
- import { AgentsResource } from "./agents";
6
- import { SharingResource } from "./sharing";
7
- import { ApprovalsResource } from "./approvals";
8
- import { BillingResource } from "./billing";
9
- import { AuditResource } from "./audit";
10
- import { OrgResource } from "./org";
11
- import { AuthResource } from "./auth";
12
- import { ApiKeysResource } from "./api-keys";
13
- import { ChainsResource } from "./chains";
14
- import { X402Resource } from "./x402";
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 "./vault";
3
- import { SecretsResource } from "./secrets";
4
- import { AccessResource } from "./access";
5
- import { AgentsResource } from "./agents";
6
- import { SharingResource } from "./sharing";
7
- import { ApprovalsResource } from "./approvals";
8
- import { BillingResource } from "./billing";
9
- import { AuditResource } from "./audit";
10
- import { OrgResource } from "./org";
11
- import { AuthResource } from "./auth";
12
- import { ApiKeysResource } from "./api-keys";
13
- import { ChainsResource } from "./chains";
14
- import { X402Resource } from "./x402";
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.autoAuthenticate(config);
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
- * When an API key is provided without a pre-existing token, lazily
58
- * exchange it for a JWT on construction. This is async but fires
59
- * without blocking the constructor — the first actual request
60
- * will await token resolution.
61
- */
62
- autoAuthenticate(config) {
63
- const authPromise = config.agentId
64
- ? this.http
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 "./types";
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
- case 403:
95
- return new AuthError(message, res.status);
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":"AAEA;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAKnC,YACI,OAAe,EACf,MAAc,EACd,IAAY,EACZ,MAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;CACJ;AAED,6DAA6D;AAC7D,MAAM,OAAO,SAAU,SAAQ,YAAY;IACvC,YAAY,OAAe,EAAE,SAAoB,GAAG;QAChD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC5B,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,0BAA2B,SAAQ,YAAY;IACxD,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,yBAAyB,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC7C,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,OAAO,oBAAqB,SAAQ,YAAY;IAGlD,YAAY,OAAe,EAAE,kBAAsC;QAC/D,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IACjD,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IAGnD,YAAY,iBAAyB,EAAE,OAAgB;QACnD,KAAK,CACD,OAAO,IAAI,kDAAkD,EAC7D,GAAG,EACH,mBAAmB,CACtB,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,CAAC;CACJ;AAED,yCAAyC;AACzC,MAAM,OAAO,aAAc,SAAQ,YAAY;IAC3C,YAAY,UAAkB,oBAAoB;QAC9C,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAChC,CAAC;CACJ;AAED,uFAAuF;AACvF,MAAM,OAAO,cAAe,SAAQ,YAAY;IAG5C,YACI,UAAkB,qBAAqB,EACvC,YAAqB;QAErB,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,CAAC;CACJ;AAED,mEAAmE;AACnE,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAG7C,YAAY,OAAe,EAAE,MAA+B;QACxD,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;CACJ;AAED,yCAAyC;AACzC,MAAM,OAAO,WAAY,SAAQ,YAAY;IACzC,YACI,UAAkB,uBAAuB,EACzC,SAAiB,GAAG;QAEpB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAa;IACjD,IAAI,IAAI,GAA4B,EAAE,CAAC;IACvC,IAAI,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACL,8BAA8B;IAClC,CAAC;IAED,MAAM,OAAO,GACR,IAAI,CAAC,MAAiB;QACtB,IAAI,CAAC,OAAkB;QACvB,IAAI,CAAC,KAAgB;QACtB,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;IAEzB,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,GAAG;YACJ,OAAO,IAAI,eAAe,CACtB,OAAO,EACP,IAAI,CAAC,MAAgC,CACxC,CAAC;QACN,KAAK,GAAG;YACJ,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvC,KAAK,GAAG,CAAC,CAAC,CAAC;YACP,MAAM,SAAS,GAAG,IAAI,CAAC,IAAc,CAAC;YACtC,IAAI,SAAS,KAAK,yBAAyB,EAAE,CAAC;gBAC1C,OAAO,IAAI,0BAA0B,CAAC,OAAO,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,SAAS,KAAK,mBAAmB,EAAE,CAAC;gBACpC,MAAM,UAAU,GAAI,IAAI,CAAC,mBAA8B,IAAI,EAAE,CAAC;gBAC9D,OAAO,IAAI,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1D,CAAC;YACD,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,GAAG,CAAC,CAAC,CAAC;YACP,MAAM,WAAW,GAAG,IAAqC,CAAC;YAC1D,OAAO,IAAI,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1D,CAAC;QACD,KAAK,GAAG;YACJ,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;QACtC,KAAK,GAAG,CAAC,CAAC,CAAC;YACP,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACnD,MAAM,YAAY,GAAG,WAAW;gBAC5B,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,IAAI;gBAClC,CAAC,CAAC,SAAS,CAAC;YAChB,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACrD,CAAC;QACD;YACI,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG;gBAAE,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACnE,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;AACL,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { OneclawClientConfig, OneclawResponse } from "./types";
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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"}