sol-parser-sdk-nodejs 0.4.4 → 0.5.5

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.
Files changed (52) hide show
  1. package/README.md +16 -4
  2. package/README_CN.md +16 -4
  3. package/dist/accounts/mod.d.ts +1 -1
  4. package/dist/accounts/mod.js +43 -9
  5. package/dist/accounts/pumpfun.d.ts +10 -0
  6. package/dist/accounts/pumpfun.js +384 -3
  7. package/dist/core/account_dispatcher_rpc.js +5 -26
  8. package/dist/core/account_fill_meteora.d.ts +1 -2
  9. package/dist/core/account_fill_meteora.js +0 -2
  10. package/dist/core/account_fill_pumpfun.js +86 -24
  11. package/dist/core/account_fill_pumpswap.js +50 -0
  12. package/dist/core/account_fill_raydium_launchlab.d.ts +4 -0
  13. package/dist/core/account_fill_raydium_launchlab.js +20 -0
  14. package/dist/core/dex_event.d.ts +136 -17
  15. package/dist/core/pumpfun_fee_enrich.d.ts +1 -0
  16. package/dist/core/pumpfun_fee_enrich.js +51 -0
  17. package/dist/grpc/log_instr_dedup.js +62 -14
  18. package/dist/grpc/program_ids.d.ts +4 -3
  19. package/dist/grpc/program_ids.js +11 -5
  20. package/dist/grpc/types.d.ts +13 -6
  21. package/dist/grpc/types.js +250 -239
  22. package/dist/index.d.ts +6 -5
  23. package/dist/index.js +21 -7
  24. package/dist/instr/meteora_damm_ix.js +4 -1
  25. package/dist/instr/meteora_dlmm_ix.d.ts +2 -0
  26. package/dist/instr/meteora_dlmm_ix.js +134 -0
  27. package/dist/instr/meteora_pools_ix.d.ts +2 -0
  28. package/dist/instr/meteora_pools_ix.js +78 -0
  29. package/dist/instr/mod.d.ts +3 -1
  30. package/dist/instr/mod.js +38 -19
  31. package/dist/instr/program_ids.d.ts +1 -5
  32. package/dist/instr/program_ids.js +3 -6
  33. package/dist/instr/pumpfun_ix.js +219 -5
  34. package/dist/instr/pumpswap_ix.js +36 -2
  35. package/dist/instr/raydium_launchlab_ix.d.ts +8 -0
  36. package/dist/instr/raydium_launchlab_ix.js +125 -0
  37. package/dist/instr/rust_aliases.d.ts +2 -0
  38. package/dist/instr/rust_aliases.js +5 -1
  39. package/dist/logs/optimized_matcher.js +14 -9
  40. package/dist/logs/pump.js +76 -3
  41. package/dist/logs/pump_amm.js +1 -1
  42. package/dist/logs/raydium_launchlab.d.ts +10 -0
  43. package/dist/logs/raydium_launchlab.js +84 -0
  44. package/dist/shredstream/client.d.ts +4 -1
  45. package/dist/shredstream/client.js +18 -14
  46. package/dist/shredstream/index.d.ts +1 -1
  47. package/dist/shredstream/index.js +1 -1
  48. package/dist/shredstream/instruction_parse.d.ts +3 -3
  49. package/dist/shredstream/instruction_parse.js +36 -13
  50. package/dist/util/market.d.ts +18 -0
  51. package/dist/util/market.js +54 -0
  52. package/package.json +1 -1
@@ -12,18 +12,22 @@ exports.slotFilterMinSlot = slotFilterMinSlot;
12
12
  exports.slotFilterMaxSlot = slotFilterMaxSlot;
13
13
  exports.accountFilterFromProgramOwners = accountFilterFromProgramOwners;
14
14
  exports.accountFilterMemcmp = accountFilterMemcmp;
15
+ exports.eventTypeFromDexEvent = eventTypeFromDexEvent;
16
+ exports.eventTypeFilterShouldIncludeDexEvent = eventTypeFilterShouldIncludeDexEvent;
15
17
  exports.eventTypeFilterIncludeOnly = eventTypeFilterIncludeOnly;
16
18
  exports.eventTypeFilterExclude = eventTypeFilterExclude;
17
19
  exports.eventTypeFilterIncludesPumpfun = eventTypeFilterIncludesPumpfun;
18
20
  exports.eventTypeFilterIncludesPumpFees = eventTypeFilterIncludesPumpFees;
19
21
  exports.eventTypeFilterIncludesPumpswap = eventTypeFilterIncludesPumpswap;
20
22
  exports.eventTypeFilterIncludesMeteoraDammV2 = eventTypeFilterIncludesMeteoraDammV2;
23
+ exports.eventTypeFilterIncludesMeteoraDbc = eventTypeFilterIncludesMeteoraDbc;
24
+ exports.eventTypeFilterIncludesMeteoraPools = eventTypeFilterIncludesMeteoraPools;
25
+ exports.eventTypeFilterIncludesMeteoraDlmm = eventTypeFilterIncludesMeteoraDlmm;
21
26
  exports.eventTypeFilterIncludesRaydiumClmm = eventTypeFilterIncludesRaydiumClmm;
22
27
  exports.eventTypeFilterIncludesRaydiumCpmm = eventTypeFilterIncludesRaydiumCpmm;
23
28
  exports.eventTypeFilterIncludesRaydiumAmmV4 = eventTypeFilterIncludesRaydiumAmmV4;
24
29
  exports.eventTypeFilterIncludesOrcaWhirlpool = eventTypeFilterIncludesOrcaWhirlpool;
25
- exports.eventTypeFilterIncludesBonk = eventTypeFilterIncludesBonk;
26
- exports.eventTypeFilterIncludesRaydiumLaunchpad = eventTypeFilterIncludesRaydiumLaunchpad;
30
+ exports.eventTypeFilterIncludesRaydiumLaunchlab = eventTypeFilterIncludesRaydiumLaunchlab;
27
31
  exports.eventTypeFilterAllowsInstructionParsing = eventTypeFilterAllowsInstructionParsing;
28
32
  function defaultClientConfig() {
29
33
  return {
@@ -183,10 +187,13 @@ exports.ALL_EVENT_TYPES = [
183
187
  "MeteoraDammV2Swap",
184
188
  "MeteoraDammV2AddLiquidity",
185
189
  "MeteoraDammV2RemoveLiquidity",
186
- "MeteoraDammV2RemoveAllLiquidity",
187
190
  "MeteoraDammV2CreatePosition",
188
191
  "MeteoraDammV2InitializePool",
189
192
  "MeteoraDammV2ClosePosition",
193
+ // Meteora DBC
194
+ "MeteoraDbcSwap",
195
+ "MeteoraDbcInitializePool",
196
+ "MeteoraDbcCurveComplete",
190
197
  // Meteora DLMM
191
198
  "MeteoraDlmmSwap",
192
199
  "MeteoraDlmmAddLiquidity",
@@ -196,18 +203,174 @@ exports.ALL_EVENT_TYPES = [
196
203
  "MeteoraDlmmCreatePosition",
197
204
  "MeteoraDlmmClosePosition",
198
205
  "MeteoraDlmmClaimFee",
199
- // Bonk
200
- "BonkTrade",
201
- "BonkPoolCreate",
202
- "BonkMigrateAmm",
206
+ // RaydiumLaunchlab
207
+ "RaydiumLaunchlabTrade",
208
+ "RaydiumLaunchlabPoolCreate",
209
+ "RaydiumLaunchlabMigrateAmm",
203
210
  // Account types
204
211
  "TokenAccount",
205
212
  "TokenInfo",
206
213
  "NonceAccount",
207
214
  "AccountPumpFunGlobal",
215
+ "AccountPumpFunBondingCurve",
216
+ "AccountPumpFunFeeConfig",
217
+ "AccountPumpFunSharingConfig",
218
+ "AccountPumpFunGlobalVolumeAccumulator",
219
+ "AccountPumpFunUserVolumeAccumulator",
208
220
  "AccountPumpSwapGlobalConfig",
209
221
  "AccountPumpSwapPool",
222
+ "AccountRaydiumClmmAmmConfig",
223
+ "AccountRaydiumClmmPoolState",
224
+ "AccountRaydiumClmmTickArrayState",
225
+ "AccountRaydiumCpmmAmmConfig",
226
+ "AccountRaydiumCpmmPoolState",
227
+ "AccountOrcaWhirlpool",
228
+ "AccountOrcaPosition",
229
+ "AccountOrcaTickArray",
230
+ "AccountOrcaFeeTier",
231
+ "AccountOrcaWhirlpoolsConfig",
210
232
  ];
233
+ const ALL_EVENT_TYPE_SET = new Set(exports.ALL_EVENT_TYPES);
234
+ const PUMPFUN_BUY_FAMILY = ["PumpFunBuy", "PumpFunBuyExactSolIn"];
235
+ const PUMPFUN_TRADE_FAMILY = [
236
+ "PumpFunBuy",
237
+ "PumpFunSell",
238
+ "PumpFunBuyExactSolIn",
239
+ ];
240
+ const PUMPFUN_CREATE_FAMILY = ["PumpFunCreate", "PumpFunCreateV2"];
241
+ const PUMPSWAP_TRADE_FAMILY = ["PumpSwapBuy", "PumpSwapSell"];
242
+ const PUMP_FEES_EVENT_TYPES = [
243
+ "PumpFeesCreateFeeSharingConfig",
244
+ "PumpFeesInitializeFeeConfig",
245
+ "PumpFeesResetFeeSharingConfig",
246
+ "PumpFeesRevokeFeeSharingAuthority",
247
+ "PumpFeesTransferFeeSharingAuthority",
248
+ "PumpFeesUpdateAdmin",
249
+ "PumpFeesUpdateFeeConfig",
250
+ "PumpFeesUpdateFeeShares",
251
+ "PumpFeesUpsertFeeTiers",
252
+ ];
253
+ const PUMPFUN_FILTER_TYPES = [
254
+ "PumpFunTrade",
255
+ "PumpFunBuy",
256
+ "PumpFunSell",
257
+ "PumpFunBuyExactSolIn",
258
+ "PumpFunCreate",
259
+ "PumpFunCreateV2",
260
+ "PumpFunComplete",
261
+ "PumpFunMigrate",
262
+ "PumpFunMigrateBondingCurveCreator",
263
+ ];
264
+ const PUMPSWAP_FILTER_TYPES = [
265
+ "PumpSwapTrade",
266
+ "PumpSwapBuy",
267
+ "PumpSwapSell",
268
+ "PumpSwapCreatePool",
269
+ "PumpSwapLiquidityAdded",
270
+ "PumpSwapLiquidityRemoved",
271
+ ];
272
+ const METEORA_DAMM_V2_FILTER_TYPES = [
273
+ "MeteoraDammV2Swap",
274
+ "MeteoraDammV2AddLiquidity",
275
+ "MeteoraDammV2RemoveLiquidity",
276
+ "MeteoraDammV2CreatePosition",
277
+ "MeteoraDammV2InitializePool",
278
+ "MeteoraDammV2ClosePosition",
279
+ ];
280
+ const METEORA_DBC_FILTER_TYPES = [
281
+ "MeteoraDbcSwap",
282
+ "MeteoraDbcInitializePool",
283
+ "MeteoraDbcCurveComplete",
284
+ ];
285
+ const METEORA_POOLS_FILTER_TYPES = [
286
+ "MeteoraPoolsSwap",
287
+ "MeteoraPoolsAddLiquidity",
288
+ "MeteoraPoolsRemoveLiquidity",
289
+ "MeteoraPoolsBootstrapLiquidity",
290
+ "MeteoraPoolsPoolCreated",
291
+ "MeteoraPoolsSetPoolFees",
292
+ ];
293
+ const METEORA_DLMM_FILTER_TYPES = [
294
+ "MeteoraDlmmSwap",
295
+ "MeteoraDlmmAddLiquidity",
296
+ "MeteoraDlmmRemoveLiquidity",
297
+ "MeteoraDlmmInitializePool",
298
+ "MeteoraDlmmInitializeBinArray",
299
+ "MeteoraDlmmCreatePosition",
300
+ "MeteoraDlmmClosePosition",
301
+ "MeteoraDlmmClaimFee",
302
+ ];
303
+ const RAYDIUM_CLMM_FILTER_TYPES = [
304
+ "RaydiumClmmSwap",
305
+ "RaydiumClmmIncreaseLiquidity",
306
+ "RaydiumClmmDecreaseLiquidity",
307
+ "RaydiumClmmCreatePool",
308
+ "RaydiumClmmOpenPosition",
309
+ "RaydiumClmmOpenPositionWithTokenExtNft",
310
+ "RaydiumClmmClosePosition",
311
+ "RaydiumClmmCollectFee",
312
+ ];
313
+ const RAYDIUM_CPMM_FILTER_TYPES = [
314
+ "RaydiumCpmmSwap",
315
+ "RaydiumCpmmDeposit",
316
+ "RaydiumCpmmWithdraw",
317
+ "RaydiumCpmmInitialize",
318
+ ];
319
+ const RAYDIUM_AMM_V4_FILTER_TYPES = [
320
+ "RaydiumAmmV4Swap",
321
+ "RaydiumAmmV4Deposit",
322
+ "RaydiumAmmV4Withdraw",
323
+ "RaydiumAmmV4WithdrawPnl",
324
+ "RaydiumAmmV4Initialize2",
325
+ ];
326
+ const ORCA_WHIRLPOOL_FILTER_TYPES = [
327
+ "OrcaWhirlpoolSwap",
328
+ "OrcaWhirlpoolLiquidityIncreased",
329
+ "OrcaWhirlpoolLiquidityDecreased",
330
+ "OrcaWhirlpoolPoolInitialized",
331
+ ];
332
+ const RAYDIUM_LAUNCHLAB_FILTER_TYPES = [
333
+ "RaydiumLaunchlabTrade",
334
+ "RaydiumLaunchlabPoolCreate",
335
+ "RaydiumLaunchlabMigrateAmm",
336
+ ];
337
+ const INSTRUCTION_EVENT_TYPES = [
338
+ ...PUMPFUN_FILTER_TYPES,
339
+ ...PUMP_FEES_EVENT_TYPES,
340
+ ...PUMPSWAP_FILTER_TYPES,
341
+ ...METEORA_DAMM_V2_FILTER_TYPES,
342
+ ...METEORA_POOLS_FILTER_TYPES,
343
+ ...METEORA_DLMM_FILTER_TYPES,
344
+ ...RAYDIUM_CLMM_FILTER_TYPES,
345
+ ...RAYDIUM_CPMM_FILTER_TYPES,
346
+ ...RAYDIUM_AMM_V4_FILTER_TYPES,
347
+ ...ORCA_WHIRLPOOL_FILTER_TYPES,
348
+ ...RAYDIUM_LAUNCHLAB_FILTER_TYPES,
349
+ ];
350
+ const INSTRUCTION_EVENT_TYPE_SET = new Set(INSTRUCTION_EVENT_TYPES);
351
+ const DEX_EVENT_TYPE_BY_VARIANT = {
352
+ PumpFunGlobalAccount: "AccountPumpFunGlobal",
353
+ PumpFunBondingCurveAccount: "AccountPumpFunBondingCurve",
354
+ PumpFunFeeConfigAccount: "AccountPumpFunFeeConfig",
355
+ PumpFunSharingConfigAccount: "AccountPumpFunSharingConfig",
356
+ PumpFunGlobalVolumeAccumulatorAccount: "AccountPumpFunGlobalVolumeAccumulator",
357
+ PumpFunUserVolumeAccumulatorAccount: "AccountPumpFunUserVolumeAccumulator",
358
+ PumpSwapGlobalConfigAccount: "AccountPumpSwapGlobalConfig",
359
+ PumpSwapPoolAccount: "AccountPumpSwapPool",
360
+ };
361
+ function eventTypeFromDexEvent(event) {
362
+ const variant = Object.keys(event)[0];
363
+ if (!variant || variant === "Error")
364
+ return null;
365
+ const mapped = DEX_EVENT_TYPE_BY_VARIANT[variant];
366
+ if (mapped)
367
+ return mapped;
368
+ return ALL_EVENT_TYPE_SET.has(variant) ? variant : null;
369
+ }
370
+ function eventTypeFilterShouldIncludeDexEvent(filter, event) {
371
+ const eventType = eventTypeFromDexEvent(event);
372
+ return eventType === null || filter.shouldInclude(eventType);
373
+ }
211
374
  function eventTypeFilterIncludeOnly(types) {
212
375
  const include_only = types;
213
376
  return {
@@ -216,7 +379,21 @@ function eventTypeFilterIncludeOnly(types) {
216
379
  if (include_only.includes(eventType))
217
380
  return true;
218
381
  if (eventType === "PumpFunTrade") {
219
- return include_only.some((t) => ["PumpFunBuy", "PumpFunSell", "PumpFunBuyExactSolIn"].includes(t));
382
+ return eventTypesIntersect(include_only, PUMPFUN_TRADE_FAMILY);
383
+ }
384
+ if (isPumpfunTradeConcrete(eventType)) {
385
+ if (include_only.includes("PumpFunTrade"))
386
+ return true;
387
+ if (isPumpfunBuyFamily(eventType)) {
388
+ return eventTypesIntersect(include_only, PUMPFUN_BUY_FAMILY);
389
+ }
390
+ return false;
391
+ }
392
+ if (isPumpfunCreateFamily(eventType)) {
393
+ return eventTypesIntersect(include_only, PUMPFUN_CREATE_FAMILY);
394
+ }
395
+ if (isPumpswapTradeConcrete(eventType)) {
396
+ return include_only.includes("PumpSwapTrade");
220
397
  }
221
398
  return false;
222
399
  },
@@ -227,270 +404,104 @@ function eventTypeFilterExclude(types) {
227
404
  return {
228
405
  exclude_types,
229
406
  shouldInclude(eventType) {
230
- return !exclude_types.includes(eventType);
407
+ if (exclude_types.includes(eventType))
408
+ return false;
409
+ if (isPumpfunTradeConcrete(eventType) && exclude_types.includes("PumpFunTrade")) {
410
+ return false;
411
+ }
412
+ if (isPumpfunBuyFamily(eventType) &&
413
+ eventTypesIntersect(exclude_types, PUMPFUN_BUY_FAMILY)) {
414
+ return false;
415
+ }
416
+ if (isPumpfunCreateFamily(eventType) &&
417
+ eventTypesIntersect(exclude_types, PUMPFUN_CREATE_FAMILY)) {
418
+ return false;
419
+ }
420
+ if (isPumpswapTradeConcrete(eventType) && exclude_types.includes("PumpSwapTrade")) {
421
+ return false;
422
+ }
423
+ return true;
231
424
  },
232
425
  };
233
426
  }
234
- /** 过滤器是否包含 PumpFun 相关类型 */
235
- function eventTypeFilterIncludesPumpfun(filter) {
427
+ function eventTypesIntersect(types, candidates) {
428
+ return types.some((t) => candidates.includes(t));
429
+ }
430
+ function isPumpfunTradeConcrete(eventType) {
431
+ return (eventType === "PumpFunBuy" ||
432
+ eventType === "PumpFunSell" ||
433
+ eventType === "PumpFunBuyExactSolIn");
434
+ }
435
+ function isPumpfunBuyFamily(eventType) {
436
+ return eventType === "PumpFunBuy" || eventType === "PumpFunBuyExactSolIn";
437
+ }
438
+ function isPumpfunCreateFamily(eventType) {
439
+ return eventType === "PumpFunCreate" || eventType === "PumpFunCreateV2";
440
+ }
441
+ function isPumpswapTradeConcrete(eventType) {
442
+ return eventType === "PumpSwapBuy" || eventType === "PumpSwapSell";
443
+ }
444
+ function eventTypeFilterIncludesAny(filter, types) {
236
445
  if (filter.include_only) {
237
- return filter.include_only.some((t) => [
238
- "PumpFunTrade",
239
- "PumpFunBuy",
240
- "PumpFunSell",
241
- "PumpFunBuyExactSolIn",
242
- "PumpFunCreate",
243
- "PumpFunCreateV2",
244
- "PumpFunComplete",
245
- "PumpFunMigrate",
246
- "PumpFeesCreateFeeSharingConfig",
247
- "PumpFeesInitializeFeeConfig",
248
- "PumpFeesResetFeeSharingConfig",
249
- "PumpFeesRevokeFeeSharingAuthority",
250
- "PumpFeesTransferFeeSharingAuthority",
251
- "PumpFeesUpdateAdmin",
252
- "PumpFeesUpdateFeeConfig",
253
- "PumpFeesUpdateFeeShares",
254
- "PumpFeesUpsertFeeTiers",
255
- "PumpFunMigrateBondingCurveCreator",
256
- "AccountPumpFunGlobal",
257
- ].includes(t));
446
+ return eventTypesIntersect(filter.include_only, types);
258
447
  }
259
448
  if (filter.exclude_types) {
260
- return !filter.exclude_types.some((t) => [
261
- "PumpFunTrade",
262
- "PumpFunBuy",
263
- "PumpFunSell",
264
- "PumpFunBuyExactSolIn",
265
- "PumpFunCreate",
266
- "PumpFunCreateV2",
267
- "PumpFunComplete",
268
- "PumpFunMigrate",
269
- "PumpFeesCreateFeeSharingConfig",
270
- "PumpFeesInitializeFeeConfig",
271
- "PumpFeesResetFeeSharingConfig",
272
- "PumpFeesRevokeFeeSharingAuthority",
273
- "PumpFeesTransferFeeSharingAuthority",
274
- "PumpFeesUpdateAdmin",
275
- "PumpFeesUpdateFeeConfig",
276
- "PumpFeesUpdateFeeShares",
277
- "PumpFeesUpsertFeeTiers",
278
- "PumpFunMigrateBondingCurveCreator",
279
- "AccountPumpFunGlobal",
280
- ].includes(t));
449
+ return types.some((t) => filter.shouldInclude(t));
281
450
  }
282
- return true;
451
+ return types.some((t) => filter.shouldInclude(t));
452
+ }
453
+ /** 过滤器是否包含 PumpFun 相关类型 */
454
+ function eventTypeFilterIncludesPumpfun(filter) {
455
+ return eventTypeFilterIncludesAny(filter, PUMPFUN_FILTER_TYPES);
283
456
  }
284
- const PUMP_FEES_EVENT_TYPES = [
285
- "PumpFeesCreateFeeSharingConfig",
286
- "PumpFeesInitializeFeeConfig",
287
- "PumpFeesResetFeeSharingConfig",
288
- "PumpFeesRevokeFeeSharingAuthority",
289
- "PumpFeesTransferFeeSharingAuthority",
290
- "PumpFeesUpdateAdmin",
291
- "PumpFeesUpdateFeeConfig",
292
- "PumpFeesUpdateFeeShares",
293
- "PumpFeesUpsertFeeTiers",
294
- ];
295
457
  /** 过滤器是否包含 Pump Fees (`pfeeUx...`) 相关类型 */
296
458
  function eventTypeFilterIncludesPumpFees(filter) {
297
- if (filter.include_only) {
298
- return filter.include_only.some((t) => PUMP_FEES_EVENT_TYPES.includes(t));
299
- }
300
- if (filter.exclude_types) {
301
- return !filter.exclude_types.some((t) => PUMP_FEES_EVENT_TYPES.includes(t));
302
- }
303
- return true;
459
+ return eventTypeFilterIncludesAny(filter, PUMP_FEES_EVENT_TYPES);
304
460
  }
305
461
  /** 过滤器是否包含 PumpSwap 相关类型 */
306
462
  function eventTypeFilterIncludesPumpswap(filter) {
307
- if (filter.include_only) {
308
- return filter.include_only.some((t) => [
309
- "PumpSwapBuy",
310
- "PumpSwapSell",
311
- "PumpSwapCreatePool",
312
- "PumpSwapLiquidityAdded",
313
- "PumpSwapLiquidityRemoved",
314
- ].includes(t));
315
- }
316
- if (filter.exclude_types) {
317
- return !filter.exclude_types.some((t) => [
318
- "PumpSwapBuy",
319
- "PumpSwapSell",
320
- "PumpSwapCreatePool",
321
- "PumpSwapLiquidityAdded",
322
- "PumpSwapLiquidityRemoved",
323
- ].includes(t));
324
- }
325
- return true;
463
+ return eventTypeFilterIncludesAny(filter, PUMPSWAP_FILTER_TYPES);
326
464
  }
327
465
  /** 过滤器是否包含 Meteora DAMM V2 相关类型 */
328
466
  function eventTypeFilterIncludesMeteoraDammV2(filter) {
329
- if (filter.include_only) {
330
- return filter.include_only.some((t) => [
331
- "MeteoraDammV2Swap",
332
- "MeteoraDammV2AddLiquidity",
333
- "MeteoraDammV2CreatePosition",
334
- "MeteoraDammV2InitializePool",
335
- "MeteoraDammV2ClosePosition",
336
- "MeteoraDammV2RemoveLiquidity",
337
- "MeteoraDammV2RemoveAllLiquidity",
338
- ].includes(t));
339
- }
340
- if (filter.exclude_types) {
341
- return !filter.exclude_types.some((t) => [
342
- "MeteoraDammV2Swap",
343
- "MeteoraDammV2AddLiquidity",
344
- "MeteoraDammV2CreatePosition",
345
- "MeteoraDammV2InitializePool",
346
- "MeteoraDammV2ClosePosition",
347
- "MeteoraDammV2RemoveLiquidity",
348
- "MeteoraDammV2RemoveAllLiquidity",
349
- ].includes(t));
350
- }
351
- return true;
467
+ return eventTypeFilterIncludesAny(filter, METEORA_DAMM_V2_FILTER_TYPES);
468
+ }
469
+ /** 过滤器是否包含 Meteora DBC 相关类型 */
470
+ function eventTypeFilterIncludesMeteoraDbc(filter) {
471
+ return eventTypeFilterIncludesAny(filter, METEORA_DBC_FILTER_TYPES);
472
+ }
473
+ /** 过滤器是否包含 Meteora Pools 相关类型 */
474
+ function eventTypeFilterIncludesMeteoraPools(filter) {
475
+ return eventTypeFilterIncludesAny(filter, METEORA_POOLS_FILTER_TYPES);
476
+ }
477
+ /** 过滤器是否包含 Meteora DLMM 相关类型 */
478
+ function eventTypeFilterIncludesMeteoraDlmm(filter) {
479
+ return eventTypeFilterIncludesAny(filter, METEORA_DLMM_FILTER_TYPES);
352
480
  }
353
481
  /** 过滤器是否包含 Raydium CLMM 相关类型 */
354
482
  function eventTypeFilterIncludesRaydiumClmm(filter) {
355
- if (filter.include_only) {
356
- return filter.include_only.some((t) => [
357
- "RaydiumClmmSwap",
358
- "RaydiumClmmIncreaseLiquidity",
359
- "RaydiumClmmDecreaseLiquidity",
360
- "RaydiumClmmCreatePool",
361
- "RaydiumClmmOpenPosition",
362
- "RaydiumClmmOpenPositionWithTokenExtNft",
363
- "RaydiumClmmClosePosition",
364
- "RaydiumClmmCollectFee",
365
- ].includes(t));
366
- }
367
- if (filter.exclude_types) {
368
- return !filter.exclude_types.some((t) => [
369
- "RaydiumClmmSwap",
370
- "RaydiumClmmIncreaseLiquidity",
371
- "RaydiumClmmDecreaseLiquidity",
372
- "RaydiumClmmCreatePool",
373
- "RaydiumClmmOpenPosition",
374
- "RaydiumClmmOpenPositionWithTokenExtNft",
375
- "RaydiumClmmClosePosition",
376
- "RaydiumClmmCollectFee",
377
- ].includes(t));
378
- }
379
- return true;
483
+ return eventTypeFilterIncludesAny(filter, RAYDIUM_CLMM_FILTER_TYPES);
380
484
  }
381
485
  /** 过滤器是否包含 Raydium CPMM 相关类型 */
382
486
  function eventTypeFilterIncludesRaydiumCpmm(filter) {
383
- if (filter.include_only) {
384
- return filter.include_only.some((t) => [
385
- "RaydiumCpmmSwap",
386
- "RaydiumCpmmDeposit",
387
- "RaydiumCpmmWithdraw",
388
- ].includes(t));
389
- }
390
- if (filter.exclude_types) {
391
- return !filter.exclude_types.some((t) => [
392
- "RaydiumCpmmSwap",
393
- "RaydiumCpmmDeposit",
394
- "RaydiumCpmmWithdraw",
395
- ].includes(t));
396
- }
397
- return true;
487
+ return eventTypeFilterIncludesAny(filter, RAYDIUM_CPMM_FILTER_TYPES);
398
488
  }
399
489
  /** 过滤器是否包含 Raydium AMM V4 相关类型 */
400
490
  function eventTypeFilterIncludesRaydiumAmmV4(filter) {
401
- if (filter.include_only) {
402
- return filter.include_only.some((t) => ["RaydiumAmmV4Swap"].includes(t));
403
- }
404
- if (filter.exclude_types) {
405
- return !filter.exclude_types.some((t) => ["RaydiumAmmV4Swap"].includes(t));
406
- }
407
- return true;
491
+ return eventTypeFilterIncludesAny(filter, RAYDIUM_AMM_V4_FILTER_TYPES);
408
492
  }
409
493
  /** 过滤器是否包含 Orca Whirlpool 相关类型 */
410
494
  function eventTypeFilterIncludesOrcaWhirlpool(filter) {
411
- if (filter.include_only) {
412
- return filter.include_only.some((t) => [
413
- "OrcaWhirlpoolSwap",
414
- "OrcaWhirlpoolLiquidityIncreased",
415
- "OrcaWhirlpoolLiquidityDecreased",
416
- ].includes(t));
417
- }
418
- if (filter.exclude_types) {
419
- return !filter.exclude_types.some((t) => [
420
- "OrcaWhirlpoolSwap",
421
- "OrcaWhirlpoolLiquidityIncreased",
422
- "OrcaWhirlpoolLiquidityDecreased",
423
- ].includes(t));
424
- }
425
- return true;
426
- }
427
- /** 过滤器是否包含 Bonk Launchpad 相关类型(与 Rust `includes_raydium_launchpad` / Bonk 集合一致) */
428
- function eventTypeFilterIncludesBonk(filter) {
429
- const bonk = ["BonkTrade", "BonkPoolCreate", "BonkMigrateAmm"];
430
- if (filter.include_only) {
431
- return filter.include_only.some((t) => bonk.includes(t));
432
- }
433
- if (filter.exclude_types) {
434
- return !filter.exclude_types.some((t) => bonk.includes(t));
435
- }
436
- return true;
495
+ return eventTypeFilterIncludesAny(filter, ORCA_WHIRLPOOL_FILTER_TYPES);
437
496
  }
438
- /** Rust `EventTypeFilter::includes_raydium_launchpad` 同名语义 */
439
- function eventTypeFilterIncludesRaydiumLaunchpad(filter) {
440
- return eventTypeFilterIncludesBonk(filter);
497
+ /** 过滤器是否包含 Raydium LaunchLab 相关类型(与 Rust `includes_raydium_launchlab` 集合一致) */
498
+ function eventTypeFilterIncludesRaydiumLaunchlab(filter) {
499
+ return eventTypeFilterIncludesAny(filter, RAYDIUM_LAUNCHLAB_FILTER_TYPES);
441
500
  }
442
501
  /**
443
502
  * `parseInstructionUnified` 前置白名单:仅当 `include_only` 与下列指令相关类型有交集时才解析指令。
444
503
  * 若白名单中不含下列任一类型,则整条指令解析入口返回 null。
445
504
  */
446
505
  function eventTypeFilterAllowsInstructionParsing(includeOnly) {
447
- const ix = [
448
- "PumpFunTrade",
449
- "PumpFunBuy",
450
- "PumpFunSell",
451
- "PumpFunBuyExactSolIn",
452
- "PumpFunCreate",
453
- "PumpFunCreateV2",
454
- "PumpFunMigrate",
455
- "PumpFunMigrateBondingCurveCreator",
456
- "AccountPumpFunGlobal",
457
- ...PUMP_FEES_EVENT_TYPES,
458
- "PumpSwapBuy",
459
- "PumpSwapSell",
460
- "PumpSwapCreatePool",
461
- "PumpSwapLiquidityAdded",
462
- "PumpSwapLiquidityRemoved",
463
- "MeteoraDammV2Swap",
464
- "MeteoraDammV2AddLiquidity",
465
- "MeteoraDammV2CreatePosition",
466
- "MeteoraDammV2InitializePool",
467
- "MeteoraDammV2ClosePosition",
468
- "MeteoraDammV2RemoveLiquidity",
469
- "MeteoraDammV2RemoveAllLiquidity",
470
- "RaydiumClmmSwap",
471
- "RaydiumClmmIncreaseLiquidity",
472
- "RaydiumClmmDecreaseLiquidity",
473
- "RaydiumClmmCreatePool",
474
- "RaydiumClmmOpenPosition",
475
- "RaydiumClmmOpenPositionWithTokenExtNft",
476
- "RaydiumClmmClosePosition",
477
- "RaydiumClmmCollectFee",
478
- "RaydiumCpmmSwap",
479
- "RaydiumCpmmDeposit",
480
- "RaydiumCpmmWithdraw",
481
- "RaydiumCpmmInitialize",
482
- "RaydiumAmmV4Swap",
483
- "RaydiumAmmV4Deposit",
484
- "RaydiumAmmV4Withdraw",
485
- "RaydiumAmmV4WithdrawPnl",
486
- "RaydiumAmmV4Initialize2",
487
- "OrcaWhirlpoolSwap",
488
- "OrcaWhirlpoolLiquidityIncreased",
489
- "OrcaWhirlpoolLiquidityDecreased",
490
- "OrcaWhirlpoolPoolInitialized",
491
- "BonkTrade",
492
- "BonkPoolCreate",
493
- "BonkMigrateAmm",
494
- ];
495
- return includeOnly.some((t) => ix.includes(t));
506
+ return includeOnly.some((t) => INSTRUCTION_EVENT_TYPE_SET.has(t));
496
507
  }
package/dist/index.d.ts CHANGED
@@ -5,9 +5,10 @@ export { bigintToJsonReplacer, dexEventToJsonString } from "./core/json_utils.js
5
5
  export type { EventMetadata } from "./core/metadata.js";
6
6
  export type { ParseError } from "./core/error.js";
7
7
  export { formatParseError } from "./core/error.js";
8
- export { enrichCreateV2ObservedFeeRecipient, enrichPumpfunTradesFromCreateInstructions, enrichPumpfunSameTxPostMerge, } from "./core/pumpfun_fee_enrich.js";
8
+ export { enrichCreateV2FromCreateEvents, enrichCreateV2ObservedFeeRecipient, enrichPumpfunTradesFromCreateInstructions, enrichPumpfunSameTxPostMerge, } from "./core/pumpfun_fee_enrich.js";
9
9
  export { parseTransactionEvents, parseLogsOnly, parseTransactionWithListener, parseTransactionEventsStreaming, parseLogsStreaming, parseTransactionWithStreamingListener, parseLog, parseLog as parse_log, nowUs, type EventListener, type StreamingEventListener, } from "./core/unified_parser.js";
10
10
  export { nowMicros, nowNanos, elapsedMicrosSince } from "./core/clock.js";
11
+ export { sqrtPriceX64ToPrice, vaultPriceFromBalances, normalizeBuySellFromTokenDelta, normalizeBuySellFromInputMint, type NumericAmount, type NormalizedTradeSide, } from "./util/market.js";
11
12
  export { AccountPubkeyCache, buildAccountPubkeysWithCache, buildAccountPubkeysWithCache as build_account_pubkeys_with_cache, } from "./core/account_pubkey_cache.js";
12
13
  export { warmupParser, isWarmedUp } from "./warmup.js";
13
14
  export { parseTransactionFromRpc, parseRpcTransaction, fillAccountsFromTransactionDataRpc, fillDataRpc, applyAccountFillsToLogEvents, convertRpcToGrpc, convert_rpc_to_grpc, type ConvertRpcToGrpcOk, type ConvertRpcToGrpcErr, } from "./rpc_parser.js";
@@ -15,10 +16,10 @@ export { parseDexEventsFromGrpcTransactionInfo, grpcTxIndexFromInfo, } from "./g
15
16
  export { pubkeyBytesToBs58, collectAccountKeysBs58, lamportBalanceDeltas, heuristicSolCounterpartiesForWatchedKeys, tokenBalanceRawAmount, splTokenCounterpartyByOwner, collectWatchTransferCounterpartyPairs, tryYellowstoneSignature, } from "./grpc/transaction_meta.js";
16
17
  /** Rust `grpc::transaction_meta` 蛇形命名别名(便于从 Rust 迁移) */
17
18
  export { pubkeyBytesToBs58 as pubkey_bytes_to_bs58, collectAccountKeysBs58 as collect_account_keys_bs58, lamportBalanceDeltas as lamport_balance_deltas, heuristicSolCounterpartiesForWatchedKeys as heuristic_sol_counterparties_for_watched_keys, tokenBalanceRawAmount as token_balance_raw_amount, splTokenCounterpartyByOwner as spl_token_counterparty_by_owner, collectWatchTransferCounterpartyPairs as collect_watch_transfer_counterparty_pairs, tryYellowstoneSignature as try_yellowstone_signature, } from "./grpc/transaction_meta.js";
18
- export { type OrderMode, type Protocol, type ClientConfig, type StreamingConfig, type TransactionFilter, type AccountFilter, type AccountFilterData, type AccountFilterMemcmp, type SlotFilter, type EventType, type StreamingEventType, type EventTypeFilter, defaultClientConfig, lowLatencyClientConfig, highThroughputClientConfig, newTransactionFilter, transactionFilterFromProgramIds, newAccountFilter, newSlotFilter, slotFilterMinSlot, slotFilterMaxSlot, accountFilterFromProgramOwners, accountFilterMemcmp, eventTypeFilterIncludeOnly, eventTypeFilterExclude, eventTypeFilterIncludesPumpfun, eventTypeFilterIncludesPumpswap, eventTypeFilterIncludesMeteoraDammV2, eventTypeFilterIncludesRaydiumClmm, eventTypeFilterIncludesRaydiumCpmm, eventTypeFilterIncludesRaydiumAmmV4, eventTypeFilterIncludesOrcaWhirlpool, eventTypeFilterIncludesBonk, eventTypeFilterIncludesRaydiumLaunchpad, eventTypeFilterIncludesPumpFees, eventTypeFilterAllowsInstructionParsing, ALL_EVENT_TYPES, } from "./grpc/types.js";
19
+ export { type OrderMode, type Protocol, type ClientConfig, type StreamingConfig, type TransactionFilter, type AccountFilter, type AccountFilterData, type AccountFilterMemcmp, type SlotFilter, type EventType, type StreamingEventType, type EventTypeFilter, defaultClientConfig, lowLatencyClientConfig, highThroughputClientConfig, newTransactionFilter, transactionFilterFromProgramIds, newAccountFilter, newSlotFilter, slotFilterMinSlot, slotFilterMaxSlot, accountFilterFromProgramOwners, accountFilterMemcmp, eventTypeFilterIncludeOnly, eventTypeFilterExclude, eventTypeFilterIncludesPumpfun, eventTypeFilterIncludesPumpswap, eventTypeFilterIncludesMeteoraDammV2, eventTypeFilterIncludesMeteoraDbc, eventTypeFilterIncludesMeteoraPools, eventTypeFilterIncludesMeteoraDlmm, eventTypeFilterIncludesRaydiumClmm, eventTypeFilterIncludesRaydiumCpmm, eventTypeFilterIncludesRaydiumAmmV4, eventTypeFilterIncludesOrcaWhirlpool, eventTypeFilterIncludesRaydiumLaunchlab, eventTypeFilterIncludesPumpFees, eventTypeFilterAllowsInstructionParsing, ALL_EVENT_TYPES, } from "./grpc/types.js";
19
20
  export { ALL_EVENT_TYPES as all_event_types } from "./grpc/types.js";
20
21
  export type { StreamingConfig as streaming_config } from "./grpc/types.js";
21
- export { PROTOCOL_PROGRAM_IDS, PUMPFUN_PROGRAM_ID, PUMPSWAP_PROGRAM_ID, PUMPSWAP_FEES_PROGRAM_ID, PUMP_FEES_PROGRAM_ID, BONK_PROGRAM_ID, RAYDIUM_CPMM_PROGRAM_ID, RAYDIUM_CLMM_PROGRAM_ID, RAYDIUM_AMM_V4_PROGRAM_ID, ORCA_WHIRLPOOL_PROGRAM_ID, METEORA_POOLS_PROGRAM_ID, METEORA_DAMM_V2_PROGRAM_ID, METEORA_DLMM_PROGRAM_ID, getProgramIdsForProtocols, transactionFilterForProtocols, accountFilterForProtocols, } from "./grpc/program_ids.js";
22
+ export { PROTOCOL_PROGRAM_IDS, PUMPFUN_PROGRAM_ID, PUMPSWAP_PROGRAM_ID, PUMPSWAP_FEES_PROGRAM_ID, PUMP_FEES_PROGRAM_ID, RAYDIUM_LAUNCHLAB_PROGRAM_ID, RAYDIUM_CPMM_PROGRAM_ID, RAYDIUM_CLMM_PROGRAM_ID, RAYDIUM_AMM_V4_PROGRAM_ID, ORCA_WHIRLPOOL_PROGRAM_ID, METEORA_POOLS_PROGRAM_ID, METEORA_DAMM_V2_PROGRAM_ID, METEORA_DLMM_PROGRAM_ID, METEORA_DBC_PROGRAM_ID, getProgramIdsForProtocols, transactionFilterForProtocols, accountFilterForProtocols, } from "./grpc/program_ids.js";
22
23
  export { PROTOCOL_PROGRAM_IDS as protocol_program_ids, getProgramIdsForProtocols as get_program_ids_for_protocols, transactionFilterForProtocols as transaction_filter_for_protocols, accountFilterForProtocols as account_filter_for_protocols, } from "./grpc/program_ids.js";
23
24
  /** Rust `grpc::types` 蛇形命名别名 */
24
25
  export { defaultClientConfig as default_client_config, lowLatencyClientConfig as low_latency_client_config, highThroughputClientConfig as high_throughput_client_config, newTransactionFilter as new_transaction_filter, transactionFilterFromProgramIds as transaction_filter_from_program_ids, newAccountFilter as new_account_filter, newSlotFilter as new_slot_filter, slotFilterMinSlot as slot_filter_min_slot, slotFilterMaxSlot as slot_filter_max_slot, accountFilterFromProgramOwners as account_filter_from_program_owners, accountFilterMemcmp as account_filter_memcmp, eventTypeFilterIncludeOnly as event_type_filter_include_only, eventTypeFilterExclude as event_type_filter_exclude, eventTypeFilterIncludeOnly as include_only, eventTypeFilterExclude as exclude_types, } from "./grpc/types.js";
@@ -36,9 +37,9 @@ export type { ParsedEvent } from "./parser_alias.js";
36
37
  export { parseAccountUnified, type AccountData, parseNonceAccount, isNonceAccount, parseTokenAccount, parsePumpfunGlobal, parsePumpfunAccount, isPumpfunGlobalAccount, parsePumpswapGlobalConfig, parsePumpswapPool, parsePumpswapAccount, isGlobalConfigAccount, isPoolAccount, hasDiscriminator, userWalletPubkeyForOnchainAccount, rpcResolveUserWalletPubkey, } from "./accounts/mod.js";
37
38
  /** Rust `accounts` 蛇形命名别名 */
38
39
  export { parse_account_unified, parse_nonce_account, parse_token_account, parse_pumpfun_global, parse_pumpswap_global_config, parse_pumpswap_pool, rpc_resolve_user_wallet_pubkey, user_wallet_pubkey_for_onchain_account, } from "./accounts/rust_aliases.js";
39
- export { parseInstructionUnified, parsePumpfunInstruction, parsePumpswapInstruction, parseMeteoraDammInstruction, parsePumpFeesInstruction, } from "./instr/mod.js";
40
+ export { parseInstructionUnified, parsePumpfunInstruction, parsePumpswapInstruction, parseMeteoraDammInstruction, parseMeteoraDlmmInstruction, parseMeteoraPoolsInstruction, parsePumpFeesInstruction, } from "./instr/mod.js";
40
41
  /** Rust `instr` 根模块蛇形命名别名 */
41
- export { parse_instruction_unified, parse_pumpfun_instruction, parse_pumpswap_instruction, parse_meteora_damm_instruction, parse_pump_fees_instruction, } from "./instr/rust_aliases.js";
42
+ export { parse_instruction_unified, parse_pumpfun_instruction, parse_pumpswap_instruction, parse_meteora_damm_instruction, parse_meteora_dlmm_instruction, parse_meteora_pools_instruction, parse_pump_fees_instruction, } from "./instr/rust_aliases.js";
42
43
  export * as programIds from "./instr/program_ids.js";
43
44
  export { YellowstoneGrpc, type SubscribeCallbacks, type DexEventSubscription } from "./grpc/client.js";
44
45
  export { connectYellowstoneGeyser, defaultGeyserConnectConfig, geyserGrpcChannelOptions, type GeyserConnectConfig, } from "./grpc/geyser_connect.js";