UNPKG

sfrmobile-api

Version:
384 lines (383 loc) 15.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SfrMobile = exports.Environment = exports.Universe = void 0; const axios_1 = __importDefault(require("axios")); var Universe; (function (Universe) { Universe["SFR"] = "SFR"; Universe["RED"] = "RED"; })(Universe = exports.Universe || (exports.Universe = {})); var Environment; (function (Environment) { Environment["MOBILE"] = "MOBILE"; Environment["FIXE"] = "FIXE"; Environment["BOTH"] = "BOTH"; })(Environment = exports.Environment || (exports.Environment = {})); /** * Support non-officiel de l'API mobile de SFR/RED. * Les identifiants utilisés sont les mêmes que pour se connecter sur le site de l'opérateur. */ class SfrMobile { instance; /** * @param {string} casauthenticationtoken Jeton temporaire d'authentification * @example ```js * const { SfrMobile } = require('sfrmobile-api') * * SfrMobile.login(username, password).then(({ token }) => { * const user = new SfrMobile(token) * // Votre code * }) * ``` */ constructor(casauthenticationtoken) { this.instance = axios_1.default.create({ headers: { casauthenticationtoken } }); } /** * Obtenir un jeton d'authentification auprès du CAS de SFR * @param {string} username Identifiant du compte * @param {string} password Mot de passe du compte * @param {number} duration Durée de validité du jeton demandé en secondes * @param {Universe} universe SFR/RED * @return {Promise<LoginResponse>} * @static */ static async login(username, password, duration = 86400, universe = Universe.SFR) { return (await axios_1.default.get('https://www.sfr.fr/cas/services/rest/3.2/createToken.json', { params: { duration }, auth: { username, password }, headers: { secret: `Basic ${Buffer.from(universe === Universe.SFR ? 'SFRETMoiAndroidV1:windows1980' : 'REDETMoiAndroidV1:android2019').toString('base64')}` } })).data.createToken; } /** * Tester la validité d'un nom d'utilisateur * @param {string} username Nom d'utilisateur à tester * @param {Universe?} universe SFR/RED * @return {Promise<VerifyUsernameResponse>} * @static */ static async verifyUsername(username, universe = Universe.SFR) { return (await axios_1.default.get(`https://selfcare-webservices.sfr.fr/securite-compte-mid/login/smartphones/2.0/verification/${username}`, { auth: universe === Universe.SFR ? { username: 'SFRETMoiAndroidV1', password: 'windows1980' } : { username: 'REDETMoiAndroidV1', password: 'android2019' } })).data; } /** * Description du terminal associé à un IMEI * @param {string} imei Identifiant du terminal mobile * @return {Promise<InfosTerminalIMEI>} */ static async getTerminalInfoIMEI(imei) { return (await axios_1.default.get(`https://selfcare-webservices.sfr.fr/webservices/infosterminal/services/rest/1.0/infosterminal/${imei}`)).data; } /** * Description du terminal associé à un identifiant * @param {string} id Identifiant * @param {'BACARAT' | 'TAC'} type Type d'identifiant * @return {Promise<InfosTerminal>} */ static async getTerminalInfo(id, type) { return (await axios_1.default.get(`https://selfcare-webservices.sfr.fr/webservices/infosterminal/services/rest/1.0/terminal/${id}`, { params: { type } })).data; } /** * Description des terminaux associés à leur identifiant * @param {string[]} ids Identifiants * @param {'BACARAT' | 'TAC'} type Type d'identifiant * @return {Promise<InfosTerminal[]>} */ static async getTerminauxInfo(ids, type) { return (await axios_1.default.get(`https://selfcare-webservices.sfr.fr/webservices/infosterminal/services/rest/1.0/terminaux/${ids.join(',')}`, { params: { type } })).data; } /** * Consommation générale de la ligne * @param {string} line MSISDN de la ligne à sélectionner * @return {Promise<Consumption>} */ async getConso(line) { return (await this.instance({ url: `https://selfcare-webservices.sfr.fr/infoconso-mobile-mid/rest/smartphones/4.0/conso/${line}` })).data.reponse; } /** * Historique de la consommation sur le territoire national * @param line MSISDN de la ligne à sélectionner * @return {Promise<ConsumptionNationale>} */ async getConsoNationale(line) { return (await this.instance({ url: `https://selfcare-webservices.sfr.fr/infoconso-mobile-mid/rest/smartphones/4.0/historique/nationale/${line}` })).data.reponse; } /** * Historique de facturation d'une ligne mobile * @param {string} line MSISDN de la ligne mobile à sélectionner * @param {number} duration Nombre de périodes de facturation (6,12,18,24) * @return {Promise<Facturation>} */ async getFacturationMobile(line, duration = 6) { return (await this.instance({ url: `https://selfcare-webservices.sfr.fr/facture-mobile-ws/consultation/smartphones/2.5/${line}`, params: { duration } })).data.reponse; } /** * Télécharger la facture d'une ligne mobile * @param {string} line MSISDN de la ligne mobile à sélectionner * @param {string} numeroFacture Identifiant de la facture de la ligne mobile * @param {boolean} fadet Facture détaillée * @return {Promise<Stream>} */ async downloadFactureMobile(line, numeroFacture, fadet = false) { return (await this.instance({ url: `https://selfcare-webservices.sfr.fr/facture-mobile-ws/consultation/smartphones/2.5/${line}/sfr-facture${fadet ? '-detail-' : '-'}${numeroFacture}.pdf`, responseType: 'stream' })).data; } /** * Historique de facturation d'une ligne fixe * @param {string} line NDI de la ligne fixe * @param {number} duration Nombre de périodes de facturation (6,12,18,24) * @return {Promise<FacturationFixe>} */ async getFacturationFixe(line, duration = 6) { return (await this.instance({ url: `https://selfcare-webservices.sfr.fr/facture-fixe-mid/services/rest/2.0/consulterfactures/${line}`, params: { duration } })).data; } /** * Télécharger la facture d'une ligne fixe * @param {string} line NDI de la ligne fixe * @param {string} idFact Identifiant de la facture de la ligne fixe * @return {Promise<Stream>} */ async downloadFactureFixe(line, idFact) { return (await this.instance({ url: `https://espace-client.sfr.fr/webservices/infosclientfixe/services/rest/1.0/facture/${line}`, params: { idFact }, responseType: 'stream' })).data; } /** * Détails de la ligne fixe * @param {string|undefined} line NDI de la ligne fixe * @return {Promise<InfosClientFixe>} */ async getInfosClientFixe(line) { return (await this.instance({ url: `https://selfcare-webservices.sfr.fr/webservices/infosclientfixe/services/rest/1.0/infosclientfixe/${line ?? ''}` })).data; } /** * Fiche descriptive du compte de l'utilisateur courant * @return {Promise<FicheMonCompte>} */ async getFicheMonCompte() { const req = await this.instance({ url: `https://www.sfr.fr/webservices/userprofile/rest/moncompte/${Date.now()}` }); if (!req.headers['content-type'].includes('application/json')) throw new Error('Unauthorized'); return req.data.ficheMonCompte; } /** * Informations générales de la ligne * @param line MSISDN de la ligne à sélectionner * @return {Promise<Dashboard>} */ async getDashboard(line) { return (await this.instance({ url: `https://selfcare-webservices.sfr.fr/dashboard-mid/rest/smartphones/2.0/dashboard/${line}` })).data.reponse; } /** * Informations personnelles concernant la ligne * @param line MSISDN de la ligne à sélectionner * @return {Promise<InfoPersonnelles>} */ async getInfosPersonnelles(line) { return (await this.instance({ url: `https://espace-client.sfr.fr/services-admin/infopersonnelles/services/rest/2.0/${line}` })).data; } /** * Nombre de notifications de l'utilisateur * @return {Promise<NotificationsCount>} */ async getNotificationsCount() { return (await this.instance({ url: 'https://espace-client.sfr.fr/espace-client-mid/notification/1.0/count', params: { platform: 'smartphones' } })).data; } /** * Lister les notifications de l'utilisateur * @return {Promise<{notifications: Notification[]}>} */ async getNotifications() { return (await this.instance({ url: 'https://espace-client.sfr.fr/espace-client-mid/notification/1.0', params: { platform: 'smartphones' } })).data; } /** * Liste des équipements mis à disposition pour une ligne * @param {string} line MSISDN de la ligne à sélectionner * @param {Universe|string} universe SFR/RED * @return {Promise<Equipement>} */ async getEquipements(line, universe = Universe.SFR) { return (await this.instance({ url: 'https://www.sfr.fr/webservices/parc/v1/APPLI_MOBILE/equipement', params: { line, universe } })).data; } /** * Détail d'une option souscrite * @param {string} line MSISDN de la ligne à sélectionner * @param {Universe|string} universe SFR/RED * @param {Environment|string} environment Type de ligne * @param {string} option Identifiant de l'option * @return {Promise<OptionDetail>} */ async getOptionDetail(line, universe, environment, option) { return (await this.instance({ url: `https://www.sfr.fr/webservices/parc/v1/APPLI_MOBILE/option/${option}`, params: { line, environment, universe } })).data; } /** * Catalogue des catégories d'options disponibles pour une ligne * @param {string} line MSISDN de la ligne à sélectionner * @return {Promise<OptionsCatalog>} */ async getOptionsCatalog(line) { return (await this.instance({ url: 'https://www.sfr.fr/webservices/options/v1/APPLI_MOBILE/catalog', params: { line } })).data; } /** * Catalogue détaillé des catégories d'options disponibles pour une ligne * @param {string} line MSISDN de la ligne à sélectionner * @return {Promise<OptionsCatalogDetail>} */ async getOptionsCatalogDetail(line) { return (await this.instance({ url: 'https://www.sfr.fr/webservices/options/v1/APPLI_MOBILE/catalog/details', params: { line } })).data; } /** * Lister les options disponibles dans une catégorie * @param {string} line MSISDN de la ligne à sélectionner * @param {string} category Catégorie d'option * @return {Promise<OptionsList>} */ async getOptions(line, category) { return (await this.instance({ url: `https://www.sfr.fr/webservices/options/v1/APPLI_MOBILE/category/${category}`, params: { line } })).data; } /** * Obtenir la description complète de l'équipement * @param {string} line MSISDN de la ligne à sélectionner * @param {string} optionCode Identifiant de l'option d'équipement * @param {Universe|string} universe SFR/RED * @return {Promise<EquipementDetail>} */ async getEquipementDetail(line, optionCode, universe = Universe.SFR) { return (await this.instance({ url: `https://www.sfr.fr/webservices/options/v1/APPLI_MOBILE/equipement/${optionCode}`, params: { line, optionCode, universe } })).data; } /** * Détails de l'offre d'une ligne * @param {string} line MSISDN de la ligne à sélectionner * @param {Universe|string} universe SFR/RED * @param {Environment|string} environment Type de ligne * @return {Promise<Parc>} */ async getParc(line, universe = Universe.SFR, environment = Environment.MOBILE) { return (await this.instance({ url: 'https://www.sfr.fr/webservices/parc/v1/APPLI_MOBILE/parc', params: { line, environment, universe } })).data; } /** * Liste des achats et abonnements (hors forfait) sur la ligne * @param line MSISDN de la ligne à sélectionner * @return {Promise<AchatsAbonnements>} */ async getPaiementTiersAchatsAbonnements(line) { return (await this.instance({ url: `https://selfcare-webservices.sfr.fr/webservices/paiement-tiers/services/rest/smartphones/2.0/achats-abonnements/consulterV2/${line}` })).data.reponse; } /** * Droits d'achat sur la ligne (Stores, jeux, ...) * @param line MSISDN de la ligne à sélectionner * @return {Promise<OptionsAchat>} */ async getPaiementTiersOptionsAchat(line) { return (await this.instance({ url: `https://selfcare-webservices.sfr.fr/webservices/paiement-tiers/services/rest/smartphones/2.0/options-achat/consultation/${line}` })).data.reponse; } /** * Mettre à jour les droits d'achat sur la ligne * @param {string} selectedLine MSISDN de la ligne à sélectionner * @param {string} otp Code à usage unique obtenu avec getOTPSMS() * @param {OptionsAchat} data Droits d'achats à permuter */ async postPaiementTiersOptionsAchat(selectedLine, otp, data) { return (await this.instance({ method: 'POST', url: 'https://selfcare-webservices.sfr.fr/webservices/paiement-tiers/services/rest/smartphones/2.0/options-achat/modification', params: { platform: 'smartphones', selectedLine, typeActe: 'optionsAchats' }, headers: { 'Content-Type': 'application/json', code: otp }, data })).data; } /** * Obtenir un code à usage unique pour effectuer une opération * @param line MSISDN de la ligne à sélectionner * @return {Promise<OTPSMSResponse>} */ async getOTPSMS(line) { return (await this.instance({ url: `https://espace-client.sfr.fr/services-securite/rest/1.0/checkUrl/${line}` })).data; } /** * Informations sur les remises Multi-Pack * @param line MSISDN de la ligne à sélectionner * @return {Promise<OffreAmes>} */ async getOffreAMES(line) { return (await this.instance({ url: 'https://www.sfr.fr/webservices/selfcare/offre-ws/rest/public/v41/ames', params: { ligne: line } })).data; } } exports.SfrMobile = SfrMobile;