Skip to main content
Intègre Mellowtel dans ton application Electron multiplateforme pour permettre aux utilisateurs de partager leur bande passante internet inutilisée en échange de récompenses ou de fonctionnalités premium. Le SDK Electron fonctionne partout où Electron fonctionne (macOS, Windows et Linux).
Le consentement de l’utilisateur est obligatoire. Le SDK ne fonctionne que lorsque l’utilisateur a explicitement donné son accord. init() retourne silencieusement tôt lorsqu’il n’y a pas de consentement enregistré, donc si tu vois le SDK démarrer sans erreurs mais ne jamais envoyer de trafic, la raison la plus probable est que l’utilisateur n’a pas encore donné son accord.

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 :
Remplace 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.

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 (typiquement main.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.
Ce que fait chaque appel :
  • new Mellowtel(configurationKey, options?) instancie le SDK. La seule option disponible aujourd’hui est disableLogs, qui est par défaut à true. Mets-le à false pendant 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 à la BrowserWindow que 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 à true si l’utilisateur accepte, false si l’utilisateur refuse ou ferme le dialogue, et undefined si le consentement est déjà enregistré. Le SDK persiste automatiquement la décision d’opt-in, donc tu n’as pas besoin d’appeler optIn() ensuite.
  • init() ne génère une erreur que lorsque configurationKey est 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

Afficher un dialogue de consentement est obligatoire. Tu dois laisser les utilisateurs opter explicitement avant d’appeler init(), et tu dois fournir un moyen pour eux de gérer leur état d’opt-in à tout moment.
Tu as deux voies pour gérer le consentement :
  1. 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 un dialog.showMessageBox natif Electron avec ton texte d’incitation comme titre et persiste automatiquement la décision de l’utilisateur.
  2. Construire ta propre interface de consentement et piloter le SDK via optIn(), optOut(), et getOptInStatus(). 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

1

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.”
2

Donner aux utilisateurs un choix clair

Inclure des options distinctes Accepter et Refuser.
3

Lier aux politiques

Permettre aux utilisateurs de changer leur consentement plus tard

Mellowtel fournit un dialogue de paramètres intégré via showConsentSettings(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 classe Mellowtel 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. Retourne true en cas d’acceptation, false en cas de refus ou de fermeture, undefined si 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.
Contrôle manuel de l’opt-in
  • 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 | undefined retourne l’état actuel de l’opt-in, ou undefined si l’utilisateur n’a jamais fait de choix.
  • getNodeId(): string retourne l’identifiant de nœud Mellowtel pour cette installation. Utile lors du dépôt de tickets de support.
Compteurs de requêtes Les comptes de requêtes sont persistés localement via 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(): number retourne le total des requêtes traitées depuis l’installation.
  • getDailyRequestCount(): number retourne le nombre de requêtes traitées aujourd’hui.
  • getRequestCountForDate(date: string): number retourne le compte pour une date spécifique YYYY-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 gestionnaires before-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 configuration electron-store par défaut de la plateforme :
  • macOS : ~/Library/Application Support/<YourAppName>/config.json
  • Windows : %APPDATA%\<YourAppName>\config.json
  • Linux : ~/.config/<YourAppName>/config.json
L’état survit aux mises à jour de l’application. Désinstaller ton application ne le supprimera pas automatiquement à moins que ton désinstalleur ne supprime explicitement le répertoire de configuration de l’application.

Dépannage

  1. Vérifie que .npmrc est à la racine du projet, à côté de ton package.json.
  2. Assure-toi que le jeton n’a pas d’espaces blancs au début ou à la fin.
  3. Vide le cache npm et réessaie en exécutant npm cache clean --force suivi de npm install.
  1. Vérifie que le jeton dans .npmrc est correct et actif. Si tu n’es pas sûr, demande un nouveau jeton à info@mellowtel.com.
  2. Confirme que la ligne @mellowtel-inc:registry est présente et pointe vers https://npm.pkg.github.com/.
  1. Assure-toi d’appeler requestConsent après que app.whenReady() ait été résolu et avec une référence BrowserWindow valide et non détruite.
  2. Si tu utilises setupMellowtelApp(), vérifie qu’il est appelé avant app.whenReady(), pas après.
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.
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.