import * as forge from 'node-forge'; // High-level API /** * Une session Pronote * * Peut être ouverte via les fonctions {@link login}, ou {@link loginParent}. * Ouverte par l'une de ces fonctions, le champ {@link params} est garanti d'être rempli. * * La session dure quelques dizaines de minutes, sauf si {@link setKeepAlive}(true) est appelé, * elle dure alors indéfiniment jusqu'à que {@link setKeepAlive}(false) soit appelé ou le * programme fermé. */ export abstract class PronoteSession { /** * Créé une nouvelle session. * * Ce constructeur doit normalement être appelé par {@link login} plutôt que manuellement, sauf si * vous savez ce que vous faites. * * @param options Les options d'instanciation */ constructor(options: PronoteSessionOptions) /** * ID unique de la session donné par Pronote, sous la forme d'une suite de 7 chiffres. */ id: number /** * URL de l'instance Pronote depuis laquelle la session a été ouverte. * Exemple : 'https://demo.index-education.net/pronote/' */ server: string /** * Type du compte de la session, défini automatiquement par le constructeur */ type: PronoteAccountType /** * ID de la dernière requête effectuée, augmenté de 2 avant chaque requête. -1 signifiant qu'aucune requête * n'a été encore envoyée, car 1 sera le premier ID. */ request: number /** * Si la session est gardée en vie en permanence ou non. Désactivé par défaut, cette valeur mise à jour * lors de l'utilisation de {@link setKeepAlive}. */ isKeptAlive: boolean /** * La clé AES utilisée pour le chiffrement. Elle est assignée lors du processus d'authentification * à la clé donnée par Pronote dans la réponse de la requête 'Authentification', et est utilisée ensuite * pour toutes les opérations de chiffrement (sauf si une autre clé est donnée dans des cas particuliers). */ aesKey?: forge.util.ByteBuffer /** * Vecteur d'initialisation (VI, donc IV en anglais) de chiffrement, généré aléatoirement par la fonction * {@link login} lors de la création d'une session, et utilisé dans toutes les opérations de chiffrement. */ aesIV: forge.util.ByteBuffer /** * Clé publique de l'instance Pronote depuis laquelle la session a été ouverte, construite à partir de * l'exposant et du modulo donné par Pronote directement dans la page. */ publicKey: forge.pki.Key /** * Si les requêtes doivent être chiffrées ou non. Ce paramètre est activé si l'instance Pronote est en HTTPS. */ disableAES: boolean /** * Si les requêtes doivent être compressées ou non. Ce paramètre est visiblement activé avec {@link disableAES}. */ disableCompress: boolean /** * Paramètres de l'instance depuis laquelle la session a été ouverte, correspond au résultat de la requête * 'FonctionParametres' qui est la première requête envoyée à Pronote. */ params?: PronoteParams /** * Envoi une requête de présence à Pronote, remettant à zero la durée de vie de la session */ keepAlive(): Promise /* * Déconnecte la session de Pronote. Après l'appel de cette fonction, toute requête à Pronote sera * refusée par ce dernier. */ logout(): Promise /** * Active le maintien en vie de la session. Dès que ce paramètre est défini à `true`, l'API enverra * des requêtes de présence à Pronote à l'intervalle défini. Tant que ce paramètre n'est pas défini à `false` * le programme fermé, ou une erreur renvoyée, les requêtes continueront d'être envoyées et la session * sera maintenue indéfiniment. * * @param enabled Si oui ou non le maintien de la session doit être activé * @param onError Une action à effectuer en cas d'erreur. Dans tous les cas, une erreur arrêtera le maintien. * @param rate L'intervalle auquel envoyer les requêtes, par défaut 2 minutes (le même que Pronote). */ setKeepAlive(enabled: boolean, onError?: (error: any) => void, rate?: number); } /** * Une session élève * * Peut être ouverte par {@link login} ou instanciée manuellement. * Ouverte par {@link login}, le champ {@link user} est garanti d'être rempli. */ export class PronoteStudentSession extends PronoteSession { /** * Informations de l'utilisateur connecté via la session, correspond au résultat de la requête * 'ParametresUtilisateur' envoyée après une authentification réussie. */ user?: PronoteStudentUser /** * Récupère les cours situés dans l'intervalle de temps donnée. * * Attention : Par défaut, une Date en JavaScript est initialisée à minuit si l'heure n'est pas donnée, * mettre par exemple en 'to' le Mercredi 2 Septembre, ne renverra donc aucun des cours de ce jour. * * Rappelez-vous aussi que le champ du mois dans les dates est décalé de 1 en arrière, et seulement * ce champ. Pour initialiser une Date au Mercredi 2 Septembre, il faut donc faire `new Date(2020, 8, 2);`. * * @param from La date à partir de laquelle récupérer les cours. Par défaut la Date actuelle * @param to La date jusqu'à laquelle récupérer les cours. Par défaut 'from' + 1 jour * * @return La liste des cours situés entre les deux dates données. Si l'onglet de l'emploi du temps n'est pas * disponible, `null` sera renvoyé. */ timetable(from?: Date, to?: Date): Promise | null> /** * Récupère les notes et, si disponibles, les moyennes générales de l'utilisateur et de sa classe, dans * la période donnée. * * @param period La période depuis laquelle récupérer les notes et les moyennes. Par défaut le trimestre * dans lequel on est, ou le premier si on est hors période. * * @return Toutes les notes de cette période par matière, avec les moyennes de ces dernières, et si disponibles, * les moyennes générales de l'utilisateur et de sa classe. Si l'onglet des notes n'est pas disponible, * `null` sera renvoyé. */ marks(period?: PronotePeriod | String): Promise /** * Récupère la liste des évaluations ayant eu lieu dans la période donnée. * * @param period La période depuis laquelle récupérer les notes et les moyennes. Par défaut le trimestre * dans lequel on est, ou le premier si on est hors période. * * @return Toutes les évaluations de cette période rangée par matière. Si l'onglet des évaluations n'est pas * disponible, `null` sera renvoyé. */ evaluations(period?: PronotePeriod | String): Promise | null> /** * Récupère la liste des évènements tels que les absences, punitions, retenues, ou autre. * * Il est possible de mettre 'from' et 'to' de sorte à couvrir toute l'année, tant que 'period' est défini à * `null` ou au premier trimestre. Cela renverra alors bien les évènements de toute l'année. * * @param period La période depuis laquelle récupérer les évènements. Par défaut le trimestre dans lequel on * est, ou le premier si on est hors période. * @param from À partir de quand récupérer les évènements * @param to Jusqu'à quand récupérer les évènements * * @return La liste des évènements de cette période rangés par types. Si l'onglet des évènements n'est pas * disponible, `null` sera renvoyé. */ absences(period?: PronotePeriod | String, from?: Date, to?: Date): Promise /** * Récupère la liste de toutes les informations disponibles. * * @return La liste des informations. Si l'onglet des informations n'est pas disponible, `null` sera renvoyé. */ infos(): Promise | null> /** * Récupère les contenus des cours situés dans l'intervalle de temps donnée. * * Attention : Par défaut, une Date en JavaScript est initialisée à minuit si l'heure n'est pas donnée, * mettre par exemple en 'to' le Mercredi 2 Septembre, ne renverra le contenu d'aucun des cours de ce jour. * * Rappelez-vous aussi que le champ du mois dans les dates est décalé de 1 en arrière, et seulement * ce champ. Pour initialiser une Date au Mercredi 2 Septembre, il faut donc faire `new Date(2020, 8, 2);`. * * @param from La date à partir de laquelle récupérer le contenu des cours. Par défaut la Date actuelle * @param to La date jusqu'à laquelle récupérer le contenu des cours. Par défaut 'from' + 1 jour * * @return La liste des leçons situés entre les deux dates données. Si l'onglet du contenu des cours n'est * pas disponible, `null` sera renvoyé. */ contents(from?: Date, to?: Date): Promise | null> /** * Récupère les devoirs situés dans l'intervalle de temps donnée. * * Attention : Par défaut, une Date en JavaScript est initialisée à minuit si l'heure n'est pas donnée, * mettre par exemple en 'to' le Mercredi 2 Septembre, ne renverra donc aucun des devoirs de ce jour. * * Rappelez-vous aussi que le champ du mois dans les dates est décalé de 1 en arrière, et seulement * ce champ. Pour initialiser une Date au Mercredi 2 Septembre, il faut donc faire `new Date(2020, 8, 2);`. * * @param from La date à partir de laquelle récupérer les devoirs. Par défaut la Date actuelle * @param to La date jusqu'à laquelle récupérer les devoirs. Par défaut 'from' + 1 jour * * @return La liste des devoirs situés entre les deux dates données. Si l'onglet des devoirs n'est pas * disponible, `null` sera renvoyé. */ homeworks(from?: Date, to?: Date): Promise | null> /** * Récupère les menus de la cantine des repas situés dans l'intervalle de temps donnée. * * Attention : Par défaut, une Date en JavaScript est initialisée à minuit si l'heure n'est pas donnée, * donc en sachant que les dates renvoyées par Pronote des menus seront aussi fixées à minuit, cela signifie que * mettre par exemple en 'to' le Mercredi 2 Septembre renverra aussi le menu de ce jour. * * Rappelez-vous aussi que le champ du mois dans les dates est décalé de 1 en arrière, et seulement * ce champ. Pour initialiser une Date au Mercredi 2 Septembre, il faut donc faire `new Date(2020, 8, 2);`. * * @param from La date à partir de laquelle récupérer les menus. Par défaut la Date actuelle * @param to La date jusqu'à laquelle récupérer les menus. Par défaut 'from' + 23 heures * * @return La liste des menus des repas situés entre les deux dates données. Si l'onglet du menu n'est pas * disponible, `null` sera renvoyé. */ menu(from?: Date, to?: Date): Promise | null> /** * Récupère les fichier publiés sur votre pronote depuis le début de l'années * du plus récent au ancien. * * @return La liste des fichier publiés depuis le début de l'année. Si l'onglet des fichiers n'est pas * disponible, `null` sera renvoyé. */ files(): Promise | null> } /** * Une session parent * * Peut être ouverte par {@link login} ou instanciée manuellement. * Ouverte par {@link login}, le champ {@link user} est garanti d'être rempli. */ export class PronoteParentSession extends PronoteSession { /** * Informations de l'utilisateur connecté via la session, correspond au résultat de la requête * 'ParametresUtilisateur' envoyée après une authentification réussie. */ user?: PronoteParentUser /** * Récupère les cours d'un élève situé dans l'intervalle de temps donnée. * * Attention : Par défaut, une Date en JavaScript est initialisée à minuit si l'heure n'est pas donnée, * mettre par exemple en 'to' le Mercredi 2 Septembre, ne renverra donc aucun des cours de ce jour. * * Rappelez-vous aussi que le champ du mois dans les dates est décalé de 1 en arrière, et seulement * ce champ. Pour initialiser une Date au Mercredi 2 Septembre, il faut donc faire `new Date(2020, 8, 2);`. * * @param student L'élève dont il faut récupérer les cours * @param from La date à partir de laquelle récupérer les cours. Par défaut la Date actuelle * @param to La date jusqu'à laquelle récupérer les cours. Par défaut 'from' + 1 jour * * @return La liste des cours situés entre les deux dates données. Si l'onglet de l'emploi du temps n'est pas * disponible, `null` sera renvoyé. */ timetable(student: PronoteStudent, from?: Date, to?: Date): Promise | null> /** * Récupère les notes d'un élève et, si disponibles, les moyennes générales de l'élève et de sa classe, dans * la période donnée. * * @param student L'élève dont il faut récupérer les ,ptes * @param period La période depuis laquelle récupérer les notes et les moyennes. Par défaut le trimestre * dans lequel on est, ou le premier si on est hors période. * * @return Toutes les notes de cette période par matière, avec les moyennes de ces dernières, et si disponibles, * les moyennes générales de l'utilisateur et de sa classe. Si l'onglet des notes n'est pas disponible, * `null` sera renvoyé. */ marks(student: PronoteStudent, period?: PronotePeriod | String): Promise /** * Récupère la liste des évaluations d'un élève ayant eu lieu dans la période donnée. * * @param student L'élève dont il faut récupérer les évaluations * @param period La période depuis laquelle récupérer les notes et les moyennes. Par défaut le trimestre * dans lequel on est, ou le premier si on est hors période. * * @return Toutes les évaluations de cette période rangée par matière. Si l'onglet des évaluations n'est pas * disponible, `null` sera renvoyé. */ evaluations(student: PronoteStudent, period?: PronotePeriod | String): Promise | null> /** * Récupère la liste des évènements d'un élève tels que les absences, punitions, retenues, ou autre. * * Il est possible de mettre 'from' et 'to' de sorte à couvrir toute l'année, tant que 'period' est défini à * `null` ou au premier trimestre. Cela renverra alors bien les évènements de toute l'année. * * @param student L'élève dont il faut récupérer les évènements * @param period La période depuis laquelle récupérer les évènements. Par défaut le trimestre dans lequel on * est, ou le premier si on est hors période. * @param from À partir de quand récupérer les évènements * @param to Jusqu'à quand récupérer les évènements * * @return La liste des évènements de cette période rangés par types. Si l'onglet des évènements n'est pas * disponible, `null` sera renvoyé. */ absences(student: PronoteStudent, period?: PronotePeriod | String, from?: Date, to?: Date): Promise /** * Récupère la liste de toutes les informations disponibles destinées à un élève. * * @param student L'élève dont il faut récupérer les informations * * @return La liste des informations. Si l'onglet des informations n'est pas disponible, `null` sera renvoyé. */ infos(student: PronoteStudent): Promise | null> /** * Récupère les contenus des cours d'un élève situés dans l'intervalle de temps donnée. * * Attention : Par défaut, une Date en JavaScript est initialisée à minuit si l'heure n'est pas donnée, * mettre par exemple en 'to' le Mercredi 2 Septembre, ne renverra le contenu d'aucun des cours de ce jour. * * Rappelez-vous aussi que le champ du mois dans les dates est décalé de 1 en arrière, et seulement * ce champ. Pour initialiser une Date au Mercredi 2 Septembre, il faut donc faire `new Date(2020, 8, 2);`. * * @param student L'élève dont il faut récupérer le contenu des cours * @param from La date à partir de laquelle récupérer le contenu des cours. Par défaut la Date actuelle * @param to La date jusqu'à laquelle récupérer le contenu des cours. Par défaut 'from' + 1 jour * * @return La liste des devoirs situés entre les deux dates données. Si l'onglet du contenu des cours n'est * pas disponible, `null` sera renvoyé. */ contents(student: PronoteStudent, from?: Date, to?: Date): Promise | null> /** * Récupère les devoirs d'un élève situés dans l'intervalle de temps donnée. * * Attention : Par défaut, une Date en JavaScript est initialisée à minuit si l'heure n'est pas donnée, * mettre par exemple en 'to' le Mercredi 2 Septembre, ne renverra donc aucun des devoirs de ce jour. * * Rappelez-vous aussi que le champ du mois dans les dates est décalé de 1 en arrière, et seulement * ce champ. Pour initialiser une Date au Mercredi 2 Septembre, il faut donc faire `new Date(2020, 8, 2);`. * * @param student L'élève dont il faut récupérer les devoirs * @param from La date à partir de laquelle récupérer les devoirs. Par défaut la Date actuelle * @param to La date jusqu'à laquelle récupérer les devoirs. Par défaut 'from' + 1 jour * * @return La liste des devoirs situés entre les deux dates données. Si l'onglet des devoirs n'est pas * disponible, `null` sera renvoyé. */ homeworks(student: PronoteStudent, from?: Date, to?: Date): Promise | null> /** * Récupère les menus de la cantine d'un élève des repas situés dans l'intervalle de temps donnée. * * Attention : Par défaut, une Date en JavaScript est initialisée à minuit si l'heure n'est pas donnée, * donc en sachant que les dates renvoyées par Pronote des menus seront aussi fixées à minuit, cela signifie que * mettre par exemple en 'to' le Mercredi 2 Septembre renverra aussi le menu de ce jour. * * Rappelez-vous aussi que le champ du mois dans les dates est décalé de 1 en arrière, et seulement * ce champ. Pour initialiser une Date au Mercredi 2 Septembre, il faut donc faire `new Date(2020, 8, 2);`. * * @param student L'élève dont il faut récupérer les menus * @param from La date à partir de laquelle récupérer les menus. Par défaut la Date actuelle * @param to La date jusqu'à laquelle récupérer les menus. Par défaut 'from' + 23 heures * * @return La liste des menus des repas situés entre les deux dates données. Si l'onglet du menu n'est pas * disponible, `null` sera renvoyé. */ menu(student: PronoteStudent, from?: Date, to?: Date): Promise | null> /** * Récupère les fichier publiés sur votre pronote depuis le début de l'années * du plus récent au ancien. * * @param student L'élève dont il faut récupérer les menus * * @return La liste des fichier publiés depuis le début de l'année. Si l'onglet des fichiers n'est pas * disponible, `null` sera renvoyé. */ files(student: PronoteStudent): Promise | null> } /** * Valeurs acceptées pour désigner un des types de comptes disponibles. Pour l'instant seul 'student' est supporté. */ type PronoteAccountTypeName = 'student' | 'parent' | 'teacher' | 'attendant' | 'company' | 'administration'; /** * Type de compte auquel il est possible de se connecter via Pronote. Pour l'instant seul le comptes élèves * sont supportés. */ export interface PronoteAccountType { name: PronoteAccountTypeName, value: string, id: number } /** * Ouvre une nouvelle session élève à l'instance Pronote donnée, et s'y connecte. * * Par défaut, ouvrir une session à l'aide de cette fonction ne maintien pas la session en vie. Pour la maintenir * plus longtemps que le temps par défaut (quelques dizaines de minutes), utilisez {@link PronoteSession.setKeepAlive}. * * @param url URL de l'instance Pronote à laquelle se connecter, exemple : https://demo.index-education.net/pronote/ * @param username Nom d'utilisateur * @param password Mot de passe de l'utilisateur * @param cas Nom du CAS à utiliser si besoin. Si vous vous connectez usuellement à Pronote directement par leur * interface, vous pouvez laisser ce champ vide (ou mettre 'none'). En revanche, si lors de la connexion à Pronote * vous êtes redirigé vers une interface de votre académie, vous devez alors choisir le CAS qui correspond. La valeur * de ce champ correspond au nom d'un fichier de src/cas/ sans le .js. Par exemple 'ac-montpellier'. Si votre * académie n'est pas supportée, vous pouvez ouvrir une issue sur le dépôt GitHub du projet. * * @return La session créée et authentifiée. Ses champs 'params' et 'user' sont donc forcément non-vides. */ export function login(url: string, username: string, password: string, cas?: string): Promise; /** * Ouvre une nouvelle session parent à l'instance Pronote donnée, et s'y connecte. * * Par défaut, ouvrir une session à l'aide de cette fonction ne maintien pas la session en vie. Pour la maintenir * plus longtemps que le temps par défaut (quelques dizaines de minutes), utilisez {@link PronoteSession.setKeepAlive}. * * @param url URL de l'instance Pronote à laquelle se connecter, exemple : https://demo.index-education.net/pronote/ * @param username Nom d'utilisateur * @param password Mot de passe de l'utilisateur * @param cas Nom du CAS à utiliser si besoin. Si vous vous connectez usuellement à Pronote directement par leur * interface, vous pouvez laisser ce champ vide (ou mettre 'none'). En revanche, si lors de la connexion à Pronote * vous êtes redirigé vers une interface de votre académie, vous devez alors choisir le CAS qui correspond. La valeur * de ce champ correspond au nom d'un fichier de src/cas/ sans le .js. Par exemple 'ac-montpellier'. Si votre * académie n'est pas supportée, vous pouvez ouvrir une issue sur le dépôt GitHub du projet. * * @return La session créée et authentifiée. Ses champs 'params' et 'user' sont donc forcément non-vides. */ export function loginParent(url: string, username: string, password: string, cas?: string): Promise; /** * La liste des CAS disponibles, et donc des valeurs acceptées pour le champ 'cas' de la fonction {@link login}. */ export const casList: Array; /** * Tente de trouver le nom de CAS associé à l'URL de l'instance Pronote donnée. Renvoie `null` si introuvable. * * @param url L'URL de l'instance Pronote dont laquelle trouver le CAS par lequel il faut passer pour s'y connecter. * * @return Le nom du CAS à mettre, ou une liste des noms des CAS possibles, ou `null` si introuvable. */ export function getCAS(url: string): Promise; /* * Données géographiques concernant un établissement. */ export interface EtablissementGeoData { /** * URL Pronote de l'établissement */ url: string; /** * Nom de l'établissement */ nomEtab: string; /** * Latitude de l'établissement */ lat: string; /** * Longitude de l'établissement */ long: string; /** * Code postal de l'établissement */ cp: string; } /** * Trouve les établissements à proximité des coordonnées géographiques données. * * @param lat Latitude de la localisation * @param long Longitude de la localisation */ export function geo(lat: number|string, long: number|string): Promise; /** * Liste des erreurs pouvant être renvoyées par l'API. */ export namespace errors { /** * Code : -1 * Indique une erreur générique renvoyée par Pronote. */ const PRONOTE: PronoteErrorType; /** * Code : 1 * Indique que le CAS demandé n'existe pas. */ const UNKNOWN_CAS: PronoteErrorType; /** * Code : 2 * Indique que votre adresse I.P. a été bannie de l'instance Pronote suite à une requête non autorisée. Si vous * obtenez cette erreur sans avoir fait de manipulation spéciale, merci d'ouvrir une issue sur la page GitHub * du projet. */ const BANNED: PronoteErrorType; /** * Code : 3 * Indique que vos identifiants ne sont pas bons. Il est possible que vous ayez besoin d'un CAS. */ const WRONG_CREDENTIALS: PronoteErrorType; /** * Code : 4 * Indique que le type de compte donné n'existe pas. Les valeurs possibles sont 'student', 'parent', * 'teacher', 'attendant', 'company', et 'administration'. */ const UNKNOWN_ACCOUNT: PronoteErrorType; /** * Code : 5 * Indique que la session a expirée, vous devriez peut-être utiliser {@link PronoteSession.setKeepAlive} ? */ const SESSION_EXPIRED: PronoteErrorType; /** * Code : 6 * Indique que votre adresse I.P. a été bannie de l'instance Pronote en raison d'un nombre trop élevé * de requêtes erronées. Si vous obtenez cette erreur sans avoir fait de manipulation spéciale ou échoué un trop * grand nombre de requête d'authentification, merci d'ouvrir une issue sur la page GitHub du projet. */ const RATE_LIMITED: PronoteErrorType; /** * Code : 7 * Indique que l'instance est actuellement fermée, pour maintenance ou car la rentrée n'a pas encore eu * lieu. */ const CLOSED: PronoteErrorType; } /** * Type d'erreur pouvant être renvoyé par l'API. */ export interface PronoteErrorType { /** * Code unique de l'erreur, voir {@link errors} */ code: number /** * Instancie l'erreur. * * @param args Arguments demandés par le type d'erreur en question. */ drop(...args: any): PronoteError } /** * Une erreur renvoyée par l'API. */ export interface PronoteError { /** * Code unique du type d'erreur en question */ code: number, /** * Message descriptif (en anglais) de l'erreur, ou message donné par Pronote (en français) si c'est une erreur * générique (erreur 'PRONOTE' : code -1). */ message: string } /** * Dénote la présence d'un identifiant unique 'id' dans un objet. */ export interface Identifiable { /** * Identifiant unique de l'objet généré à partir du hash des informations considérées comme "propre" à l'objet * (voir la documentation de chaque objet Identifiable pour savoir lesquelles). * * Il est sensé pouvoir identifier chaque objet entre les requêtes : il restera toujours le même après chaque essai. * Cette fonctionnalité ayant été ajoutée récemment, cette affirmation est tout de même à prendre avec précaution. * * Dans le cas où deux objets distincts auraient le même identifiant, ce dernier est modifié en fonction de l'ordre * dans lequel Pronote a renvoyé les objets, pour assurer l'absence d'identifiant en doublon, et sa conservation entre * les requêtes (on considère que l'ordre renvoyé par Pronote est constant). */ id: string } /** * Leçon de l'emploi du temps. */ export interface Lesson extends Identifiable { /** * Date et horaire précis auquel commence le cours */ from: Date, /** * Date et horaire précis auquel se termine le cours */ to: Date, /** * Indique si c'est une retenue et non un cours */ isDetention: boolean, /** * Dans le cas où un cours en remplace un autre, il arrive souvent que les deux cours soient présents dans * l'emploi du temps (mais superposés sur le site). Ce paramètre est à true s'il existe un ou plusieurs autre * cours au même horaire et à la même date que celui-ci. */ hasDuplicate: boolean, /** * Si c'est un cours qui se déroulera en distanciel, à la maison. */ remoteLesson: boolean; /** * Matière du cours si disponible (pas le cas pour une retenue) * Peut avoir comme valeur 'Non défini' si l'api reçoit un null */ subject?: string, /** * Professeur assigné au cours si disponible (ou surveillant de la retenue) * Peut avoir comme valeur 'Non défini' si l'api reçoit un null */ teacher?: string, /** * Salle du cours si disponible * Peut avoir comme valeur 'Non défini' si l'api reçoit un null */ room?: string, /** * Information supplémentaire sur le cours donnée par Pronote. Exemple de valeurs : "Prof absent", * "Cours annulé", etc. * Determine les valeurs 'isAway' et 'isCancelled'. */ status?: string, /** * Indique si le professeur est absent. Ne peut pas être à `true` en même temps que `isCancelled`. Est à `null` * dans le cas d'une retenue. */ isAway?: boolean, /** * Indique que le cours est annulé (par exemple parce qu'il est déplacé). Ne peut pas être à `true` en même * temps que `isAway`. Est à `null` dans le cas d'une retenue. */ isCancelled?: boolean, /** * Couleur du cours dans l'emploi du temps. Est à `null` dans le cas d'une retenue. */ color?: string } /** * Réponse à la requête des notes */ export interface Marks { /** * Liste des matières avec ses moyennes et ses notes */ subjects: Array, /** * Moyennes générales de l'élève et de sa classe si disponibles */ averages: MarksAverages } /** * Notes et moyennes d'une matière */ export interface MarksSubject { /** * Nom de la matière */ name: string, /** * Moyennes de la matière dans la période demandé */ averages: MarksSubjectAverages, /** * Couleur de la matière */ color: string, /** * Notes de la matière pour la période demandée */ marks: Array } /** * Moyennes générales */ export interface MarksAverages { /** * Moyenne générale de l'élève. * N'est pas défini si l'instance Pronote n'en autorise pas la consultation. */ student?: number, /** * Moyenne générale de la classe. * N'est pas défini si l'instance Pronote n'en autorise pas la consultation. */ studentClass?: number } /** * Moyennes d'une matière */ export interface MarksSubjectAverages { /** * Moyenne de l'élève dans la matière */ student: number, /** * Moyenne de la classe dans la matière */ studentClass: number, /** * Moyenne la plus basse obtenue par un élève dans la classe */ min: number, /** * Moyenne la plus haute obtenue par un élève dans la classe */ max: number } /** * Note obtenue par l'élève */ export interface Mark extends Identifiable { /** * ID de la note */ id: string, /** * Description de la note */ title: string, /** * La note elle même, ou `null` si l'élève était absent. */ value?: number, /** * L'échelle de la note (donc la note maximale possible, exemple '20' si la note est sur 20). */ scale: number, /** * Moyenne de la classe. Valeur absente si tout le monde était absent */ average?: number, /** * Coefficient de la note */ coefficient: number, /** * Note la plus basse obtenue dans la classe. Valeur absente si tout le monde était absent */ min?: number, /** * Note la plus haute obtenue dans la classe. Valeur absente si tout le monde était absent */ max?: number, /** * Date de l'évaluation qui a entraîné cette note (supposément) */ date: Date, /** * Si l'élève est marqué comme absent ou non noté */ isAway: boolean } /** * Liste des évaluations d'une matière */ export interface EvaluationsSubject { /** * Nom de la matière */ name: string, /** * Professeur de la matière */ teacher: string, /** * Couleur de la matière */ color: string, /** * Liste des évaluations de la matière */ evaluations: Array } /** * Évaluation */ export interface Evaluation extends Identifiable { /** * ID de l'évaluation */ id: string, /** * Nom de l'évaluation */ name: string, /** * Date à laquelle l'évaluation a eu lieu */ date: Date, /** * Coefficient de l'évaluation */ coefficient: number, /** * Niveaux d'évaluations notés */ levels: Array, } /** * Niveau noté lors d'une évaluation */ export interface EvaluationLevel { /** * Nom du niveau */ name: string, /** * Évaluation obtenue au niveau */ value: EvaluationLevelValue, /** * Préfixes du niveau (ex: 'D1', 'D2.3') */ prefixes: Array } /** * Valeur obtenue à un niveau d'une évaluation */ export interface EvaluationLevelValue { /** * Nom court (ex: 'A') */ short: string, /** * Nom long (ex: 'Très bonne maîtrise') */ long: string } /** * Liste des évènements de vie scolaire */ export interface Absences { /** * Absences */ absences: Array, /** * Retards */ delays: Array, /** * Punitions */ punishments: Array, /** * 'Autre évènements', littéralement */ other: Array, /** * Total des absences pour chaque matière */ totals: Array } /** * Absence à un cours */ export interface Absence extends Identifiable { /** * Début du premier cours manqué ou lorsque le cours a été quitté */ from: Date, /** * Fin du dernier cours manqué ou lorsque l'élève est revenu en cours */ to: Date, /** * Si l'absence a été justifiée */ justified: boolean, /** * Si l'absence a été réglée */ solved: boolean, /** * Nombre d'heures manquées */ hours: number, /** * Raison donnée pour l'absence après justification */ reason?: string } /** * Retard à un cours */ export interface Delay extends Identifiable { /** * Date et horaire du cours où le retard a eu lieu */ date: Date, /** * Si le retard a été justifié */ justified: boolean, /** * Si le retard a été réglé */ solved: boolean, /** * Justification du retard (visiblement tout le temps vide, voir {@link reason} pour la raison donnée) */ justification: string, /** * Nombre de minutes de cours manquées */ minutesMissed: number, /** * Raison donnée pour le retard avant ou après justification */ reason?: string } /** * Punition donnée à l'élève */ export interface Punishment extends Identifiable { /** * Date et moment auquel la punition a été donnée */ date: Date, /** * Si la punition a lieu a une exclusion */ isExclusion: boolean, /** * Si la punition a été donnée suite à un évènement ayant eu lieu pendant un cours */ isDuringLesson: boolean, /** * Si un devoir a été donné en tant que punition */ homework: string, /** * Les circonstances ayant donné lieu à la punition */ circumstances: string, /** * Le professeur ou personnel de l'école ayant donné la punition */ giver: string, /** * Motif de la punition */ reason?: string, /** * Si la punition a donné lieu a une retenue, si oui la retenue en question, sinon le champ est absent. */ detention?: Detention } /** * Une retenue donnée suite à une punition */ export interface Detention extends Identifiable { /** * Date et horaire précis de début de la retenue */ from: Date, /** * Date et horaire précis de fin de la retenue */ to: Date } /** * Autre évènement de vie scolaire */ export interface OtherEvent extends Identifiable { /** * Type d'évènement (exemple : 'Leçon non apprise') */ kind: string, /** * Date à laquelle a eu lieu l'évènement */ date: Date, /** * Le professeur ou personnel de l'école ayant rapporté l'évènement */ giver: string, /** * Commentaire fait sur l'évènement */ comment: string, /** * Matière liée à l'évènement (peut ne pas exister) */ subject?: string } /** * Nombre d'heures manquées dans une matière */ export interface SubjectAbsences { /** * Nom de la matière */ subject: string, /** * Nombre d'heure auquel l'élève a assisté */ hoursAssisted: number, /** * Nombre d'heure que l'élève a manqué */ hoursMissed: number, /** * Si la matière est un "groupe", les sous-matières du groupe, sinon le champ est absent. */ subs?: Array } /** * Information */ export interface Info extends Identifiable { /** * Date à laquelle l'information a été annoncée */ date: Date, /** * Titre de l'information */ title: string, /** * Auteur de l'information */ author: string, /** * Contenu de l'information */ content: string, /** * Contenu de l'information en HTML */ htmlContent: string, /** * Fichiers attachés à l'information */ files: Array } /** * Contenu d'un cours */ export interface LessonContent extends Identifiable { /** * Matière du cours */ subject: string, /** * Professeurs liés au cours */ teachers: Array, /** * Horaire précise de début du cours */ from: Date, /** * Horaire précise de fin du cours */ to: Date, /** * Couleur de la matière du cours */ color: string, /** * Titre du contenu */ title: string, /** * Description du contenu */ description: string, /** * Description du contenu en HTML */ htmlDescription: string, /** * Fichiers attachés au contenu */ files: Array, /** * Catégorie du contenu */ category: string } /** * Contenu d'un devoir */ export interface Homework extends Identifiable { /** * Description du devoir */ description: string, /** * Description du devoir en HTML */ htmlDescription: string, /** * Matière du cours du devoir */ subject: string, /** * Horaire précise à laquelle le devoir a été donné */ givenAt: Date, /** * Horaire précise à laquelle le devoir doit être rendu */ for: Date, /** * Si le travail a été marqué comme "fait" ou non */ done: boolean, /** * Couleur de la matière du devoir */ color: string, /** * Fichiers attachés au devoir */ files: Array } /** * Un fichier attaché par exemple à une information, un devoir, ou au contenu d'un cours */ export interface File extends Identifiable { /** * Date à laquelle le fichier a été mis en ligne */ time: Date, /** * Nom de la matière */ subject: string, /** * Nom du fichier avec son extension */ name: string, /** * URL directe du fichier */ url: string } /** * Menus des repas d'un jour de la semaine */ export interface MenuDay { /** * Date du jour en question */ date: Date, /** * Plats des groupes des menus des repas du jour */ meals: Array>> } /** * Plat d'un menu */ export interface MenuMealEntry { /** * Nom du plat */ name: string, /** * Labels du plat (exemple : bio) */ labels: Array } /** * Label d'un plat (exemple : bio) */ export interface MenuMealLabel { /** * Nom du label */ name: string, /** * Couleur du label */ color: string } // Low-level API (if you need to use this, you can, but it may mean I've forgotten a use case, please open an issue!) export function cipher(session: PronoteSession, data: any, options?: CipherOptions): string; export function decipher(session: PronoteSession, data: any, options?: DecipherOptions): string | forge.util.ByteBuffer; export function getStart(url: string, username: string, password: string, cas: string, type?: PronoteAccountTypeName | PronoteAccountType): Promise; export function auth(session: PronoteSession): Promise; export function fetchParams(session: PronoteSession, iv: forge.util.ByteBuffer): Promise; export function fetchId(session: PronoteSession, username: string, fromCas: boolean): Promise; export function fetchAuth(session: PronoteSession, challenge: string, key: forge.util.ByteBuffer): Promise; export function fetchUser(session: PronoteSession): Promise>; export function fetchTimetable(session: PronoteSession, date?: Date): Promise; export function fetchTimetableDaysAndWeeks(session: PronoteSession): Promise; export function fetchMarks(session: PronoteSession, period?: PronotePeriod): Promise; export function fetchEvaluations(session: PronoteSession, period?: PronotePeriod): Promise>; export function fetchAbsences(session: PronoteSession, period?: PronotePeriod, from?: Date, to?: Date): Promise; export function fetchInfos(session: PronoteSession): Promise; export function fetchContents(session: PronoteSession, fromWeek?: number, toWeek?: number): Promise; export function fetchHomeworks(session: PronoteSession, fromWeek?: number, toWeek?: number): Promise>; export function fetchMenu(session: PronoteSession, date?: Date): Promise; export function fetchFiles(session: PronoteSession); export function navigate(session: PronoteSession, page: string, tab: number, data?: any): Promise; export function keepAlive(session: PronoteSession): Promise; export function toPronoteWeek(session: PronoteSession, date: Date): number; export function toUTCWeek(date: Date): number; export function toPronoteDay(session: PronoteSession, date: Date): number; export function fromPronoteDay(session: PronoteSession, date: number): Date; export function toPronoteDate(date: Date): string; export function getFileURL(session: PronoteSession, file: PronoteObject): string; export function request(session: PronoteSession, name: string, content: any): Promise; export interface PronoteSessionOptions { serverURL: string, sessionID: number, type: PronoteAccountTypeName | PronoteAccountType, disableAES: boolean, disableCompress: boolean, keyModulus: string, keyExponent: string } export interface CipherOptions { key?: forge.pki.Key, compress?: boolean } export interface DecipherOptions extends CipherOptions { scrambled?: boolean, asBytes?: boolean } export interface PronoteStartParams { h: string, // Session ID (number) a: number, // Session type (3 = student, ...) e: string, // One time use username after CAS auth f: string, // One time use password after CAS auth sCrA: boolean, // Disable AES sCoA: boolean, // Disable compression MR: string, // Public key modulus (as BigInt string) ER: string, // Public key exponent (as BigInt string) // There are more, but undocumented (feel free to open a P.R.!) } export interface PronoteIdResponse { scramble: string, // alea challenge: string // challenge } export interface PronoteObject { id: string, // N name: string // L } export interface PronoteParams { navigatorId?: string, // identifiantNav fonts: Array, // listePolices withMember: boolean, // avecMembre forNewCaledonia: boolean, // pourNouvelleCaledonie loginImageId: number, // genreImageConnexion loginImageUrl: string, // urlImageConnexion cssLogo: string, // logoProduitCss theme: number, // Theme serverTime: Date, // DateServeurHttp mobileURL: string, // URLMobile mobileSupport: boolean, // AvecEspaceMobile title: string, // Nom indexEducationWebsite: string, // General.urlSiteIndexEducation version: string, // General.versionPN versionFull: string, // General.version year: number, // General.millesime language: PronoteLanguage, // General.language supportedLanguages: Array, // General.listeLangues infoPage: string, // General.lienMentions hasForum: boolean, // General.avecForum helpURL: string, // General.UrlAide videosURL: string, // General.urlAccesVideos twitterURL: string, // General.urlAccesTwitter withLoginOptions: boolean, // General.AvecChoixConnexion establishment: string, // General.NomEtablissement displayWeeks: string, // General.afficherSemainesCalendaires schoolYear: string, // General.AnneeScolaire firstCycle: Date, // General.DateDebutPremierCycle firstDay: Date, // General.PremiereDate firstMonday: Date, // General.PremierLundi lastDay: Date, // General.DerniereDate ticksPerDay: number, // General.PlacesParJour ticksPerHour: number, // General.PlacesParHeure sequenceDuration: number, // General.DureeSequence ticksForHalfDayAbsence: number, // General.PlaceDemiJourneeAbsence hasLunch: boolean, // General.activationDemiPension lunchStart: number, // General.debutDemiPension lunchEnd: number, // General.finDemiPension withPlainAfternoonHours: boolean, // General.AvecHeuresPleinesApresMidi firstOrLastWorkingDay: Date, // General.JourOuvre workingDays: Array, // General.JoursOuvres lunchDays: Array, // General.JoursDemiPension parentsChat: boolean, // General.ActivationMessagerieEntreParents workingDaysPerCycle: number, // General.joursOuvresParCycle firstDayOfWeek: number, // General.premierJourSemaine timetableGridsInCycle: number, // General.grillesEDTEnCycle workingDaysCycle: Array, // General.setOfJoursCycleOuvre halfWorkingDays: Array>, // General.DemiJourneesOuvrees frequenciesRanges: Array>, // General.DomainesFrequences frequenciesLabels: Array, // General.LibellesFrequences defaultMarkMax: number, // General.BaremeNotation allowedAnnotations: Array, // General.listeAnnotationsAutorisees acquisitionLevels: Array, // General.ListeNiveauxDAcquisitions displayAcquisitionShortLabel: boolean, // General.AfficherAbbreviationNiveauDAcquisition withEvaluationHistory: boolean, // General.AvecEvaluationHistorique withoutIntermediaryLevelAutoValidation: boolean, // General.SansValidationNivIntermediairesDsValidAuto onlySchoolYearEvaluationsInAutoValidation: boolean, // General.NeComptabiliserQueEvalsAnneeScoDsValidAuto CECRLLevelsSupport?: boolean, // General.AvecGestionNiveauxCECRL langActivityColor?: string, // General.couleurActiviteLangagiere minMarkMCQ: number, // General.minBaremeQuestionQCM maxMarkMCQ: number, // General.maxBaremeQuestionQCM maxPointsMCQ: number, // General.maxNbPointQCM skillsGridLabelSize: number, // General.tailleLibelleElementGrilleCompetence homeworkCommentSize: number, // General.tailleCommentaireDevoir officeEnabled: boolean, // General.O365_Actif officeFederatedMode: boolean, // General.O365_ModeFederated officeTutorial: string, // General.O365_UrlTuto_Office oneDriveTutorial: string, // General.O365_UrlTuto_OneDrive connexionInfoRetrieval: boolean, // General.AvecRecuperationInfosConnexion font: string, // General.Police fontSize: number, // General.TaillePolice attachedStudents: boolean, // General.AvecElevesRattaches phoneMask: string, // General.maskTelephone maxECTS: number, // General.maxECTS maxAppreciationSizes: Array, // General.TailleMaxAppreciation publicHolidays: Array, // General.listeJoursFeries displaySequences: boolean, // General.afficherSequences firstHour: Date, // General.PremiereHeure hours: Array, // General.ListeHeures endHours: Array, // General.ListeHeuresFin sequences: Array, // General.sequences periods: Array, // General.ListePeriodes logo: number, // General.logo breaks: Array, // General.recreations appCookieName: string // General.nomCookieAppli } export interface PronoteLanguage { id: number, // langID name: string // langue } export interface PronoteAcquisitionLevel extends PronoteObject { count: number, // G positions: Array, // listePositionnements triggerPosition: number, // positionJauge activeFor: Array, // actifPour shortName: string, // abbreviation shortPath: string, // raccourci color?: string, // couleur weighting?: number, // ponderation brevetPoints?: number, // nombrePointsBrevet acquired?: boolean, // estAcqui countsForSuccess?: boolean // estNotantPourTxReussite } export interface PronoteAcquisitionLevelPositions { name: string, // L count: number, // G shortName: string, // abbreviation shortNameWithPrefix?: string // abbreviationAvecPrefixe } export interface PronoteHoliday extends PronoteObject { from: Date, // dateDebut to: Date // dateFin } export interface PronoteHour { name: string, // L count: number, // G round: boolean // A } export interface PronotePeriod extends PronoteObject { type: 'trimester' | 'semester' | 'year' | 'other', // G (1, 2, 3, *) notationPeriod: number, // periodeNotation from: Date, // dateDebut to: Date // dateFin } export interface PronoteBreak { name: string, // L position: number // place } export interface PronoteUser extends PronoteObject { establishmentsInfo: Array, // ressource.listeInformationsEtablissements userSettings: PronoteUserSettings, // ressource.parametresUtilisateur sessionAuthorizations: PronoteSessionAuthorizations, // user.autorisationsSession.fonctionnalites authorizations: A, // autorisations minPasswordSize: number, // reglesSaisieMDP.min maxPasswordSize: number, // reglesSaisieMDP.max passwordRules: Array, // reglesSaisieMDP.regles kioskAccess: boolean, // autorisationKiosque tabs: Array, // listeOnglets hiddenTabs: Array, // listeOngletsInvisibles notifiedTabs: Array, // lisetOngletsNotification } export interface PronoteStudentUser extends PronoteStudent, PronoteUser { } export interface PronoteStudent extends PronoteObject { establishment: PronoteObject, // ressource.Etablissement /** * URL de l'avatar de l'utilisateur, si disponible */ avatar?: string, // ressource.avecPhoto && photo.jpg (ressource.N) /** * Classe de l'utilisateur */ studentClass: PronoteObject, // ressource.classeDEleve classHistory: Array, // ressource.listeClassesHistoriques groups: Array, // ressource.listeGroupes tabsPillars: Array, // ressource.listeOngletsPourPiliers tabsPeriods: Array, // ressource.listeOngletsPourPeriodes } export interface PronoteStudentAuthorizations extends PronoteUserAuthorizations { maxUserWorkFileSize: number // tailleMaxRenduTafEleve } export interface PronoteParentUser extends PronoteUser { isDelegate: boolean, // estDelegue isBDMember: boolean, // estMembreCA canDiscussWithManagers: boolean, // avecDiscussionResponsables absencesReasons: Array, // listeMotifsAbsences delaysReasons: Array, // listeMotifsRetards classDelegates: Array, // listeClassesDelegue students: Array } export interface PronoteParentAuthorizations extends PronoteUserAuthorizations { staffDiscussion: boolean, // AvecDiscussionPersonnels parentsDiscussion: boolean, // AvecDiscussionParents editStudentPassword: boolean, // avecSaisieMotDePasseEleve editCoordinates: boolean, // avecSaisieInfosPersoCoordonnees editAuthorizations: boolean // avecSaisieInfosPersoAutorisations } export interface PronoteClassHistoryElement extends PronoteObject { hadMarks: boolean, // AvecNote hadOptions: boolean // AvecFiliere } export interface PronoteTabPillars { tab: number, // G levels: Array // listePaliers } export interface PronotePillarLevel extends PronoteObject { pillars: Array // listePiliers } export interface PronotePillar extends PronoteObject { isForeignLanguage: boolean, // estPilierLVE isCoreSkill: boolean, // estSocleCommun subject: PronoteObject // Service } export interface PronoteTabPeriods { tab: number, // G periods: Array, // listePeriodes defaultPeriod?: PronoteObject // periodeParDefault } export interface PronoteTabPeriod extends PronoteObject { isCorePeriod: boolean // GenreNotation === 1 } export interface PronoteEstablishmentInfo extends PronoteObject { logoID: number, // Logo address: Array, // Coordonnees.Adresse1, Coordonnees.Adresse2, postalCode: string, // Coordonnees.CodePostal postalLabel: string, // Coordonnees.LibellePostal city: string, // Coordonnees.LibelleVille province: string, // Coordonnees.Province country: string, // Coordonnees.Pays website: string, // Coordonnees.SiteInternet } export interface PronoteUserSettings { version: number, // version timetable: PronoteUserTimetableSettings, // EDT theme: number, // theme.theme unreadDiscussions: boolean, // Communication.DiscussionNonLues } export interface PronoteUserTimetableSettings { displayCanceledLessons: boolean, // afficherCoursAnnules invertAxis: boolean, // axeInverseEDT invertWeeklyPlanAxis: boolean, // axeInversePlanningHebdo invertDayPlanAxis: boolean, // axeInversePlanningJour invertDay2PlanAxis: boolean, // axeInversePlanningJour2 dayCount: number, // nbJours resourceCount: number, // nbRessources daysInTimetable: number, // nbJoursEDT sequenceCount: number // nbSequences } export interface PronoteSessionAuthorizations { twitterManagement: boolean, // gestionTwitter expandedAttestation: boolean // attestationEtendue } export interface PronoteUserAuthorizations { discussions: boolean, // AvecDiscussion teachersDiscussions: boolean, // AvecDiscussionProfesseurs timetableVisibleWeeks: Array, // cours.domaineConsultationEDT canEditLessons: Array, // cours.domaineModificationCours hideClassParts: boolean, // cours.masquerPartiesDeClasse maxEstablishmentFileSize: number, // tailleMaxDocJointEtablissement maxUserWorkFileSize: number, // tailleMaxRenduTafEleve editPassword: boolean, // compte.avecSaisieMotDePasse editPersonalInfo: boolean, // compte.avecInformationsPersonnelles canPrint: boolean // compte.autoriserImpression } export interface PronoteTab { id: number, // G subs: Array // Onglet } export interface PronoteTimetable { hasCancelledLessons: boolean, // avecCoursAnnule iCalURL: string, // @params.server + ical/Edt.ics?icalsecurise= + ParametreExportiCal + &version= + @params.version lessons: Array, breaks: Array } export interface PronoteLesson extends PronoteObject { position: number, // place duration: number, // duree date: Date, // DateDuCours status?: string, // Statut color?: string, // CouleurFond content: Array, hasHomework: boolean, // AvecTafPublie isCancelled: boolean, // estAnnule isDetention: boolean // estRetenue remoteLesson: boolean; // dispenseEleve.maison } export interface PronoteTimetableDaysAndWeeks { filledWeeks: Array, // Domaine filledDays: Array // joursPresence } export interface PronoteMarks { studentAverage?: number, // moyGenerale studentAverageScale?: number, // baremeMoyGenerale defaultStudentAvergeScale?: number, // baremeMoyGeneraleParDefaut studentClassAverage?: number, // moyGeneraleClasse subjects: Array, // listeServices marks: Array // listeDevoirs } export interface PronoteMarksSubject extends PronoteObject { position: number, // ordre isGroupSubject: boolean, // estServiceEnGroupe studentAverage: number, // moyEleve studentAverageScale: number, // baremeMoyEleve defaultStudentAverageScale: number, // baremeMoyEleveParDefaut studentClassAverage: number, // moyClasse maxAverage: number, // moyMax minAverage: number, // moyMin color: string // couleur } export interface PronoteMark extends PronoteObject { subject: PronoteObject, // service id: string, //Id Notes title: string, // commentaire value: number, // note average: number, // moyenne scale: number, // bareme defaultScale: number, // baremeParDefaut coefficient: number, // coefficient max: number, // noteMax min: number, // noteMin date: number, // date period: PronoteObject, // periode isGroupMark: boolean // estEnGroupe } export interface PronoteEvaluation extends PronoteObject { id: string, title: string, // descriptif acquisitionLevels: Array, // listeNiveauxDAcquisitions levels: Array, // listePaliers subject: PronoteEvaluationSubject, // matiere teacher: PronoteObject, // individu coefficient: number, // coefficient date: Date, // date period: PronoteObject // periode } export interface PronoteEvaluationAcquisitionLevel extends PronoteObject { position: number, // order value: string, // abbreviation pillar: PronoteEvaluationPillar, // pilier coefficient: number, // coefficient domain: PronoteObject, // domaine item: PronoteObject // item } export interface PronoteEvaluationPillar extends PronoteObject { prefixes: Array // strPrefixes } export interface PronoteEvaluationSubject extends PronoteObject { position: number, // order service: PronoteObject, // serviceConcerne color: string // couleur } export interface PronoteAbsences { authorizations: PronoteAbsencesAuthorizations, // autorisations events: Array, // listeAbsences subjects: Array, // Matieres recaps: Array, // listeRecapitulatifs sanctions: Array // listeSanctionUtilisateur } export interface PronoteAbsencesAuthorizations { absences: boolean, // absence fillAbsenceReason: boolean, // saisieMotifAbsence delays: boolean, // retard fillDelayReason: boolean, // saisieMotifRetard punishments: boolean, // punition exclusions: boolean, // exclusion sanctions: boolean, // sanction conservatoryMesures: boolean, // mesureConservatoire infirmary: boolean, // infirmerie mealAbsences: boolean, // absenceRepas internshipAbsences: boolean, // absenceInternat observations: boolean, // observation incidents: boolean, // incident totalHoursMissed: boolean // totalHeuresManquees } export interface PronoteEvent extends PronoteObject { type: 'absence' | 'delay' | 'punishment' | 'other' | 'unknown' } export interface PronoteAbsence extends PronoteEvent { from: Date, // dateDebut to: Date, // dateFin opened: boolean, // ouverte solved: boolean, // reglee justified: boolean, // justifie hours: number, // NbrHeures days: number, // NbrJours reasons: Array // listeMotifs } export interface PronoteDelay extends PronoteEvent { date: Date, // date solved: boolean, // reglee justified: boolean, // justifie justification: string, // justification duration: number, // duree reasons: Array // listeMotifs } export interface PronotePunishment extends PronoteEvent { date: Date, // dateDemande isExclusion: boolean, // estUneExclusion giver: PronoteObject, // demandeur isSchedulable: boolean, // estProgrammable reasons: Array, // listeMotifs schedule: Array, // programmation nature: PronotePunishmentNature } export interface PronotePunishmentSchedule extends PronoteObject { date: Date, // date, position: number, // placeExecution duration: number // duree } export interface PronotePunishmentNature extends PronoteObject { isSchedulable: boolean, // estProgrammable requiresParentsMetting: boolean // estAvecARParent } export interface PronoteOtherEvent extends PronoteEvent { date: Date, // date giver: PronoteOtherEventGiver, // demandeur comment: string, // commentaire read: boolean, // estLue subject: PronoteObject // matiere } export interface PronoteOtherEventGiver extends PronoteObject { isHeadTeacher: boolean, // estProfPrincipal mail: string // mail } export interface PronoteSubjectAbsences extends PronoteObject { position: number, // P group: number, // regroupement inGroup: number, // dansRegroupement hoursAssisted: number, // suivi / 3600 hoursMissed: number, // absence / 3600 lessonExclusions: number, // excluCours establishmentExclusions: number // excluEtab } export interface PronoteAbsenceRecap extends PronoteObject { count: number, // NombreTotal unjustifiedCount: number, // NombreNonJustifie hours: number // NbrHeures } export interface PronoteInfos { categories: Array, infos: Array } export interface PronoteInfoCategory extends PronoteObject { isDefault: boolean // estDefaut } export interface PronoteInfo extends PronoteObject { date: Date, // dateDebut author: PronoteObject, // elmauteur content: Array // listeQuestions } export interface PronoteInfoContent extends PronoteObject { text: string, // texte files: Array // listePiecesJointes } export interface PronoteLessonsContents { lessons: Array, // ListeCahierDeTextes resources: PronoteLessonsContentsResources, // ListeRessourcesPedagogiques numericalResources: Array // ListeRessourcesNumeriques } export interface PronoteLessonContent extends PronoteObject { lesson: PronoteObject, // cours locked: boolean, // verrouille groups: Array, // listeGroupes subject: PronoteObject, // Matiere color: string, // CouleurFond teachers: Array, // listeProfesseurs from: Date, // Date to: Date, // DateFin content: Array, // listeContenus skills: Array // listeElementsProgrammeCDT } export interface PronoteLessonContentEntry extends PronoteObject { description: string, // descriptif category: PronoteObject, // categorie path: number, // parcoursEducatif files: Array, // ListePieceJointe training: Array // training.V.ListeExecutionsQCM } export interface PronoteLessonsContentsResources { resources: Array, // listeRessources subjects: Array // listeMatieres } export interface PronoteHomework { description: string, // descriptif lesson: PronoteObject, // cours subject: PronoteObject, // Matiere givenAt: Date, // DonneLe for: Date, // PourLe done: boolean, // TAFFait difficultyLevel: number, // niveauDifficulte duration: number, // duree color: string, // CouleurFond files: Array // ListePieceJointe } export interface PronoteMenu { hasLunch: boolean, // AvecRepasMidi hasDiner: boolean, // AvecRepasSoir filledWeeks: Array, // DomaineDePresence menus: Array, // ListeJours } export interface PronoteMenuDay { date: Date, // Date meals: Array // ListeRepas } export interface PronoteMenuMeal extends PronoteObject { content: Array // ListePlats } export interface PronoteMenuMealContent extends PronoteObject { lines: Array // ListeAliments } export interface PronoteMenuMealLine extends PronoteObject { labels: Array // listeLabelsAlimentaires } export interface PronoteMenuLabel extends PronoteObject { color: string // couleur }