npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@openswissdata/sdk

v0.2.0

Published

Official TypeScript SDK for openswissdata.com — Swiss customs (TARES), classifications (NOGA/NACE/ISIC) and FINMA registry, via the live MCP JSON-RPC endpoint.

Readme

@openswissdata/sdk

Client TypeScript du service MCP HTTP OpenSwissData : TARES, classifications NOGA/NACE/ISIC et registre FINMA. Distribution ESM et CommonJS, types inclus, aucune dépendance d’exécution supplémentaire. Ce dossier concerne l’API distante ; packages/sdk-ts contient un lecteur de fichiers distinct.

Commencer

Version 0.1.0 relue dans le registre public le 25.09.2026, avec une intégrité identique à l’archive vérifiée.

npm install @openswissdata/sdk

Pour compiler la version du dépôt : npm ci, npm run build, puis npm pack. Installer ensuite le fichier .tgz produit dans le projet consommateur.

import { Client } from "@openswissdata/sdk";
const client = new Client();
const tarif = await client.tares.lookup({ hs8: "09011100", lang: "fr" });
console.log(tarif.designation, tarif.duty_mfn);
console.log(tarif.disclaimer, tarif.summary_note);
const liens = await client.classifications.crossWalk({
  code: "62.10", source: "NOGA_2025", target: "NACE_2.1",
});
console.log(liens.reference_version, liens.mappings, liens.limitations);
const registre = await client.finma.kycCheck({ name: "UBS", top_k: 3 });
console.log(registre);

Ces trois opérations sont accessibles anonymement, dans la limite de 100 appels par heure et par IP. Les recherches sémantiques, historiques et recherches FINMA avancées exigent des droits existants. Les nouvelles souscriptions payantes sont fermées ; acheter un fichier ne donne pas de clé API.

Une mise à jour du dépôt ne publie pas automatiquement le paquet npm. Les champs de version et de qualité documentés ici décrivent le code de cette branche ; contrôler la distribution choisie avant de l’intégrer.

Configuration et erreurs

const client = new Client({
  apiKey: process.env.OPENSWISSDATA_API_KEY,
  timeoutMs: 30_000,
  maxRetries: 3,
  retryBackoffMs: 250,
});

Le délai couvre les en-têtes et le corps de chaque tentative. Les erreurs réseau et HTTP 500, 502, 503 ou 504 sont réessayées au plus trois fois par défaut : quatre tentatives au total. Les réponses 401/403, 429 et les erreurs métier remontent directement. maxRetries: 0 désactive la reprise.

Classes exportées : AuthError, RateLimitError, ServerError, NetworkError, ToolError, OpenSwissDataError. RateLimitError.retryAfterSeconds et client.lastRateLimit exposent les quotas reçus.

Le client accepte structured historique et structuredContent du standard MCP. Le champ des résultats de classification sémantique est label, accompagné de scheme ; ce n’est pas label_fr.

Intégration dans un site

Utiliser le client côté serveur pour conserver les clés privées. Un navigateur ne peut appeler le domaine distant que si CORS et la politique de contenu du site l’autorisent ; cette possibilité n’est pas activée universellement. Pour une interface publique, exposer une route de son propre serveur avec les contrôles et limites adaptés. Ne jamais placer un jeton payant dans du JavaScript livré au navigateur.

Qualité des résultats

Conserver les avertissements de source non officielle. Un droit absent ne signifie pas gratuité ; les taux conditionnels complets sont distincts du résumé. Les correspondances indiquent relation, requires_review, path, leurs sources et limites ; une relation approchée n’est pas une identité. Une recherche FINMA ne remplace pas une vérification auprès de la source.

Développement

Node 22 est utilisé par la CI. Les déclarations d’exécution restent Node 18+ ; utiliser une version encore maintenue.

npm ci
npm run typecheck
npm test
npm run build
npm pack --dry-run

Les tests utilisent des réponses fictives et couvrent délais, reprises, droits, quotas et erreurs. La CI construit les distributions ESM/CommonJS et contrôle les avis npm. Licence Apache-2.0.