helius-python 0.3.4__py3-none-any.whl → 0.4.1__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.
- helius/laserstream/websockets.py +1 -1
- helius/solana_rpc/client.py +1 -1
- helius/solana_rpc/models.py +0 -2
- helius/utils/__init__.py +3 -0
- helius/webhooks/__init__.py +0 -0
- helius/webhooks/webhooks.py +722 -0
- {helius_python-0.3.4.dist-info → helius_python-0.4.1.dist-info}/METADATA +63 -11
- helius_python-0.4.1.dist-info/RECORD +15 -0
- {helius_python-0.3.4.dist-info → helius_python-0.4.1.dist-info}/WHEEL +1 -1
- helius/rpc/__init__.py +0 -3
- helius_python-0.3.4.dist-info/RECORD +0 -13
- /helius/{rpc → utils}/json_rpc_request.py +0 -0
- {helius_python-0.3.4.dist-info → helius_python-0.4.1.dist-info}/licenses/LICENSE +0 -0
helius/laserstream/websockets.py
CHANGED
helius/solana_rpc/client.py
CHANGED
|
@@ -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
|
helius/solana_rpc/models.py
CHANGED
|
@@ -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))
|
helius/utils/__init__.py
ADDED
|
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
|
+
Version: 0.4.1
|
|
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
|
-
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
|
149
|
-
usage endpoint are implemented today. Support for
|
|
150
|
-
extensions and the remaining REST endpoints is actively
|
|
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
|
|
270
|
-
|
|
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
|
|
@@ -392,6 +431,19 @@ client defaults to `https://admin-api.helius.xyz` and, like the others,
|
|
|
392
431
|
supports the context-manager protocol, a manual `close()`, and reads
|
|
393
432
|
`HELIUS_API_KEY` from the environment or `.env`.
|
|
394
433
|
|
|
434
|
+
## AI
|
|
435
|
+
AI was used to assist in the development of this project, which was started beacause I needed a Helius client written in Python myself for another project. It has eliminated the need to perform repetitive tasks, such as writing functions that are similar to those written by hand before them. It has also been useful in drafting and updating the documentation (exclusively README.md at the time of writing), writing tests and examples.
|
|
436
|
+
That said, AI-generated code is reviewed in full, line-by-line by human(s) against the Helius API specifications.
|
|
437
|
+
|
|
438
|
+
To roughly describe my approach to using AI in this project, I generally write the code by hand, which makes it easy to structure the code well and maintain an intuitive understanding of how the code works. Then, when I got to the part where I had to implement 100+ similar Python functions, I turned to AI to write the massive part of the codebase, while I reviewed the result at the same time.
|
|
439
|
+
|
|
440
|
+
To sum up:
|
|
441
|
+
- I generally structure** and write a good part of what I'm programming by hand, including boilerplate.
|
|
442
|
+
- I find it best to prompt agents to implement very limited functionality within narrow scope, performing something closer to pair-programming.
|
|
443
|
+
- Even though at least half the LoC in this project are hand-typed, I find that AI is incredibly capable, can be enjoyable to use, but most importantly, using AI allows me to focus my time and energy on what matters.
|
|
444
|
+
|
|
445
|
+
By the way, this README section is completely brain-made and hand-typed.
|
|
446
|
+
|
|
395
447
|
## License
|
|
396
448
|
|
|
397
449
|
[MIT](LICENSE)
|
|
@@ -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.1.dist-info/METADATA,sha256=39qONjOC8ghgnP5YyJngDLnNhi6g_6hl7tVfrQEAphs,38927
|
|
13
|
+
helius_python-0.4.1.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
14
|
+
helius_python-0.4.1.dist-info/licenses/LICENSE,sha256=bZc2EDmq_GsWH77uK8LBn1kqqrOPcp2f9p-ys9bYa1E,1072
|
|
15
|
+
helius_python-0.4.1.dist-info/RECORD,,
|
helius/rpc/__init__.py
DELETED
|
@@ -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
|
|
File without changes
|