helius-python 0.3.4__py3-none-any.whl → 0.4.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.
@@ -9,7 +9,7 @@ from pydantic.alias_generators import to_camel
9
9
  from typing_extensions import TypedDict
10
10
  from websockets.sync.client import connect
11
11
 
12
- from helius.rpc import JsonRpcRequest
12
+ from helius.utils import JsonRpcRequest
13
13
 
14
14
 
15
15
  class Notification(BaseModel):
@@ -5,7 +5,6 @@ import httpx
5
5
  from dotenv import dotenv_values
6
6
  from pydantic import Field, TypeAdapter, validate_call
7
7
 
8
- from helius.rpc import JsonRpcRequest
9
8
  from helius.solana_rpc.models import (
10
9
  Account,
11
10
  Block,
@@ -33,6 +32,7 @@ from helius.solana_rpc.models import (
33
32
  TransferFilters,
34
33
  VotingAccount,
35
34
  )
35
+ from helius.utils import JsonRpcRequest
36
36
 
37
37
 
38
38
  # TODO: Use Pydantic typed dict where useful
@@ -4,8 +4,6 @@ from pydantic import AliasGenerator, BaseModel, ConfigDict
4
4
  from pydantic.alias_generators import to_camel
5
5
  from typing_extensions import TypedDict
6
6
 
7
- # TODO: Improve camelCase <-> snake_case
8
-
9
7
 
10
8
  class Account(BaseModel):
11
9
  model_config = ConfigDict(alias_generator=AliasGenerator(validation_alias=to_camel))
@@ -0,0 +1,3 @@
1
+ from helius.utils.json_rpc_request import JsonRpcRequest
2
+
3
+ __all__ = ["JsonRpcRequest"]
File without changes
@@ -0,0 +1,722 @@
1
+ from os import environ
2
+ from typing import Literal
3
+
4
+ import httpx
5
+ from dotenv import dotenv_values
6
+ from pydantic import AliasChoices, AliasGenerator, BaseModel, ConfigDict, Field
7
+ from pydantic.alias_generators import to_camel
8
+
9
+ TransactionType = Literal[
10
+ "ANY",
11
+ "ACCEPT_ESCROW_ARTIST",
12
+ "ACCEPT_ESCROW_USER",
13
+ "ACCEPT_PROPOSAL",
14
+ "ACCEPT_REQUEST_ARTIST",
15
+ "ACTIVATE_PROPOSAL",
16
+ "ACTIVATE_TRANSACTION",
17
+ "ACTIVATE_VAULT",
18
+ "ADD_AUTHORITY",
19
+ "ADD_BALANCE_LIQUIDITY",
20
+ "ADD_BATCH_TRANSACTION",
21
+ "ADD_IMBALANCE_LIQUIDITY",
22
+ "ADD_INSTRUCTION",
23
+ "ADD_ITEM",
24
+ "ADD_LIQUIDITY",
25
+ "ADD_LIQUIDITY_BY_STRATEGY",
26
+ "ADD_LIQUIDITY_BY_STRATEGY_ONE_SIDE",
27
+ "ADD_LIQUIDITY_BY_WEIGHT",
28
+ "ADD_LIQUIDITY_ONE_SIDE",
29
+ "ADD_LIQUIDITY_ONE_SIDE_PRECISE",
30
+ "ADD_MEMBER",
31
+ "ADD_MEMBER_AND_CHANGE_THRESHOLD",
32
+ "ADD_METADATA",
33
+ "ADD_PAYMENT_MINT_PAYMENT_METHOD",
34
+ "ADD_RARITIES_TO_BANK",
35
+ "ADD_REWARDS",
36
+ "ADD_SPENDING_LIMIT",
37
+ "ADD_TO_POOL",
38
+ "ADD_TO_WHITELIST",
39
+ "ADD_TOKEN_TO_VAULT",
40
+ "ADD_TRAIT_CONFLICTS",
41
+ "ADMIN_SYNC_LIQUIDITY",
42
+ "APPROVE",
43
+ "APPROVE_PROPOSAL",
44
+ "APPROVE_TRANSACTION",
45
+ "ATTACH_METADATA",
46
+ "AUCTION_HOUSE_CREATE",
47
+ "AUCTION_MANAGER_CLAIM_BID",
48
+ "AUTHORIZE_FUNDER",
49
+ "BACKFILL_TOTAL_BLOCKS",
50
+ "BEGIN_TRAIT_UPDATE",
51
+ "BEGIN_VARIANT_UPDATE",
52
+ "BOOTSTRAP_LIQUIDITY",
53
+ "BORROW_CNFT_PERPETUAL",
54
+ "BORROW_FOX",
55
+ "BORROW_OBLIGATION_LIQUIDITY",
56
+ "BORROW_PERPETUAL",
57
+ "BORROW_SOL_FOR_NFT",
58
+ "BORROW_STAKED_BANX_PERPETUAL",
59
+ "BOT_CLAIM_SALE",
60
+ "BOT_DELIST",
61
+ "BOT_LIQUIDATE",
62
+ "BOT_LIQUIDATE_SELL",
63
+ "BOT_UNFREEZE",
64
+ "BOUND_HADO_MARKET_TO_FRAKT_MARKET",
65
+ "BURN",
66
+ "BURN_NFT",
67
+ "BURN_PAYMENT",
68
+ "BURN_PAYMENT_TREE",
69
+ "BUY_ITEM",
70
+ "BUY_LOAN",
71
+ "BUY_SUBSCRIPTION",
72
+ "BUY_TICKETS",
73
+ "CANCEL",
74
+ "CANCEL_ALL_AND_PLACE_ORDERS",
75
+ "CANCEL_ALL_ORDERS",
76
+ "CANCEL_ESCROW",
77
+ "CANCEL_LOAN_REQUEST",
78
+ "CANCEL_MULTIPLE_ORDERS",
79
+ "CANCEL_OFFER",
80
+ "CANCEL_ORDER",
81
+ "CANCEL_ORDER_BY_CLIENT_ORDER_ID",
82
+ "CANCEL_PROPOSAL",
83
+ "CANCEL_REWARD",
84
+ "CANCEL_SWAP",
85
+ "CANCEL_TRANSACTION",
86
+ "CANCEL_UP_TO",
87
+ "CANCEL_UPDATE",
88
+ "CANDY_MACHINE_ROUTE",
89
+ "CANDY_MACHINE_UNWRAP",
90
+ "CANDY_MACHINE_UPDATE",
91
+ "CANDY_MACHINE_WRAP",
92
+ "CHANGE_BLOCK_BUILDER",
93
+ "CHANGE_COMIC_STATE",
94
+ "CHANGE_FEE_RECIPIENT",
95
+ "CHANGE_MARKET_STATUS",
96
+ "CHANGE_SEAT_STATUS",
97
+ "CHANGE_THRESHOLD",
98
+ "CHANGE_TIP_RECEIVER",
99
+ "CLAIM_AUTHORITY",
100
+ "CLAIM_CNFT_PERPETUAL_LOAN",
101
+ "CLAIM_FEE",
102
+ "CLAIM_NFT",
103
+ "CLAIM_NFT_BY_LENDER_CNFT",
104
+ "CLAIM_NFT_BY_LENDER_PNFT",
105
+ "CLAIM_PERPETUAL_LOAN",
106
+ "CLAIM_REWARD",
107
+ "CLAIM_REWARDS",
108
+ "CLAIM_SALE",
109
+ "CLAIM_TIPS",
110
+ "CLEAN",
111
+ "CLOSE_ACCOUNT",
112
+ "CLOSE_BATCH_ACCOUNTS",
113
+ "CLOSE_BUNDLED_POSITION",
114
+ "CLOSE_CLAIM_STATUS",
115
+ "CLOSE_CONFIG",
116
+ "CLOSE_CONFIG_TRANSACTION_ACCOUNTS",
117
+ "CLOSE_ESCROW_ACCOUNT",
118
+ "CLOSE_ITEM",
119
+ "CLOSE_MARKET",
120
+ "CLOSE_OPEN_ORDERS_ACCOUNT",
121
+ "CLOSE_OPEN_ORDERS_INDEXER",
122
+ "CLOSE_ORDER",
123
+ "CLOSE_POOL",
124
+ "CLOSE_POSITION",
125
+ "CLOSE_PRESET_PARAMETER",
126
+ "CLOSE_TIP_DISTRIBUTION_ACCOUNT",
127
+ "CLOSE_VAULT_BATCH_TRANSACTION_ACCOUNT",
128
+ "CLOSE_VAULT_TRANSACTION_ACCOUNTS",
129
+ "COLLECT_FEES",
130
+ "COLLECT_REWARD",
131
+ "COMPRESS_NFT",
132
+ "COMPRESSED_NFT_BURN",
133
+ "COMPRESSED_NFT_CANCEL_REDEEM",
134
+ "COMPRESSED_NFT_DELEGATE",
135
+ "COMPRESSED_NFT_MINT",
136
+ "COMPRESSED_NFT_REDEEM",
137
+ "COMPRESSED_NFT_SET_VERIFY_COLLECTION",
138
+ "COMPRESSED_NFT_TRANSFER",
139
+ "COMPRESSED_NFT_UNVERIFY_COLLECTION",
140
+ "COMPRESSED_NFT_UNVERIFY_CREATOR",
141
+ "COMPRESSED_NFT_UPDATE_METADATA",
142
+ "COMPRESSED_NFT_VERIFY_COLLECTION",
143
+ "COMPRESSED_NFT_VERIFY_CREATOR",
144
+ "CONSUME_EVENTS",
145
+ "CONSUME_GIVEN_EVENTS",
146
+ "COPY_CLUSTER_INFO",
147
+ "COPY_GOSSIP_CONTACT_INFO",
148
+ "COPY_TIP_DISTRIBUTION_ACCOUNT",
149
+ "COPY_VOTE_ACCOUNT",
150
+ "CRANK",
151
+ "CRANK_EVENT_QUEUE",
152
+ "CREATE",
153
+ "CREATE_AMM",
154
+ "CREATE_APPRAISAL",
155
+ "CREATE_AVATAR",
156
+ "CREATE_AVATAR_CLASS",
157
+ "CREATE_BATCH",
158
+ "CREATE_BET",
159
+ "CREATE_BOND_AND_SELL_TO_OFFERS",
160
+ "CREATE_BOND_AND_SELL_TO_OFFERS_CNFT",
161
+ "CREATE_BOND_AND_SELL_TO_OFFERS_FOR_TEST",
162
+ "CREATE_BOND_OFFER_STANDARD",
163
+ "CREATE_COLLECTION",
164
+ "CREATE_CONFIG",
165
+ "CREATE_CONFIG_TRANSACTION",
166
+ "CREATE_ESCROW",
167
+ "CREATE_LOCK_ESCROW",
168
+ "CREATE_MARKET",
169
+ "CREATE_MASTER_EDITION",
170
+ "CREATE_MERKLE_TREE",
171
+ "CREATE_MINT_METADATA",
172
+ "CREATE_MULTISIG",
173
+ "CREATE_OPEN_ORDERS_ACCOUNT",
174
+ "CREATE_OPEN_ORDERS_INDEXER",
175
+ "CREATE_ORDER",
176
+ "CREATE_PAYMENT_METHOD",
177
+ "CREATE_PERPETUAL_BOND_OFFER",
178
+ "CREATE_POOL",
179
+ "CREATE_PROPOSAL",
180
+ "CREATE_RAFFLE",
181
+ "CREATE_STATS",
182
+ "CREATE_STORE",
183
+ "CREATE_TOKEN_POOL",
184
+ "CREATE_TRAIT",
185
+ "CREATE_TRANSACTION",
186
+ "CREATE_UNCHECKED",
187
+ "CREATE_VAULT_TRANSACTION",
188
+ "DEAUTHORIZE_FUNDER",
189
+ "DECOMPRESS_NFT",
190
+ "DECREASE_LIQUIDITY",
191
+ "DELEGATE_MERKLE_TREE",
192
+ "DELETE_COLLECTION",
193
+ "DELETE_POSITION_BUNDLE",
194
+ "DELETE_REFERRER_STATE_AND_SHORT_URL",
195
+ "DELETE_TOKEN_BADGE",
196
+ "DELIST_ITEM",
197
+ "DELIST_NFT",
198
+ "DEPOSIT",
199
+ "DEPOSIT_FRACTIONAL_POOL",
200
+ "DEPOSIT_GEM",
201
+ "DEPOSIT_OBLIGATION_COLLATERAL",
202
+ "DEPOSIT_RESERVE_LIQUIDITY",
203
+ "DEPOSIT_RESERVE_LIQUIDITY_AND_OBLIGATION_COLLATERAL",
204
+ "DEPOSIT_SOL_TO_FLASH_LOAN_POOL",
205
+ "DEPOSIT_TO_BOND_OFFER_STANDARD",
206
+ "DEPOSIT_TO_FARM_VAULT",
207
+ "DEPOSIT_TO_REWARDS_VAULT",
208
+ "DISTRIBUTE_COMPRESSION_REWARDS",
209
+ "EDIT_ORDER",
210
+ "EDIT_ORDER_PEGGED",
211
+ "EMPTY_PAYMENT_ACCOUNT",
212
+ "ENABLE_OR_DISABLE_POOL",
213
+ "EQUIP_TRAIT",
214
+ "EQUIP_TRAIT_AUTHORITY",
215
+ "EVICT_SEAT",
216
+ "EXECUTE_BATCH_TRANSACTION",
217
+ "EXECUTE_CONFIG_TRANSACTION",
218
+ "EXECUTE_INSTRUCTION",
219
+ "EXECUTE_LOAN",
220
+ "EXECUTE_MORTGAGE",
221
+ "EXECUTE_TRANSACTION",
222
+ "EXECUTE_VAULT_TRANSACTION",
223
+ "EXIT_VALIDATE_AND_SELL_TO_BOND_OFFERS_V2",
224
+ "EXPIRE",
225
+ "EXTEND_LOAN",
226
+ "EXTENSION_EXECUTE",
227
+ "FILL_ORDER",
228
+ "FINALIZE_PROGRAM_INSTRUCTION",
229
+ "FINISH_HADO_MARKET",
230
+ "FIX_POOL",
231
+ "FLASH_BORROW_RESERVE_LIQUIDITY",
232
+ "FLASH_REPAY_RESERVE_LIQUIDITY",
233
+ "FORCE_CANCEL_ORDERS",
234
+ "FORECLOSE_LOAN",
235
+ "FRACTIONALIZE",
236
+ "FREEZE",
237
+ "FUND_REWARD",
238
+ "FUSE",
239
+ "GET_POOL_INFO",
240
+ "GO_TO_A_BIN",
241
+ "HARVEST_REWARD",
242
+ "IDL_MISSING_TYPES",
243
+ "INCREASE_LIQUIDITY",
244
+ "INCREASE_ORACLE_LENGTH",
245
+ "INIT_AUCTION_MANAGER_V2",
246
+ "INIT_BANK",
247
+ "INIT_CLUSTER_HISTORY_ACCOUNT",
248
+ "INIT_CONFIG",
249
+ "INIT_CONFIG_EXTENSION",
250
+ "INIT_CUSTOMIZABLE_PERMISSIONLESS_CONSTANT_PRODUCT_POOL",
251
+ "INIT_FARM",
252
+ "INIT_FARMER",
253
+ "INIT_FARMS_FOR_RESERVE",
254
+ "INIT_FEE_TIER",
255
+ "INIT_LENDING_MARKET",
256
+ "INIT_OBLIGATION",
257
+ "INIT_OBLIGATION_FARMS_FOR_RESERVE",
258
+ "INIT_PERMISSIONED_POOL",
259
+ "INIT_PERMISSIONLESS_CONSTANT_PRODUCT_POOL_WITH_CONFIG",
260
+ "INIT_PERMISSIONLESS_CONSTANT_PRODUCT_POOL_WITH_CONFIG_2",
261
+ "INIT_PERMISSIONLESS_POOL",
262
+ "INIT_PERMISSIONLESS_POOL_WITH_FEE_TIER",
263
+ "INIT_POOL",
264
+ "INIT_POOL_V2",
265
+ "INIT_POSITION_BUNDLE",
266
+ "INIT_POSITION_BUNDLE_WITH_METADATA",
267
+ "INIT_REFERRER_STATE_AND_SHORT_URL",
268
+ "INIT_REFERRER_TOKEN_STATE",
269
+ "INIT_RENT",
270
+ "INIT_RESERVE",
271
+ "INIT_REWARD",
272
+ "INIT_REWARD_V2",
273
+ "INIT_STAKE",
274
+ "INIT_SWAP",
275
+ "INIT_TICK_ARRAY",
276
+ "INIT_TIP_DISTRIBUTION_ACCOUNT",
277
+ "INIT_TOKEN_BADGE",
278
+ "INIT_USER_METADATA",
279
+ "INIT_VALIDATOR_HISTORY_ACCOUNT",
280
+ "INIT_VAULT",
281
+ "INITIALIZE",
282
+ "INITIALIZE_ACCOUNT",
283
+ "INITIALIZE_BIN_ARRAY",
284
+ "INITIALIZE_BIN_ARRAY_BITMAP_EXTENSION",
285
+ "INITIALIZE_CUSTOMIZABLE_PERMISSIONLESS_LB_PAIR",
286
+ "INITIALIZE_FARM",
287
+ "INITIALIZE_FARM_DELEGATED",
288
+ "INITIALIZE_FLASH_LOAN_POOL",
289
+ "INITIALIZE_GLOBAL_CONFIG",
290
+ "INITIALIZE_HADO_MARKET",
291
+ "INITIALIZE_LB_PAIR",
292
+ "INITIALIZE_MARKET",
293
+ "INITIALIZE_PERMISSION_LB_PAIR",
294
+ "INITIALIZE_POSITION",
295
+ "INITIALIZE_POSITION_BY_OPERATOR",
296
+ "INITIALIZE_POSITION_PDA",
297
+ "INITIALIZE_PRESET_PARAMETER",
298
+ "INITIALIZE_REWARD",
299
+ "INITIALIZE_USER",
300
+ "INSTANT_REFINANCE_PERPETUAL_LOAN",
301
+ "KICK_ITEM",
302
+ "LEND_FOR_NFT",
303
+ "LIMIT_ORDER",
304
+ "LIQUIDATE",
305
+ "LIQUIDATE_BOND_ON_AUCTION_CNFT",
306
+ "LIQUIDATE_BOND_ON_AUCTION_PNFT",
307
+ "LIQUIDATE_OBLIGATION_AND_REDEEM_RESERVE_COLLATERAL",
308
+ "LIST_ITEM",
309
+ "LIST_NFT",
310
+ "LOAN",
311
+ "LOAN_FOX",
312
+ "LOCK",
313
+ "LOCK_REWARD",
314
+ "LOG",
315
+ "MAKE_PERPETUAL_MARKET",
316
+ "MAP_BANX_TO_POINTS",
317
+ "MERGE_CONDITIONAL_TOKENS",
318
+ "MERGE_STAKE",
319
+ "MIGRATE_BIN_ARRAY",
320
+ "MIGRATE_POSITION",
321
+ "MIGRATE_TO_PNFT",
322
+ "MINT_TO",
323
+ "NAME_SUCCESSOR",
324
+ "NFT_AUCTION_CANCELLED",
325
+ "NFT_AUCTION_CREATED",
326
+ "NFT_AUCTION_UPDATED",
327
+ "NFT_BID",
328
+ "NFT_BID_CANCELLED",
329
+ "NFT_CANCEL_LISTING",
330
+ "NFT_GLOBAL_BID",
331
+ "NFT_GLOBAL_BID_CANCELLED",
332
+ "NFT_LISTING",
333
+ "NFT_MINT",
334
+ "NFT_MINT_REJECTED",
335
+ "NFT_PARTICIPATION_REWARD",
336
+ "NFT_RENT_ACTIVATE",
337
+ "NFT_RENT_CANCEL_LISTING",
338
+ "NFT_RENT_END",
339
+ "NFT_RENT_LISTING",
340
+ "NFT_RENT_UPDATE_LISTING",
341
+ "NFT_SALE",
342
+ "OFFER_LOAN",
343
+ "OPEN_BUNDLED_POSITION",
344
+ "OPEN_POSITION",
345
+ "OPEN_POSITION_WITH_METADATA",
346
+ "OVERRIDE_CURVE_PARAM",
347
+ "PARTNER_CLAIM_FEE",
348
+ "PATCH_BROKEN_USER_STAKES",
349
+ "PAUSE",
350
+ "PAYOUT",
351
+ "PLACE_AND_TAKE_PERP_ORDER",
352
+ "PLACE_BET",
353
+ "PLACE_MULTIPLE_POST_ONLY_ORDERS",
354
+ "PLACE_ORDER",
355
+ "PLACE_ORDER_PEGGED",
356
+ "PLACE_ORDERS",
357
+ "PLACE_SOL_BET",
358
+ "PLACE_TAKE_ORDER",
359
+ "PLATFORM_FEE",
360
+ "POOL_CANCEL_PROPOSAL",
361
+ "POST_MULTI_PYTH",
362
+ "POST_PYTH",
363
+ "PROGRAM_CONFIG_INIT",
364
+ "PROGRAM_CONFIG_SET_AUTH",
365
+ "PROGRAM_CONFIG_SET_CREATION_FEE",
366
+ "PROGRAM_CONFIG_SET_TREASURY",
367
+ "PROPOSE_LOAN",
368
+ "PRUNE_ORDERS",
369
+ "REALLOC_CLUSTER_HISTORY_ACCOUNT",
370
+ "REALLOC_VALIDATOR_HISTORY_ACCOUNT",
371
+ "REBORROW_SOL_FOR_NFT",
372
+ "RECORD_RARITY_POINTS",
373
+ "REDEEM_CONDITIONAL_TOKENS",
374
+ "REDEEM_FEES",
375
+ "REDEEM_RESERVE_COLLATERAL",
376
+ "REDUCE_ORDER",
377
+ "REFILL",
378
+ "REFINANCE_FBOND_BY_LENDER",
379
+ "REFINANCE_PERPETUAL_LOAN",
380
+ "REFINANCE_TO_BOND_OFFERS_V2",
381
+ "REFINANCE_TO_BOND_OFFERS_V2_CNFT",
382
+ "REFRESH_FARM",
383
+ "REFRESH_FARMER",
384
+ "REFRESH_OBLIGATION",
385
+ "REFRESH_OBLIGATION_FARMS_FOR_RESERVE",
386
+ "REFRESH_RESERVE",
387
+ "REFRESH_RESERVES_BATCH",
388
+ "REFRESH_USER_STATE",
389
+ "REJECT_PROPOSAL",
390
+ "REJECT_SWAP",
391
+ "REJECT_TRANSACTION",
392
+ "REMOVE_ALL_LIQUIDITY",
393
+ "REMOVE_BALANCE_LIQUIDITY",
394
+ "REMOVE_BOND_OFFER_V2",
395
+ "REMOVE_FROM_POOL",
396
+ "REMOVE_FROM_WHITELIST",
397
+ "REMOVE_LIQUIDITY",
398
+ "REMOVE_LIQUIDITY_BY_RANGE",
399
+ "REMOVE_LIQUIDITY_SINGLE_SIDE",
400
+ "REMOVE_MEMBER",
401
+ "REMOVE_MEMBER_AND_CHANGE_THRESHOLD",
402
+ "REMOVE_PERPETUAL_OFFER",
403
+ "REMOVE_SPENDING_LIMIT",
404
+ "REMOVE_TRAIT",
405
+ "REMOVE_TRAIT_AUTHORITY",
406
+ "REPAY",
407
+ "REPAY_CNFT_PERPETUAL_LOAN",
408
+ "REPAY_COMPRESSED",
409
+ "REPAY_FBOND_TO_TRADE_TRANSACTIONS",
410
+ "REPAY_FBOND_TO_TRADE_TRANSACTIONS_CNFT",
411
+ "REPAY_FLASH_LOAN",
412
+ "REPAY_LOAN",
413
+ "REPAY_OBLIGATION_LIQUIDITY",
414
+ "REPAY_PARTIAL_PERPETUAL_LOAN",
415
+ "REPAY_PERPETUAL_LOAN",
416
+ "REPAY_STAKED_BANX",
417
+ "REPAY_STAKED_BANX_PERPETUAL_LOAN",
418
+ "REQUEST_ELEVATION_GROUP",
419
+ "REQUEST_LOAN",
420
+ "REQUEST_PNFT_MIGRATION",
421
+ "REQUEST_SEAT",
422
+ "REQUEST_SEAT_AUTHORIZED",
423
+ "RESCIND_LOAN",
424
+ "REVOKE",
425
+ "REWARD_USER_ONCE",
426
+ "SELL_LOAN",
427
+ "SELL_NFT",
428
+ "SELL_STAKED_BANX_TO_OFFERS",
429
+ "SET_ACTIVATION_POINT",
430
+ "SET_AUTHORITY",
431
+ "SET_BANK_FLAGS",
432
+ "SET_COLLECT_PROTOCOL_FEES_AUTHORITY",
433
+ "SET_CONFIG_AUTH",
434
+ "SET_CONFIG_EXTENSION_AUTHORITY",
435
+ "SET_DEFAULT_FEE_RATE",
436
+ "SET_DEFAULT_PROTOCOL_FEE_RATE",
437
+ "SET_DELEGATE",
438
+ "SET_FEE_AUTHORITY",
439
+ "SET_FEE_RATE",
440
+ "SET_MARKET_EXPIRED",
441
+ "SET_NEW_ADMIN",
442
+ "SET_NEW_ORACLE_AUTHORITY",
443
+ "SET_NEW_TIP_DISTRIBUTION_PROGRAM",
444
+ "SET_PARAMS",
445
+ "SET_POOL_FEES",
446
+ "SET_PRE_ACTIVATION_DURATION",
447
+ "SET_PRE_ACTIVATION_SWAP_ADDRESS",
448
+ "SET_PROTOCOL_FEE_RATE",
449
+ "SET_RENT_COLLECTOR",
450
+ "SET_REWARD_AUTHORITY",
451
+ "SET_REWARD_AUTHORITY_BY_SUPER_AUTHORITY",
452
+ "SET_REWARD_EMISSIONS",
453
+ "SET_REWARD_EMISSIONS_SUPER_AUTHORITY",
454
+ "SET_REWARD_EMISSIONS_V2",
455
+ "SET_STAKE_DELEGATED",
456
+ "SET_TIME_LOCK",
457
+ "SET_TOKEN_BADGE_AUTHORITY",
458
+ "SET_VAULT_LOCK",
459
+ "SET_WHITELISTED_VAULT",
460
+ "SETTLE_CONDITIONAL_VAULT",
461
+ "SETTLE_FUNDS",
462
+ "SETTLE_FUNDS_EXPIRED",
463
+ "SETTLE_PNL",
464
+ "SOCIALIZE_LOSS",
465
+ "SPLIT_STAKE",
466
+ "STAKE",
467
+ "STAKE_BANX",
468
+ "STAKE_SOL",
469
+ "STAKE_TOKEN",
470
+ "START_PNFT_MIGRATION",
471
+ "STUB_ID_BUILD",
472
+ "STUB_ORACLE_CLOSE",
473
+ "STUB_ORACLE_CREATE",
474
+ "STUB_ORACLE_SET",
475
+ "SWAP",
476
+ "SWAP_EXACT_OUT",
477
+ "SWAP_WITH_PRICE_IMPACT",
478
+ "SWEEP_FEES",
479
+ "SWITCH_FOX",
480
+ "SWITCH_FOX_REQUEST",
481
+ "SYNC_LIQUIDITY",
482
+ "TAKE_COMPRESSED_LOAN",
483
+ "TAKE_FLASH_LOAN",
484
+ "TAKE_LOAN",
485
+ "TAKE_MORTGAGE",
486
+ "TERMINATE_PERPETUAL_LOAN",
487
+ "THAW",
488
+ "TOGGLE_PAIR_STATUS",
489
+ "TOKEN_MINT",
490
+ "TOPUP",
491
+ "TRANSFER",
492
+ "TRANSFER_OWNERSHIP",
493
+ "TRANSFER_PAYMENT",
494
+ "TRANSFER_PAYMENT_TREE",
495
+ "TRANSFER_RECIPIENT",
496
+ "UNFREEZE",
497
+ "UNKNOWN",
498
+ "UNLABELED",
499
+ "UNPAUSE",
500
+ "UNSTAKE",
501
+ "UNSTAKE_BANX",
502
+ "UNSTAKE_SOL",
503
+ "UNSTAKE_TOKEN",
504
+ "UNSUB_OR_HARVEST_WEEKS",
505
+ "UNSUB_OR_HARVEST_WEEKS_ENHANCED",
506
+ "UPDATE",
507
+ "UPDATE_ACTIVATION_POINT",
508
+ "UPDATE_BANK_MANAGER",
509
+ "UPDATE_BOND_OFFER_STANDARD",
510
+ "UPDATE_CLASS_VARIANT_AUTHORITY",
511
+ "UPDATE_CLASS_VARIANT_METADATA",
512
+ "UPDATE_COLLECTION",
513
+ "UPDATE_COLLECTION_OR_CREATOR",
514
+ "UPDATE_CONFIG",
515
+ "UPDATE_EXTERNAL_PRICE_ACCOUNT",
516
+ "UPDATE_FARM",
517
+ "UPDATE_FARM_ADMIN",
518
+ "UPDATE_FARM_CONFIG",
519
+ "UPDATE_FEE_PARAMETERS",
520
+ "UPDATE_FEES_AND_REWARDS",
521
+ "UPDATE_FLOOR",
522
+ "UPDATE_GLOBAL_CONFIG",
523
+ "UPDATE_GLOBAL_CONFIG_ADMIN",
524
+ "UPDATE_HADO_MARKET_FEE",
525
+ "UPDATE_INTEREST_PERPETUAL_MARKET",
526
+ "UPDATE_ITEM",
527
+ "UPDATE_LENDING_MARKET",
528
+ "UPDATE_LENDING_MARKET_OWNER",
529
+ "UPDATE_OFFER",
530
+ "UPDATE_ORDER",
531
+ "UPDATE_PERPETUAL_MARKET",
532
+ "UPDATE_PERPETUAL_OFFER",
533
+ "UPDATE_POOL",
534
+ "UPDATE_POOL_COLLECTIONS",
535
+ "UPDATE_POOL_MORTGAGE",
536
+ "UPDATE_POOL_STATUS",
537
+ "UPDATE_POOL_WHITELIST",
538
+ "UPDATE_POSITION_OPERATOR",
539
+ "UPDATE_PRICING_V2",
540
+ "UPDATE_PRIMARY_SALE_METADATA",
541
+ "UPDATE_RAFFLE",
542
+ "UPDATE_RECORD_AUTHORITY_DATA",
543
+ "UPDATE_RESERVE_CONFIG",
544
+ "UPDATE_REWARD_DURATION",
545
+ "UPDATE_REWARD_FUNDER",
546
+ "UPDATE_STAKE_HISTORY",
547
+ "UPDATE_STAKING_SETTINGS",
548
+ "UPDATE_STATS",
549
+ "UPDATE_TRAIT_VARIANT",
550
+ "UPDATE_TRAIT_VARIANT_AUTHORITY",
551
+ "UPDATE_TRAIT_VARIANT_METADATA",
552
+ "UPDATE_USABLE_AMOUNT",
553
+ "UPDATE_VARIANT",
554
+ "UPDATE_VAULT_OWNER",
555
+ "UPGRADE_FOX",
556
+ "UPGRADE_FOX_REQUEST",
557
+ "UPGRADE_PROGRAM_INSTRUCTION",
558
+ "UPLOAD_MERKLE_ROOT",
559
+ "USE_SPENDING_LIMIT",
560
+ "VALIDATE_SAFETY_DEPOSIT_BOX_V2",
561
+ "VERIFY_PAYMENT_MINT",
562
+ "VERIFY_PAYMENT_MINT_TEST",
563
+ "VOTE",
564
+ "WHITELIST_CREATOR",
565
+ "WITHDRAW",
566
+ "WITHDRAW_FROM_BOND_OFFER_STANDARD",
567
+ "WITHDRAW_FROM_FARM_VAULT",
568
+ "WITHDRAW_GEM",
569
+ "WITHDRAW_INELIGIBLE_REWARD",
570
+ "WITHDRAW_LIQUIDITY",
571
+ "WITHDRAW_OBLIGATION_COLLATERAL",
572
+ "WITHDRAW_OBLIGATION_COLLATERAL_AND_REDEEM_RESERVE_COLLATERAL",
573
+ "WITHDRAW_PROTOCOL_FEE",
574
+ "WITHDRAW_PROTOCOL_FEES",
575
+ "WITHDRAW_REFERRER_FEES",
576
+ "WITHDRAW_REWARD",
577
+ "WITHDRAW_REWARDS_FROM_VAULT",
578
+ "WITHDRAW_SLASHED_AMOUNT",
579
+ "WITHDRAW_SOL_FROM_FLASH_LOAN_POOL",
580
+ "WITHDRAW_TREASURY",
581
+ "WITHDRAW_UNSTAKED_DEPOSITS",
582
+ ]
583
+
584
+ WebhookType = Literal[
585
+ "enhanced",
586
+ "raw",
587
+ "discord",
588
+ "enhancedDevnet",
589
+ "rawDevnet",
590
+ "discordDevnet",
591
+ ]
592
+
593
+
594
+ class Webhook(BaseModel):
595
+ model_config = ConfigDict(alias_generator=AliasGenerator(validation_alias=to_camel))
596
+
597
+ webhook_id: str = Field(validation_alias=AliasChoices("webhookID", "webhookId"))
598
+ wallet: str
599
+ webhook_url: str = Field(validation_alias=AliasChoices("webhookURL", "webhookUrl"))
600
+ transaction_types: list[TransactionType]
601
+ account_addresses: list[str]
602
+ webhook_type: WebhookType
603
+ auth_header: str
604
+ active: bool
605
+
606
+
607
+ class WebhooksApiClient:
608
+ def __init__(
609
+ self,
610
+ *,
611
+ base_url: str = "https://mainnet.helius-rpc.com/v0/webhooks",
612
+ api_key: str | None = None,
613
+ headers: dict[str, str] | None = None,
614
+ proxy: str | None = None,
615
+ ) -> None:
616
+ base_url = base_url
617
+ api_key = (
618
+ api_key
619
+ or environ.get("HELIUS_API_KEY")
620
+ or dotenv_values().get("HELIUS_API_KEY")
621
+ or None
622
+ )
623
+ if not api_key:
624
+ raise ValueError("No API key provided.")
625
+ self._client = httpx.Client(
626
+ base_url=base_url, params={"api-key": api_key}, headers=headers, proxy=proxy
627
+ )
628
+
629
+ def __enter__(self):
630
+ return self
631
+
632
+ def __exit__(self, exc_type, exc_value, traceback):
633
+ self.close()
634
+
635
+ def __del__(self):
636
+ self.close()
637
+
638
+ def close(self) -> None:
639
+ self._client.close()
640
+
641
+ def _send(self, url: str, method: str, json: dict | None = None) -> dict:
642
+ kwargs: dict = {
643
+ "method": method,
644
+ "url": url,
645
+ }
646
+ if json is not None:
647
+ kwargs.update({"json": json})
648
+ response = self._client.request(**kwargs)
649
+ response.raise_for_status()
650
+ return response.json()
651
+
652
+ def _get(self, url: str) -> dict:
653
+ response = self._client.get(url)
654
+ response.raise_for_status()
655
+ return response.json()
656
+
657
+ def create_webhook(
658
+ self,
659
+ *,
660
+ webhook_url: str,
661
+ transaction_types: list[TransactionType],
662
+ account_addresses: list[str],
663
+ webhook_type: WebhookType,
664
+ auth_header: str,
665
+ encoding: str,
666
+ txn_status: str,
667
+ ) -> Webhook:
668
+ request = {
669
+ "webhookURL": webhook_url,
670
+ "transactionTypes": transaction_types,
671
+ "accountAddresses": account_addresses,
672
+ "webhookType": webhook_type,
673
+ "authHeader": auth_header,
674
+ "encoding": encoding,
675
+ "txnStatus": txn_status,
676
+ }
677
+ response = self._send("/", "POST", request)
678
+ webhook = Webhook.model_validate(response)
679
+ return webhook
680
+
681
+ def get_webhook(self, webhook_id: str) -> Webhook:
682
+ response = self._get(f"/{webhook_id}")
683
+ webhook = Webhook.model_validate(response)
684
+ return webhook
685
+
686
+ def get_all_webhooks(self) -> list[Webhook]:
687
+ response = self._get("/")
688
+ return [Webhook.model_validate(webhook) for webhook in response]
689
+
690
+ def update_webhook(
691
+ self,
692
+ webhook_id: str,
693
+ *,
694
+ webhook_url: str,
695
+ transaction_types: list[TransactionType],
696
+ account_addresses: list[str],
697
+ webhook_type: WebhookType,
698
+ auth_header: str,
699
+ encoding: str,
700
+ txn_status: str,
701
+ ) -> Webhook:
702
+ request = {
703
+ "webhookURL": webhook_url,
704
+ "transactionTypes": transaction_types,
705
+ "accountAddresses": account_addresses,
706
+ "webhookType": webhook_type,
707
+ "authHeader": auth_header,
708
+ "encoding": encoding,
709
+ "txnStatus": txn_status,
710
+ }
711
+ response = self._send(f"/{webhook_id}", "PUT", request)
712
+ webhook = Webhook.model_validate(response)
713
+ return webhook
714
+
715
+ def toggle_webhook(self, webhook_id: str, *, active: bool) -> Webhook:
716
+ response = self._send(f"/{webhook_id}", "PATCH", {"active": active})
717
+ webhook = Webhook.model_validate(response)
718
+ return webhook
719
+
720
+ def delete_webhook(self, webhook_id: str) -> dict:
721
+ response = self._send(f"/{webhook_id}", method="DELETE")
722
+ return response["message"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: helius-python
3
- Version: 0.3.4
3
+ Version: 0.4.0
4
4
  Summary: Typed Python client for the Helius API
5
5
  Project-URL: Homepage, https://github.com/markosnarinian/helius-python
6
6
  Project-URL: Issues, https://github.com/markosnarinian/helius-python/issues
@@ -135,9 +135,10 @@ wraps it.
135
135
  - 🚧 **All Helius-specific RPC extensions** — enhanced transactions, DAS
136
136
  (Digital Asset Standard) methods, priority fee estimation, and the
137
137
  rest of the Helius-only RPC namespace. **(in progress)**
138
- - 🚧 **Every Helius REST endpoint** — Enhanced Transactions API,
139
- Webhooks API, Mint API, token metadata, address lookups, and beyond.
140
- **(in progress)**
138
+ - **Webhooks API** — create, fetch, update, enable/disable, and delete
139
+ Helius webhooks. **(supported today)**
140
+ - 🚧 **Remaining Helius REST endpoints** — Enhanced Transactions API,
141
+ Mint API, token metadata, address lookups, and beyond. **(in progress)**
141
142
  - 🚧 **Platform features** — streaming, websockets, and any new
142
143
  capability Helius adds to its API. The full WebSocket subscription
143
144
  surface (`accountSubscribe`, `transactionSubscribe`, `logsSubscribe`,
@@ -145,10 +146,10 @@ wraps it.
145
146
  platform features are **in progress**.
146
147
 
147
148
  **Current status:** the standard Solana JSON-RPC surface, the
148
- WebSocket subscription surface, and the Admin (account management)
149
- usage endpoint are implemented today. Support for Helius RPC
150
- extensions and the remaining REST endpoints is actively being worked
151
- on.
149
+ WebSocket subscription surface, the Webhooks API, and the Admin
150
+ (account management) usage endpoint are implemented today. Support for
151
+ Helius RPC extensions and the remaining REST endpoints is actively
152
+ being worked on.
152
153
 
153
154
  ## Goals
154
155
 
@@ -266,9 +267,9 @@ The method names map 1:1 to the Solana JSON-RPC spec, just converted to
266
267
  ## Status
267
268
 
268
269
  Actively expanding toward full coverage of the Helius API. See
269
- [`src/helius/solana_rpc.py`](src/helius/solana_rpc.py) for the current list of
270
- implemented methods; missing endpoints are tracked as issues and added
271
- continuously.
270
+ [`src/helius/solana_rpc/client.py`](src/helius/solana_rpc/client.py) for the
271
+ current Solana JSON-RPC implementation; supported surfaces are listed below,
272
+ and missing endpoints are tracked as issues and added continuously.
272
273
 
273
274
  | Solana JSON-RPC method | Python method | Helius docs |
274
275
  | ----------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
@@ -372,6 +373,44 @@ them; both yield a `(context, notification, subscription)` tuple where
372
373
  | `vote_subscribe()` | `vote_unsubscribe(...)` | `VoteNotification` | [reference](https://www.helius.dev/docs/api-reference/rpc/websocket/votesubscribe) |
373
374
  | `transaction_subscribe(...)` | `transaction_unsubscribe(...)` | `TransactionNotification` | [reference](https://www.helius.dev/docs/api-reference/rpc/websocket/slotunsubscribe) |
374
375
 
376
+ ## Webhooks API
377
+
378
+ `WebhooksApiClient` wraps the Helius Webhooks REST API. It can create,
379
+ fetch, list, update, enable/disable, and delete webhook subscriptions,
380
+ returning typed `Webhook` models where the endpoint returns a webhook.
381
+
382
+ ```python
383
+ from helius.webhooks.webhooks import WebhooksApiClient
384
+
385
+ with WebhooksApiClient(api_key="YOUR_HELIUS_API_KEY") as webhooks:
386
+ webhook = webhooks.create_webhook(
387
+ webhook_url="https://example.com/helius-webhook",
388
+ transaction_types=["TRANSFER"],
389
+ account_addresses=["So11111111111111111111111111111111111111112"],
390
+ webhook_type="enhanced",
391
+ auth_header="Bearer your-shared-secret",
392
+ encoding="jsonParsed",
393
+ txn_status="all",
394
+ )
395
+
396
+ webhooks.toggle_webhook(webhook.webhook_id, active=False)
397
+ ```
398
+
399
+ Like the other clients, it supports the context-manager protocol and a
400
+ manual `close()`. The constructor defaults to
401
+ `https://mainnet.helius-rpc.com/v0/webhooks` and reads `HELIUS_API_KEY`
402
+ from the environment or `.env` when `api_key` is omitted; optional
403
+ `headers` and `proxy` arguments are also accepted.
404
+
405
+ | REST operation | Python method | Helius docs |
406
+ | -------------- | -------------------------- | ------------------------------------------------------------------------------------------------- |
407
+ | Create webhook | `create_webhook(...)` | [reference](https://www.helius.dev/docs/api-reference/webhooks/create-webhook) |
408
+ | Get webhook | `get_webhook(...)` | [reference](https://www.helius.dev/docs/api-reference/webhooks/get-webhook) |
409
+ | List webhooks | `get_all_webhooks()` | [reference](https://www.helius.dev/docs/api-reference/webhooks/get-all-webhooks) |
410
+ | Update webhook | `update_webhook(...)` | [reference](https://www.helius.dev/docs/api-reference/webhooks/update-webhook) |
411
+ | Toggle webhook | `toggle_webhook(...)` | [reference](https://www.helius.dev/docs/api-reference/webhooks/toggle-webhook) |
412
+ | Delete webhook | `delete_webhook(...)` | [reference](https://www.helius.dev/docs/api-reference/webhooks/delete-webhook) |
413
+
375
414
  ## Admin API
376
415
 
377
416
  `AccountManagementClient` wraps the Helius admin API. Today it exposes
@@ -0,0 +1,15 @@
1
+ helius/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ helius/admin/__init__.py,sha256=HboRJXZNzuDAc6r3kj2QZtEcu2U3EWJHv81dYDJGjaA,262
3
+ helius/admin/admin.py,sha256=dcmOgeu10Q43QZC8K-a25vp2JNAb4hs5gu3YWaovV4Y,2541
4
+ helius/laserstream/websockets.py,sha256=cndqxXO9_I4aSjAeSkz3Q3u80jrFR0JMfXw09vzbgvQ,12448
5
+ helius/solana_rpc/__init__.py,sha256=Mfhb6ibrCqAX6AchtL3ViBlpCi9RKP8uhT9e_S5_Wb0,1006
6
+ helius/solana_rpc/client.py,sha256=sKYNpOwCKaayM7WwqePyFegD2e0sq_4eYhk3Ty0iaI0,37505
7
+ helius/solana_rpc/models.py,sha256=_o9B9VBgNBkYGGeglEgWxkffwS1thym2KfAfPekm590,7682
8
+ helius/utils/__init__.py,sha256=szG5WTfKl1dfqsZb2efmeZr5zJBKlEBgNCWYGCo7VbU,87
9
+ helius/utils/json_rpc_request.py,sha256=hm7WkPo0CnwMnuHE4qR-d93wGArZRPRm-B3uueykL3E,1479
10
+ helius/webhooks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ helius/webhooks/webhooks.py,sha256=IXCF7sDS6QpcY5r03WTmXNpOqoltii3pSHPita0f83o,19803
12
+ helius_python-0.4.0.dist-info/METADATA,sha256=C_nagjWvI5Pi--Nl3fAxo6mMfG7nHiP6v9XTUkj1lnY,37422
13
+ helius_python-0.4.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
14
+ helius_python-0.4.0.dist-info/licenses/LICENSE,sha256=bZc2EDmq_GsWH77uK8LBn1kqqrOPcp2f9p-ys9bYa1E,1072
15
+ helius_python-0.4.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.29.0
2
+ Generator: hatchling 1.30.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
helius/rpc/__init__.py DELETED
@@ -1,3 +0,0 @@
1
- from helius.rpc.json_rpc_request import JsonRpcRequest
2
-
3
- __all__ = ["JsonRpcRequest"]
@@ -1,13 +0,0 @@
1
- helius/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- helius/admin/__init__.py,sha256=HboRJXZNzuDAc6r3kj2QZtEcu2U3EWJHv81dYDJGjaA,262
3
- helius/admin/admin.py,sha256=dcmOgeu10Q43QZC8K-a25vp2JNAb4hs5gu3YWaovV4Y,2541
4
- helius/laserstream/websockets.py,sha256=MX_3stOzo6EyYJVSlE_zHFNesZkQIfAv2R1e5qdr9b0,12446
5
- helius/rpc/__init__.py,sha256=ciwM1KfBNyZwCeqOmlWTcSrUD03cbrzgeeEZsn9msi0,85
6
- helius/rpc/json_rpc_request.py,sha256=hm7WkPo0CnwMnuHE4qR-d93wGArZRPRm-B3uueykL3E,1479
7
- helius/solana_rpc/__init__.py,sha256=Mfhb6ibrCqAX6AchtL3ViBlpCi9RKP8uhT9e_S5_Wb0,1006
8
- helius/solana_rpc/client.py,sha256=dNB5rrOPF1O-wwxmDe3dfjLNSTxB_TT8RUNw-g0XRIQ,37503
9
- helius/solana_rpc/models.py,sha256=tQmuWi1frDxvQeBSG2ald6Ze2KsaUQQOry45L41MbnQ,7724
10
- helius_python-0.3.4.dist-info/METADATA,sha256=eeKtD-9kGMQiIGYa52T7T5IQZR3mP09C5O86GHXWOfM,34957
11
- helius_python-0.3.4.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
12
- helius_python-0.3.4.dist-info/licenses/LICENSE,sha256=bZc2EDmq_GsWH77uK8LBn1kqqrOPcp2f9p-ys9bYa1E,1072
13
- helius_python-0.3.4.dist-info/RECORD,,
File without changes