@1claw/sdk 0.17.0 → 0.19.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 CHANGED
@@ -76,7 +76,7 @@ await client.auth.resetPassword({ token: "...", new_password: "..." });
76
76
 
77
77
  | Resource | Methods |
78
78
  | ------------------ | ------------------------------------------------------------------------------------------------------------------- |
79
- | `client.vault` | `create`, `get`, `list`, `delete` |
79
+ | `client.vault` | `create`, `get`, `list`, `delete`, `enableMpc`, `disableMpc` |
80
80
  | `client.secrets` | `set`, `get`, `delete`, `list`, `rotate` |
81
81
  | `client.access` | `grantHuman`, `grantAgent`, `update`, `revoke`, `listGrants` |
82
82
  | `client.agents` | `create`, `getSelf`, `get`, `list`, `update`, `delete`, `rotateKey`, `submitTransaction`, `signTransaction`, `getTransaction`, `listTransactions`, `simulateTransaction`, `simulateBundle` |
@@ -265,6 +265,30 @@ const job = await client.vault.getRotationJobStatus(vaultId, jobId);
265
265
  console.log(job.data?.status, job.data?.processed, "/", job.data?.total_secrets);
266
266
  ```
267
267
 
268
+ ## MPC Vault Support
269
+
270
+ Vaults can optionally use multi-party computation (MPC) for secret splitting. When MPC is enabled, the server holds one share and the client holds another — neither party can reconstruct the secret alone.
271
+
272
+ ```typescript
273
+ // Enable MPC on a vault
274
+ await client.vault.enableMpc(vaultId);
275
+
276
+ // Store a secret — response includes the client_share
277
+ const res = await client.secrets.set(vaultId, "my-key", "secret-value");
278
+ const clientShare = res.data?.client_share; // Save this securely on your side
279
+
280
+ // Retrieve a secret — pass client_share to reconstruct
281
+ const secret = await client.secrets.get(vaultId, "my-key", {
282
+ client_share: clientShare,
283
+ });
284
+ console.log(secret.data?.value);
285
+
286
+ // Disable MPC (converts back to standard encryption)
287
+ await client.vault.disableMpc(vaultId);
288
+ ```
289
+
290
+ When MPC is enabled, `set` responses include a `client_share` field that must be stored client-side. The `get` method accepts an optional `client_share` parameter to reconstruct the full secret. Without the client share, the server returns only its share.
291
+
268
292
  ## Agent Token Auto-Refresh
269
293
 
270
294
  When using agent credentials (`agentId` + `apiKey`), the SDK automatically refreshes tokens 60 seconds before expiry. No manual token management needed:
@@ -539,6 +539,28 @@ export interface paths {
539
539
  patch?: never;
540
540
  trace?: never;
541
541
  };
542
+ "/v1/vaults/{vault_id}/mpc": {
543
+ parameters: {
544
+ query?: never;
545
+ header?: never;
546
+ path?: never;
547
+ cookie?: never;
548
+ };
549
+ get?: never;
550
+ put?: never;
551
+ /**
552
+ * Enable MPC custody on a vault
553
+ * @description Enable MPC custody on an existing vault. Requires Business or Enterprise plan.
554
+ * Splits secret encryption keys across multiple providers using the specified
555
+ * custody mode (e.g. 2-of-2, 2-of-3).
556
+ */
557
+ post: operations["enableMpc"];
558
+ delete?: never;
559
+ options?: never;
560
+ head?: never;
561
+ patch?: never;
562
+ trace?: never;
563
+ };
542
564
  "/v1/vaults/{vault_id}/secrets": {
543
565
  parameters: {
544
566
  query?: never;
@@ -575,6 +597,83 @@ export interface paths {
575
597
  patch?: never;
576
598
  trace?: never;
577
599
  };
600
+ "/v1/vaults/{vault_id}/secret-versions/{path}": {
601
+ parameters: {
602
+ query?: never;
603
+ header?: never;
604
+ path?: never;
605
+ cookie?: never;
606
+ };
607
+ /** List all versions of a secret */
608
+ get: operations["listSecretVersions"];
609
+ put?: never;
610
+ post?: never;
611
+ delete?: never;
612
+ options?: never;
613
+ head?: never;
614
+ patch?: never;
615
+ trace?: never;
616
+ };
617
+ "/v1/vaults/{vault_id}/secret-version/{path}/{version}": {
618
+ parameters: {
619
+ query?: never;
620
+ header?: never;
621
+ path?: never;
622
+ cookie?: never;
623
+ };
624
+ /** Retrieve a specific version of a secret */
625
+ get: operations["getSecretVersion"];
626
+ put?: never;
627
+ post?: never;
628
+ delete?: never;
629
+ options?: never;
630
+ head?: never;
631
+ patch?: never;
632
+ trace?: never;
633
+ };
634
+ "/v1/vaults/{vault_id}/secret-version/{path}/{version}/disable": {
635
+ parameters: {
636
+ query?: never;
637
+ header?: never;
638
+ path?: never;
639
+ cookie?: never;
640
+ };
641
+ get?: never;
642
+ put?: never;
643
+ /**
644
+ * Disable a specific secret version
645
+ * @description Disables a version so it can no longer be read. The version is
646
+ * retained for audit purposes but returns 410 on read attempts.
647
+ */
648
+ post: operations["disableSecretVersion"];
649
+ delete?: never;
650
+ options?: never;
651
+ head?: never;
652
+ patch?: never;
653
+ trace?: never;
654
+ };
655
+ "/v1/vaults/{vault_id}/secret-rotate/{path}": {
656
+ parameters: {
657
+ query?: never;
658
+ header?: never;
659
+ path?: never;
660
+ cookie?: never;
661
+ };
662
+ get?: never;
663
+ put?: never;
664
+ /**
665
+ * Server-side secret rotation
666
+ * @description Generates a cryptographically random value and stores it as a new
667
+ * version of the secret. The previous version is preserved in history.
668
+ * Requires rotate or write permission.
669
+ */
670
+ post: operations["rotateSecret"];
671
+ delete?: never;
672
+ options?: never;
673
+ head?: never;
674
+ patch?: never;
675
+ trace?: never;
676
+ };
578
677
  "/v1/vaults/{vault_id}/policies": {
579
678
  parameters: {
580
679
  query?: never;
@@ -1793,6 +1892,62 @@ export interface paths {
1793
1892
  patch?: never;
1794
1893
  trace?: never;
1795
1894
  };
1895
+ "/v1/shroud/threat-summary": {
1896
+ parameters: {
1897
+ query?: never;
1898
+ header?: never;
1899
+ path?: never;
1900
+ cookie?: never;
1901
+ };
1902
+ /**
1903
+ * Shroud threat analytics summary
1904
+ * @description Aggregated threat metrics for the organization from `shroud_activity` (detectors, blocked counts, recent flagged requests). Query `period` selects the window; the previous window of equal length is used for request volume trend.
1905
+ */
1906
+ get: {
1907
+ parameters: {
1908
+ query?: {
1909
+ /** @description Rolling window ending now */
1910
+ period?: "1h" | "24h" | "7d" | "30d";
1911
+ };
1912
+ header?: never;
1913
+ path?: never;
1914
+ cookie?: never;
1915
+ };
1916
+ requestBody?: never;
1917
+ responses: {
1918
+ /** @description Threat summary */
1919
+ 200: {
1920
+ headers: {
1921
+ [name: string]: unknown;
1922
+ };
1923
+ content: {
1924
+ "application/json": components["schemas"]["ShroudThreatSummary"];
1925
+ };
1926
+ };
1927
+ /** @description Invalid period */
1928
+ 400: {
1929
+ headers: {
1930
+ [name: string]: unknown;
1931
+ };
1932
+ content?: never;
1933
+ };
1934
+ /** @description Unauthorized */
1935
+ 401: {
1936
+ headers: {
1937
+ [name: string]: unknown;
1938
+ };
1939
+ content?: never;
1940
+ };
1941
+ };
1942
+ };
1943
+ put?: never;
1944
+ post?: never;
1945
+ delete?: never;
1946
+ options?: never;
1947
+ head?: never;
1948
+ patch?: never;
1949
+ trace?: never;
1950
+ };
1796
1951
  }
1797
1952
  export type webhooks = Record<string, never>;
1798
1953
  export interface components {
@@ -1991,6 +2146,8 @@ export interface components {
1991
2146
  CreateVaultRequest: {
1992
2147
  name: string;
1993
2148
  description?: string;
2149
+ /** @description MPC custody mode to enable at creation (e.g. "2-of-2", "2-of-3") */
2150
+ mpc_custody?: string;
1994
2151
  };
1995
2152
  VaultResponse: {
1996
2153
  /** Format: uuid */
@@ -2005,6 +2162,12 @@ export interface components {
2005
2162
  cmek_enabled?: boolean;
2006
2163
  /** @description SHA-256 fingerprint of the CMEK key (64 hex chars) */
2007
2164
  cmek_fingerprint?: string;
2165
+ /** @description MPC custody mode (e.g. "2-of-2", "2-of-3"), absent when MPC is not enabled */
2166
+ mpc_custody?: string;
2167
+ /** @description Number of shares required to reconstruct the key */
2168
+ mpc_threshold?: number;
2169
+ /** @description List of MPC share providers (e.g. ["server", "client"]) */
2170
+ mpc_providers?: string[];
2008
2171
  };
2009
2172
  VaultListResponse: {
2010
2173
  vaults?: components["schemas"]["VaultResponse"][];
@@ -2036,6 +2199,10 @@ export interface components {
2036
2199
  /** Format: date-time */
2037
2200
  created_at: string;
2038
2201
  };
2202
+ EnableMpcRequest: {
2203
+ /** @description MPC custody mode (e.g. "2-of-2", "2-of-3") */
2204
+ mpc_custody: string;
2205
+ };
2039
2206
  PutSecretRequest: {
2040
2207
  /**
2041
2208
  * @description Secret type (generic, password, api_key, certificate, private_key, ssh_key, env)
@@ -2066,6 +2233,25 @@ export interface components {
2066
2233
  created_at: string;
2067
2234
  /** Format: date-time */
2068
2235
  expires_at?: string;
2236
+ /** @description Whether this version has been disabled (retained for audit but unreadable) */
2237
+ is_disabled?: boolean;
2238
+ };
2239
+ /** @description Returned when a secret is created or updated. Extends SecretMetadataResponse with an optional client_share for MPC vaults. */
2240
+ SecretCreatedResponse: {
2241
+ /** Format: uuid */
2242
+ id: string;
2243
+ path: string;
2244
+ type: string;
2245
+ version: number;
2246
+ metadata?: {
2247
+ [key: string]: unknown;
2248
+ };
2249
+ /** Format: date-time */
2250
+ created_at: string;
2251
+ /** Format: date-time */
2252
+ expires_at?: string;
2253
+ /** @description Base64-encoded client key share. Returned only for MPC 2-of-2 vaults. The client must store this share securely — it is not persisted server-side. */
2254
+ client_share?: string;
2069
2255
  };
2070
2256
  SecretResponse: {
2071
2257
  /** Format: uuid */
@@ -2088,6 +2274,20 @@ export interface components {
2088
2274
  SecretListResponse: {
2089
2275
  secrets?: components["schemas"]["SecretMetadataResponse"][];
2090
2276
  };
2277
+ SecretVersionListResponse: {
2278
+ versions?: components["schemas"]["SecretMetadataResponse"][];
2279
+ };
2280
+ RotateSecretRequest: {
2281
+ /** @description Length of the generated value (default 32) */
2282
+ length?: number;
2283
+ /**
2284
+ * @description Character set for the generated value (default hex)
2285
+ * @enum {string}
2286
+ */
2287
+ charset?: "hex" | "base64" | "alphanumeric" | "ascii";
2288
+ /** @description Override the secret type (defaults to existing secret's type) */
2289
+ type?: string;
2290
+ };
2091
2291
  CreatePolicyRequest: {
2092
2292
  secret_path_pattern: string;
2093
2293
  /** @enum {string} */
@@ -3232,6 +3432,46 @@ export interface components {
3232
3432
  policy_violations?: string[];
3233
3433
  metadata?: Record<string, never>;
3234
3434
  };
3435
+ ShroudThreatSummary: {
3436
+ /** Format: int64 */
3437
+ total_requests?: number;
3438
+ /** Format: int64 */
3439
+ total_requests_prev?: number;
3440
+ /** Format: int64 */
3441
+ blocked_requests?: number;
3442
+ /** Format: int64 */
3443
+ detectors_triggered?: number;
3444
+ /** Format: int64 */
3445
+ active_agents?: number;
3446
+ detectors?: components["schemas"]["ShroudDetectorStats"][];
3447
+ flagged_requests?: components["schemas"]["ShroudFlaggedRequest"][];
3448
+ };
3449
+ ShroudDetectorStats: {
3450
+ detector?: string;
3451
+ /** Format: int64 */
3452
+ detections?: number;
3453
+ /** Format: int64 */
3454
+ blocks?: number;
3455
+ actions?: {
3456
+ /** Format: int64 */
3457
+ blocked?: number;
3458
+ /** Format: int64 */
3459
+ warned?: number;
3460
+ /** Format: int64 */
3461
+ logged?: number;
3462
+ };
3463
+ };
3464
+ ShroudFlaggedRequest: {
3465
+ id?: string;
3466
+ /** Format: date-time */
3467
+ timestamp?: string;
3468
+ agent_id?: string;
3469
+ agent_name?: string;
3470
+ score?: number;
3471
+ reason?: string;
3472
+ /** @enum {string} */
3473
+ action?: "blocked" | "warned" | "logged";
3474
+ };
3235
3475
  HealthResponse: {
3236
3476
  /** @enum {string} */
3237
3477
  status?: "healthy" | "degraded";
@@ -4154,6 +4394,35 @@ export interface operations {
4154
4394
  404: components["responses"]["NotFound"];
4155
4395
  };
4156
4396
  };
4397
+ enableMpc: {
4398
+ parameters: {
4399
+ query?: never;
4400
+ header?: never;
4401
+ path: {
4402
+ vault_id: components["parameters"]["VaultId"];
4403
+ };
4404
+ cookie?: never;
4405
+ };
4406
+ requestBody: {
4407
+ content: {
4408
+ "application/json": components["schemas"]["EnableMpcRequest"];
4409
+ };
4410
+ };
4411
+ responses: {
4412
+ /** @description MPC custody enabled */
4413
+ 200: {
4414
+ headers: {
4415
+ [name: string]: unknown;
4416
+ };
4417
+ content: {
4418
+ "application/json": components["schemas"]["VaultResponse"];
4419
+ };
4420
+ };
4421
+ 400: components["responses"]["BadRequest"];
4422
+ 403: components["responses"]["Forbidden"];
4423
+ 404: components["responses"]["NotFound"];
4424
+ };
4425
+ };
4157
4426
  listSecrets: {
4158
4427
  parameters: {
4159
4428
  query?: {
@@ -4183,7 +4452,10 @@ export interface operations {
4183
4452
  getSecret: {
4184
4453
  parameters: {
4185
4454
  query?: never;
4186
- header?: never;
4455
+ header?: {
4456
+ /** @description Base64-encoded client key share for MPC 2-of-2 vaults. Required when the vault uses 2-of-2 MPC custody. */
4457
+ "x-client-share"?: string;
4458
+ };
4187
4459
  path: {
4188
4460
  vault_id: components["parameters"]["VaultId"];
4189
4461
  /** @description Secret path (e.g. "db/credentials") */
@@ -4229,7 +4501,7 @@ export interface operations {
4229
4501
  [name: string]: unknown;
4230
4502
  };
4231
4503
  content: {
4232
- "application/json": components["schemas"]["SecretMetadataResponse"];
4504
+ "application/json": components["schemas"]["SecretCreatedResponse"];
4233
4505
  };
4234
4506
  };
4235
4507
  400: components["responses"]["BadRequest"];
@@ -4259,6 +4531,118 @@ export interface operations {
4259
4531
  404: components["responses"]["NotFound"];
4260
4532
  };
4261
4533
  };
4534
+ listSecretVersions: {
4535
+ parameters: {
4536
+ query?: never;
4537
+ header?: never;
4538
+ path: {
4539
+ vault_id: components["parameters"]["VaultId"];
4540
+ /** @description Secret path (e.g. "db/credentials") */
4541
+ path: components["parameters"]["SecretPath"];
4542
+ };
4543
+ cookie?: never;
4544
+ };
4545
+ requestBody?: never;
4546
+ responses: {
4547
+ /** @description Version list */
4548
+ 200: {
4549
+ headers: {
4550
+ [name: string]: unknown;
4551
+ };
4552
+ content: {
4553
+ "application/json": components["schemas"]["SecretVersionListResponse"];
4554
+ };
4555
+ };
4556
+ 404: components["responses"]["NotFound"];
4557
+ };
4558
+ };
4559
+ getSecretVersion: {
4560
+ parameters: {
4561
+ query?: never;
4562
+ header?: never;
4563
+ path: {
4564
+ vault_id: components["parameters"]["VaultId"];
4565
+ /** @description Secret path (e.g. "db/credentials") */
4566
+ path: components["parameters"]["SecretPath"];
4567
+ version: number;
4568
+ };
4569
+ cookie?: never;
4570
+ };
4571
+ requestBody?: never;
4572
+ responses: {
4573
+ /** @description Decrypted secret value at the specified version */
4574
+ 200: {
4575
+ headers: {
4576
+ [name: string]: unknown;
4577
+ };
4578
+ content: {
4579
+ "application/json": components["schemas"]["SecretResponse"];
4580
+ };
4581
+ };
4582
+ 404: components["responses"]["NotFound"];
4583
+ /** @description Version has been disabled or expired */
4584
+ 410: {
4585
+ headers: {
4586
+ [name: string]: unknown;
4587
+ };
4588
+ content?: never;
4589
+ };
4590
+ };
4591
+ };
4592
+ disableSecretVersion: {
4593
+ parameters: {
4594
+ query?: never;
4595
+ header?: never;
4596
+ path: {
4597
+ vault_id: components["parameters"]["VaultId"];
4598
+ /** @description Secret path (e.g. "db/credentials") */
4599
+ path: components["parameters"]["SecretPath"];
4600
+ version: number;
4601
+ };
4602
+ cookie?: never;
4603
+ };
4604
+ requestBody?: never;
4605
+ responses: {
4606
+ /** @description Version disabled */
4607
+ 204: {
4608
+ headers: {
4609
+ [name: string]: unknown;
4610
+ };
4611
+ content?: never;
4612
+ };
4613
+ 404: components["responses"]["NotFound"];
4614
+ };
4615
+ };
4616
+ rotateSecret: {
4617
+ parameters: {
4618
+ query?: never;
4619
+ header?: never;
4620
+ path: {
4621
+ vault_id: components["parameters"]["VaultId"];
4622
+ /** @description Secret path (e.g. "db/credentials") */
4623
+ path: components["parameters"]["SecretPath"];
4624
+ };
4625
+ cookie?: never;
4626
+ };
4627
+ requestBody?: {
4628
+ content: {
4629
+ "application/json": components["schemas"]["RotateSecretRequest"];
4630
+ };
4631
+ };
4632
+ responses: {
4633
+ /** @description New version created with server-generated value */
4634
+ 201: {
4635
+ headers: {
4636
+ [name: string]: unknown;
4637
+ };
4638
+ content: {
4639
+ "application/json": components["schemas"]["SecretCreatedResponse"];
4640
+ };
4641
+ };
4642
+ 400: components["responses"]["BadRequest"];
4643
+ 404: components["responses"]["NotFound"];
4644
+ };
4645
+ };
4262
4646
  listPolicies: {
4263
4647
  parameters: {
4264
4648
  query?: never;