Skip to content

Commit b6f371f

Browse files
committed
Add project_id config and delegation methods to Python SDK
- Add `project_id` param to CdpClient (reads from CDP_PROJECT_ID env var) and thread it through to EndUserClient and EndUserAccount - Add lazy-loaded EmbeddedWalletsCoreFunctionalityApi to ApiClients - Add 14 delegation methods to EndUserClient: revoke_delegation_for_end_user, create_evm_eip7702_delegation, sign_evm_{hash,message,transaction,typed_data}, send_evm_{transaction,asset}, send_user_operation, sign_solana_{hash,message,transaction}, send_solana_{transaction,asset} - Add matching convenience methods to EndUserAccount with auto-resolution of first account address when no explicit address is provided - Add SendEvmAssetResult dataclass; export SendEvmAssetResult and EvmUserOperation from cdp.__init__ - Fix pre-existing broken imports in solana_client, solana_account, actions/solana/sign_{message,transaction}, and test files caused by OpenAPI regen renaming *200_response to *_with_end_user_account200_response
1 parent 01b6557 commit b6f371f

16 files changed

Lines changed: 1493 additions & 55 deletions

python/cdp/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from cdp.__version__ import __version__
22
from cdp.cdp_client import CdpClient
3-
from cdp.end_user_account import EndUserAccount
3+
from cdp.end_user_account import EndUserAccount, SendEvmAssetResult
44
from cdp.end_user_client import ListEndUsersResult
55
from cdp.evm_call_types import ContractCall, EncodedCall, FunctionCall
66
from cdp.evm_local_account import EvmLocalAccount
@@ -9,6 +9,7 @@
99
from cdp.evm_transaction_types import TransactionRequestEIP1559
1010
from cdp.openapi_client import SpendPermissionNetwork
1111
from cdp.openapi_client.errors import HttpErrorType, NetworkError
12+
from cdp.openapi_client.models.evm_user_operation import EvmUserOperation
1213
from cdp.spend_permissions import (
1314
SPEND_PERMISSION_MANAGER_ABI,
1415
SPEND_PERMISSION_MANAGER_ADDRESS,
@@ -27,10 +28,12 @@
2728
"EvmLocalAccount",
2829
"EvmServerAccount",
2930
"EvmSmartAccount",
31+
"EvmUserOperation",
3032
"FunctionCall",
3133
"HttpErrorType",
3234
"ListEndUsersResult",
3335
"NetworkError",
36+
"SendEvmAssetResult",
3437
"SpendPermissionNetwork",
3538
"SpendPermission",
3639
"SpendPermissionInput",

python/cdp/actions/solana/sign_message.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from cdp.openapi_client.api.solana_accounts_api import SolanaAccountsApi
2-
from cdp.openapi_client.models.sign_solana_message200_response import (
3-
SignSolanaMessage200Response as SignSolanaMessageResponse,
4-
)
52
from cdp.openapi_client.models.sign_solana_message_request import SignSolanaMessageRequest
3+
from cdp.openapi_client.models.sign_solana_message_with_end_user_account200_response import (
4+
SignSolanaMessageWithEndUserAccount200Response as SignSolanaMessageResponse,
5+
)
66

77

88
async def sign_message(

python/cdp/actions/solana/sign_transaction.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
from cdp.openapi_client.api.solana_accounts_api import SolanaAccountsApi
2-
from cdp.openapi_client.models.sign_solana_transaction200_response import (
3-
SignSolanaTransaction200Response as SignSolanaTransactionResponse,
4-
)
52
from cdp.openapi_client.models.sign_solana_transaction_request import (
63
SignSolanaTransactionRequest,
74
)
5+
from cdp.openapi_client.models.sign_solana_transaction_with_end_user_account200_response import (
6+
SignSolanaTransactionWithEndUserAccount200Response as SignSolanaTransactionResponse,
7+
)
88

99

1010
async def sign_transaction(

python/cdp/api_clients.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
from cdp.openapi_client.api.embedded_wallets_core_functionality_api import (
2+
EmbeddedWalletsCoreFunctionalityApi,
3+
)
14
from cdp.openapi_client.api.end_user_accounts_api import EndUserAccountsApi
25
from cdp.openapi_client.api.evm_accounts_api import EVMAccountsApi
36
from cdp.openapi_client.api.evm_smart_accounts_api import EVMSmartAccountsApi
@@ -39,6 +42,7 @@ def __init__(self, cdp_client: CdpApiClient) -> None:
3942
"""
4043
self._cdp_client: CdpApiClient = cdp_client
4144

45+
self._embedded_wallets: EmbeddedWalletsCoreFunctionalityApi | None = None
4246
self._evm_accounts: EVMAccountsApi | None = None
4347
self._evm_smart_accounts: EVMSmartAccountsApi | None = None
4448
self._evm_swaps: EVMSwapsApi | None = None
@@ -59,6 +63,21 @@ def _check_closed(self) -> None:
5963
"This error occurs when trying to use a client after calling close()."
6064
)
6165

66+
@property
67+
def embedded_wallets(self) -> EmbeddedWalletsCoreFunctionalityApi:
68+
"""Get the EmbeddedWalletsCoreFunctionalityApi client instance.
69+
70+
Returns:
71+
EmbeddedWalletsCoreFunctionalityApi: The EmbeddedWalletsCoreFunctionalityApi client instance.
72+
73+
"""
74+
self._check_closed()
75+
if self._embedded_wallets is None:
76+
self._embedded_wallets = EmbeddedWalletsCoreFunctionalityApi(
77+
api_client=self._cdp_client
78+
)
79+
return self._embedded_wallets
80+
6281
@property
6382
def solana_token_balances(self) -> SolanaTokenBalancesApi:
6483
"""Get the SolanaTokenBalancesApi client instance.

python/cdp/cdp_client.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def __init__(
2424
max_network_retries: int = 3,
2525
source: str = SDK_DEFAULT_SOURCE,
2626
source_version: str = __version__,
27+
project_id: str | None = None,
2728
):
2829
"""Instantiate the CdpClient.
2930
@@ -36,11 +37,14 @@ def __init__(
3637
max_network_retries (int, optional): The maximum number of network retries. Defaults to 3.
3738
source (str, optional): The source. Defaults to SDK_DEFAULT_SOURCE.
3839
source_version (str, optional): The source version. Defaults to __version__.
40+
project_id (str, optional): The CDP Project ID. Required for end user delegation operations.
41+
Defaults to the CDP_PROJECT_ID environment variable.
3942
4043
"""
4144
api_key_id = api_key_id or os.getenv("CDP_API_KEY_ID") or os.getenv("CDP_API_KEY_NAME")
4245
api_key_secret = api_key_secret or os.getenv("CDP_API_KEY_SECRET")
4346
wallet_secret = wallet_secret or os.getenv("CDP_WALLET_SECRET")
47+
project_id = project_id or os.getenv("CDP_PROJECT_ID")
4448

4549
if not api_key_id or not api_key_secret:
4650
raise ValueError("""
@@ -92,7 +96,7 @@ def __init__(
9296
self._evm = EvmClient(self.api_clients)
9397
self._solana = SolanaClient(self.api_clients)
9498
self._policies = PoliciesClient(self.api_clients)
95-
self._end_user = EndUserClient(self.api_clients)
99+
self._end_user = EndUserClient(self.api_clients, project_id=project_id)
96100
self._closed = False
97101

98102
if (

0 commit comments

Comments
 (0)