homepage.ts
1 import { RequestFN } from "~/core/request-function"; 2 import { encodePronoteDate } from "~/encoders/pronote-date"; 3 import { TabLocation, type SessionHandle } from "~/models"; 4 import { translateToWeekNumber } from "./helpers/week-number"; 5 import { decodeHomepage } from "~/decoders/homepage"; 6 import type { Homepage } from "~/models/homepage"; 7 import { apiProperties } from "./private/api-properties"; 8 9 /** 10 * Retrieve data from the homepage for the given session. 11 */ 12 export const homepage = async (session: SessionHandle, day = session.instance.nextBusinessDay): Promise<Homepage> => { 13 const properties = apiProperties(session); 14 15 const weekNumber = translateToWeekNumber(day, session.instance.firstMonday); 16 const next = encodePronoteDate(day); 17 18 const request = new RequestFN(session, "PageAccueil", { 19 [properties.signature]: { onglet: TabLocation.Presence }, 20 21 [properties.data]: { 22 avecConseilDeClasse: true, 23 24 dateGrille: { 25 _T: 7, 26 V: next 27 }, 28 29 numeroSemaine: weekNumber, 30 31 coursNonAssures: { 32 numeroSemaine: weekNumber 33 }, 34 35 personnelsAbsents: { 36 numeroSemaine: weekNumber 37 }, 38 39 incidents: { 40 numeroSemaine: weekNumber 41 }, 42 43 exclusions: { 44 numeroSemaine: weekNumber 45 }, 46 47 donneesVS: { 48 numeroSemaine: weekNumber 49 }, 50 51 registreAppel: { 52 date: { 53 _T: 7, 54 V: next 55 } 56 }, 57 58 previsionnelAbsServiceAnnexe: { 59 date: { 60 _T: 7, 61 V: next 62 } 63 }, 64 65 donneesProfs: { 66 numeroSemaine: weekNumber 67 }, 68 69 EDT: { 70 numeroSemaine: weekNumber 71 }, 72 73 TAFARendre: { 74 date: { 75 _T: 7, 76 V: next 77 } 78 }, 79 80 TAFEtActivites: { 81 date: { 82 _T: 7, 83 V: next 84 } 85 }, 86 87 partenaireCDI: { 88 CDI: {} 89 }, 90 91 tableauDeBord: { 92 date: { 93 _T: 7, 94 V: next 95 } 96 }, 97 98 modificationsEDT: { 99 date: { 100 _T: 7, 101 V: next 102 } 103 } 104 } 105 }); 106 107 const response = await request.send(); 108 return decodeHomepage(response.data[properties.data]); 109 };