@syldel/hl-shared-types 0.0.28 → 0.0.30

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
@@ -85,37 +85,48 @@ Pour utiliser ce package dans tes autres projets (`bot`, `gateway` ou `mobile`)
85
85
 
86
86
  ## 📦 Publication
87
87
 
88
- Le projet utilise des **Granular Access Tokens** pour la publication afin de contourner la double authentification (2FA) manuelle tout en maintenant une sécurité maximale.
88
+ La publication passe par **GitHub Actions, sans aucun jeton npm** : le workflow
89
+ [`publish.yml`](.github/workflows/publish.yml) s'authentifie auprès de npm par OIDC
90
+ (« trusted publishing ») et **dépose** la version sans la rendre publique
91
+ (`npm stage publish`). Elle ne devient installable qu'après **approbation avec la 2FA**
92
+ du mainteneur. Un workflow, une action ou une dépendance compromis ne peut donc, au
93
+ pire, que déposer une version qu'on refusera. Le paquet porte en plus une attestation
94
+ de provenance qui le relie au commit et au workflow qui l'ont construit.
95
+
96
+ Jusqu'au 2026-11-03, la publication se faisait depuis le poste avec un jeton « Bypass
97
+ 2FA » rangé dans un `.npmrc` : n'importe quel paquet malveillant installé sur la
98
+ machine pouvait le lire et publier à notre place. npm retire d'ailleurs la publication
99
+ directe par jeton en janvier 2027.
89
100
 
90
- ### Configuration du Token
91
- 1. Générer un token sur NPM avec les permissions `Read and Write`.
92
- 2. Restreindre l'accès au package `@syldel/hl-shared-types` uniquement.
93
- 3. Utiliser l'option `Bypass 2FA` pour permettre l'automatisation.
101
+ ### Publier une nouvelle version
94
102
 
95
- ### Commande de publication rapide
96
- Si tu n'utilises pas de fichier `.npmrc`, tu peux publier en passant le token directement :
97
103
  ```bash
98
- npm publish --access public --//registry.npmjs.org/:_authToken=TON_TOKEN_ICI
104
+ npm version patch # ou minor, major : met à jour package.json et crée le tag v<version>
105
+ git push origin main --follow-tags
99
106
  ```
100
107
 
101
- ### Configuration de la publication
102
- Créez un fichier .npmrc à la racine (ignoré par Git) pour l'authentification :
108
+ Le tag `v*` déclenche le workflow : il vérifie que le tag correspond à `package.json`,
109
+ relance lint, tests, build et le contrôle du contenu du paquet, puis dépose la version.
110
+ Il reste à l'approuver :
103
111
 
104
- ```
105
- //registry.npmjs.org/:_authToken=npm_votre_token_ici
106
- ```
112
+ - sur [npmjs.com](https://www.npmjs.com), onglet **Staged Packages**, bouton **Approve** ;
113
+ - ou en ligne de commande : `npm stage list @syldel/hl-shared-types`, puis
114
+ `npm stage approve <stage-id>` (demande la 2FA).
107
115
 
108
- ### Publier une nouvelle version
109
- La commande suivante automatise le build, l'incrémentation de version et l'envoi vers NPM :
116
+ Une version déposée par erreur se refuse avec `npm stage reject <stage-id>`.
110
117
 
111
- ```bash
112
- npm run release
113
- ```
118
+ ### Réglages côté npm (une fois)
114
119
 
115
- ### Pousse le commit ET le tag sur GitHub
116
- ```bash
117
- git push origin main --follow-tags
118
- ```
120
+ Dans les réglages du paquet sur npmjs.com :
121
+
122
+ - **Trusted Publisher** : GitHub Actions, utilisateur `Syldel`, dépôt `hl-shared-types`, workflow
123
+ `publish.yml`, actions autorisées **`npm stage publish` seulement**. ⚠️ Une
124
+ déclaration neuve expire si aucune publication ne la valide sous **2 jours**.
125
+ - **Publishing access** : « Require two-factor authentication and disallow tokens ».
126
+
127
+ ⚠️ Renommer `publish.yml` ou le dépôt casse la publication (ENEEDAUTH) : la déclaration
128
+ sur npmjs.com les nomme exactement. Le champ `repository.url` de `package.json` doit
129
+ aussi correspondre au dépôt GitHub.
119
130
 
120
131
  ---
121
132
 
@@ -5,3 +5,4 @@ export * from './active-asset.interfaces';
5
5
  export * from './account-abstraction.type';
6
6
  export * from './collateral-balance.interfaces';
7
7
  export * from './user-fees.interfaces';
8
+ export * from './user-rate-limit.interfaces';
@@ -21,3 +21,4 @@ __exportStar(require("./active-asset.interfaces"), exports);
21
21
  __exportStar(require("./account-abstraction.type"), exports);
22
22
  __exportStar(require("./collateral-balance.interfaces"), exports);
23
23
  __exportStar(require("./user-fees.interfaces"), exports);
24
+ __exportStar(require("./user-rate-limit.interfaces"), exports);
@@ -0,0 +1,48 @@
1
+ import { DecimalString, HexString } from '../common';
2
+ /**
3
+ * ============================================================================
4
+ * LE COMPTEUR DE LA LIMITE PAR ADRESSE
5
+ *
6
+ * Réponse de `userRateLimit`, servie telle quelle par
7
+ * `GET /hyperliquid/info/user-rate-limit` du gateway (poids 20 sur la limite
8
+ * par IP).
9
+ *
10
+ * La limite par adresse est la seule qui puisse empêcher de poser un stop sans
11
+ * qu'aucun 429 ne prévienne avant : épuisée, elle ne laisse plus passer qu'une
12
+ * action toutes les 10 s. Elle ne compte que les actions, pas les lectures, et
13
+ * un lot de n ordres pour n (doc « Rate limits and user limits »).
14
+ *
15
+ * Forme recopiée de la documentation (« Query user rate limits », relue en brut
16
+ * le 2026-11-14) **et** mesurée le même jour sur un compte réel : `cumVlm` est
17
+ * une chaîne décimale, les trois compteurs des nombres.
18
+ *
19
+ * ⚠️ La doc définit `nRequestsUsed` et `nRequestsSurplus` par rapport à un
20
+ * « reserved » qu'elle ne définit nulle part. La lecture la plus plausible : les
21
+ * actions **achetées** par `reserveRequestWeight` (« Reserve Additional
22
+ * Actions », 0,0005 USDC l'une), et non la réserve initiale de 10 000, déjà
23
+ * comprise dans `nRequestsCap`. Non départagé : le compte mesuré n'en avait
24
+ * acheté aucune.
25
+ * ============================================================================
26
+ */
27
+ export interface HlUserRateLimitRequest {
28
+ type: 'userRateLimit';
29
+ user: HexString;
30
+ }
31
+ export interface HlUserRateLimit {
32
+ /** Le volume échangé depuis la création de l'adresse, en USDC. */
33
+ cumVlm: DecimalString;
34
+ /**
35
+ * « max(0, cumulative_used minus reserved) » d'après la doc. Mesuré le
36
+ * 2026-11-14 : 2288, aucune action achetée.
37
+ */
38
+ nRequestsUsed: number;
39
+ /**
40
+ * Le plafond : la réserve initiale de 10 000, **comprise**, plus 1 action par
41
+ * USDC échangé. Mesuré le 2026-11-14 : 61638 pour un `cumVlm` de 51638.93,
42
+ * soit exactement 10 000 + le volume arrondi. La marge avant le
43
+ * ralentissement est donc `nRequestsCap − nRequestsUsed`.
44
+ */
45
+ nRequestsCap: number;
46
+ /** « max(0, reserved minus cumulative_used) » d'après la doc. Mesuré à 0. */
47
+ nRequestsSurplus: number;
48
+ }
@@ -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.28",
3
+ "version": "0.0.30",
4
4
  "description": "Shared TypeScript interfaces and types for Hyperliquid integration.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -21,8 +21,7 @@
21
21
  "lint:fix": "eslint . --fix",
22
22
  "clean": "rm -rf dist",
23
23
  "build": "npm run lint && npm run test && npm run clean && tsc",
24
- "prepublishOnly": "npm run build",
25
- "release": "npm run build && npm version patch && npm publish"
24
+ "prepublishOnly": "npm run build"
26
25
  },
27
26
  "publishConfig": {
28
27
  "access": "public"
@@ -50,5 +49,8 @@
50
49
  "ts-jest": "^29.4.13",
51
50
  "typescript": "^5.3.3",
52
51
  "typescript-eslint": "^8.53.0"
52
+ },
53
+ "allowScripts": {
54
+ "unrs-resolver": false
53
55
  }
54
56
  }