@syldel/hl-shared-types 0.0.24 → 0.0.25

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.
@@ -4,3 +4,4 @@ export * from './l2Book.interfaces';
4
4
  export * from './active-asset.interfaces';
5
5
  export * from './account-abstraction.type';
6
6
  export * from './collateral-balance.interfaces';
7
+ export * from './user-fees.interfaces';
@@ -20,3 +20,4 @@ __exportStar(require("./l2Book.interfaces"), exports);
20
20
  __exportStar(require("./active-asset.interfaces"), exports);
21
21
  __exportStar(require("./account-abstraction.type"), exports);
22
22
  __exportStar(require("./collateral-balance.interfaces"), exports);
23
+ __exportStar(require("./user-fees.interfaces"), exports);
@@ -0,0 +1,113 @@
1
+ import { DecimalString, HexString } from '../common';
2
+ /**
3
+ * ============================================================================
4
+ * LE BARÈME RÉEL D'UN UTILISATEUR
5
+ *
6
+ * Réponse de `userFees`, servie telle quelle par
7
+ * `GET /hyperliquid/info/user-fees` du gateway.
8
+ *
9
+ * Recopiée de la documentation officielle (« Query a user's fees », relevée le
10
+ * 2026-10-11), **pas déduite** de la formule publiée sur la page des frais. Les
11
+ * deux ne portent pas les mêmes noms, et c'est le piège : le pseudo-code de la
12
+ * formule écrit `fees: { makerRate, takerRate }`, alors que le point de
13
+ * terminaison ne connaît ni l'un ni l'autre. Ce sont `userCrossRate` (preneur)
14
+ * et `userAddRate` (apporteur).
15
+ *
16
+ * ⚠️ Tout est en **chaînes décimales**, y compris des taux qui peuvent être
17
+ * négatifs (`tiers.mm[].add` vaut `'-0.00001'` : un rebate). `Number('')` rend
18
+ * `0`, soit un barème parfaitement plausible — donc jamais de conversion sans
19
+ * refuser ce qui n'est pas un nombre.
20
+ * ============================================================================
21
+ */
22
+ /** Un palier de volume : au-delà de `ntlCutoff`, ces taux s'appliquent. */
23
+ export interface HlVipFeeTier {
24
+ ntlCutoff: DecimalString;
25
+ cross: DecimalString;
26
+ add: DecimalString;
27
+ spotCross: DecimalString;
28
+ spotAdd: DecimalString;
29
+ }
30
+ /**
31
+ * Un palier d'apporteur de liquidité. `add` y est **négatif** : c'est un
32
+ * rebate, payé à l'utilisateur et non prélevé.
33
+ */
34
+ export interface HlMakerFeeTier {
35
+ makerFractionCutoff: DecimalString;
36
+ add: DecimalString;
37
+ }
38
+ export interface HlStakingDiscountTier {
39
+ bpsOfMaxSupply: DecimalString;
40
+ discount: DecimalString;
41
+ }
42
+ /** Le barème **public**, identique pour tous : les paliers de base et leurs seuils. */
43
+ export interface HlFeeSchedule {
44
+ /** Preneur, perp. `'0.00045'` au palier de base. */
45
+ cross: DecimalString;
46
+ /** Apporteur, perp. `'0.00015'` au palier de base. */
47
+ add: DecimalString;
48
+ spotCross: DecimalString;
49
+ spotAdd: DecimalString;
50
+ tiers: {
51
+ vip: HlVipFeeTier[];
52
+ mm: HlMakerFeeTier[];
53
+ };
54
+ referralDiscount: DecimalString;
55
+ stakingDiscountTiers: HlStakingDiscountTier[];
56
+ }
57
+ /** Le volume d'un jour, tel que le barème le compte. */
58
+ export interface HlDailyUserVolume {
59
+ /** `'2025-05-23'` — une date sans heure ni fuseau. */
60
+ date: string;
61
+ userCross: DecimalString;
62
+ userAdd: DecimalString;
63
+ exchange: DecimalString;
64
+ }
65
+ /**
66
+ * Le lien entre un compte qui stake et un compte qui trade.
67
+ *
68
+ * ⚠️ Lier est **irréversible** et donne au compte de staking le pouvoir de
69
+ * vider le compte de trading — ne jamais proposer cette action depuis l'app.
70
+ */
71
+ export interface HlStakingLink {
72
+ type: string;
73
+ stakingUser: HexString;
74
+ }
75
+ export interface HlActiveStakingDiscount {
76
+ bpsOfMaxSupply: DecimalString;
77
+ discount: DecimalString;
78
+ }
79
+ export interface HlUserFees {
80
+ dailyUserVlm: HlDailyUserVolume[];
81
+ feeSchedule: HlFeeSchedule;
82
+ /**
83
+ * Le taux **preneur** de cet utilisateur, déjà net de son palier de volume et
84
+ * de sa remise de staking — mais **pas** de sa remise de parrainage, que la
85
+ * formule officielle applique à part, ni du barème propre à un marché HIP-3.
86
+ *
87
+ * Vérifié sur l'exemple de la documentation : `'0.000315'` vaut
88
+ * `0,00045 × 0,7`, et `activeStakingDiscount.discount` y vaut `'0.3'`.
89
+ */
90
+ userCrossRate: DecimalString;
91
+ /** Le taux **apporteur**, mêmes réserves. Peut être négatif : voir `HlMakerFeeTier`. */
92
+ userAddRate: DecimalString;
93
+ userSpotCrossRate: DecimalString;
94
+ userSpotAddRate: DecimalString;
95
+ /** Entre `'0.0'` et `'1.0'`. C'est le `(1 - activeReferralDiscount)` de la formule. */
96
+ activeReferralDiscount: DecimalString;
97
+ /**
98
+ * `null` quand aucun essai n'est en cours.
99
+ *
100
+ * ⚠️ Seule la valeur `null` a été observée : la forme du cas non nul est
101
+ * **inconnue**, et l'inventer ici donnerait à un consommateur l'illusion de
102
+ * pouvoir la lire. `unknown` force à la vérifier avant d'y toucher — et
103
+ * `unknown | null` se réduirait à `unknown`, donc le `null` est explicite
104
+ * dans ce commentaire plutôt que dans un type qui ne le dirait pas.
105
+ */
106
+ trial: unknown;
107
+ feeTrialReward: DecimalString;
108
+ /** `null` quand il n'y en a pas de prévu. */
109
+ nextTrialAvailableTimestamp: number | null;
110
+ /** Absent quand le compte ne stake pas depuis un autre compte. */
111
+ stakingLink?: HlStakingLink | null;
112
+ activeStakingDiscount?: HlActiveStakingDiscount | null;
113
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syldel/hl-shared-types",
3
- "version": "0.0.24",
3
+ "version": "0.0.25",
4
4
  "description": "Shared TypeScript interfaces and types for Hyperliquid integration.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",