Prérequis
- Un compte Mellowtel et une clé de configuration (obtiens la tienne depuis le tableau de bord).
- Une application Electron avec accès au processus principal.
Installation
1. Configurer l’authentification npm
Crée un fichier.npmrc dans le répertoire racine de ton projet pour indiquer à npm le registre des packages GitHub de Mellowtel et authentifier l’installation :
YOUR_NPM_TOKEN par le jeton d’installation ci-dessous. Clique pour révéler, puis utilise l’icône de copie sur le bloc de code pour le copier dans ton presse-papiers.
Révéler le jeton d'installation
Révéler le jeton d'installation
2. Installer le package
Depuis la racine de ton projet, installe le SDK Electron :3. Ajouter à ton code
Dans ton fichier de processus principal Electron (typiquementmain.ts ou main.js), importe le SDK, instancie-le avec ta clé de configuration, demande le consentement de l’utilisateur, puis appelle init() pour démarrer le service.
Remplace
YOUR_CONFIGURATION_KEY par la clé de ton tableau de bord Mellowtel.new Mellowtel(configurationKey, options?)instancie le SDK. La seule option disponible aujourd’hui estdisableLogs, qui est par défaut àtrue. Mets-le àfalsependant l’intégration pour voir l’état de la connexion et l’activité des requêtes dans ton terminal.requestConsent(window, incentive)rend une boîte de message native Electron ancrée à laBrowserWindowque tu passes. Le deuxième argument est le titre principal du dialogue (par exemple,"Obtenez 3 mois gratuits"), affiché au-dessus d’une explication fixe de ce que fait Mellowtel. Cela se résout àtruesi l’utilisateur accepte,falsesi l’utilisateur refuse ou ferme le dialogue, etundefinedsi le consentement est déjà enregistré. Le SDK persiste automatiquement la décision d’opt-in, donc tu n’as pas besoin d’appeleroptIn()ensuite.init()ne génère une erreur que lorsqueconfigurationKeyest vide. Si l’utilisateur n’a pas opté, il enregistre et retourne silencieusement. Sinon, il ouvre un WebSocket vers le backend de Mellowtel. L’appel n’est pas bloquant pour l’interface utilisateur du renderer, donc les fenêtres restent réactives pendant que la connexion est établie.
Prévenir les interruptions de dialogue système (recommandé)
Le SDK est livré avec un assistant optionnel,setupMellowtelApp(), qui configure les indicateurs de ligne de commande Electron pour supprimer les dialogues système (popups de remplissage automatique, barres de traduction, invites d’authentification NTLM / Kerberos, intégration du gestionnaire de mots de passe, superpositions multimédias, dialogues de première exécution) qui interrompraient autrement tes utilisateurs lorsque les fenêtres cachées de Mellowtel traitent les requêtes en arrière-plan.
Appelle-le en haut de ton fichier de processus principal, avant app.whenReady(), et importe-le avec l’exportation par défaut de @mellowtel-inc/mellowtel-electron. Consulte le README en amont pour l’utilisation canonique.
Consentement de l’utilisateur
Tu as deux voies pour gérer le consentement :- Utiliser le dialogue natif intégré via
requestConsent(window, incentive). C’est le chemin le plus rapide et ce que montre l’extrait ci-dessus. Il rend undialog.showMessageBoxnatif Electron avec ton texte d’incitation comme titre et persiste automatiquement la décision de l’utilisateur. - Construire ta propre interface de consentement et piloter le SDK via
optIn(),optOut(), etgetOptInStatus(). Utilise cela si tu veux un branding personnalisé, des explications plus riches, ou une localisation au-delà de ce que le dialogue natif offre.
Ce que ton dialogue de consentement doit inclure
Expliquer ce que fait Mellowtel
Utilise un langage simple. Exemple : “Cette application utilise Mellowtel pour partager votre bande passante internet inutilisée. En retour, vous obtenez [avantage/fonctionnalité]. Vous pouvez vous désinscrire à tout moment dans les paramètres.”
Lier aux politiques
Inclure des liens vers les Conditions d’utilisation et la Politique de confidentialité.
Permettre aux utilisateurs de changer leur consentement plus tard
Mellowtel fournit un dialogue de paramètres intégré viashowConsentSettings(window). Il rend un dialogue natif avec des boutons Opt In / Opt Out qui correspondent à l’état actuel de l’utilisateur, et appelle en interne optIn() ou optOut() (plus la reconnexion du WebSocket lors de l’opt-in) lorsque l’utilisateur bascule. Connecte-le à un élément de menu ou un bouton de paramètres dans ton application pour que les utilisateurs puissent revoir leur choix.
Si tu préfères construire ton propre écran de paramètres, appelle getOptInStatus() pour lire l’état actuel et optIn() / optOut() pour le changer.
Référence des méthodes
La classeMellowtel expose les méthodes publiques suivantes. Toutes sont disponibles sur l’instance que tu as créée avec new Mellowtel(configurationKey, options?).
Cycle de vie
init(): Promise<void>démarre le service si l’utilisateur a opté, ou retourne silencieusement tôt sinon. Génère une erreur uniquement lorsque la clé de configuration est vide.requestConsent(window: BrowserWindow, incentive: string): Promise<boolean | undefined>affiche le dialogue de consentement natif intégré et persiste le résultat. Retournetrueen cas d’acceptation,falseen cas de refus ou de fermeture,undefinedsi le consentement a déjà été donné.showConsentSettings(window: BrowserWindow): Promise<void>affiche le dialogue de gestion du consentement intégré. Le SDK gère les transitions d’opt-in / opt-out en interne lorsque l’utilisateur bascule son choix.
optIn(): Promise<void>marque l’utilisateur comme ayant opté sans afficher de dialogue. Utilise ceci uniquement après avoir collecté le consentement via ton propre UI.optOut(): Promise<void>marque l’utilisateur comme ayant opté et ferme la connexion WebSocket active.getOptInStatus(): boolean | undefinedretourne l’état actuel de l’opt-in, ouundefinedsi l’utilisateur n’a jamais fait de choix.getNodeId(): stringretourne l’identifiant de nœud Mellowtel pour cette installation. Utile lors du dépôt de tickets de support.
electron-store et survivent aux redémarrages de l’application. Fais-les apparaître dans ton propre UI si tu veux montrer aux utilisateurs l’impact de leur opt-in.
getTotalRequestCount(): numberretourne le total des requêtes traitées depuis l’installation.getDailyRequestCount(): numberretourne le nombre de requêtes traitées aujourd’hui.getRequestCountForDate(date: string): numberretourne le compte pour une date spécifiqueYYYY-MM-DD.getDailyRequestsHistory(): { [date: string]: number }retourne chaque compte quotidien sous forme de carte.getRequestCountsInRange(startDate: string, endDate: string): { [date: string]: number }retourne les comptes pour une plage de dates.getRequestCounts(): { total: number; daily: number; dailyHistory: { [date: string]: number } }retourne les trois compteurs en un seul appel.
Arrêt et Cycle de Vie
Le SDK Electron ne s’enregistre pas ses propres gestionnairesbefore-quit ou will-quit. Lorsque ton processus Electron se termine, la connexion WebSocket en arrière-plan est détruite avec lui, et aucun nettoyage explicite n’est requis de ton côté.
Si tu veux déconnecter Mellowtel en cours de session (par exemple, lorsqu’un utilisateur bascule un paramètre “pause” dans ton application), appelle optOut(). Cela efface à la fois le drapeau d’opt-in et ferme la connexion active. Pour te reconnecter, appelle optIn() suivi de init().
Persistance du Consentement
L’état d’opt-in est stocké dans le chemin de configurationelectron-store par défaut de la plateforme :
- macOS :
~/Library/Application Support/<YourAppName>/config.json - Windows :
%APPDATA%\<YourAppName>\config.json - Linux :
~/.config/<YourAppName>/config.json
Dépannage
Erreur "Package not found" lors de l’installation
Erreur "Package not found" lors de l’installation
- Vérifie que
.npmrcest à la racine du projet, à côté de tonpackage.json. - Assure-toi que le jeton n’a pas d’espaces blancs au début ou à la fin.
- Vide le cache npm et réessaie en exécutant
npm cache clean --forcesuivi denpm install.
Le dialogue de consentement n'apparaît jamais
Le dialogue de consentement n'apparaît jamais
- Assure-toi d’appeler
requestConsentaprès queapp.whenReady()ait été résolu et avec une référenceBrowserWindowvalide et non détruite. - Si tu utilises
setupMellowtelApp(), vérifie qu’il est appelé avantapp.whenReady(), pas après.
"init() s’exécute sans erreurs mais rien ne se passe"
"init() s’exécute sans erreurs mais rien ne se passe"
C’est intentionnel.
init() retourne silencieusement tôt lorsque l’utilisateur n’a pas opté. Vérifie getOptInStatus() pour confirmer. Si cela retourne undefined ou false, exécute requestConsent d’abord. Note que le journal interne “User is not opted in” est avalé lorsque disableLogs est laissé à sa valeur par défaut (voir “Les journaux sont silencieux” ci-dessous), donc le terminal ne te donne aucun signal dans un sens ou dans l’autre jusqu’à ce que tu changes ce drapeau.Les journaux sont silencieux
Les journaux sont silencieux
L’option de constructeur
disableLogs est par défaut à true. Passe { disableLogs: false } comme deuxième argument au constructeur pendant l’intégration pour faire apparaître l’état de la connexion et l’activité des requêtes dans ton terminal. C’est aussi le moyen le plus rapide de distinguer un “not opted in” silencieux d’un échec de connexion réel.Temps estimé pour compléter : 10-15 minutes. Si tu as besoin d’aide ou si tu as des commentaires, contacte-nous à info@mellowtel.com ou rejoins notre communauté Discord.