Papillon ED Core - Documentation
papillon-ed-core
est le module qui permet la connexion entre Ecoledirecte et Papillon.
Il contient des morceaux de code réutilisable qui permettent de récupérer les données scolaires. C'est l'intermédiaire entre Ecoledirecte et IndexDataInstance
, qui permet l'affichage des données dans Papillon.
Github
Le répo du module est disponible sur Github .
EcoleDirecte est une marque déposée de la société Aplim . Papillon n'est pas affilié à EcoleDirecte et à Aplim.
Sommaire
Guide de l'utilisateur
Ce guide vous permet de comprendre comment fonctionne ce module et comment vous pouvez l'utiliser.
Ce projet est développé en Typescript, il est compatible avec toutes les technologies Javascript et fonctionne avec npm 18 !
Installation
Node Package Manager
Le module est disponible sur npmjs.com sous le nom de @papillonapp/ed-core
.
Utilisation
Ce module utilise des fonctions asynchrones pour fonctionner.
1. Importer le module
2. Initialiser le module
3. S'authentifier
Merci de vous référer à la section authentification.
[TIP] Pour générer un UUIDv4, vous pouvez utiliser le module
uuid
, par défaut installé:
4. Visitez la documentation
Désormais connecté, il vous faudra lire la documentation des références pour comprendre et utiliser chaque fonctionnalité.
Des exemples sont aussi écrits dans examples/
. Ajoutez vos identifiants dans examples/login.ts
et tester les fonctionnalités avec ts-node examples/<fichier>.ts
Il existe aussi des documentations plus précises sur certaines fonctionnalités : - Commandes - Téléchargements
Authentification
Cette section est dédiée à l'authentification, et vous permettra de comprendre plus précisément les différents modes d'authentification et leurs différences...
L'authentification est accessible ainsi :
Vous pouvez vous authentifier de plusieurs manières :
- Classique; équivalent à une connexion depuis un navigateur. (abandonné)
- Mobile ou permanante; équivalent à une authentification depuis l'application mobile Ecoledirecte.
- Token; déconseillée, vous vous connectez avec un token Ecoledirecte, vous devez donc assurer le renouvellement de celui-ci vous-même.
[!CAUTION] Authentification à facteurs ! Depuis Avril 2024, Ecoledirecte a mis en place une authentification à facteurs, avec un QCM pour sécuriser les connexions... Veuillez lire À double facteurs
Permanante
Depuis la version 0.2.7
, la connexion permanante, permettant de renouveler le token est utilisée par défaut par ed-core
.
Elle correspond à une authentification depuis l'application Ecoledirecte mobile. Vous aurez besoin de générer un UUIDv4, qui sera l'identifiant unique de votre "session" et permettra le renouvellement du token.
import { v4 as uuidv4 } from 'uuid';
import { EDCore } from "@papillonapp/ed-core";
const uuid = uuidv4()
await ED.auth.login("username", "password", uuid)
Quand une erreur de code 12
apparait, c'est que la double authentification est nécessaire.
Token
L'authentification par token permet de se connecter à Ecoledirecte avec un token généré par vos soins.
L'identifiant de l'utilisateur est nécessaire.
À double facteurs
Quand une erreur de code 12
est renvoyée, vous devez répondre à des questions pour vous authentifier...
Il est conseillé de lire examples/login.ts
pour voir une implémentation de cette double authentification
- Récupérer le jeton de la double authentification
- Récupérer le questionnaire
- Envoyer la réponse
- S'authentifier avec les facteurs
Commandes
[!WARNING] Le module de commande est encore instable !
Ce module est accessible ainsi :
Une commande s'effectue ainsi: 1. Séléction du point de passage 2. Séléction des articles et envoi de la commande
-
Pour récupérer les anciennes commandes et les "points de passage" (lieux ; cafétéria, food truck);
Renvoie ordersResData -
Pour initier une commande (correspond séléction d'un point de passage);
Renvoie startOrderResData -
Pour envoyer, passer une commande;
Renvoie orderPlacedResDataconst articles = [ { code: "BEI-POM", libelle: "Beignet Pomme", description: "string;", estFormule: false, etat: 0, img: "", montant: 1.5, quantite: 1, quantiteMax: 3, estObligatoire: false, ordre: 1 } ] ED.orders.order(articles, "12:00", "2024-01-01", 1)
-
Pour supprimer une commande;
Renvoie une réponse vide
Téléchargements
À plusieurs endroits vous pourrez être amené à devoir télécharger des documents (exemple: documents administratifs renvoyés par ED.documents
).
Le module ED.downloads
vous permet donc de récupérer des objets de ces documents:
1235
Exemple avec une année:
Ceci renvoie le blob du document administratif de l'année2022-2023
à l'identifiant 1235
Exemple avec base64:
Ceci renvoie le fichier sous format base64 (pour le técharger par exemple)Voici tous les types de documents supportés:
type fileType = "CLOUD" | "FICHIER_CDT" | "PIECE_JOINTE" | "FICHIER_MENU_RESTAURATION" | "ADMINISTRATIF";
fileId
sera le chemin complet du document dans le cloud.
- "FICHIER_CDT"; télécharger un fichier du Cahier De Texte.
- "PIECE_JOINTE"; télécharger une pièce jointe (si le message provient d'une année antérieur, l'argument year
devra contenir l'année).
- "FICHIER_MENU_RESTAURATION"; télécharger un menu (voir Menu
dans getCantine.ts
).
- "ADMINISTRATIF"; télécharger un fichier administratif (si le document provient d'une année antérieur, l'argument year
devra contenir l'année).
Références
[!NOTE] Des exemples sont disponibles dans
exemples/
Les références sont données ainsi:
Propriété | Type | Commentaire |
---|---|---|
nom | undefined \| string |
- Certains types ont des liens hypertextes vers la référence du type.
- Certains liens renvoient vers le fichier de définition du type.
- Le signe ? désigne que la valeur peut être non-définie !
- Si la propriété est une fonction, le type est
(arg: type) => type
. - Si la fonction est
async
, elle renvoie unePromise<type>
EDCore
La classe principale du module.
Propriété | Type | Commentaire |
---|---|---|
homeworks | GetHomeworks |
Gestion des devoirs |
grades | GetGrades |
Gestion des notes |
timetable | GetTimetable |
Gestion de l'EDT |
schoolLife | GetSchoolLife |
Gestion de la vie scolaire |
cantine | GetCantine |
Gestion de la cantine |
digitalManuals | GetDigitalManuals |
Gestion des manuels numériques |
messaging | GetMessaging |
Gestion des messages |
timeline | GetTimeline |
Gestion des timeline |
documents | GetDocuments |
Gestion des document administratifs |
forms | GetForms |
Gestion des formulaires |
workspaces | GetWorkspaces |
Gestion des espaces de travail |
communicationBook | GetCommunicationBook |
Gestion du carnet de correspondance |
cloud | GetCloud |
Gestion du cloud |
orders | GetOrders |
Gestion des commandes |
esidoc | GetOrders |
Gestion du module Esidoc |
downloads | GetDownloads |
Gestion des téléchargements |
auth | Auth |
Gestion de l'authentification |
request | Request |
Gestion du requêtage |
_token | string | undefined |
Token |
isLoggedIn | boolean |
L'utilisateur est-il connecté |
settings? | accountParameters | undefined |
Paramètres de l'utilisateur |
student | account | BlankAccount |
Profil de l'utilisateur |
school? | EstablishmentInfo |
Informations de l'établissement |
modules? | Array< accountModule )> |
Modules activés |
Ouvrir src/session.ts
GetHomeworks
La classe de gestion des devoirs.
Propriété | Type | Commentaire |
---|---|---|
fetch() | async () => textbookResData |
Récupérer les devoirs |
getByDay() | async (day: string, removeHTMLTags: boolean) => textbookResDateData |
Récupérer les devoirs du jour day (day est formaté YYYY-MM-DD ). removeHTMLTags permet de renvoyer le contenu des devoirs sans balises HTML. |
Ouvrir src/fetch/getHomeworks.ts
GetGrades
La classe de gestion des notes.
Propriété | Type | Commentaire |
---|---|---|
fetch() | async () => gradesResData |
Récupérer les notes |
Ouvrir src/fetch/getGrades.ts
GetTimetable
La classe de gestion de l'EDT. Les jours sont formatés YYYY-MM-DD
.
Propriété | Type | Commentaire |
---|---|---|
fetchByDay() | async (day: string) => timetableCourseList |
Récupérer l'EDT du jour day |
fetchByDate() | async (starteDate: string, endDate: string) => timetableCourseList |
Récupérer l'EDT des jours startDate à endDate |
Ouvrir src/fetch/getTimetable.ts
GetSchoolLife
La classe de gestion de la vie scolaire
Propriété | Type | Commentaire |
---|---|---|
fetch() | async () => schoolLifeRes |
Récupérer tous les évenements de vie scolaire |
Ouvrir src/fetch/getSchoolLife.ts
GetCantine
La classe de gestion des modules de cantine.
Propriété | Type | Commentaire |
---|---|---|
getBarcode() | () => string |
Renvoie la valeur du code-barre du badge |
getReservations() | () => modStudReservations.params |
Renvoie les paramètres module de réservation |
fetchSchoolMenu() | () => Array< Menu > |
Renvoie la liste des menus |
Ouvrir src/fetch/getCantine.ts
GetDigitalManuals
La classe de gestion des manuels scolaires.
Propriété | Type | Commentaire |
---|---|---|
fetch() | async () => manualsRes |
Récupérer les manuels scolaires |
Ouvrir src/fetch/getDigitalManuals.ts
GetMessaging
La classe de gestion de la messagerie.
Propriété | Type | Commentaire |
---|---|---|
fetchReceivedMessages() | async () => mailboxResData |
Récupérer les messages reçus (data.messages.received sera rempli, les autres vides) |
fetchSentMessages() | async () => mailboxResData |
Récupérer les messages envoyés (data.messages.sent sera rempli, les autres vides) |
Ouvrir src/fetch/getMessaging.ts
GetTimeline
La classe de gestion des timeline.
Propriété | Type | Commentaire |
---|---|---|
fetch() | async () => Array< studTlElem > |
Récupérer la timeline personnelle. |
fetchCommonTimeline() | async () => studCommonTlResData |
Récupérer la timeline commune |
Ouvrir src/fetch/getTimeline.ts
GetDocuments
La classe de gestion des documents administratifs.
[!CAUTION] Non testé, si vous pouvez tester, merci de nous contacter
Propriété | Type | Commentaire |
---|---|---|
fetch() | async (archive: string) => studentDocsResData |
Récupérer les documents administratifs. archive est une année scolaire YYYY-YYY (eg. 2023-2024 ). |
Ouvrir src/fetch/getDocuments.ts
GetForms
La classe de gestion des formulaires.
[!CAUTION] Non testé, si vous pouvez tester, merci de nous contacter
Propriété | Type | Commentaire |
---|---|---|
fetch() | async (annee: string) => Array< form > |
Récupérer les formulaires de l'année. annee est une année scolaire YYYY-YYY (eg. 2023-2024 ). |
Ouvrir src/fetch/getForms.ts
GetWorkspaces
La classe de gestion des espaces de travail.
[!CAUTION] Non testé, si vous pouvez tester, merci de nous contacter
Propriété | Type | Commentaire |
---|---|---|
fetch() | async () => Array< workspace > |
Récupérer les espaces de travail. |
get() | async (id: string) => workspace |
Récupérer l'espace de travail avec l'identifiant id . |
getDiary() | async (espaceId: string) => diaryResData |
Récupérer l'agenda (les évènements) de l'espace de travail avec l'identifiant espaceId . |
getTopics() | async (espaceId: string) => topicsResData |
Récupérer les discussions de l'espace de travail avec l'identifiant espaceId . |
getMembers() | async (espaceId: string) => workspace |
Récupérer les membres de l'espace de travail avec l'identifiant espaceId . |
join() | async (espace: workspace ) => membersResData |
Rejoindre l'espace de travail espace . |
leave() | async (espace: number) => emptyRes |
Quitter l'espace de travail avec l'identifiant id . |
Ouvrir src/fetch/getWorkspaces.ts
GetCommunicationBook
La classe de gestion du carnet de liaison.
[!CAUTION] Non testé, si vous pouvez tester, merci de nous contacter
Propriété | Type | Commentaire |
---|---|---|
fetch() | async () => Array< communicationBookResData > |
Récupérer les événements du carnet de liaison. |
Ouvrir src/fetch/getCommunicationBook.ts
GetCloud
La classe de gestion du cloud.
[!CAUTION] Non testé, si vous pouvez tester, merci de nous contacter
Propriété | Type | Commentaire |
---|---|---|
fetch() | async () => Array< cloudResFolder > |
Récupérer les fichiers du cloud. |
Ouvrir src/fetch/getCloud.ts
GetOrders
La classe de gestion des commandes.
[!WARNING] Module instable.
Point de passage signifie le lieux où la commande est passée (cafétéria par exemple). Il possède un id
.
Propriété | Type | Commentaire |
---|---|---|
isEnabled() | () => boolean |
Permet de savoir si le module est activé. |
fetchOrders() | async () => ordersResData \| undefined |
Récupérer les points de passages et commandes passées. |
startOrder() | async (placeId: number, date: string) => startOrderResData |
Récupérer les informations du point de passage placeId à la date date . |
order() | async (articles: Array< detailedArticle >, hour: string, date: string, placeId: number) => orderPlacedResData |
Passe une commande des article articles , pour date , heure au point de passage placeId . |
deleteOrder() | async (orderId: number) => emptyRes |
Annule la commande à l'identifiant orderId . |
Ouvrir src/fetch/getOrders.ts
GetEsidoc
La classe de gestion du module Esidoc.
Propriété | Type | Commentaire |
---|---|---|
isEnabled() | () => boolean |
Permet de savoir si le module est activé. |
getParams() | async () => modStudEsidoc.params.tabParams \| undefined |
Récupérer les paramètres d'Esidoc. |
Ouvrir src/fetch/getEsidoc.ts
GetDownloads
La classe de gestion des téléchargements.
fileType
type fileType = "CLOUD" | "FICHIER_CDT" | "PIECE_JOINTE" | "FICHIER_MENU_RESTAURATION" | "ADMINISTRATIF";
Propriété | Type | Commentaire |
---|---|---|
getFileBlob() | async (fileId: number \| string, fileType: fileType ) => Blob |
Récupère le blob du fichier fileId (voir Télécharger des fichiers). |
getFileBase64() | async (fileId: number \| string, fileType: fileType ) => string |
Récupère le fichier fileId (voir Télécharger des fichiers) sous forme base64. |
Ouvrir src/fetch/getDownloads.ts
Auth
La classe de gestion de l'authentification et de l'utilisateur.
Voir s'authentifier avec ed-core
Propriété | Type | Commentaire |
---|---|---|
login() | async (username: string, password: string, uuid: string, fa?: object) => void |
Se connecte à Ecoledirecte avec des identifiants. uuid est un UUIDv4 utilisé pour reconnaitre l'appareil et regénérger un token. Lisez le guide pour savoir comment le générer. fa est l'objet contenant les facteurs d'authentification de resolve2FA() |
renewToken() | async (username: string, uuid: string, accessToken: string) => void |
Régénère un token à l'aide du nom d'utilisateur, de l'uuid et de l'accessToken et remplace automatiquement le token actuel. |
setToken() | (token: string, id: number) => boolean |
Se connecte à Ecoledirecte avec un token. |
get2FAToken() | async (username: string, password: string) => string |
Renvoie le jeton nécessaire à la récupération du QCM 2FA. |
get2FA() | async (token: string) => doubleauthResData |
Récupère le questionnaire 2FA avec le token de get2FAToken() . |
resolve2FA() | async (answer: string) => doubleauthValidationResData |
Renvoie les facteurs permettant l'uthentification. |
Ouvrir src/auth.ts
Request
La classe de gestion des requêtes.
Propriété | Type | Commentaire |
---|---|---|
post() | async (url: string, body: string, params?: string, ignoreErrors: boolean = false) => object |
Exécute la requête à l'API ecoledirect (path: url , body: body , les données utiles transférées à Ecoledirecte , paramètres d'url params et pour obtenir tout les réponses, même les erreurs Ecoledirecte, passer ignoreErrors à true ) avec comme paramètre verbe=get. Renvoie la réponse sous forme d'un object JSON |
get() | async (url: string, body: string, params?: string, ignoreErrors: boolean = false) => object |
Exécute la requête à l'API ecoledirect (path: url , body: body , les données utiles transférées à Ecoledirecte , paramètres d'url params et pour obtenir tout les réponses, même les erreurs Ecoledirecte, passer ignoreErrors à true ) avec comme paramètre verbe=post. Renvoie la réponse sous forme d'un object JSON |
delete() | async (url: string, body: string, params?: string, ignoreErrors: boolean = false) => object |
Exécute la requête à l'API ecoledirect (path: url , body: body , les données utiles transférées à Ecoledirecte , paramètres d'url params et pour obtenir tout les réponses, même les erreurs Ecoledirecte, passer ignoreErrors à true ) avec comme paramètre verbe=delete. Renvoie la réponse sous forme d'un object JSON |
put() | async (url: string, body: string, params?: string, ignoreErrors: boolean = false) => object |
Exécute la requête à l'API ecoledirect (path: url , body: body , les données utiles transférées à Ecoledirecte , paramètres d'url params et pour obtenir tout les réponses, même les erreurs Ecoledirecte, passer ignoreErrors à true ) avec comme paramètre verbe=put. Renvoie la réponse sous forme d'un object JSON |
request() | async (url: string, body: string, ignoreErrors: boolean = false) => object |
Exécute une requête (url: url , body: body et pour obtenir tout les réponses, même les erreurs Ecoledirecte, passer ignoreErrors à true ). Renvoie la réponse sous forme d'un object JSON |
blob() | async (url: string, body: string, completeUrl: boolean = false, method: "GET" \| "POST" = "GET") => Blob |
Exécute la requête et renvoie un objet Blob. completeUrl sur true indiquera que url est la cible complète, pas un chemin de https://api.ecoledirecte.com |
Ouvrir src/Request.ts
Guide du développeur
Ce guide vous permet de comprendre comment ce module est développé et donc d'y contribuer !
Ce projet est développé en Typescript. Vous devez maitriser ce languages ainsi que le développement de modules NodeJs pour commencer.
Installation
[!NOTE] Si vous souhaitez contribuer ou modifier le code, veuillez fork le dépot et cloner votre copie de celui-ci.
1. Cloner ce dépôt
2. Installer les dépendances
3. Récupérer les submodules
[!NOTE] Pour mettre à jour le submodule, exécutez
Et voilà, vous êtes prêts !
Structure
Le module est structuré de la manière suivante :
- src/fetch
: Contient les fonctions de récupération des données de l'API d'EcoleDirecte
- src/session.ts
: Contient les fonctions de gestion de la session
- src/auth.ts
: Contient les fonctions d'authentification
- src/errors.ts
: Contient les erreurs pouvant être retournées par le module. Les erreurs doivent suivre la même structure pour chaque module.
- src/types
: Submodule git des types des réponses ED. (réadaptation de Armand CAMPONOVO, travail original ab2r)
- src/utils/types
: Contient les types des data
requêtes, et des types utiles à ce module.
Scripts
Linter: eslint
Vous pouvez aussi exécuternpm run lint:fix
pour régler les problèmes de formatage automatiquement.
Build: tsc
Les fichiers transpilés sont généré à leur emplacement. Ce script lint et build la base de code.