@pont-bj/store-convex
v0.1.0
Published
Stockage Convex pour Pont.
Maintainers
Readme
@pont-bj/store-convex
Stockage persistant de Pont sur Convex : paiements, retraits, remboursements, idempotence, livraisons de webhooks.
Installation dans votre projet
Copiez
convex/pontStore.tsdans le dossierconvex/de votre projet.Ajoutez les tables Pont à votre schéma :
// convex/schema.ts import { defineSchema } from "convex/server"; import { pontTables } from "@pont-bj/store-convex/convex/schema"; export default defineSchema({ ...vosTables, ...pontTables });Générez un secret d'au moins 32 caractères (
openssl rand -hex 32) et définissez-le des deux côtés :- Convex :
npx convex env set PONT_STORE_SECRET <secret> - Backend :
PONT_STORE_SECRET=<secret>etCONVEX_URL=<url du déploiement>
- Convex :
Branchez les stores :
import { ConvexHttpClient } from "convex/browser"; import { createConvexStores } from "@pont-bj/store-convex"; import { createPontFromEnv, WebhookRelay } from "@pont-bj/node"; const stores = createConvexStores({ client: new ConvexHttpClient(process.env.CONVEX_URL!), secret: process.env.PONT_STORE_SECRET!, }); export const relay = new WebhookRelay({ mode: "live", endpoints: [...], store: stores.deliveries }); export const pont = createPontFromEnv({ stores, onEvent: (event) => relay.enqueue(event) });Job planifié (réconciliation + livraison des webhooks) :
// app/api/pont/cron/route.ts export const { GET } = createCronRoute(pont, { relay, secret: process.env.CRON_SECRET });// vercel.json { "crons": [{ "path": "/api/pont/cron", "schedule": "*/5 * * * *" }] }
Sécurité
- Les fonctions sont publiques au sens Convex mais exigent
PONT_STORE_SECRETà chaque appel. Ne l'exposez jamais côté navigateur. - Aucune clé d'agrégateur n'est stockée : seulement les opérations (numéro du client en E.164, montants, statuts).
- Les enregistrements sont stockés en JSON pour accepter toutes les métadonnées du marchand.
- L'idempotence repose sur une mutation Convex (sérialisable) : deux requêtes concurrentes avec la même clé ne créent jamais deux paiements.
