@1claw/sdk 0.32.0 → 0.33.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.
@@ -1465,8 +1465,14 @@ export interface paths {
1465
1465
  /**
1466
1466
  * Lease a short-lived Bankr wallet API key
1467
1467
  * @description Provision a scoped, time-limited Bankr wallet API key for an agent.
1468
- * Requires `BANKR_PARTNER_KEY` configured on the Vault service.
1469
- * Default TTL 1 hour, max 24 hours. Max 5 concurrent leases per agent.
1468
+ * **Privileged, deny-by-default:** agent callers need an explicit access policy
1469
+ * on `agents/{agent_id}/bankr/*` in the `__agent-keys` vault (JWT scope
1470
+ * `agents/{agent_id}/bankr/lease`). Agents may only lease for their own ID.
1471
+ * The `bk_usr_` key is **omitted** from the JSON response for agent JWTs —
1472
+ * stored server-side for Shroud resolution. Human callers receive `api_key` once.
1473
+ * Requires `BANKR_PARTNER_KEY` on Vault. Agent default TTL 15 min when omitted;
1474
+ * human/org default 1 hour (`BANKR_DEFAULT_LEASE_TTL_SECS`). Recommend 5–15 min
1475
+ * for autonomous agents. Max TTL 24 hours. Max 5 concurrent leases per agent.
1470
1476
  */
1471
1477
  post: operations["leaseBankrKey"];
1472
1478
  delete?: never;
@@ -2426,6 +2432,28 @@ export interface paths {
2426
2432
  patch?: never;
2427
2433
  trace?: never;
2428
2434
  };
2435
+ "/v1/treasury/wallets/spend-policy": {
2436
+ parameters: {
2437
+ query?: never;
2438
+ header?: never;
2439
+ path?: never;
2440
+ cookie?: never;
2441
+ };
2442
+ /**
2443
+ * Get effective spend policy for current user
2444
+ * @description Returns the effective spend policy governing the authenticated user's
2445
+ * wallet transactions. Resolves from per-user override (if set) or the
2446
+ * app-wide default. Returns null if no policy is configured.
2447
+ */
2448
+ get: operations["getEffectiveSpendPolicy"];
2449
+ put?: never;
2450
+ post?: never;
2451
+ delete?: never;
2452
+ options?: never;
2453
+ head?: never;
2454
+ patch?: never;
2455
+ trace?: never;
2456
+ };
2429
2457
  "/v1/webhooks": {
2430
2458
  parameters: {
2431
2459
  query?: never;
@@ -3562,6 +3590,71 @@ export interface paths {
3562
3590
  patch?: never;
3563
3591
  trace?: never;
3564
3592
  };
3593
+ "/v1/platform/apps/{appId}/spend-policies": {
3594
+ parameters: {
3595
+ query?: never;
3596
+ header?: never;
3597
+ path?: never;
3598
+ cookie?: never;
3599
+ };
3600
+ /**
3601
+ * List spend policies for app
3602
+ * @description Returns all spend policies configured for the platform app.
3603
+ */
3604
+ get: operations["listSpendPolicies"];
3605
+ put?: never;
3606
+ /**
3607
+ * Create wallet spend policy
3608
+ * @description Create an app-wide spend policy that governs what embedded wallet users
3609
+ * can do with their wallets. Policies apply to all connected users by default
3610
+ * and can be overridden per-user via connection-level policies.
3611
+ */
3612
+ post: operations["createSpendPolicy"];
3613
+ delete?: never;
3614
+ options?: never;
3615
+ head?: never;
3616
+ patch?: never;
3617
+ trace?: never;
3618
+ };
3619
+ "/v1/platform/apps/{appId}/spend-policies/{policyId}": {
3620
+ parameters: {
3621
+ query?: never;
3622
+ header?: never;
3623
+ path?: never;
3624
+ cookie?: never;
3625
+ };
3626
+ get?: never;
3627
+ put?: never;
3628
+ post?: never;
3629
+ /** Delete a spend policy */
3630
+ delete: operations["deleteSpendPolicy"];
3631
+ options?: never;
3632
+ head?: never;
3633
+ patch?: never;
3634
+ trace?: never;
3635
+ };
3636
+ "/v1/platform/connections/{connectionId}/spend-policy": {
3637
+ parameters: {
3638
+ query?: never;
3639
+ header?: never;
3640
+ path?: never;
3641
+ cookie?: never;
3642
+ };
3643
+ get?: never;
3644
+ /**
3645
+ * Set per-user spend policy override
3646
+ * @description Override the app-wide spend policy for a specific connected user. This
3647
+ * policy takes precedence over the app default. Remove by deleting the
3648
+ * connection-level policy.
3649
+ */
3650
+ put: operations["setUserSpendPolicy"];
3651
+ post?: never;
3652
+ delete?: never;
3653
+ options?: never;
3654
+ head?: never;
3655
+ patch?: never;
3656
+ trace?: never;
3657
+ };
3565
3658
  "/v1/approvals": {
3566
3659
  parameters: {
3567
3660
  query?: never;
@@ -3819,6 +3912,118 @@ export interface paths {
3819
3912
  patch?: never;
3820
3913
  trace?: never;
3821
3914
  };
3915
+ "/v1/auth/email-otp/send": {
3916
+ parameters: {
3917
+ query?: never;
3918
+ header?: never;
3919
+ path?: never;
3920
+ cookie?: never;
3921
+ };
3922
+ get?: never;
3923
+ put?: never;
3924
+ /**
3925
+ * Send email OTP code
3926
+ * @description Sends a 6-digit one-time code to the specified email address.
3927
+ * No authentication required. Rate-limited per IP and per email.
3928
+ */
3929
+ post: operations["sendEmailOtp"];
3930
+ delete?: never;
3931
+ options?: never;
3932
+ head?: never;
3933
+ patch?: never;
3934
+ trace?: never;
3935
+ };
3936
+ "/v1/auth/email-otp/verify": {
3937
+ parameters: {
3938
+ query?: never;
3939
+ header?: never;
3940
+ path?: never;
3941
+ cookie?: never;
3942
+ };
3943
+ get?: never;
3944
+ put?: never;
3945
+ /**
3946
+ * Verify email OTP and get JWT
3947
+ * @description Verifies the 6-digit code sent to the user's email. If the user does not
3948
+ * exist, a new account is created. Optionally auto-provisions treasury wallets
3949
+ * for the specified chains. Returns a JWT for subsequent API calls.
3950
+ */
3951
+ post: operations["verifyEmailOtp"];
3952
+ delete?: never;
3953
+ options?: never;
3954
+ head?: never;
3955
+ patch?: never;
3956
+ trace?: never;
3957
+ };
3958
+ "/v1/oauth/authorize": {
3959
+ parameters: {
3960
+ query?: never;
3961
+ header?: never;
3962
+ path?: never;
3963
+ cookie?: never;
3964
+ };
3965
+ /**
3966
+ * Get OAuth consent info
3967
+ * @description Returns information about the platform app requesting authorization so the
3968
+ * UI can display a consent screen. Used by the 1Claw-hosted consent page.
3969
+ */
3970
+ get: operations["getOAuthConsent"];
3971
+ put?: never;
3972
+ /**
3973
+ * Submit OAuth consent decision
3974
+ * @description The user approves or denies the authorization request. On approval, returns
3975
+ * a redirect URL containing the authorization code. On denial, returns a
3976
+ * redirect URL with an error parameter.
3977
+ */
3978
+ post: operations["submitOAuthConsent"];
3979
+ delete?: never;
3980
+ options?: never;
3981
+ head?: never;
3982
+ patch?: never;
3983
+ trace?: never;
3984
+ };
3985
+ "/v1/oauth/token": {
3986
+ parameters: {
3987
+ query?: never;
3988
+ header?: never;
3989
+ path?: never;
3990
+ cookie?: never;
3991
+ };
3992
+ get?: never;
3993
+ put?: never;
3994
+ /**
3995
+ * Exchange authorization code for tokens
3996
+ * @description Standard OAuth 2.0 token endpoint. Exchanges an authorization code for an
3997
+ * access token and optional OIDC ID token. Supports PKCE via `code_verifier`.
3998
+ */
3999
+ post: operations["exchangeOAuthToken"];
4000
+ delete?: never;
4001
+ options?: never;
4002
+ head?: never;
4003
+ patch?: never;
4004
+ trace?: never;
4005
+ };
4006
+ "/v1/oauth/userinfo": {
4007
+ parameters: {
4008
+ query?: never;
4009
+ header?: never;
4010
+ path?: never;
4011
+ cookie?: never;
4012
+ };
4013
+ /**
4014
+ * Get authenticated user info (OIDC UserInfo)
4015
+ * @description Standard OIDC UserInfo endpoint. Returns claims about the authenticated user
4016
+ * based on the granted scopes.
4017
+ */
4018
+ get: operations["getOAuthUserInfo"];
4019
+ put?: never;
4020
+ post?: never;
4021
+ delete?: never;
4022
+ options?: never;
4023
+ head?: never;
4024
+ patch?: never;
4025
+ trace?: never;
4026
+ };
3822
4027
  }
3823
4028
  export type webhooks = Record<string, never>;
3824
4029
  export interface components {
@@ -4912,7 +5117,7 @@ export interface components {
4912
5117
  LeaseBankrKeyResponse: {
4913
5118
  /** Format: uuid */
4914
5119
  lease_id?: string;
4915
- /** @description Ephemeral bk_usr_ key (one-time display). */
5120
+ /** @description Ephemeral bk_usr_ key. Present for human callers only; omitted for agent JWTs. */
4916
5121
  api_key?: string;
4917
5122
  wallet_id?: string;
4918
5123
  /** Format: date-time */
@@ -6101,6 +6306,85 @@ export interface components {
6101
6306
  /** Format: date-time */
6102
6307
  created_at: string;
6103
6308
  };
6309
+ EmailOtpVerifyResponse: {
6310
+ /** @description JWT access token */
6311
+ token: string;
6312
+ /** Format: uuid */
6313
+ user_id: string;
6314
+ /** Format: uuid */
6315
+ org_id: string;
6316
+ is_new_user: boolean;
6317
+ /** Format: email */
6318
+ email: string;
6319
+ /** @description Ethereum address if auto_provision_chains included an EVM chain */
6320
+ wallet_address?: string | null;
6321
+ };
6322
+ OAuthConsentResponse: {
6323
+ app_name: string;
6324
+ app_slug: string;
6325
+ /** Format: uri */
6326
+ app_logo_url?: string | null;
6327
+ scopes: string[];
6328
+ /** Format: uri */
6329
+ redirect_uri: string;
6330
+ already_consented: boolean;
6331
+ };
6332
+ OAuthTokenResponse: {
6333
+ access_token: string;
6334
+ /** @enum {string} */
6335
+ token_type: "Bearer";
6336
+ /** @description Token lifetime in seconds */
6337
+ expires_in: number;
6338
+ /** @description OIDC ID token (when openid scope was granted) */
6339
+ id_token?: string | null;
6340
+ scope: string;
6341
+ };
6342
+ OAuthUserInfoResponse: {
6343
+ /** Format: uuid */
6344
+ sub: string;
6345
+ /** Format: email */
6346
+ email: string;
6347
+ name?: string | null;
6348
+ wallet_address?: string | null;
6349
+ };
6350
+ CreateSpendPolicyRequest: {
6351
+ /**
6352
+ * Format: uuid
6353
+ * @description Scope to a specific user (app-level policies only)
6354
+ */
6355
+ user_id?: string;
6356
+ /** @description Permitted destination addresses (empty = unrestricted) */
6357
+ to_allowlist?: string[];
6358
+ /** @description Blocked destination addresses */
6359
+ to_denylist?: string[];
6360
+ /** @description Maximum value per transaction in ETH (decimal string) */
6361
+ max_value_per_tx_eth?: string;
6362
+ /** @description Rolling 24h spend cap in ETH (decimal string) */
6363
+ daily_limit_eth?: string;
6364
+ /** @description Chains the user may transact on (empty = all enabled) */
6365
+ allowed_chains?: string[];
6366
+ /** @description Permitted ERC-20 token contract addresses */
6367
+ allowed_tokens?: string[];
6368
+ /** @description Maximum number of transactions per 24h window */
6369
+ max_transactions_per_day?: number;
6370
+ };
6371
+ SpendPolicyResponse: {
6372
+ /** Format: uuid */
6373
+ id: string;
6374
+ /** Format: uuid */
6375
+ platform_app_id: string;
6376
+ /** Format: uuid */
6377
+ user_id?: string | null;
6378
+ to_allowlist?: string[];
6379
+ to_denylist?: string[];
6380
+ max_value_per_tx_eth?: string | null;
6381
+ daily_limit_eth?: string | null;
6382
+ allowed_chains?: string[];
6383
+ allowed_tokens?: string[];
6384
+ max_transactions_per_day?: number | null;
6385
+ /** Format: date-time */
6386
+ created_at: string;
6387
+ };
6104
6388
  };
6105
6389
  responses: {
6106
6390
  /** @description Invalid request */
@@ -10119,6 +10403,29 @@ export interface operations {
10119
10403
  404: components["responses"]["NotFound"];
10120
10404
  };
10121
10405
  };
10406
+ getEffectiveSpendPolicy: {
10407
+ parameters: {
10408
+ query?: never;
10409
+ header?: never;
10410
+ path?: never;
10411
+ cookie?: never;
10412
+ };
10413
+ requestBody?: never;
10414
+ responses: {
10415
+ /** @description Effective spend policy */
10416
+ 200: {
10417
+ headers: {
10418
+ [name: string]: unknown;
10419
+ };
10420
+ content: {
10421
+ "application/json": {
10422
+ policy?: components["schemas"]["SpendPolicyResponse"] | null;
10423
+ };
10424
+ };
10425
+ };
10426
+ 401: components["responses"]["Unauthorized"];
10427
+ };
10428
+ };
10122
10429
  listWebhooks: {
10123
10430
  parameters: {
10124
10431
  query?: never;
@@ -10556,6 +10863,108 @@ export interface operations {
10556
10863
  };
10557
10864
  };
10558
10865
  };
10866
+ listSpendPolicies: {
10867
+ parameters: {
10868
+ query?: never;
10869
+ header?: never;
10870
+ path: {
10871
+ appId: string;
10872
+ };
10873
+ cookie?: never;
10874
+ };
10875
+ requestBody?: never;
10876
+ responses: {
10877
+ /** @description Spend policies */
10878
+ 200: {
10879
+ headers: {
10880
+ [name: string]: unknown;
10881
+ };
10882
+ content: {
10883
+ "application/json": {
10884
+ policies?: components["schemas"]["SpendPolicyResponse"][];
10885
+ };
10886
+ };
10887
+ };
10888
+ };
10889
+ };
10890
+ createSpendPolicy: {
10891
+ parameters: {
10892
+ query?: never;
10893
+ header?: never;
10894
+ path: {
10895
+ appId: string;
10896
+ };
10897
+ cookie?: never;
10898
+ };
10899
+ requestBody: {
10900
+ content: {
10901
+ "application/json": components["schemas"]["CreateSpendPolicyRequest"];
10902
+ };
10903
+ };
10904
+ responses: {
10905
+ /** @description Spend policy created */
10906
+ 201: {
10907
+ headers: {
10908
+ [name: string]: unknown;
10909
+ };
10910
+ content: {
10911
+ "application/json": components["schemas"]["SpendPolicyResponse"];
10912
+ };
10913
+ };
10914
+ 400: components["responses"]["BadRequest"];
10915
+ 403: components["responses"]["Forbidden"];
10916
+ };
10917
+ };
10918
+ deleteSpendPolicy: {
10919
+ parameters: {
10920
+ query?: never;
10921
+ header?: never;
10922
+ path: {
10923
+ appId: string;
10924
+ policyId: string;
10925
+ };
10926
+ cookie?: never;
10927
+ };
10928
+ requestBody?: never;
10929
+ responses: {
10930
+ /** @description Deleted */
10931
+ 204: {
10932
+ headers: {
10933
+ [name: string]: unknown;
10934
+ };
10935
+ content?: never;
10936
+ };
10937
+ 404: components["responses"]["NotFound"];
10938
+ };
10939
+ };
10940
+ setUserSpendPolicy: {
10941
+ parameters: {
10942
+ query?: never;
10943
+ header?: never;
10944
+ path: {
10945
+ connectionId: string;
10946
+ };
10947
+ cookie?: never;
10948
+ };
10949
+ requestBody: {
10950
+ content: {
10951
+ "application/json": components["schemas"]["CreateSpendPolicyRequest"];
10952
+ };
10953
+ };
10954
+ responses: {
10955
+ /** @description Spend policy set */
10956
+ 200: {
10957
+ headers: {
10958
+ [name: string]: unknown;
10959
+ };
10960
+ content: {
10961
+ "application/json": components["schemas"]["SpendPolicyResponse"];
10962
+ };
10963
+ };
10964
+ 400: components["responses"]["BadRequest"];
10965
+ 403: components["responses"]["Forbidden"];
10966
+ };
10967
+ };
10559
10968
  listApprovals: {
10560
10969
  parameters: {
10561
10970
  query?: {
@@ -10978,5 +11387,256 @@ export interface operations {
10978
11387
  };
10979
11388
  };
10980
11389
  };
11390
+ sendEmailOtp: {
11391
+ parameters: {
11392
+ query?: never;
11393
+ header?: never;
11394
+ path?: never;
11395
+ cookie?: never;
11396
+ };
11397
+ requestBody: {
11398
+ content: {
11399
+ "application/json": {
11400
+ /** Format: email */
11401
+ email: string;
11402
+ /**
11403
+ * Format: uuid
11404
+ * @description Optional platform app context for embedded wallet flows
11405
+ */
11406
+ platform_app_id?: string;
11407
+ };
11408
+ };
11409
+ };
11410
+ responses: {
11411
+ /** @description OTP sent */
11412
+ 200: {
11413
+ headers: {
11414
+ [name: string]: unknown;
11415
+ };
11416
+ content: {
11417
+ "application/json": {
11418
+ /** @enum {string} */
11419
+ status?: "sent";
11420
+ };
11421
+ };
11422
+ };
11423
+ /** @description Rate limited */
11424
+ 429: {
11425
+ headers: {
11426
+ [name: string]: unknown;
11427
+ };
11428
+ content?: never;
11429
+ };
11430
+ };
11431
+ };
11432
+ verifyEmailOtp: {
11433
+ parameters: {
11434
+ query?: never;
11435
+ header?: never;
11436
+ path?: never;
11437
+ cookie?: never;
11438
+ };
11439
+ requestBody: {
11440
+ content: {
11441
+ "application/json": {
11442
+ /** Format: email */
11443
+ email: string;
11444
+ /** @description 6-digit OTP code */
11445
+ code: string;
11446
+ /** Format: uuid */
11447
+ platform_app_id?: string;
11448
+ /** @description Chains to auto-generate wallets for (e.g. ["ethereum", "base"]) */
11449
+ auto_provision_chains?: string[];
11450
+ };
11451
+ };
11452
+ };
11453
+ responses: {
11454
+ /** @description Existing user authenticated */
11455
+ 200: {
11456
+ headers: {
11457
+ [name: string]: unknown;
11458
+ };
11459
+ content: {
11460
+ "application/json": components["schemas"]["EmailOtpVerifyResponse"];
11461
+ };
11462
+ };
11463
+ /** @description New user created and authenticated */
11464
+ 201: {
11465
+ headers: {
11466
+ [name: string]: unknown;
11467
+ };
11468
+ content: {
11469
+ "application/json": components["schemas"]["EmailOtpVerifyResponse"];
11470
+ };
11471
+ };
11472
+ /** @description Invalid or expired code */
11473
+ 400: {
11474
+ headers: {
11475
+ [name: string]: unknown;
11476
+ };
11477
+ content?: never;
11478
+ };
11479
+ /** @description Rate limited */
11480
+ 429: {
11481
+ headers: {
11482
+ [name: string]: unknown;
11483
+ };
11484
+ content?: never;
11485
+ };
11486
+ };
11487
+ };
11488
+ getOAuthConsent: {
11489
+ parameters: {
11490
+ query: {
11491
+ /** @description Platform app slug */
11492
+ client_id: string;
11493
+ redirect_uri: string;
11494
+ response_type: "code";
11495
+ /** @description Space-delimited scopes (e.g. "openid email wallet") */
11496
+ scope?: string;
11497
+ state?: string;
11498
+ /** @description PKCE code challenge */
11499
+ code_challenge?: string;
11500
+ code_challenge_method?: "S256" | "plain";
11501
+ /** @description OIDC nonce for ID token replay protection */
11502
+ nonce?: string;
11503
+ };
11504
+ header?: never;
11505
+ path?: never;
11506
+ cookie?: never;
11507
+ };
11508
+ requestBody?: never;
11509
+ responses: {
11510
+ /** @description Consent screen data */
11511
+ 200: {
11512
+ headers: {
11513
+ [name: string]: unknown;
11514
+ };
11515
+ content: {
11516
+ "application/json": components["schemas"]["OAuthConsentResponse"];
11517
+ };
11518
+ };
11519
+ /** @description Invalid client_id, redirect_uri, or response_type */
11520
+ 400: {
11521
+ headers: {
11522
+ [name: string]: unknown;
11523
+ };
11524
+ content?: never;
11525
+ };
11526
+ };
11527
+ };
11528
+ submitOAuthConsent: {
11529
+ parameters: {
11530
+ query?: never;
11531
+ header?: never;
11532
+ path?: never;
11533
+ cookie?: never;
11534
+ };
11535
+ requestBody: {
11536
+ content: {
11537
+ "application/json": {
11538
+ approve: boolean;
11539
+ client_id: string;
11540
+ /** Format: uri */
11541
+ redirect_uri: string;
11542
+ scope?: string;
11543
+ state?: string;
11544
+ code_challenge?: string;
11545
+ /** @enum {string} */
11546
+ code_challenge_method?: "S256" | "plain";
11547
+ nonce?: string;
11548
+ };
11549
+ };
11550
+ };
11551
+ responses: {
11552
+ /** @description Redirect URL with authorization code or error */
11553
+ 200: {
11554
+ headers: {
11555
+ [name: string]: unknown;
11556
+ };
11557
+ content: {
11558
+ "application/json": {
11559
+ /** Format: uri */
11560
+ redirect_url: string;
11561
+ };
11562
+ };
11563
+ };
11564
+ /** @description Invalid request */
11565
+ 400: {
11566
+ headers: {
11567
+ [name: string]: unknown;
11568
+ };
11569
+ content?: never;
11570
+ };
11571
+ };
11572
+ };
11573
+ exchangeOAuthToken: {
11574
+ parameters: {
11575
+ query?: never;
11576
+ header?: never;
11577
+ path?: never;
11578
+ cookie?: never;
11579
+ };
11580
+ requestBody: {
11581
+ content: {
11582
+ "application/json": {
11583
+ /** @enum {string} */
11584
+ grant_type: "authorization_code";
11585
+ code: string;
11586
+ client_id: string;
11587
+ /** Format: uri */
11588
+ redirect_uri: string;
11589
+ /** @description PKCE code verifier (required when code_challenge was used) */
11590
+ code_verifier?: string;
11591
+ };
11592
+ };
11593
+ };
11594
+ responses: {
11595
+ /** @description Token response */
11596
+ 200: {
11597
+ headers: {
11598
+ [name: string]: unknown;
11599
+ };
11600
+ content: {
11601
+ "application/json": components["schemas"]["OAuthTokenResponse"];
11602
+ };
11603
+ };
11604
+ /** @description Invalid grant, code, or verifier */
11605
+ 400: {
11606
+ headers: {
11607
+ [name: string]: unknown;
11608
+ };
11609
+ content?: never;
11610
+ };
11611
+ /** @description Invalid client credentials */
11612
+ 401: {
11613
+ headers: {
11614
+ [name: string]: unknown;
11615
+ };
11616
+ content?: never;
11617
+ };
11618
+ };
11619
+ };
11620
+ getOAuthUserInfo: {
11621
+ parameters: {
11622
+ query?: never;
11623
+ header?: never;
11624
+ path?: never;
11625
+ cookie?: never;
11626
+ };
11627
+ requestBody?: never;
11628
+ responses: {
11629
+ /** @description User info */
11630
+ 200: {
11631
+ headers: {
11632
+ [name: string]: unknown;
11633
+ };
11634
+ content: {
11635
+ "application/json": components["schemas"]["OAuthUserInfoResponse"];
11636
+ };
11637
+ };
11638
+ 401: components["responses"]["Unauthorized"];
11639
+ };
11640
+ };
10981
11641
  }
10982
11642
  //# sourceMappingURL=api-types.d.ts.map