From 1cd789714bb34c1088c2d06845027e666cd37e6d Mon Sep 17 00:00:00 2001 From: alvseven Date: Wed, 12 Nov 2025 16:15:38 -0400 Subject: [PATCH 1/2] feat: add new tos and solana endpoints --- src/blindpay/client.py | 17 ++++++++ src/blindpay/resources/__init__.py | 2 + .../resources/terms_of_service/__init__.py | 17 ++++++++ .../terms_of_service/terms_of_service.py | 42 +++++++++++++++++++ src/blindpay/resources/wallets/blockchain.py | 29 +++++++++++++ 5 files changed, 107 insertions(+) create mode 100644 src/blindpay/resources/terms_of_service/__init__.py create mode 100644 src/blindpay/resources/terms_of_service/terms_of_service.py diff --git a/src/blindpay/client.py b/src/blindpay/client.py index 16a6390..e1a74c5 100644 --- a/src/blindpay/client.py +++ b/src/blindpay/client.py @@ -20,6 +20,10 @@ from blindpay.resources.payouts.payouts import PayoutsResource, PayoutsResourceSync from blindpay.resources.quotes.quotes import QuotesResource, QuotesResourceSync from blindpay.resources.receivers.receivers import ReceiversResource, ReceiversResourceSync + from blindpay.resources.terms_of_service.terms_of_service import ( + TermsOfServiceResource, + TermsOfServiceResourceSync, + ) from blindpay.resources.virtual_accounts.virtual_accounts import ( VirtualAccountsResource, VirtualAccountsResourceSync, @@ -161,6 +165,12 @@ def webhook_endpoints(self) -> "WebhookEndpointsResource": return create_webhook_endpoints_resource(self._instance_id, self._api) + @cached_property + def terms_of_service(self) -> "TermsOfServiceResource": + from blindpay.resources.terms_of_service import create_terms_of_service_resource + + return create_terms_of_service_resource(self._instance_id, self._api) + def __getattr__(self, name: str) -> Any: return getattr(self._base, name) @@ -355,6 +365,13 @@ def webhook_endpoints(self) -> "WebhookEndpointsResourceSync": return create_webhook_endpoints_resource_sync(self._instance_id, self._api) + + @cached_property + def terms_of_service(self) -> "TermsOfServiceResourceSync": + from blindpay.resources.terms_of_service import create_terms_of_service_resource_sync + + return create_terms_of_service_resource_sync(self._instance_id, self._api) + def __getattr__(self, name: str) -> Any: return getattr(self._base, name) diff --git a/src/blindpay/resources/__init__.py b/src/blindpay/resources/__init__.py index 4c70aba..e9f1e90 100644 --- a/src/blindpay/resources/__init__.py +++ b/src/blindpay/resources/__init__.py @@ -7,6 +7,7 @@ from .payouts import create_payouts_resource from .quotes import create_quotes_resource from .receivers import create_receivers_resource +from .terms_of_service import create_terms_of_service_resource from .virtual_accounts import create_virtual_accounts_resource from .wallets import create_blockchain_wallets_resource, create_offramp_wallets_resource from .webhooks import create_webhook_endpoints_resource @@ -22,6 +23,7 @@ "create_payouts_resource", "create_quotes_resource", "create_receivers_resource", + "create_terms_of_service_resource", "create_virtual_accounts_resource", "create_blockchain_wallets_resource", "create_offramp_wallets_resource", diff --git a/src/blindpay/resources/terms_of_service/__init__.py b/src/blindpay/resources/terms_of_service/__init__.py new file mode 100644 index 0000000..aabbaa8 --- /dev/null +++ b/src/blindpay/resources/terms_of_service/__init__.py @@ -0,0 +1,17 @@ +from .terms_of_service import ( + InitiateInput, + InitiateResponse, + TermsOfServiceResource, + TermsOfServiceResourceSync, + create_terms_of_service_resource, + create_terms_of_service_resource_sync, +) + +__all__ = [ + "create_terms_of_service_resource", + "create_terms_of_service_resource_sync", + "TermsOfServiceResource", + "TermsOfServiceResourceSync", + "InitiateInput", + "InitiateResponse", +] diff --git a/src/blindpay/resources/terms_of_service/terms_of_service.py b/src/blindpay/resources/terms_of_service/terms_of_service.py new file mode 100644 index 0000000..d83e804 --- /dev/null +++ b/src/blindpay/resources/terms_of_service/terms_of_service.py @@ -0,0 +1,42 @@ +from typing_extensions import TypedDict, Optional + +from ..._internal.api_client import InternalApiClient, InternalApiClientSync +from ...types import BlindpayApiResponse + + +class InitiateInput(TypedDict): + idempotency_key: str + receiver_id: Optional[str] + redirect_url: Optional[str] + + +class InitiateResponse(TypedDict): + url: str + + +class TermsOfServiceResource: + def __init__(self, instance_id: str, client: InternalApiClient): + self._instance_id = instance_id + self._client = client + + async def initiate(self, data: InitiateInput) -> BlindpayApiResponse[InitiateResponse]: + return await self._client.post(f"/e/instances/{self._instance_id}/tos", data) + + +class TermsOfServiceResourceSync: + def __init__(self, instance_id: str, client: InternalApiClientSync): + self._instance_id = instance_id + self._client = client + + def initiate(self, data: InitiateInput) -> BlindpayApiResponse[InitiateResponse]: + return self._client.post(f"/e/instances/{self._instance_id}/tos", data) + + +def create_terms_of_service_resource(instance_id: str, client: InternalApiClient) -> TermsOfServiceResource: + return TermsOfServiceResource(instance_id, client) + + +def create_terms_of_service_resource_sync( + instance_id: str, client: InternalApiClientSync +) -> TermsOfServiceResourceSync: + return TermsOfServiceResourceSync(instance_id, client) diff --git a/src/blindpay/resources/wallets/blockchain.py b/src/blindpay/resources/wallets/blockchain.py index 64da7e7..5985b7e 100644 --- a/src/blindpay/resources/wallets/blockchain.py +++ b/src/blindpay/resources/wallets/blockchain.py @@ -59,6 +59,27 @@ class MintUsdbStellarInput(TypedDict): signedXdr: str +class MintUsdbSolanaInput(TypedDict): + address: str + amount: str + + +class MintUsdbSolanaResponse(TypedDict): + success: bool + signature: str + + +class PrepareSolanaDelegationTransactionInput(TypedDict): + amount: str + owner_address: str + token_address: str + + +class PrepareSolanaDelegationTransactionResponse(TypedDict): + success: bool + transaction: str + + class BlockchainWalletsResource: def __init__(self, instance_id: str, client: InternalApiClient): self._instance_id = instance_id @@ -110,6 +131,14 @@ async def create_asset_trustline(self, address: str) -> BlindpayApiResponse[Crea async def mint_usdb_stellar(self, data: MintUsdbStellarInput) -> BlindpayApiResponse[None]: return await self._client.post(f"/instances/{self._instance_id}/mint-usdb-stellar", data) + async def mint_usdb_solana(self, data: MintUsdbSolanaInput) -> BlindpayApiResponse[MintUsdbSolanaResponse]: + return await self._client.post(f"/instances/{self._instance_id}/mint-usdb-solana", data) + + async def prepare_solana_delegation_transaction( + self, data: PrepareSolanaDelegationTransactionInput + ) -> BlindpayApiResponse[PrepareSolanaDelegationTransactionResponse]: + return await self._client.post(f"/instances/{self._instance_id}/prepare-delegate-solana", data) + class BlockchainWalletsResourceSync: def __init__(self, instance_id: str, client: InternalApiClientSync): From d246832f29efd54aa5e6bfc1b6a23a270e6849c6 Mon Sep 17 00:00:00 2001 From: alvseven Date: Wed, 12 Nov 2025 16:17:18 -0400 Subject: [PATCH 2/2] chore: fix lint --- src/blindpay/client.py | 1 - src/blindpay/resources/terms_of_service/terms_of_service.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/blindpay/client.py b/src/blindpay/client.py index e1a74c5..5d36381 100644 --- a/src/blindpay/client.py +++ b/src/blindpay/client.py @@ -365,7 +365,6 @@ def webhook_endpoints(self) -> "WebhookEndpointsResourceSync": return create_webhook_endpoints_resource_sync(self._instance_id, self._api) - @cached_property def terms_of_service(self) -> "TermsOfServiceResourceSync": from blindpay.resources.terms_of_service import create_terms_of_service_resource_sync diff --git a/src/blindpay/resources/terms_of_service/terms_of_service.py b/src/blindpay/resources/terms_of_service/terms_of_service.py index d83e804..47057d8 100644 --- a/src/blindpay/resources/terms_of_service/terms_of_service.py +++ b/src/blindpay/resources/terms_of_service/terms_of_service.py @@ -1,4 +1,4 @@ -from typing_extensions import TypedDict, Optional +from typing_extensions import Optional, TypedDict from ..._internal.api_client import InternalApiClient, InternalApiClientSync from ...types import BlindpayApiResponse