@neutral-trade/sdk 0.1.2 → 0.1.3

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.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  TypeScript SDK for [Neutral Trade](https://neutral.trade) vaults.
8
8
 
9
- 📚 **[Documentation](https://sdk-neutral-trade.vercel.app/)**
9
+ 📚 **[Documentation](https://sdk.neutral.trade/)**
10
10
 
11
11
  ## Installation
12
12
 
package/dist/index.d.mts CHANGED
@@ -1,8 +1,8 @@
1
1
  import { AnchorProvider, IdlAccounts, Program } from "@coral-xyz/anchor";
2
2
  import { AnchorProvider as AnchorProvider$1, IdlAccounts as IdlAccounts$1, Program as Program$1 } from "@coral-xyz/anchor-32";
3
3
  import { Connection, PublicKey } from "@solana/web3.js";
4
- import { z } from "zod";
5
4
  import { VaultClient } from "@drift-labs/vaults-sdk";
5
+ import { z } from "zod";
6
6
 
7
7
  //#region src/idl/bundle-v1.d.ts
8
8
  interface NtbundleV1 {
@@ -4938,6 +4938,150 @@ declare enum BundleProgramId {
4938
4938
  V2 = "BUNDeH5A4c47bcEoAjBhN3sCjLgYnRsmt9ibMztqVkC9",
4939
4939
  }
4940
4940
  //#endregion
4941
+ //#region src/constants/vault-ids.d.ts
4942
+ /**
4943
+ * Vault ID constants for backward compatibility
4944
+ * These are auto-generated from the vault registry
4945
+ */
4946
+ declare enum VaultId {
4947
+ /** CTA-Adaptive Alpha - Atlas Research */
4948
+ cta_adaptive_alpha_atlas_research_72 = 72,
4949
+ /** Hyperithm Cross-Exchange Arb */
4950
+ hyperithm_cross_exchange_arb_71 = 71,
4951
+ /** Lighter LLP */
4952
+ lighter_llp_70 = 70,
4953
+ /** JLP Delta Neutral - vault-jupiter */
4954
+ jlp_delta_neutral_vault_jupiter_69 = 69,
4955
+ /** Aster Funding Arb */
4956
+ aster_funding_arb_67 = 67,
4957
+ /** Moon LP */
4958
+ moon_lp_66 = 66,
4959
+ /** JLP Delta Neutral - Vault-CEX */
4960
+ jlp_delta_neutral_vault_cex_65 = 65,
4961
+ /** NT Earn */
4962
+ nt_earn_60 = 60,
4963
+ /** CTA Momentum - R* Research */
4964
+ cta_momentum_r_research_52 = 52,
4965
+ /** Term Max */
4966
+ term_max_51 = 51,
4967
+ /** ALP Delta Neutral Forest */
4968
+ alp_delta_neutral_forest_50 = 50,
4969
+ /** ALP Delta Neutral */
4970
+ alp_delta_neutral_49 = 49,
4971
+ /** Hyperliquid Funding Arb */
4972
+ hyperliquid_funding_arb_48 = 48,
4973
+ /** JLP Delta Neutral - vault-1 */
4974
+ jlp_delta_neutral_vault_1_0 = 0,
4975
+ /** SOL Super Staking */
4976
+ sol_super_staking_1 = 1,
4977
+ /** JLP Traders Rekt */
4978
+ jlp_traders_rekt_2 = 2,
4979
+ /** BTC Super Staking */
4980
+ btc_super_staking_3 = 3,
4981
+ /** JLP Delta Neutral - Drift-2 */
4982
+ jlp_delta_neutral_drift_2_4 = 4,
4983
+ /** JLP Delta Neutral - vip1 */
4984
+ jlp_delta_neutral_vip1_5 = 5,
4985
+ /** ETH Super Staking */
4986
+ eth_super_staking_6 = 6,
4987
+ /** JLP Traders Print */
4988
+ jlp_traders_print_7 = 7,
4989
+ /** Drift funding arb */
4990
+ drift_funding_arb_8 = 8,
4991
+ /** JLP Delta Neutral - vip2 */
4992
+ jlp_delta_neutral_vip2_9 = 9,
4993
+ /** JLP Delta Neutral - vip3 */
4994
+ jlp_delta_neutral_vip3_10 = 10,
4995
+ /** USDC Basis - Perps Basket */
4996
+ usdc_basis_perps_basket_11 = 11,
4997
+ /** JLP Delta Neutral - vip5 */
4998
+ jlp_delta_neutral_vip5_12 = 12,
4999
+ /** JLP Delta Neutral - vip6 */
5000
+ jlp_delta_neutral_vip6_13 = 13,
5001
+ /** JLP Delta Neutral - vip7 */
5002
+ jlp_delta_neutral_vip7_14 = 14,
5003
+ /** SOL Super Staking - vip8 */
5004
+ sol_super_staking_vip8_15 = 15,
5005
+ /** JLP Delta Neutral - Drift-3 */
5006
+ jlp_delta_neutral_drift_3_16 = 16,
5007
+ /** USDC Staking - vip10 */
5008
+ usdc_staking_vip10_17 = 17,
5009
+ /** JLP Delta Neutral - vip11 */
5010
+ jlp_delta_neutral_vip11_18 = 18,
5011
+ /** JLP Delta Neutral - vip12 */
5012
+ jlp_delta_neutral_vip12_19 = 19,
5013
+ /** JLP Delta Neutral - vip13 */
5014
+ jlp_delta_neutral_vip13_20 = 20,
5015
+ /** SOL Momentum - CTA-Marco */
5016
+ sol_momentum_cta_marco_21 = 21,
5017
+ /** JLP Delta Neutral - vip14 */
5018
+ jlp_delta_neutral_vip14_22 = 22,
5019
+ /** JLP Delta Neutral - vip15 */
5020
+ jlp_delta_neutral_vip15_23 = 23,
5021
+ /** JLP Delta Neutral - vip16 */
5022
+ jlp_delta_neutral_vip16_24 = 24,
5023
+ /** JLP Delta Neutral - tangem */
5024
+ jlp_delta_neutral_tangem_25 = 25,
5025
+ /** BTC Super Staking - tangem */
5026
+ btc_super_staking_tangem_26 = 26,
5027
+ /** JLP Delta Neutral - vip17 */
5028
+ jlp_delta_neutral_vip17_27 = 27,
5029
+ /** JLP Delta Neutral - vip18 */
5030
+ jlp_delta_neutral_vip18_28 = 28,
5031
+ /** JLP Delta Neutral - Drift-4 */
5032
+ jlp_delta_neutral_drift_4_29 = 29,
5033
+ /** Long SOL, Short ETH - Solana Flippening */
5034
+ long_sol_short_eth_solana_flippening_30 = 30,
5035
+ /** JLP Delta Neutral - Drift-5 */
5036
+ jlp_delta_neutral_drift_5_31 = 31,
5037
+ /** JLP Delta Neutral - vip pool 1 */
5038
+ jlp_delta_neutral_vip_pool_1_32 = 32,
5039
+ /** JLP Delta Neutral - Project Super */
5040
+ jlp_delta_neutral_project_super_33 = 33,
5041
+ /** JLP Delta Neutral - vip19 */
5042
+ jlp_delta_neutral_vip19_34 = 34,
5043
+ /** JLP Delta Neutral - vip20 */
5044
+ jlp_delta_neutral_vip20_35 = 35,
5045
+ /** JLP Delta Neutral - Neutralized JLP */
5046
+ jlp_delta_neutral_neutralized_jlp_36 = 36,
5047
+ /** Inverse JLP DN - The Big Short */
5048
+ inverse_jlp_dn_the_big_short_37 = 37,
5049
+ /** FUEL Maxi */
5050
+ fuel_maxi_38 = 38,
5051
+ /** USDC Savings - Drawdown Protected */
5052
+ usdc_savings_drawdown_protected_39 = 39,
5053
+ /** SOL Savings - Drawdown Protected */
5054
+ sol_savings_drawdown_protected_40 = 40,
5055
+ /** ETH Savings - Drawdown Protected */
5056
+ eth_savings_drawdown_protected_41 = 41,
5057
+ /** BTC Savings - Drawdown Protected */
5058
+ btc_savings_drawdown_protected_42 = 42,
5059
+ /** JLP Delta Neutral - vip team */
5060
+ jlp_delta_neutral_vip_team_43 = 43,
5061
+ /** BTC Dominance */
5062
+ btc_dominance_44 = 44,
5063
+ /** FART Dominance - Hot Air Rises */
5064
+ fart_dominance_hot_air_rises_45 = 45,
5065
+ /** Hyper JLP */
5066
+ hyper_jlp_46 = 46,
5067
+ /** Long BONK, Short PUMP */
5068
+ long_bonk_short_pump_47 = 47,
5069
+ /** JLP Delta Neutral - vip21 */
5070
+ jlp_delta_neutral_vip21_57 = 57,
5071
+ /** Memes ETF - Generational Wealth */
5072
+ memes_etf_generational_wealth_58 = 58,
5073
+ /** JLP Delta Neutral - Perena */
5074
+ jlp_delta_neutral_perena_59 = 59,
5075
+ /** JLP Delta Neutral - vip22 */
5076
+ jlp_delta_neutral_vip22_62 = 62,
5077
+ /** JLP Delta Neutral - vip23 */
5078
+ jlp_delta_neutral_vip23_63 = 63,
5079
+ /** JLP Delta Neutral - vip24 */
5080
+ jlp_delta_neutral_vip24_64 = 64,
5081
+ /** SOL Super Staking - Perps */
5082
+ sol_super_staking_perps_68 = 68,
5083
+ }
5084
+ //#endregion
4941
5085
  //#region src/types/tokens.d.ts
4942
5086
  declare enum SupportedChain {
4943
5087
  Solana = "Solana",
@@ -4961,105 +5105,37 @@ interface Token {
4961
5105
  }
4962
5106
  declare const tokens: { [name in SupportedToken]: Token };
4963
5107
  //#endregion
5108
+ //#region src/types/bundle-types.d.ts
5109
+ type UserBundleAccount = IdlAccounts<NtbundleV1>['userBundleAccount'] | IdlAccounts$1<NtbundleV2>['userBundleAccount'];
5110
+ type OracleData = IdlAccounts<NtbundleV1>['oracleData'] | IdlAccounts$1<NtbundleV2>['oracleData'];
5111
+ type BundleAccount = IdlAccounts<NtbundleV1>['bundle'] | IdlAccounts$1<NtbundleV2>['bundle'];
5112
+ //#endregion
4964
5113
  //#region src/types/vault-types.d.ts
4965
- declare enum VaultId {
4966
- jlpdnv1 = 0,
4967
- solnl = 1,
4968
- rekt = 2,
4969
- btcnl = 3,
4970
- jlpdnv2 = 4,
4971
- vip1 = 5,
4972
- ethnl = 6,
4973
- print = 7,
4974
- solbasisinf = 8,
4975
- vip2 = 9,
4976
- vip3 = 10,
4977
- perpsbasket = 11,
4978
- vip5 = 12,
4979
- vip6 = 13,
4980
- vip7 = 14,
4981
- vip8 = 15,
4982
- jlpdnv3 = 16,
4983
- vip10 = 17,
4984
- vip11 = 18,
4985
- vip12 = 19,
4986
- vip13 = 20,
4987
- solctamarco = 21,
4988
- vip14 = 22,
4989
- vip15 = 23,
4990
- vip16 = 24,
4991
- usdctangem = 25,
4992
- btctangem = 26,
4993
- vip17 = 27,
4994
- vip18 = 28,
4995
- jlpdnv4 = 29,
4996
- solethflip = 30,
4997
- jlpdnv5 = 31,
4998
- vip1ag = 32,
4999
- usdcsuper = 33,
5000
- vip19 = 34,
5001
- vip20 = 35,
5002
- neutralizedjlp = 36,
5003
- thebigshort = 37,
5004
- fuelmaxi = 38,
5005
- usdcsavings = 39,
5006
- solsavings = 40,
5007
- ethsavings = 41,
5008
- btcsavings = 42,
5009
- jlpdnteam = 43,
5010
- btcdom = 44,
5011
- fartdom = 45,
5012
- hyperjlp = 46,
5013
- bonkpump = 47,
5014
- nmmjlpdn = 57,
5015
- memesetf = 58,
5016
- annafromperena = 59,
5017
- vip22 = 62,
5018
- vip23 = 63,
5019
- vip24 = 64,
5020
- solnlperps = 68,
5021
- hlbigshort = 53,
5022
- hlhypesol = 54,
5023
- hlaltdom = 55,
5024
- hlbtcdom = 56,
5025
- kaminolend = 61,
5026
- hlfundingarb = 48,
5027
- alpdn = 49,
5028
- // vip
5029
- alpdnforest = 50,
5030
- // vip
5031
- termmax = 51,
5032
- ctamomentumrresearch = 52,
5033
- ntearnusdc = 60,
5034
- jlpdnbundle = 65,
5035
- moonlp = 66,
5036
- asterfundingarb = 67,
5037
- jlpdnjupiter = 69,
5038
- lighterllp1 = 70,
5039
- hyperithm1 = 71,
5040
- }
5041
5114
  declare enum VaultType {
5042
5115
  Drift = "Drift",
5043
5116
  Bundle = "Bundle",
5044
5117
  Hyperliquid = "Hyperliquid",
5045
5118
  Kamino = "Kamino",
5046
5119
  }
5047
- interface VaultConfig {
5048
- vaultId: VaultId;
5120
+ /** Raw vault entry from registry JSON (without program IDs) */
5121
+ interface VaultRegistryEntry {
5122
+ vaultId: number;
5049
5123
  name: string;
5050
5124
  subname?: string;
5051
5125
  type: VaultType;
5052
5126
  vaultAddress: string;
5053
5127
  depositToken: SupportedToken;
5054
- bundleProgramId?: BundleProgramId;
5128
+ pfee?: number;
5129
+ }
5130
+ /** Vault config with required program IDs (transformed from registry entry) */
5131
+ interface VaultConfig extends VaultRegistryEntry {
5132
+ /** Required for Drift vaults */
5055
5133
  driftProgramId?: string;
5056
- pfee: number;
5134
+ /** Required for Bundle vaults */
5135
+ bundleProgramId?: string;
5057
5136
  }
5058
- //#endregion
5059
- //#region src/types/bundle-types.d.ts
5060
- type UserBundleAccount = IdlAccounts<NtbundleV1>['userBundleAccount'] | IdlAccounts$1<NtbundleV2>['userBundleAccount'];
5061
- type OracleData = IdlAccounts<NtbundleV1>['oracleData'] | IdlAccounts$1<NtbundleV2>['oracleData'];
5062
- type BundleAccount = IdlAccounts<NtbundleV1>['bundle'] | IdlAccounts$1<NtbundleV2>['bundle'];
5137
+ /** Vault registry as a record keyed by vaultId */
5138
+ type VaultConfigRecord = Record<number, VaultConfig>;
5063
5139
  //#endregion
5064
5140
  //#region src/types/index.d.ts
5065
5141
  interface VaultBalanceData {
@@ -5082,13 +5158,23 @@ interface VaultBalanceData {
5082
5158
  netDeposit?: number;
5083
5159
  asset: SupportedToken;
5084
5160
  }
5085
- type UserBalanceResult = Record<VaultId, VaultBalanceData | null>;
5161
+ type UserBalanceResult = Record<number, VaultBalanceData | null>;
5086
5162
  //#endregion
5087
5163
  //#region src/constants/vaults.d.ts
5088
- declare const vaults: Partial<Record<VaultId, VaultConfig>>;
5164
+ /**
5165
+ * Get Bundle Program ID for a vault
5166
+ * All bundle vaults use V1 except vaultId 69 and 72 which use V2
5167
+ */
5168
+ declare function getBundleProgramId(vaultId: number): BundleProgramId;
5169
+ /**
5170
+ * Get Drift Program ID for a vault
5171
+ * All drift vaults use default program ID except vaultId 0
5172
+ */
5173
+ declare function getDriftProgramPK(vaultId: number): PublicKey;
5174
+ declare const vaults: VaultConfigRecord;
5089
5175
  declare function isValidVaultAddress(address: string): boolean;
5090
5176
  declare function getVaultByAddress(address: string): VaultConfig | undefined;
5091
- declare function getVaultById(vaultId: VaultId): VaultConfig | undefined;
5177
+ declare function getVaultById(vaultId: number): VaultConfig | undefined;
5092
5178
  //#endregion
5093
5179
  //#region src/NeutralTrade.d.ts
5094
5180
  interface NeutralTradeConfig {
@@ -5104,7 +5190,7 @@ declare class NeutralTrade {
5104
5190
  readonly bundleProgramV2: Program$1<NtbundleV2>;
5105
5191
  readonly driftVaultClient: VaultClient;
5106
5192
  /** Vault configurations (built-in merged with remote if registryUrl was provided) */
5107
- readonly vaults: Partial<Record<VaultId, VaultConfig>>;
5193
+ readonly vaults: VaultConfigRecord;
5108
5194
  /** Price map for deposit tokens */
5109
5195
  readonly priceMap: Map<SupportedToken, number>;
5110
5196
  private constructor();
@@ -5116,6 +5202,7 @@ declare class NeutralTrade {
5116
5202
  static create(config: NeutralTradeConfig): Promise<NeutralTrade>;
5117
5203
  /**
5118
5204
  * Fetch vault configurations from a remote registry URL
5205
+ * Expects JSON array format and transforms to Record<number, VaultConfig>
5119
5206
  * @throws Error if fetch fails or validation fails
5120
5207
  */
5121
5208
  private static fetchVaultsFromRegistry;
@@ -5126,7 +5213,7 @@ declare class NeutralTrade {
5126
5213
  vaultIds,
5127
5214
  userAddress
5128
5215
  }: {
5129
- vaultIds: VaultId[];
5216
+ vaultIds: number[];
5130
5217
  userAddress: string;
5131
5218
  }): Promise<UserBalanceResult>;
5132
5219
  }
@@ -5146,4 +5233,4 @@ declare function deriveUserPDA(userKey: PublicKey, bundlePDA: PublicKey, program
5146
5233
  */
5147
5234
  declare function getVaultDepositorAddressSync(programId: PublicKey, vault: PublicKey, authority: PublicKey): PublicKey;
5148
5235
  //#endregion
5149
- export { type BundleAccount, BundleProgramId, NeutralTrade, type NeutralTradeConfig, type OracleData, SupportedChain, SupportedToken, type Token, type UserBalanceResult, type UserBundleAccount, type VaultBalanceData, type VaultConfig, VaultId, VaultType, deriveOraclePDA, deriveUserPDA, getVaultByAddress, getVaultById, getVaultDepositorAddressSync, isValidVaultAddress, tokens, vaults };
5236
+ export { type BundleAccount, BundleProgramId, NeutralTrade, type NeutralTradeConfig, type OracleData, SupportedChain, SupportedToken, type Token, type UserBalanceResult, type UserBundleAccount, type VaultBalanceData, type VaultConfig, type VaultConfigRecord, VaultId, VaultType, deriveOraclePDA, deriveUserPDA, getBundleProgramId, getDriftProgramPK, getVaultByAddress, getVaultById, getVaultDepositorAddressSync, isValidVaultAddress, tokens, vaults };