lightweight-sdk/spec/packages.md
Nicolas 509bd3a537 Ajouter @lightweight-sdk/service-discovery (packages/server)
Agregateur d'API reverse-proxy avec enregistrement et decouverte de
services au runtime, deux points d'entree separes partageant un meme
protocole :

- ./client (DiscoveryClient) : enregistre un service et maintient un
  heartbeat periodique (qui sert aussi de mecanisme de retry - un echec
  est journalise et laisse au tick suivant, pas de logique separee).
  stop() est best-effort et ne rejette jamais.
- ./aggregator (ServiceAggregator) : handlers Node natifs a monter dans
  Express/Fastify/http brut (exemples des trois dans le README), zero
  dependance framework. Routage par prefixe de nom de service, TTL avec
  balayage periodique, secret partage compare en temps constant, proxy
  HTTP fait main (node:http/https, streaming, filtrage hop-by-hop,
  distinction 502/504).

Limites documentees dans le README plutot que corrigees : pas de
matching :param (v1, match exact), pas de secret par service, risque
SSRF-like assume vu le threat model homelab.

Resolution des sous-chemins via des stubs package.json (client/,
aggregator/) puisque le repo cible moduleResolution: Node10, pas de
champ exports moderne - pattern documente dans spec/architecture.md
pour de futurs packages server/ multi-points d'entree.

Bug trouve et corrige en cours de route : req.on('close') se declenche
des que le corps de la requete entrante est lu (immediat pour un GET
sans body), pas a la deconnexion reelle du client - detruisait ma
propre requete sortante juste apres l'avoir envoyee. Le bon signal est
res.on('close').

Correction connexe : create-package.mjs inserait la nouvelle ligne en
fin de fichier de spec/packages.md au lieu de l'inserer dans le
tableau - corrige pour les deux packages precedents au passage.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-18 19:01:33 +02:00

3.1 KiB

Registre des packages

Package Catégorie Version Statut
@lightweight-sdk/web-component client 0.0.2 migré depuis lightweight-sdk-web-component, non modifié
@lightweight-sdk/service-registry common 0.0.1 brouillon
@lightweight-sdk/service-discovery server 0.0.1 brouillon

Ajouter un package

pnpm create-package <client|common|server> <nom-du-package>

Le script scaffolde package.json, tsconfig.json, src/index.ts + un test, un README.md, ajoute le package aux project references racine et met à jour ce tableau automatiquement. Reste à faire à la main : décrire le package, l'implémenter, et créer un changeset (pnpm changeset) quand il est prêt à être publié.

Champs package.json obligatoires pour tout package du monorepo

  • name (@lightweight-sdk/<nom>), version, description
  • main (dist/index.js), types (dist/index.d.ts), files: ["dist"]
  • engines.node >= 22
  • publishConfig.registry pointant vers le registre npm privé (https://git.dev.kyuno.fr/api/packages/kyuno/npm/)
  • typedocOptions.entryPoints (sauf exception documentée, voir ci-dessous)
  • devDependencies explicites pour typescript/vitest/@types/node (catalog:), même si déjà hoistées depuis la racine — un package sans dépendance propre peut se retrouver sans entrée dans pnpm-lock.yaml, cassant pnpm install --frozen-lockfile en CI (voir spec/ci-cd.md)

Observations sur @lightweight-sdk/web-component (non traitées, laissées telles quelles)

Le code source de ce package a été migré strictement à l'identique depuis l'ancien repo lightweight-sdk-web-component, sans aucune édition (décision explicite de l'auteur). Quelques points relevés à la lecture, non corrigés, à traiter soi-même dans une PR dédiée si souhaité :

  • connectedCallback()/disconnectedCallback() (abstractComponent.ts), la constante CUSTOM_COMPONENT_CONFIG (component.type.ts) et REQUEST_DOM_LINK_KEY (component.tools.ts) n'ont pas de TSDoc complet — c'est pourquoi ce package est exclu de la validation docs:check dans typedoc.json (exclude: ["packages/client/web-component/**"]).
  • Deux usages de any (ConstructorFunction.new(...args: any[]), parseModuleToHtml(mod: any)) — visibles comme avertissements Biome non bloquants (noExplicitAny).
  • Le paramètre constructor dans component.tools.ts masque un nom global restreint (noShadowRestrictedNames) — désactivé pour ce package via un overrides dans biome.json.
  • Le style de formatage d'origine (4 espaces, guillemets doubles) diffère de la config Biome du monorepo (tabulations, guillemets simples) — le formatter Biome est désactivé pour ce package via le même overrides.
  • REQUEST_DOM_LINK_KEY semble ne plus être utilisé nulle part dans le code (le mécanisme actif est le tableau __linkedProperties) — potentiellement mort, mais pas supprimé.
  • Quelques typos mineures ("atatched", "attriute") et un commentaire en français dans LinkToDom qui ne correspond plus exactement au comportement (throw au lieu d'un simple avertissement).