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

@jate/cli

v0.3.1

Published

Outils de développement Jate — tester sa clé, créer des encaissements, relayer les webhooks en local

Readme

@jate/cli

Les outils de développement de Jate : vérifier sa clé, créer un encaissement de test, et relayer les webhooks vers sa machine sans rien déployer.

npx @jate/cli init          # ou installez : npm install -D @jate/cli

La configuration se lit dans cet ordre : arguments → variables d'environnement (JATE_API_BASE, JATE_SECRET_KEY, JATE_WEBHOOK_SECRET) → .jate.json à la racine du projet.

jate init [--base <url>] [--key <clé>]

Écrit .jate.json, vérifie la clé (GET /v1/me), affiche le mode (live ou bac à sable) et les commandes pour continuer.

.jate.json porte une clé live : init l'écrit en 0600 et ajoute la ligne à votre .gitignore si vous êtes dans un dépôt. Passer par JATE_SECRET_KEY reste préférable partout ailleurs que sur votre poste — et une clé donnée en --key reste dans l'historique du shell.

jate me [--json]

« Ma clé marche-t-elle, et sur quoi ? » — application, business, commission, portées, webhook configuré ou non, et le mode. Le mode s'affiche en toutes lettres : croire encaisser en direct alors qu'on parle au bac à sable d'Orange est l'erreur la plus coûteuse d'une intégration de paiement.

jate checkouts

# Créer une demande de paiement (--open l'ouvre chez le client)
jate checkouts create --amount 15000 --description "Test" --reference test_1 --open

# Relire un encaissement — la vérité avant de livrer
jate checkouts get jn71…

# La liste, filtrée et paginée
jate checkouts list --status paid --limit 50

create respecte l'idempotence par reference : relancez la même commande, vous récupérez la même demande (affichée « reprise »).

jate catalog — vendre vos objets depuis la vitrine

Le sens inverse du reste : le client achète dans Jate, et vous êtes prévenu pour activer. Encore faut-il que Jate sache ce que vous proposez.

# Ce que la vitrine affiche aujourd'hui, chaque ligne disant d'où elle vient
jate catalog list

# Publier — depuis un fichier, ou en tube derrière ce qui construit la liste
jate catalog publish objets.json
monscript-qui-lit-ma-base | jate catalog publish -

Construire la liste vous regarde ; l'envoyer, non. Lire vos formules dans votre base dépend de votre backend et aucun outil commun ne le fera. Envoyer, interpréter le résultat, relire pour vérifier et expliquer un refus est identique partout — c'est tout ce que fait cette commande. D'où le tube : votre moitié écrit du JSON, celle-ci le publie.

// Les deux formes sont acceptées : un tableau, ou ce que rend `catalog list`
[{ "id": "plan:42:yearly", "name": "Pro — 1 an", "price": 150000, "group": "Annuel" }]

Après l'import, la commande relit la vitrine et vous dit ce qui n'y est pas arrivé. Un import peut réussir sans que rien ne s'affiche : la vente du catalogue lié se ferme ailleurs, et sans cette vérification votre déploiement annoncerait « publié » sur une devanture vide.

⚠️ La liste est déclarative : ce qui n'y figure plus quitte la vitrine. Une liste vide retire donc tout, et c'est pourquoi elle exige --vider — le jour où votre script de construction échoue et rend [], on ne veut pas que la commande obéisse.

⚠️ Le catalogue n'a pas de bac à sable. Le mode test ne concerne que les encaissements : une clé jate_test_… réécrit la vitrine que voient les vrais clients. La commande affiche le mode avant d'écrire.

Un item_id_conflict veut dire qu'un service saisi à la main au tableau de bord porte déjà cet identifiant. La commande relit alors et nomme les lignes en cause — y compris celles qui sont retirées de la vitrine, qui réservent leur identifiant tout autant que les autres. Il faut les supprimer ou les détacher, pas seulement les retirer.

Exige la portée catalog:write. Les clés créées avant la vitrine ne l'ont pas.

jate listen — le relais de webhooks

# Le plus simple : pas d'adresse publique à déclarer
jate listen --tunnel --forward-to http://localhost:3000/jate-webhook

# Ou un relais local, exposé par un tunnel HTTPS de votre choix
jate listen --port 8787 --forward-to http://localhost:3000/jate-webhook

Il reçoit les notifications, vérifie la signature et affiche chaque événement :

✓ checkout.paid  jn71…  cmd_142  15 000 FCFA

Avec --forward-to, l'événement vérifié est renvoyé vers votre application en cours de développement, en-têtes Jate-Signature et Jate-Event-Id préservés.

Le secret (JATE_WEBHOOK_SECRET) est obligatoire : sans lui un corps ne peut pas être vérifié, et un corps non vérifié ne se traite pas. Le relais refuse alors de démarrer, plutôt que de rejeter chaque événement en 401 sans dire pourquoi.

En mode --tunnel, seuls les encaissements en mode test sont recopiés : le miroir aboutit sur une machine de développement, où les montants et références de paiements réels n'ont rien à faire. Développez avec une clé de test — avec une clé live, le tunnel reste muet et vous le dit au démarrage.

En mode relais, il faut une adresse HTTPS publique qui pointe chez vous, déclarée dans le tableau de bord. Le plus simple, sans compte :

npx cloudflared tunnel --url http://localhost:8787

Codes de sortie

0 succès, 1 erreur. Les erreurs d'API affichent leur code stable et le message ; les 429 et 503 indiquent le Retry-After.

Voir aussi

MIT