Comparing version 2.0.2 to 2.1.0
import { Session } from '../lib/index.js'; | ||
import * as store from './store.js'; | ||
import chalk from 'chalk'; | ||
import ora from 'ora'; | ||
export function auth(token) { | ||
if (!token) { | ||
console.error(chalk.yellow("L'authentification nécessite un token:\n") + | ||
chalk.cyan(' --token ou -t\n') + | ||
chalk.green('Pour en obtenir un, rendez-vous sur https://conso.boris.sh')); | ||
ora().fail("L'authentification nécessite un token"); | ||
ora().info('Pour en obtenir un, rendez-vous sur https://conso.boris.sh'); | ||
throw new Error(); | ||
@@ -15,7 +14,9 @@ } | ||
catch (e) { | ||
console.error(chalk.yellow(e.message)); | ||
if (e.message) { | ||
ora().fail(e.message); | ||
} | ||
throw new Error(); | ||
} | ||
store.saveToken(token); | ||
console.info(chalk.green('Votre token a été sauvegardé avec succès')); | ||
ora().succeed('Token sauvegardé avec succès'); | ||
} | ||
@@ -25,5 +26,7 @@ export function getSession({ token, prm }) { | ||
if (!token) { | ||
throw new Error("Vous n'avez aucun token enregistré.\nLancez 'linky auth' pour vous connecter ou renseignez le paramètre --token"); | ||
ora().fail("Vous n'avez aucun token enregistré"); | ||
ora().info("Lancez 'linky auth' pour vous connecter ou renseignez le paramètre --token"); | ||
throw new Error(); | ||
} | ||
return new Session(token, prm); | ||
} |
@@ -5,10 +5,11 @@ import meow from 'meow'; | ||
import chalk from 'chalk'; | ||
import ora from 'ora'; | ||
import updateNotifier from 'update-notifier'; | ||
import dayjs from 'dayjs'; | ||
import pkg from '../package.json' assert { type: 'json' }; | ||
import { pkg } from './pkg.js'; | ||
function exit(e) { | ||
if (e.message) { | ||
console.error(chalk.yellow(e.message)); | ||
ora().fail(e.message); | ||
} | ||
process.exit(1); | ||
process.exitCode = 1; | ||
} | ||
@@ -28,3 +29,3 @@ const mainHelp = ` | ||
linky auth: | ||
--token -t Token | ||
--token -t Token récupéré sur https://conso.boris.sh | ||
@@ -31,0 +32,0 @@ linky (daily|loadcurve|maxpower|dailyprod|loadcurveprod): |
@@ -8,3 +8,3 @@ import { getSession } from './auth.js'; | ||
import { Session } from '../lib/index.js'; | ||
import pkg from '../package.json' assert { type: 'json' }; | ||
import { pkg } from './pkg.js'; | ||
export class MeteringHandler { | ||
@@ -35,20 +35,20 @@ constructor(flags) { | ||
.then(async (response) => { | ||
spinner.succeed(); | ||
const rendered = render(this.flags.format, !this.flags.output, response); | ||
if (this.flags.output) { | ||
try { | ||
await mkdirp(path.dirname(this.flags.output)); | ||
const chalkLevel = chalk.level; | ||
chalk.level = 0; | ||
fs.writeFileSync(this.flags.output, render(this.flags.format, response)); | ||
chalk.level = chalkLevel; | ||
fs.writeFileSync(this.flags.output, rendered); | ||
} | ||
catch (e) { | ||
throw new Error(`Impossible d'écrire dans ${this.flags.output}:\n${e.message}`); | ||
ora().fail(`Impossible d'écrire dans ${this.flags.output}`); | ||
if (e.message) { | ||
ora().fail('Erreur : ' + e.message); | ||
} | ||
throw new Error(); | ||
} | ||
} | ||
spinner.succeed(); | ||
if (this.flags.output) { | ||
ora({ isSilent: this.flags.quiet }).succeed(`Résultats sauvegardés dans ${this.flags.output}`); | ||
} | ||
if (!this.flags.output) { | ||
console.info('\n' + render(this.flags.format, response)); | ||
else { | ||
console.info('\n' + rendered); | ||
} | ||
@@ -58,8 +58,10 @@ }) | ||
spinner.stop(); | ||
ora(e.message).fail(); | ||
if (e.message) { | ||
ora().fail(e.message); | ||
} | ||
if (e.code) { | ||
ora('Code: ' + e.code).fail(); | ||
ora().fail('Code : ' + e.code); | ||
} | ||
if (e.response) { | ||
ora('Réponse: ' + JSON.stringify(e.response, null, 4)).fail(); | ||
ora().fail('Réponse : ' + JSON.stringify(e.response, null, 4)); | ||
} | ||
@@ -70,3 +72,3 @@ throw new Error(); | ||
} | ||
function render(format, response) { | ||
function render(format, color, response) { | ||
switch (format) { | ||
@@ -82,3 +84,7 @@ case 'json': | ||
const chartLength = 30; | ||
return ( | ||
const chalkLevel = chalk.level; | ||
if (!color) { | ||
chalk.level = 0; | ||
} | ||
const result = | ||
// Headers | ||
@@ -98,8 +104,11 @@ [ | ||
chalk.cyan('■'.repeat(maxValue && line.value ? Math.ceil((chartLength * +line.value) / maxValue) : 0))) | ||
.join('\n')); | ||
.join('\n'); | ||
chalk.level = chalkLevel; | ||
return result; | ||
} | ||
default: | ||
ora(`Le format "${format}" est invalide. Formats acceptés: "pretty", "json", "csv".`).fail(); | ||
return ''; | ||
ora().fail(`Le format "${format}" est invalide`); | ||
ora().info(`Formats acceptés: "pretty", "json", "csv"`); | ||
throw new Error(); | ||
} | ||
} |
import Conf from 'conf'; | ||
import pkg from '../package.json' assert { type: 'json' }; | ||
import { pkg } from './pkg.js'; | ||
const TOKEN = 'token'; | ||
@@ -4,0 +4,0 @@ const store = new Conf({ |
{ | ||
"name": "linky", | ||
"description": "Easily retrieve your Linky power consumption", | ||
"version": "2.0.2", | ||
"version": "2.1.0", | ||
"author": "bokub", | ||
@@ -20,4 +20,4 @@ "license": "GPL-3.0-or-later", | ||
"scripts": { | ||
"test": "NODE_NO_WARNINGS=1 NODE_OPTIONS=--experimental-vm-modules jest", | ||
"test:coverage": "c8 npm run test && c8 report --reporter=text-lcov > coverage.lcov", | ||
"test": "vitest run", | ||
"coverage": "vitest run --coverage", | ||
"generate-fixtures": "RECORDING=1 node --experimental-vm-modules --loader=ts-node/esm test/fixtures/generate.ts", | ||
@@ -44,3 +44,2 @@ "prepare": "husky install", | ||
"@bokub/prettier-config": "^2.1.0", | ||
"@types/jest": "^29.5.1", | ||
"@types/jsonwebtoken": "^9.0.2", | ||
@@ -51,3 +50,3 @@ "@types/qs": "^6.9.7", | ||
"@typescript-eslint/parser": "^5.59.2", | ||
"c8": "^7.13.0", | ||
"@vitest/coverage-v8": "^2.1.0", | ||
"dotenv": "^16.0.3", | ||
@@ -59,9 +58,8 @@ "eslint": "^7.32.0", | ||
"husky": "^8.0.3", | ||
"jest": "^29.5.0", | ||
"lint-staged": "^13.2.2", | ||
"nock": "^13.3.1", | ||
"prettier": "^2.8.8", | ||
"ts-jest": "^29.1.0", | ||
"ts-node": "^10.9.1", | ||
"typescript": "^5.0.4" | ||
"typescript": "^5.0.4", | ||
"vitest": "^2.1.0" | ||
}, | ||
@@ -68,0 +66,0 @@ "repository": "https://github.com/bokub/linky", |
# Linky | ||
[![Version](https://runkit.io/bokub/npm-version/branches/master/linky?style=flat)](https://www.npmjs.com/package/linky) | ||
[![Version](https://gradgen.bokub.workers.dev/npm/v/linky?gradient=b65cff,11cbfa&style=flat&label=version)](https://www.npmjs.com/package/linky) | ||
[![Build Status](https://flat.badgen.net/github/checks/bokub/linky?label=tests)](https://github.com/bokub/linky/actions/workflows/run.yml?query=branch%3Amaster) | ||
[![Codecov](https://flat.badgen.net/codecov/c/github/bokub/linky/master)](https://codecov.io/gh/bokub/linky) | ||
[![Codecov](https://img.shields.io/codecov/c/github/bokub/linky?style=flat-square)](https://codecov.io/gh/bokub/linky) | ||
[![Downloads](https://flat.badgen.net/npm/dy/linky?color=FF9800)](https://www.npmjs.com/package/linky) | ||
[![Node version](https://flat.badgen.net/badge/Node.js/>=%2016/blue)](https://github.com/bokub/prettier-config) | ||
[![Code style](https://flat.badgen.net/badge/code%20style/prettier/ff69b4)](https://github.com/bokub/prettier-config) | ||
@@ -12,9 +13,7 @@ | ||
<p align="center"> | ||
<img src="https://user-images.githubusercontent.com/17952318/93326183-b5ba2400-f818-11ea-85cf-c278a1e32b58.gif" alt="Screenshot"> | ||
<img src="https://github.com/bokub/linky/assets/17952318/15aa5983-6c56-4ef0-b2e2-c663bf7f7087" alt="Linky CLI"> | ||
</p> | ||
### Attention : Cette documentation est valable uniquement pour la version 2 du module. La documentation pour la version 1 est toujours disponible sur la [branche v1](https://github.com/bokub/linky/tree/v1#readme) | ||
Ce module vous permet de récupérer votre consommation et production électrique Linky via le service [Conso API](https://conso.boris.sh/) | ||
Ce module vous permet de récupérer votre consommation et production électrique Linky via les API _"Token V3"_ et _"Metering Data V5"_ d'Enedis | ||
Il peut s'utiliser de 2 façons : | ||
@@ -31,4 +30,8 @@ | ||
1. Installez [Node.js](https://nodejs.org/en/download) sur votre machine | ||
2. Installez `linky` avec npm: | ||
1. Installez [Node.js](https://nodejs.org/fr/download) sur votre machine. La version minimale supportée est Node 16. | ||
- [Instructions Debian, Ubuntu & Mint](https://github.com/nodesource/distributions#installation-instructions) | ||
- [Installateur Windows](https://nodejs.org/dist/v18.16.0/node-v18.16.0-x86.msi) | ||
- [Installateur MacOS](https://nodejs.org/dist/v18.16.0/node-v18.16.0.pkg) | ||
2. Ouvrez un terminal | ||
3. Installez `linky` avec `npm`: | ||
@@ -43,3 +46,3 @@ ```bash | ||
Avant toute chose, il faudra vous connecter à votre espace client Enedis et leur donner l'autorisation de partager vos données avec une application extérieure. | ||
Avant toute chose, il faudra vous connecter à votre espace client Enedis et leur donner l'autorisation de partager vos données avec une application extérieure | ||
@@ -56,3 +59,3 @@ Rendez-vous sur [conso.boris.sh](https://conso.boris.sh) pour donner votre accord et récupérer un token | ||
Une fois votre token sauvegardé, vous pourrez récupérer votre consommation quotidienne, votre courbe de charge (consommation par demi-heure), et votre consommation maximale par jour. | ||
Une fois votre token sauvegardé, vous pourrez récupérer votre consommation quotidienne, votre courbe de charge (consommation par demi-heure), et votre consommation maximale par jour | ||
@@ -70,3 +73,3 @@ ```bash | ||
Si vous produisez de l'électricité, vous pouvez également récupérer votre production quotidienne et votre courbe de charge (production par demi-heure). | ||
Si vous produisez de l'électricité, vous pouvez également récupérer votre production quotidienne et votre courbe de charge (production par demi-heure) | ||
@@ -83,3 +86,3 @@ ```bash | ||
En l'absence des paramètres `--start` et `--end`, vous récupérez la consommation / production / puissance de la veille. | ||
En l'absence des paramètres `--start` et `--end`, vous récupérez la consommation / production / puissance de la veille | ||
@@ -86,0 +89,0 @@ ```bash |
Sorry, the diff of this file is not supported yet
19
16
491
269
63812