sfrmobile-api
Version:
Client de l'API mobile SFR/RED
384 lines (383 loc) • 15.4 kB
JavaScript
;
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;