chipi-stack 2.0.0__py3-none-any.whl
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.
- chipi_sdk/__init__.py +342 -0
- chipi_sdk/client.py +505 -0
- chipi_sdk/constants.py +171 -0
- chipi_sdk/encryption.py +179 -0
- chipi_sdk/errors.py +130 -0
- chipi_sdk/execute_paymaster.py +434 -0
- chipi_sdk/formatters.py +154 -0
- chipi_sdk/models/__init__.py +145 -0
- chipi_sdk/models/core.py +96 -0
- chipi_sdk/models/session.py +119 -0
- chipi_sdk/models/sku.py +28 -0
- chipi_sdk/models/sku_transaction.py +30 -0
- chipi_sdk/models/transaction.py +192 -0
- chipi_sdk/models/user.py +31 -0
- chipi_sdk/models/wallet.py +178 -0
- chipi_sdk/models/x402.py +117 -0
- chipi_sdk/py.typed +1 -0
- chipi_sdk/sdk.py +1021 -0
- chipi_sdk/sessions.py +836 -0
- chipi_sdk/sku_transactions.py +58 -0
- chipi_sdk/skus.py +93 -0
- chipi_sdk/transactions.py +447 -0
- chipi_sdk/users.py +92 -0
- chipi_sdk/validators.py +75 -0
- chipi_sdk/wallets.py +465 -0
- chipi_sdk/x402_client.py +207 -0
- chipi_sdk/x402_facilitator.py +200 -0
- chipi_sdk/x402_middleware.py +280 -0
- chipi_stack-2.0.0.dist-info/METADATA +366 -0
- chipi_stack-2.0.0.dist-info/RECORD +33 -0
- chipi_stack-2.0.0.dist-info/WHEEL +5 -0
- chipi_stack-2.0.0.dist-info/licenses/LICENSE +21 -0
- chipi_stack-2.0.0.dist-info/top_level.txt +1 -0
chipi_sdk/sdk.py
ADDED
|
@@ -0,0 +1,1021 @@
|
|
|
1
|
+
"""Main Chipi SDK class for Starknet gasless transactions."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
from .models.core import ChipiSDKConfig, PaginatedResponse
|
|
5
|
+
from .models.wallet import (
|
|
6
|
+
CreateWalletParams,
|
|
7
|
+
CreateWalletResponse,
|
|
8
|
+
GetWalletParams,
|
|
9
|
+
GetWalletResponse,
|
|
10
|
+
GetTokenBalanceParams,
|
|
11
|
+
GetTokenBalanceResponse,
|
|
12
|
+
)
|
|
13
|
+
from .models.transaction import (
|
|
14
|
+
ExecuteTransactionParams,
|
|
15
|
+
TransferParams,
|
|
16
|
+
ApproveParams,
|
|
17
|
+
StakeVesuUsdcParams,
|
|
18
|
+
WithdrawVesuUsdcParams,
|
|
19
|
+
CallAnyContractParams,
|
|
20
|
+
RecordSendTransactionParams,
|
|
21
|
+
Transaction,
|
|
22
|
+
GetTransactionListQuery,
|
|
23
|
+
TransactionStatusResponse,
|
|
24
|
+
Call,
|
|
25
|
+
)
|
|
26
|
+
from .models.wallet import (
|
|
27
|
+
PrepareWalletUpgradeParams,
|
|
28
|
+
PrepareWalletUpgradeResponse,
|
|
29
|
+
ExecuteWalletUpgradeParams,
|
|
30
|
+
ExecuteWalletUpgradeResponse,
|
|
31
|
+
)
|
|
32
|
+
from .models.session import ExecuteWithSessionParams
|
|
33
|
+
from .models.sku import Sku, GetSkuListQuery
|
|
34
|
+
from .models.sku_transaction import CreateSkuTransactionParams, SkuTransaction
|
|
35
|
+
from .models.user import User, CreateUserParams, GetUserParams
|
|
36
|
+
from .client import ChipiClient
|
|
37
|
+
from .wallets import ChipiWallets
|
|
38
|
+
from .transactions import ChipiTransactions
|
|
39
|
+
from .sessions import ChipiSessions
|
|
40
|
+
from .skus import ChipiSkus
|
|
41
|
+
from .sku_transactions import ChipiSkuTransactions
|
|
42
|
+
from .users import ChipiUsers
|
|
43
|
+
from .formatters import format_amount
|
|
44
|
+
from .constants import STARKNET_NETWORKS, CONTRACT_ADDRESSES
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class ChipiSDK:
|
|
48
|
+
"""Main Chipi SDK class for Starknet gasless transactions."""
|
|
49
|
+
|
|
50
|
+
def __init__(self, config: ChipiSDKConfig):
|
|
51
|
+
"""
|
|
52
|
+
Initialize the Chipi SDK.
|
|
53
|
+
|
|
54
|
+
Args:
|
|
55
|
+
config: SDK configuration with API keys and optional URLs
|
|
56
|
+
"""
|
|
57
|
+
self.client = ChipiClient(config)
|
|
58
|
+
self.node_url = config.node_url or STARKNET_NETWORKS["MAINNET"]
|
|
59
|
+
self.api_secret_key = config.api_secret_key
|
|
60
|
+
|
|
61
|
+
# Initialize service managers
|
|
62
|
+
self.wallets = ChipiWallets(self.client)
|
|
63
|
+
self.transactions = ChipiTransactions(self.client)
|
|
64
|
+
self.sessions = ChipiSessions(self.client)
|
|
65
|
+
self.skus = ChipiSkus(self.client)
|
|
66
|
+
self.sku_transactions = ChipiSkuTransactions(self.client)
|
|
67
|
+
self.users = ChipiUsers(self.client)
|
|
68
|
+
|
|
69
|
+
def _resolve_bearer_token(self, bearer_token: Optional[str] = None) -> str:
|
|
70
|
+
"""
|
|
71
|
+
Resolve bearer token - uses provided token or falls back to apiSecretKey.
|
|
72
|
+
|
|
73
|
+
Args:
|
|
74
|
+
bearer_token: Optional bearer token
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
Resolved bearer token
|
|
78
|
+
|
|
79
|
+
Raises:
|
|
80
|
+
ValueError: If no token is available
|
|
81
|
+
"""
|
|
82
|
+
token = bearer_token or self.api_secret_key
|
|
83
|
+
|
|
84
|
+
if not token:
|
|
85
|
+
raise ValueError(
|
|
86
|
+
"Authentication required: either pass a bearerToken or configure the SDK with an apiSecretKey"
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
return token
|
|
90
|
+
|
|
91
|
+
# ===== Transaction Methods =====
|
|
92
|
+
|
|
93
|
+
async def aexecute_transaction(
|
|
94
|
+
self,
|
|
95
|
+
params: ExecuteTransactionParams,
|
|
96
|
+
bearer_token: Optional[str] = None,
|
|
97
|
+
) -> str:
|
|
98
|
+
"""
|
|
99
|
+
Execute a gasless transaction (async).
|
|
100
|
+
|
|
101
|
+
Args:
|
|
102
|
+
params: Transaction execution parameters
|
|
103
|
+
bearer_token: Optional bearer token (falls back to SDK config)
|
|
104
|
+
|
|
105
|
+
Returns:
|
|
106
|
+
Transaction hash
|
|
107
|
+
"""
|
|
108
|
+
return await self.transactions.aexecute_transaction(
|
|
109
|
+
params=params,
|
|
110
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
def execute_transaction(
|
|
114
|
+
self,
|
|
115
|
+
params: ExecuteTransactionParams,
|
|
116
|
+
bearer_token: Optional[str] = None,
|
|
117
|
+
) -> str:
|
|
118
|
+
"""
|
|
119
|
+
Execute a gasless transaction (sync).
|
|
120
|
+
|
|
121
|
+
Args:
|
|
122
|
+
params: Transaction execution parameters
|
|
123
|
+
bearer_token: Optional bearer token
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
Transaction hash
|
|
127
|
+
"""
|
|
128
|
+
return self.transactions.execute_transaction(
|
|
129
|
+
params=params,
|
|
130
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
async def aexecute_transaction_with_session(
|
|
134
|
+
self,
|
|
135
|
+
params: ExecuteWithSessionParams,
|
|
136
|
+
bearer_token: Optional[str] = None,
|
|
137
|
+
) -> str:
|
|
138
|
+
"""
|
|
139
|
+
Execute a gasless transaction using a session key (async).
|
|
140
|
+
|
|
141
|
+
CHIPI wallets only.
|
|
142
|
+
|
|
143
|
+
Args:
|
|
144
|
+
params: Session execution parameters
|
|
145
|
+
bearer_token: Optional bearer token
|
|
146
|
+
|
|
147
|
+
Returns:
|
|
148
|
+
Transaction hash
|
|
149
|
+
"""
|
|
150
|
+
return await self.sessions.aexecute_transaction_with_session(
|
|
151
|
+
params=params,
|
|
152
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
def execute_transaction_with_session(
|
|
156
|
+
self,
|
|
157
|
+
params: ExecuteWithSessionParams,
|
|
158
|
+
bearer_token: Optional[str] = None,
|
|
159
|
+
) -> str:
|
|
160
|
+
"""
|
|
161
|
+
Execute a gasless transaction using a session key (sync).
|
|
162
|
+
|
|
163
|
+
Args:
|
|
164
|
+
params: Session execution parameters
|
|
165
|
+
bearer_token: Optional bearer token
|
|
166
|
+
|
|
167
|
+
Returns:
|
|
168
|
+
Transaction hash
|
|
169
|
+
"""
|
|
170
|
+
return self.sessions.execute_transaction_with_session(
|
|
171
|
+
params=params,
|
|
172
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
async def atransfer(
|
|
176
|
+
self,
|
|
177
|
+
params: TransferParams,
|
|
178
|
+
bearer_token: Optional[str] = None,
|
|
179
|
+
) -> str:
|
|
180
|
+
"""
|
|
181
|
+
Transfer tokens (async).
|
|
182
|
+
|
|
183
|
+
Args:
|
|
184
|
+
params: Transfer parameters
|
|
185
|
+
bearer_token: Optional bearer token
|
|
186
|
+
|
|
187
|
+
Returns:
|
|
188
|
+
Transaction hash
|
|
189
|
+
"""
|
|
190
|
+
return await self.transactions.atransfer(
|
|
191
|
+
params=params,
|
|
192
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
def transfer(
|
|
196
|
+
self,
|
|
197
|
+
params: TransferParams,
|
|
198
|
+
bearer_token: Optional[str] = None,
|
|
199
|
+
) -> str:
|
|
200
|
+
"""
|
|
201
|
+
Transfer tokens (sync).
|
|
202
|
+
|
|
203
|
+
Args:
|
|
204
|
+
params: Transfer parameters
|
|
205
|
+
bearer_token: Optional bearer token
|
|
206
|
+
|
|
207
|
+
Returns:
|
|
208
|
+
Transaction hash
|
|
209
|
+
"""
|
|
210
|
+
return self.transactions.transfer(
|
|
211
|
+
params=params,
|
|
212
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
async def aapprove(
|
|
216
|
+
self,
|
|
217
|
+
params: ApproveParams,
|
|
218
|
+
bearer_token: Optional[str] = None,
|
|
219
|
+
) -> str:
|
|
220
|
+
"""
|
|
221
|
+
Approve token spending (async).
|
|
222
|
+
|
|
223
|
+
Args:
|
|
224
|
+
params: Approval parameters
|
|
225
|
+
bearer_token: Optional bearer token
|
|
226
|
+
|
|
227
|
+
Returns:
|
|
228
|
+
Transaction hash
|
|
229
|
+
"""
|
|
230
|
+
return await self.transactions.aapprove(
|
|
231
|
+
params=params,
|
|
232
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
def approve(
|
|
236
|
+
self,
|
|
237
|
+
params: ApproveParams,
|
|
238
|
+
bearer_token: Optional[str] = None,
|
|
239
|
+
) -> str:
|
|
240
|
+
"""
|
|
241
|
+
Approve token spending (sync).
|
|
242
|
+
|
|
243
|
+
Args:
|
|
244
|
+
params: Approval parameters
|
|
245
|
+
bearer_token: Optional bearer token
|
|
246
|
+
|
|
247
|
+
Returns:
|
|
248
|
+
Transaction hash
|
|
249
|
+
"""
|
|
250
|
+
return self.transactions.approve(
|
|
251
|
+
params=params,
|
|
252
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
async def astake_vesu_usdc(
|
|
256
|
+
self,
|
|
257
|
+
params: StakeVesuUsdcParams,
|
|
258
|
+
bearer_token: Optional[str] = None,
|
|
259
|
+
) -> str:
|
|
260
|
+
"""
|
|
261
|
+
Stake USDC in Vesu protocol (async).
|
|
262
|
+
|
|
263
|
+
Args:
|
|
264
|
+
params: Staking parameters
|
|
265
|
+
bearer_token: Optional bearer token
|
|
266
|
+
|
|
267
|
+
Returns:
|
|
268
|
+
Transaction hash
|
|
269
|
+
"""
|
|
270
|
+
formatted_amount = format_amount(params.amount, 6)
|
|
271
|
+
|
|
272
|
+
return await self.aexecute_transaction(
|
|
273
|
+
params=ExecuteTransactionParams(
|
|
274
|
+
encrypt_key=params.encrypt_key,
|
|
275
|
+
wallet=params.wallet,
|
|
276
|
+
calls=[
|
|
277
|
+
Call(
|
|
278
|
+
contractAddress=CONTRACT_ADDRESSES["USDC_MAINNET"],
|
|
279
|
+
entrypoint="approve",
|
|
280
|
+
calldata=[
|
|
281
|
+
CONTRACT_ADDRESSES["VESU_USDC_MAINNET"],
|
|
282
|
+
formatted_amount,
|
|
283
|
+
"0x0",
|
|
284
|
+
],
|
|
285
|
+
),
|
|
286
|
+
Call(
|
|
287
|
+
contractAddress=CONTRACT_ADDRESSES["VESU_USDC_MAINNET"],
|
|
288
|
+
entrypoint="deposit",
|
|
289
|
+
calldata=[formatted_amount, "0x0", params.receiver_wallet],
|
|
290
|
+
),
|
|
291
|
+
],
|
|
292
|
+
),
|
|
293
|
+
bearer_token=bearer_token,
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
def stake_vesu_usdc(
|
|
297
|
+
self,
|
|
298
|
+
params: StakeVesuUsdcParams,
|
|
299
|
+
bearer_token: Optional[str] = None,
|
|
300
|
+
) -> str:
|
|
301
|
+
"""
|
|
302
|
+
Stake USDC in Vesu protocol (sync).
|
|
303
|
+
|
|
304
|
+
Args:
|
|
305
|
+
params: Staking parameters
|
|
306
|
+
bearer_token: Optional bearer token
|
|
307
|
+
|
|
308
|
+
Returns:
|
|
309
|
+
Transaction hash
|
|
310
|
+
"""
|
|
311
|
+
formatted_amount = format_amount(params.amount, 6)
|
|
312
|
+
|
|
313
|
+
return self.execute_transaction(
|
|
314
|
+
params=ExecuteTransactionParams(
|
|
315
|
+
encrypt_key=params.encrypt_key,
|
|
316
|
+
wallet=params.wallet,
|
|
317
|
+
calls=[
|
|
318
|
+
Call(
|
|
319
|
+
contractAddress=CONTRACT_ADDRESSES["USDC_MAINNET"],
|
|
320
|
+
entrypoint="approve",
|
|
321
|
+
calldata=[
|
|
322
|
+
CONTRACT_ADDRESSES["VESU_USDC_MAINNET"],
|
|
323
|
+
formatted_amount,
|
|
324
|
+
"0x0",
|
|
325
|
+
],
|
|
326
|
+
),
|
|
327
|
+
Call(
|
|
328
|
+
contractAddress=CONTRACT_ADDRESSES["VESU_USDC_MAINNET"],
|
|
329
|
+
entrypoint="deposit",
|
|
330
|
+
calldata=[formatted_amount, "0x0", params.receiver_wallet],
|
|
331
|
+
),
|
|
332
|
+
],
|
|
333
|
+
),
|
|
334
|
+
bearer_token=bearer_token,
|
|
335
|
+
)
|
|
336
|
+
|
|
337
|
+
async def awithdraw_vesu_usdc(
|
|
338
|
+
self,
|
|
339
|
+
params: WithdrawVesuUsdcParams,
|
|
340
|
+
bearer_token: Optional[str] = None,
|
|
341
|
+
) -> str:
|
|
342
|
+
"""
|
|
343
|
+
Withdraw USDC from Vesu protocol (async).
|
|
344
|
+
|
|
345
|
+
Args:
|
|
346
|
+
params: Withdrawal parameters
|
|
347
|
+
bearer_token: Optional bearer token
|
|
348
|
+
|
|
349
|
+
Returns:
|
|
350
|
+
Transaction hash
|
|
351
|
+
"""
|
|
352
|
+
formatted_amount = format_amount(params.amount, 6)
|
|
353
|
+
|
|
354
|
+
return await self.aexecute_transaction(
|
|
355
|
+
params=ExecuteTransactionParams(
|
|
356
|
+
encrypt_key=params.encrypt_key,
|
|
357
|
+
wallet=params.wallet,
|
|
358
|
+
calls=[
|
|
359
|
+
Call(
|
|
360
|
+
contractAddress=CONTRACT_ADDRESSES["VESU_USDC_MAINNET"],
|
|
361
|
+
entrypoint="withdraw",
|
|
362
|
+
calldata=[formatted_amount, params.recipient, "0x0"],
|
|
363
|
+
)
|
|
364
|
+
],
|
|
365
|
+
),
|
|
366
|
+
bearer_token=bearer_token,
|
|
367
|
+
)
|
|
368
|
+
|
|
369
|
+
def withdraw_vesu_usdc(
|
|
370
|
+
self,
|
|
371
|
+
params: WithdrawVesuUsdcParams,
|
|
372
|
+
bearer_token: Optional[str] = None,
|
|
373
|
+
) -> str:
|
|
374
|
+
"""
|
|
375
|
+
Withdraw USDC from Vesu protocol (sync).
|
|
376
|
+
|
|
377
|
+
Args:
|
|
378
|
+
params: Withdrawal parameters
|
|
379
|
+
bearer_token: Optional bearer token
|
|
380
|
+
|
|
381
|
+
Returns:
|
|
382
|
+
Transaction hash
|
|
383
|
+
"""
|
|
384
|
+
formatted_amount = format_amount(params.amount, 6)
|
|
385
|
+
|
|
386
|
+
return self.execute_transaction(
|
|
387
|
+
params=ExecuteTransactionParams(
|
|
388
|
+
encrypt_key=params.encrypt_key,
|
|
389
|
+
wallet=params.wallet,
|
|
390
|
+
calls=[
|
|
391
|
+
Call(
|
|
392
|
+
contractAddress=CONTRACT_ADDRESSES["VESU_USDC_MAINNET"],
|
|
393
|
+
entrypoint="withdraw",
|
|
394
|
+
calldata=[formatted_amount, params.recipient, "0x0"],
|
|
395
|
+
)
|
|
396
|
+
],
|
|
397
|
+
),
|
|
398
|
+
bearer_token=bearer_token,
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
async def acall_any_contract(
|
|
402
|
+
self,
|
|
403
|
+
params: CallAnyContractParams,
|
|
404
|
+
bearer_token: Optional[str] = None,
|
|
405
|
+
) -> str:
|
|
406
|
+
"""
|
|
407
|
+
Call any contract method (async).
|
|
408
|
+
|
|
409
|
+
Args:
|
|
410
|
+
params: Contract call parameters
|
|
411
|
+
bearer_token: Optional bearer token
|
|
412
|
+
|
|
413
|
+
Returns:
|
|
414
|
+
Transaction hash
|
|
415
|
+
"""
|
|
416
|
+
return await self.aexecute_transaction(
|
|
417
|
+
params=ExecuteTransactionParams(
|
|
418
|
+
encrypt_key=params.encrypt_key,
|
|
419
|
+
wallet=params.wallet,
|
|
420
|
+
calls=params.calls,
|
|
421
|
+
use_passkey=params.use_passkey,
|
|
422
|
+
),
|
|
423
|
+
bearer_token=bearer_token,
|
|
424
|
+
)
|
|
425
|
+
|
|
426
|
+
def call_any_contract(
|
|
427
|
+
self,
|
|
428
|
+
params: CallAnyContractParams,
|
|
429
|
+
bearer_token: Optional[str] = None,
|
|
430
|
+
) -> str:
|
|
431
|
+
"""
|
|
432
|
+
Call any contract method (sync).
|
|
433
|
+
|
|
434
|
+
Args:
|
|
435
|
+
params: Contract call parameters
|
|
436
|
+
bearer_token: Optional bearer token
|
|
437
|
+
|
|
438
|
+
Returns:
|
|
439
|
+
Transaction hash
|
|
440
|
+
"""
|
|
441
|
+
return self.execute_transaction(
|
|
442
|
+
params=ExecuteTransactionParams(
|
|
443
|
+
encrypt_key=params.encrypt_key,
|
|
444
|
+
wallet=params.wallet,
|
|
445
|
+
calls=params.calls,
|
|
446
|
+
use_passkey=params.use_passkey,
|
|
447
|
+
),
|
|
448
|
+
bearer_token=bearer_token,
|
|
449
|
+
)
|
|
450
|
+
|
|
451
|
+
# ===== Wallet Methods =====
|
|
452
|
+
|
|
453
|
+
async def acreate_wallet(
|
|
454
|
+
self,
|
|
455
|
+
params: CreateWalletParams,
|
|
456
|
+
bearer_token: Optional[str] = None,
|
|
457
|
+
) -> CreateWalletResponse:
|
|
458
|
+
"""
|
|
459
|
+
Create a new wallet (async).
|
|
460
|
+
|
|
461
|
+
Args:
|
|
462
|
+
params: Wallet creation parameters
|
|
463
|
+
bearer_token: Optional bearer token
|
|
464
|
+
|
|
465
|
+
Returns:
|
|
466
|
+
Wallet creation response
|
|
467
|
+
"""
|
|
468
|
+
return await self.wallets.acreate_wallet(
|
|
469
|
+
params=params,
|
|
470
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
471
|
+
)
|
|
472
|
+
|
|
473
|
+
def create_wallet(
|
|
474
|
+
self,
|
|
475
|
+
params: CreateWalletParams,
|
|
476
|
+
bearer_token: Optional[str] = None,
|
|
477
|
+
) -> CreateWalletResponse:
|
|
478
|
+
"""
|
|
479
|
+
Create a new wallet (sync).
|
|
480
|
+
|
|
481
|
+
Args:
|
|
482
|
+
params: Wallet creation parameters
|
|
483
|
+
bearer_token: Optional bearer token
|
|
484
|
+
|
|
485
|
+
Returns:
|
|
486
|
+
Wallet creation response
|
|
487
|
+
"""
|
|
488
|
+
return self.wallets.create_wallet(
|
|
489
|
+
params=params,
|
|
490
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
491
|
+
)
|
|
492
|
+
|
|
493
|
+
async def aget_wallet(
|
|
494
|
+
self,
|
|
495
|
+
params: GetWalletParams,
|
|
496
|
+
bearer_token: Optional[str] = None,
|
|
497
|
+
) -> Optional[GetWalletResponse]:
|
|
498
|
+
"""
|
|
499
|
+
Get wallet by external user ID (async).
|
|
500
|
+
|
|
501
|
+
Args:
|
|
502
|
+
params: Wallet query parameters
|
|
503
|
+
bearer_token: Optional bearer token
|
|
504
|
+
|
|
505
|
+
Returns:
|
|
506
|
+
Wallet data or None if not found
|
|
507
|
+
"""
|
|
508
|
+
return await self.wallets.aget_wallet(
|
|
509
|
+
params=params,
|
|
510
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
511
|
+
)
|
|
512
|
+
|
|
513
|
+
def get_wallet(
|
|
514
|
+
self,
|
|
515
|
+
params: GetWalletParams,
|
|
516
|
+
bearer_token: Optional[str] = None,
|
|
517
|
+
) -> Optional[GetWalletResponse]:
|
|
518
|
+
"""
|
|
519
|
+
Get wallet by external user ID (sync).
|
|
520
|
+
|
|
521
|
+
Args:
|
|
522
|
+
params: Wallet query parameters
|
|
523
|
+
bearer_token: Optional bearer token
|
|
524
|
+
|
|
525
|
+
Returns:
|
|
526
|
+
Wallet data or None if not found
|
|
527
|
+
"""
|
|
528
|
+
return self.wallets.get_wallet(
|
|
529
|
+
params=params,
|
|
530
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
531
|
+
)
|
|
532
|
+
|
|
533
|
+
async def aget_token_balance(
|
|
534
|
+
self,
|
|
535
|
+
params: GetTokenBalanceParams,
|
|
536
|
+
bearer_token: Optional[str] = None,
|
|
537
|
+
) -> GetTokenBalanceResponse:
|
|
538
|
+
"""
|
|
539
|
+
Get token balance (async).
|
|
540
|
+
|
|
541
|
+
Args:
|
|
542
|
+
params: Balance query parameters
|
|
543
|
+
bearer_token: Optional bearer token
|
|
544
|
+
|
|
545
|
+
Returns:
|
|
546
|
+
Token balance
|
|
547
|
+
"""
|
|
548
|
+
return await self.wallets.aget_token_balance(
|
|
549
|
+
params=params,
|
|
550
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
551
|
+
)
|
|
552
|
+
|
|
553
|
+
def get_token_balance(
|
|
554
|
+
self,
|
|
555
|
+
params: GetTokenBalanceParams,
|
|
556
|
+
bearer_token: Optional[str] = None,
|
|
557
|
+
) -> GetTokenBalanceResponse:
|
|
558
|
+
"""
|
|
559
|
+
Get token balance (sync).
|
|
560
|
+
|
|
561
|
+
Args:
|
|
562
|
+
params: Balance query parameters
|
|
563
|
+
bearer_token: Optional bearer token
|
|
564
|
+
|
|
565
|
+
Returns:
|
|
566
|
+
Token balance
|
|
567
|
+
"""
|
|
568
|
+
return self.wallets.get_token_balance(
|
|
569
|
+
params=params,
|
|
570
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
571
|
+
)
|
|
572
|
+
|
|
573
|
+
# ===== Transaction History =====
|
|
574
|
+
|
|
575
|
+
async def arecord_send_transaction(
|
|
576
|
+
self,
|
|
577
|
+
params: RecordSendTransactionParams,
|
|
578
|
+
bearer_token: Optional[str] = None,
|
|
579
|
+
) -> Transaction:
|
|
580
|
+
"""
|
|
581
|
+
Record a send transaction (async).
|
|
582
|
+
|
|
583
|
+
Args:
|
|
584
|
+
params: Transaction recording parameters
|
|
585
|
+
bearer_token: Optional bearer token
|
|
586
|
+
|
|
587
|
+
Returns:
|
|
588
|
+
Transaction record
|
|
589
|
+
"""
|
|
590
|
+
return await self.transactions.arecord_send_transaction(
|
|
591
|
+
params=params,
|
|
592
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
593
|
+
)
|
|
594
|
+
|
|
595
|
+
def record_send_transaction(
|
|
596
|
+
self,
|
|
597
|
+
params: RecordSendTransactionParams,
|
|
598
|
+
bearer_token: Optional[str] = None,
|
|
599
|
+
) -> Transaction:
|
|
600
|
+
"""
|
|
601
|
+
Record a send transaction (sync).
|
|
602
|
+
|
|
603
|
+
Args:
|
|
604
|
+
params: Transaction recording parameters
|
|
605
|
+
bearer_token: Optional bearer token
|
|
606
|
+
|
|
607
|
+
Returns:
|
|
608
|
+
Transaction record
|
|
609
|
+
"""
|
|
610
|
+
return self.transactions.record_send_transaction(
|
|
611
|
+
params=params,
|
|
612
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
613
|
+
)
|
|
614
|
+
|
|
615
|
+
async def aget_transaction_list(
|
|
616
|
+
self,
|
|
617
|
+
query: GetTransactionListQuery,
|
|
618
|
+
bearer_token: Optional[str] = None,
|
|
619
|
+
) -> PaginatedResponse[Transaction]:
|
|
620
|
+
"""
|
|
621
|
+
Get transaction list (async).
|
|
622
|
+
|
|
623
|
+
Args:
|
|
624
|
+
query: Query parameters
|
|
625
|
+
bearer_token: Optional bearer token
|
|
626
|
+
|
|
627
|
+
Returns:
|
|
628
|
+
Paginated transaction list
|
|
629
|
+
"""
|
|
630
|
+
return await self.transactions.aget_transaction_list(
|
|
631
|
+
query=query,
|
|
632
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
633
|
+
)
|
|
634
|
+
|
|
635
|
+
def get_transaction_list(
|
|
636
|
+
self,
|
|
637
|
+
query: GetTransactionListQuery,
|
|
638
|
+
bearer_token: Optional[str] = None,
|
|
639
|
+
) -> PaginatedResponse[Transaction]:
|
|
640
|
+
"""
|
|
641
|
+
Get transaction list (sync).
|
|
642
|
+
|
|
643
|
+
Args:
|
|
644
|
+
query: Query parameters
|
|
645
|
+
bearer_token: Optional bearer token
|
|
646
|
+
|
|
647
|
+
Returns:
|
|
648
|
+
Paginated transaction list
|
|
649
|
+
"""
|
|
650
|
+
return self.transactions.get_transaction_list(
|
|
651
|
+
query=query,
|
|
652
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
653
|
+
)
|
|
654
|
+
|
|
655
|
+
# ===== Single Transaction Lookup =====
|
|
656
|
+
|
|
657
|
+
async def aget_transaction(
|
|
658
|
+
self,
|
|
659
|
+
hash_or_id: str,
|
|
660
|
+
bearer_token: Optional[str] = None,
|
|
661
|
+
) -> Transaction:
|
|
662
|
+
"""
|
|
663
|
+
Get a single transaction by hash or ID (async).
|
|
664
|
+
|
|
665
|
+
Args:
|
|
666
|
+
hash_or_id: Transaction hash (0x...) or internal database ID
|
|
667
|
+
bearer_token: Optional bearer token
|
|
668
|
+
|
|
669
|
+
Returns:
|
|
670
|
+
Transaction record
|
|
671
|
+
"""
|
|
672
|
+
return await self.transactions.aget_transaction(
|
|
673
|
+
hash_or_id=hash_or_id,
|
|
674
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
675
|
+
)
|
|
676
|
+
|
|
677
|
+
def get_transaction(
|
|
678
|
+
self,
|
|
679
|
+
hash_or_id: str,
|
|
680
|
+
bearer_token: Optional[str] = None,
|
|
681
|
+
) -> Transaction:
|
|
682
|
+
"""
|
|
683
|
+
Get a single transaction by hash or ID (sync).
|
|
684
|
+
|
|
685
|
+
Args:
|
|
686
|
+
hash_or_id: Transaction hash (0x...) or internal database ID
|
|
687
|
+
bearer_token: Optional bearer token
|
|
688
|
+
|
|
689
|
+
Returns:
|
|
690
|
+
Transaction record
|
|
691
|
+
"""
|
|
692
|
+
return self.transactions.get_transaction(
|
|
693
|
+
hash_or_id=hash_or_id,
|
|
694
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
695
|
+
)
|
|
696
|
+
|
|
697
|
+
async def aget_transaction_status(
|
|
698
|
+
self,
|
|
699
|
+
hash: str,
|
|
700
|
+
bearer_token: Optional[str] = None,
|
|
701
|
+
) -> TransactionStatusResponse:
|
|
702
|
+
"""
|
|
703
|
+
Get on-chain transaction status (async).
|
|
704
|
+
|
|
705
|
+
Args:
|
|
706
|
+
hash: Transaction hash (0x...)
|
|
707
|
+
bearer_token: Optional bearer token
|
|
708
|
+
|
|
709
|
+
Returns:
|
|
710
|
+
Transaction status response
|
|
711
|
+
"""
|
|
712
|
+
return await self.transactions.aget_transaction_status(
|
|
713
|
+
hash=hash,
|
|
714
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
715
|
+
)
|
|
716
|
+
|
|
717
|
+
def get_transaction_status(
|
|
718
|
+
self,
|
|
719
|
+
hash: str,
|
|
720
|
+
bearer_token: Optional[str] = None,
|
|
721
|
+
) -> TransactionStatusResponse:
|
|
722
|
+
"""
|
|
723
|
+
Get on-chain transaction status (sync).
|
|
724
|
+
|
|
725
|
+
Args:
|
|
726
|
+
hash: Transaction hash (0x...)
|
|
727
|
+
bearer_token: Optional bearer token
|
|
728
|
+
|
|
729
|
+
Returns:
|
|
730
|
+
Transaction status response
|
|
731
|
+
"""
|
|
732
|
+
return self.transactions.get_transaction_status(
|
|
733
|
+
hash=hash,
|
|
734
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
735
|
+
)
|
|
736
|
+
|
|
737
|
+
# ===== Wallet Upgrade Methods =====
|
|
738
|
+
|
|
739
|
+
async def aprepare_wallet_upgrade(
|
|
740
|
+
self,
|
|
741
|
+
params: PrepareWalletUpgradeParams,
|
|
742
|
+
bearer_token: Optional[str] = None,
|
|
743
|
+
) -> PrepareWalletUpgradeResponse:
|
|
744
|
+
"""
|
|
745
|
+
Prepare a wallet upgrade (async).
|
|
746
|
+
|
|
747
|
+
Args:
|
|
748
|
+
params: Upgrade preparation parameters
|
|
749
|
+
bearer_token: Optional bearer token
|
|
750
|
+
|
|
751
|
+
Returns:
|
|
752
|
+
Typed data to sign for the upgrade
|
|
753
|
+
"""
|
|
754
|
+
return await self.wallets.aprepare_wallet_upgrade(
|
|
755
|
+
params=params,
|
|
756
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
757
|
+
)
|
|
758
|
+
|
|
759
|
+
def prepare_wallet_upgrade(
|
|
760
|
+
self,
|
|
761
|
+
params: PrepareWalletUpgradeParams,
|
|
762
|
+
bearer_token: Optional[str] = None,
|
|
763
|
+
) -> PrepareWalletUpgradeResponse:
|
|
764
|
+
"""
|
|
765
|
+
Prepare a wallet upgrade (sync).
|
|
766
|
+
|
|
767
|
+
Args:
|
|
768
|
+
params: Upgrade preparation parameters
|
|
769
|
+
bearer_token: Optional bearer token
|
|
770
|
+
|
|
771
|
+
Returns:
|
|
772
|
+
Typed data to sign for the upgrade
|
|
773
|
+
"""
|
|
774
|
+
return self.wallets.prepare_wallet_upgrade(
|
|
775
|
+
params=params,
|
|
776
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
777
|
+
)
|
|
778
|
+
|
|
779
|
+
async def aexecute_wallet_upgrade(
|
|
780
|
+
self,
|
|
781
|
+
params: ExecuteWalletUpgradeParams,
|
|
782
|
+
bearer_token: Optional[str] = None,
|
|
783
|
+
) -> ExecuteWalletUpgradeResponse:
|
|
784
|
+
"""
|
|
785
|
+
Execute a wallet upgrade after signing (async).
|
|
786
|
+
|
|
787
|
+
Args:
|
|
788
|
+
params: Upgrade execution parameters
|
|
789
|
+
bearer_token: Optional bearer token
|
|
790
|
+
|
|
791
|
+
Returns:
|
|
792
|
+
Upgrade result with transaction hash
|
|
793
|
+
"""
|
|
794
|
+
return await self.wallets.aexecute_wallet_upgrade(
|
|
795
|
+
params=params,
|
|
796
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
797
|
+
)
|
|
798
|
+
|
|
799
|
+
def execute_wallet_upgrade(
|
|
800
|
+
self,
|
|
801
|
+
params: ExecuteWalletUpgradeParams,
|
|
802
|
+
bearer_token: Optional[str] = None,
|
|
803
|
+
) -> ExecuteWalletUpgradeResponse:
|
|
804
|
+
"""
|
|
805
|
+
Execute a wallet upgrade after signing (sync).
|
|
806
|
+
|
|
807
|
+
Args:
|
|
808
|
+
params: Upgrade execution parameters
|
|
809
|
+
bearer_token: Optional bearer token
|
|
810
|
+
|
|
811
|
+
Returns:
|
|
812
|
+
Upgrade result with transaction hash
|
|
813
|
+
"""
|
|
814
|
+
return self.wallets.execute_wallet_upgrade(
|
|
815
|
+
params=params,
|
|
816
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
817
|
+
)
|
|
818
|
+
|
|
819
|
+
# ===== SKU Methods =====
|
|
820
|
+
|
|
821
|
+
async def aget_sku_list(
|
|
822
|
+
self,
|
|
823
|
+
params: GetSkuListQuery,
|
|
824
|
+
bearer_token: Optional[str] = None,
|
|
825
|
+
) -> PaginatedResponse[Sku]:
|
|
826
|
+
"""
|
|
827
|
+
Get SKU list (async).
|
|
828
|
+
|
|
829
|
+
Args:
|
|
830
|
+
params: Query parameters
|
|
831
|
+
bearer_token: Optional bearer token
|
|
832
|
+
|
|
833
|
+
Returns:
|
|
834
|
+
Paginated SKU list
|
|
835
|
+
"""
|
|
836
|
+
return await self.skus.aget_sku_list(
|
|
837
|
+
params=params,
|
|
838
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
839
|
+
)
|
|
840
|
+
|
|
841
|
+
def get_sku_list(
|
|
842
|
+
self,
|
|
843
|
+
params: GetSkuListQuery,
|
|
844
|
+
bearer_token: Optional[str] = None,
|
|
845
|
+
) -> PaginatedResponse[Sku]:
|
|
846
|
+
"""
|
|
847
|
+
Get SKU list (sync).
|
|
848
|
+
|
|
849
|
+
Args:
|
|
850
|
+
params: Query parameters
|
|
851
|
+
bearer_token: Optional bearer token
|
|
852
|
+
|
|
853
|
+
Returns:
|
|
854
|
+
Paginated SKU list
|
|
855
|
+
"""
|
|
856
|
+
return self.skus.get_sku_list(
|
|
857
|
+
params=params,
|
|
858
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
859
|
+
)
|
|
860
|
+
|
|
861
|
+
async def aget_sku(
|
|
862
|
+
self,
|
|
863
|
+
sku_id: str,
|
|
864
|
+
bearer_token: Optional[str] = None,
|
|
865
|
+
) -> Sku:
|
|
866
|
+
"""
|
|
867
|
+
Get SKU by ID (async).
|
|
868
|
+
|
|
869
|
+
Args:
|
|
870
|
+
sku_id: SKU identifier
|
|
871
|
+
bearer_token: Optional bearer token
|
|
872
|
+
|
|
873
|
+
Returns:
|
|
874
|
+
SKU data
|
|
875
|
+
"""
|
|
876
|
+
return await self.skus.aget_sku(
|
|
877
|
+
sku_id=sku_id,
|
|
878
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
879
|
+
)
|
|
880
|
+
|
|
881
|
+
def get_sku(
|
|
882
|
+
self,
|
|
883
|
+
sku_id: str,
|
|
884
|
+
bearer_token: Optional[str] = None,
|
|
885
|
+
) -> Sku:
|
|
886
|
+
"""
|
|
887
|
+
Get SKU by ID (sync).
|
|
888
|
+
|
|
889
|
+
Args:
|
|
890
|
+
sku_id: SKU identifier
|
|
891
|
+
bearer_token: Optional bearer token
|
|
892
|
+
|
|
893
|
+
Returns:
|
|
894
|
+
SKU data
|
|
895
|
+
"""
|
|
896
|
+
return self.skus.get_sku(
|
|
897
|
+
sku_id=sku_id,
|
|
898
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
899
|
+
)
|
|
900
|
+
|
|
901
|
+
async def acreate_sku_transaction(
|
|
902
|
+
self,
|
|
903
|
+
params: CreateSkuTransactionParams,
|
|
904
|
+
bearer_token: Optional[str] = None,
|
|
905
|
+
) -> SkuTransaction:
|
|
906
|
+
"""
|
|
907
|
+
Create SKU transaction (async).
|
|
908
|
+
|
|
909
|
+
Args:
|
|
910
|
+
params: SKU transaction parameters
|
|
911
|
+
bearer_token: Optional bearer token
|
|
912
|
+
|
|
913
|
+
Returns:
|
|
914
|
+
SKU transaction
|
|
915
|
+
"""
|
|
916
|
+
return await self.sku_transactions.acreate_sku_transaction(
|
|
917
|
+
params=params,
|
|
918
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
919
|
+
)
|
|
920
|
+
|
|
921
|
+
def create_sku_transaction(
|
|
922
|
+
self,
|
|
923
|
+
params: CreateSkuTransactionParams,
|
|
924
|
+
bearer_token: Optional[str] = None,
|
|
925
|
+
) -> SkuTransaction:
|
|
926
|
+
"""
|
|
927
|
+
Create SKU transaction (sync).
|
|
928
|
+
|
|
929
|
+
Args:
|
|
930
|
+
params: SKU transaction parameters
|
|
931
|
+
bearer_token: Optional bearer token
|
|
932
|
+
|
|
933
|
+
Returns:
|
|
934
|
+
SKU transaction
|
|
935
|
+
"""
|
|
936
|
+
return self.sku_transactions.create_sku_transaction(
|
|
937
|
+
params=params,
|
|
938
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
939
|
+
)
|
|
940
|
+
|
|
941
|
+
# ===== User Methods =====
|
|
942
|
+
|
|
943
|
+
async def aget_user(
|
|
944
|
+
self,
|
|
945
|
+
params: GetUserParams,
|
|
946
|
+
bearer_token: Optional[str] = None,
|
|
947
|
+
) -> User:
|
|
948
|
+
"""
|
|
949
|
+
Get user by external ID (async).
|
|
950
|
+
|
|
951
|
+
Args:
|
|
952
|
+
params: User query parameters
|
|
953
|
+
bearer_token: Optional bearer token
|
|
954
|
+
|
|
955
|
+
Returns:
|
|
956
|
+
User data
|
|
957
|
+
"""
|
|
958
|
+
return await self.users.aget_user(
|
|
959
|
+
params=params,
|
|
960
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
961
|
+
)
|
|
962
|
+
|
|
963
|
+
def get_user(
|
|
964
|
+
self,
|
|
965
|
+
params: GetUserParams,
|
|
966
|
+
bearer_token: Optional[str] = None,
|
|
967
|
+
) -> User:
|
|
968
|
+
"""
|
|
969
|
+
Get user by external ID (sync).
|
|
970
|
+
|
|
971
|
+
Args:
|
|
972
|
+
params: User query parameters
|
|
973
|
+
bearer_token: Optional bearer token
|
|
974
|
+
|
|
975
|
+
Returns:
|
|
976
|
+
User data
|
|
977
|
+
"""
|
|
978
|
+
return self.users.get_user(
|
|
979
|
+
params=params,
|
|
980
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
981
|
+
)
|
|
982
|
+
|
|
983
|
+
async def acreate_user(
|
|
984
|
+
self,
|
|
985
|
+
params: CreateUserParams,
|
|
986
|
+
bearer_token: Optional[str] = None,
|
|
987
|
+
) -> User:
|
|
988
|
+
"""
|
|
989
|
+
Create user (async).
|
|
990
|
+
|
|
991
|
+
Args:
|
|
992
|
+
params: User creation parameters
|
|
993
|
+
bearer_token: Optional bearer token
|
|
994
|
+
|
|
995
|
+
Returns:
|
|
996
|
+
Created user
|
|
997
|
+
"""
|
|
998
|
+
return await self.users.acreate_user(
|
|
999
|
+
params=params,
|
|
1000
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
1001
|
+
)
|
|
1002
|
+
|
|
1003
|
+
def create_user(
|
|
1004
|
+
self,
|
|
1005
|
+
params: CreateUserParams,
|
|
1006
|
+
bearer_token: Optional[str] = None,
|
|
1007
|
+
) -> User:
|
|
1008
|
+
"""
|
|
1009
|
+
Create user (sync).
|
|
1010
|
+
|
|
1011
|
+
Args:
|
|
1012
|
+
params: User creation parameters
|
|
1013
|
+
bearer_token: Optional bearer token
|
|
1014
|
+
|
|
1015
|
+
Returns:
|
|
1016
|
+
Created user
|
|
1017
|
+
"""
|
|
1018
|
+
return self.users.create_user(
|
|
1019
|
+
params=params,
|
|
1020
|
+
bearer_token=self._resolve_bearer_token(bearer_token),
|
|
1021
|
+
)
|