UNPKG

crowous

Version:

A wrapper for the Crous Mobile internal API.

1 lines 29.3 kB
{"version":3,"sources":["../src/core/constants.ts","../src/models/Article.ts","../src/models/Contact.ts","../src/models/Day.ts","../src/models/Feed.ts","../src/models/FoodCategory.ts","../src/models/Image.ts","../src/models/Meal.ts","../src/models/Menu.ts","../src/models/Moment.ts","../src/models/PaymentMethod.ts","../src/models/Residence.ts","../src/models/Restaurant.ts","../src/models/RestaurantKind.ts","../src/models/Service.ts","../src/api/getFeeds.ts","../src/api/getNewsFrom.ts","../src/api/getResidencesFrom.ts","../src/api/getRestaurantsFrom.ts","../src/api/getServicesFrom.ts"],"names":["BASE_URL","Article","category","t","string","content","id","imageUrl","publishedAt","instance","title","date","Date","Contact","email","option","phone","falsyToNull","Day","Feed","identifier","isDefault","boolean","name","getNews","getNewsFrom","getResidences","getResidencesFrom","getRestaurants","getRestaurantsFrom","getServices","getServicesFrom","url","split","replace","FoodCategory","dishes","array","pick","Image","description","href","Meal","categories","reference","information","moment","enum","Moment","handleFoodCategories","self","map","deserialize","filter","Menu","meals","PaymentMethod","Residence","address","albumUrl","appointmentUrl","area","bookingUrl","contact","crousAndGoUrl","fullInformation","images","inHomeServices","latitude","number","localServices","longitude","troubleshootingUrl","virtualVisitUrl","websiteUrl","services","house_service","Restaurant","access","accessibility","album","closing","kind","RestaurantKind","menus","opening","operationalHours","paymentMethods","photo","shortDescription","wifi","getMeals","find","menu","getDate","getMonth","isOpen","dateOrDay","day","getDay","index","Morning","Lunch","Service","getFeeds","request","HttpRequest","Builder","build","response","send","json","toJSON","results","feed","xml","toXML","root","article","residence","toString","restaurants","JSON","parse","restaurant","online","service"],"mappings":"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","file":"index.mjs","sourcesContent":["export const BASE_URL = \"http://webservices-v2.crous-mobile.fr/feed/\";\n","import { deserializeWith, rename, t } from \"desero\";\n\n/**\n * An article for a feed.\n * @hideconstructor\n */\nexport class Article {\n category = t.string();\n content = t.string();\n id = t.string();\n @rename(\"image\")\n imageUrl = t.string();\n\n @deserializeWith((date) => new Date(date))\n @rename(\"date\")\n publishedAt = t.instance<Date>();\n\n title = t.string();\n}\n","import { deserializeWith, rename, t, u } from \"desero\";\n\n/**\n * Contact information.\n * @hideconstructor\n */\nexport class Contact {\n @deserializeWith(u.falsyToNull)\n email = t.option(t.string());\n\n /**\n * Note that there is no specific format for this field,\n * so be prepared to receive any phone number format.\n */\n @rename(\"tel\")\n phone = t.string();\n}\n","import type { Restaurant } from \"~/models\";\n\n/**\n * Each day of the week.\n *\n * Values are very important since they match {@link Restaurant|restaurants'} `opening` day index.\n */\nexport enum Day {\n Friday = 4,\n Monday = 0,\n Saturday = 5,\n Sunday = 6,\n Thursday = 3,\n Tuesday = 1,\n Wednesday = 2\n}\n","import type { Article, Residence, Restaurant, Service } from \"~/models\";\nimport { deserializeWith, rename, t } from \"desero\";\nimport { getNewsFrom, getResidencesFrom, getRestaurantsFrom, getServicesFrom } from \"~/api\";\n\n/**\n * A feed is a CROUS instance in France.\n * @hideconstructor\n */\nexport class Feed {\n /**\n * Internal identifier of the CROUS instance,\n * will be used for further requests.\n */\n @deserializeWith((url: string) => url.split(\"/\")[4])\n @rename(\"url\")\n identifier = t.string();\n\n /**\n * Not sure what is this for, it is always on `false`.\n */\n @rename(\"is_default\")\n isDefault = t.boolean();\n\n /**\n * Name of the CROUS instance.\n */\n @deserializeWith((name: string) => name.replace(\"FLUX \", \"\"))\n name = t.string();\n\n /**\n * Get news for the current feed.\n */\n getNews(): Promise<Array<Article>> {\n return getNewsFrom(this.identifier);\n }\n\n /**\n * Get residences for the current feed.\n */\n getResidences(): Promise<Array<Residence>> {\n return getResidencesFrom(this.identifier);\n }\n\n /**\n * Get restaurants for the current feed.\n */\n getRestaurants(): Promise<Array<Restaurant>> {\n return getRestaurantsFrom(this.identifier);\n }\n\n /**\n * Get services for the current feed.\n */\n getServices(): Promise<Array<Service>> {\n return getServicesFrom(this.identifier);\n }\n};\n","import { deserializeWith, t, u } from \"desero\";\n\n/**\n * A category of a meal.\n * @hideconstructor\n */\nexport class FoodCategory {\n /**\n * All dishes available in this category.\n */\n @deserializeWith(u.pick(\"name\"))\n dishes = t.array(t.string());\n\n /**\n * Name of the category.\n */\n name = t.string();\n}\n","import { deserializeWith, rename, t, u } from \"desero\";\n\n/**\n * An image with a description.\n * @hideconstructor\n */\nexport class Image {\n /**\n * Description of the linked image, probably for an `alt` attribute.\n */\n @rename(\"alt\")\n description = t.string();\n\n @deserializeWith(u.falsyToNull)\n @rename(\"src\")\n href = t.option(t.string());\n}\n","import type * as definitions from \"~/definitions\";\nimport { deserialize, deserializeWith, rename, t } from \"desero\";\nimport { FoodCategory, Moment } from \"~/models\";\n\n/**\n * A meal of a menu.\n * @hideconstructor\n */\nexport class Meal {\n /**\n * Each categories of the meal.\n */\n @deserializeWith(Meal.handleFoodCategories)\n @rename(\"foodcategory\")\n categories = t.array(t.reference(FoodCategory));\n\n /**\n * Sometimes, when something goes wrong or when something needs to be shared\n * (e.g.: they exceptionnaly close for this day) it is written here\n * and `categories` ends up being an empty list.\n */\n information: null | string = null;\n\n /**\n * For when this meal is made for during the day.\n */\n @rename(\"name\")\n moment = t.enum(Moment);\n\n private static handleFoodCategories(array: Array<definitions.foodcategory>, self: Meal): Array<FoodCategory> {\n return array.map((category) => deserialize(FoodCategory, category))\n .filter((category) => {\n if (category.name === \"informations\" || category.name === \"Fermeture\") {\n if (self.information === null) {\n self.information = category.dishes[0];\n }\n\n return false;\n }\n\n return true;\n });\n }\n}\n","import { deserializeWith, rename, t } from \"desero\";\nimport { Meal } from \"~/models\";\n\n/**\n * Menu of a specific date with meals details.\n * @hideconstructor\n */\nexport class Menu {\n /**\n * For when this menu is made for.\n */\n @deserializeWith((date) => new Date(date))\n date = t.instance<Date>();\n\n /**\n * Meals available in this menu.\n */\n @rename(\"meal\")\n meals = t.array(t.reference(Meal));\n}\n","import type { Restaurant } from \"~/models\";\n\n/**\n * Each moment of the day.\n */\nexport enum Moment {\n Evening = \"soir\",\n Lunch = \"midi\",\n Morning = \"matin\"\n}\n","/**\n * Payment methods allowed in a specific restaurant.\n */\nexport enum PaymentMethod {\n Card = \"Carte bancaire\",\n Cash = \"Espèce\",\n Izly = \"IZLY\",\n Moneo = \"Monéo\"\n}\n","import { deserializeWith, rename, t, u } from \"desero\";\n\n/**\n * @hideconstructor\n */\nexport class Residence {\n @deserializeWith(u.falsyToNull)\n address = t.option(t.string());\n\n @deserializeWith(u.falsyToNull)\n albumUrl = t.option(t.string());\n\n @deserializeWith(u.falsyToNull)\n appointmentUrl = t.option(t.string());\n\n @rename(\"zone\")\n area = t.string();\n\n @deserializeWith(u.falsyToNull)\n bookingUrl = t.option(t.string());\n\n contact = t.string();\n\n @deserializeWith(u.falsyToNull)\n crousAndGoUrl = t.option(t.string());\n\n @deserializeWith(u.falsyToNull)\n @rename(\"short_desc\")\n description = t.option(t.string());\n\n @rename(\"mail\")\n email = t.string();\n\n @rename(\"infos\")\n fullInformation = t.string();\n\n id = t.string();\n\n @deserializeWith((images) => typeof images === \"object\" ? images.url : [])\n images = t.array(t.string());\n\n @deserializeWith((services) => typeof services === \"object\" ? services.house_service : [])\n @rename(\"house_services\")\n inHomeServices = t.array(t.string());\n\n @deserializeWith(parseFloat)\n @rename(\"lat\")\n latitude = t.number();\n\n @rename(\"services\")\n localServices = t.string();\n\n @deserializeWith(parseFloat)\n @rename(\"lon\")\n longitude = t.number();\n\n @deserializeWith(u.falsyToNull)\n phone = t.option(t.string());\n\n title = t.string();\n\n @deserializeWith(u.falsyToNull)\n troubleshootingUrl = t.option(t.string());\n\n @deserializeWith(u.falsyToNull)\n virtualVisitUrl = t.option(t.string());\n\n @deserializeWith(u.falsyToNull)\n @rename(\"internetUrl\")\n websiteUrl = t.option(t.string());\n}\n","import type { Day } from \"./Day\";\nimport type { Meal } from \"~/models\";\nimport { deserializeWith, rename, t, u } from \"desero\";\nimport { Contact, Image, Menu, PaymentMethod, RestaurantKind } from \"~/models\";\nimport { Moment } from \"~/models\";\n\n/**\n * @hideconstructor\n */\nexport class Restaurant {\n @deserializeWith(u.falsyToNull)\n access = t.option(t.string());\n\n accessibility = t.boolean();\n\n /**\n * Full address of the restaurant.\n */\n @rename(\"adresse\")\n address = t.string();\n\n @deserializeWith(u.falsyToNull)\n album = t.option(t.reference(Image));\n\n area = t.string();\n closing = t.string();\n\n /**\n * Contact of the restaurant owners.\n */\n contact = t.reference(Contact);\n\n @deserializeWith(u.falsyToNull)\n @rename(\"crousandgo\")\n\n crousAndGoUrl = t.option(t.string());\n\n description = t.string();\n id = t.number();\n\n @rename(\"type\")\n kind = t.enum(RestaurantKind);\n\n @deserializeWith(u.falsyToNull)\n @rename(\"lat\")\n latitude = t.option(t.number());\n\n @deserializeWith(u.falsyToNull)\n @rename(\"lon\")\n longitude = t.option(t.number());\n\n /**\n * Menus for each day of the current month and a bit more sometimes.\n * Not sure when they decide to unpublish old menus and publish new ones.\n *\n * Also, note that they might be subject to change the menu of a given date frequently.\n */\n menus = t.array(t.reference(Menu));\n\n /**\n * An opening day string is three boolean (0 or 1).\n * Each day of the week is separated by commas (`,`) and each day\n * contains three booleans (`0` or `1`).\n *\n * Those three booleans are {@link Moment|\"Morning, Lunch, Evening\" values} in this order\n * and values `0` means closed and `1` means open.\n *\n * @example\n * // Let's take the following `opening` string.\n * \"010,011,011,011,111,000,000\"\n * // - Monday is closed on Morning and Evening, but is opened on Lunch.\n * // - Tuesday, Wednesday and Thursday are closed on Morning, but is opened on Lunch and Evening.\n * // - Friday is opened all day long (Morning, Lunch and Evening)\n * // - Saturday and Sunday are closed all day long (Morning, Lunch and Evening)\n */\n opening = t.string();\n\n @rename(\"operationalhours\")\n operationalHours = t.option(t.string());\n\n @deserializeWith(u.pick(\"name\"))\n @rename(\"payment\")\n paymentMethods = t.array(t.enum(PaymentMethod));\n\n photo = t.option(t.reference(Image));\n\n @rename(\"shortdesc\")\n shortDescription = t.string();\n\n title = t.string();\n\n /**\n * Whether the restaurant has Wi-Fi or not.\n */\n wifi = t.boolean();\n\n /**\n * Get the meals of the restaurant for a given date.\n *\n * @returns A list of the meals for that date or `null` if nothing is found.\n */\n getMeals(date: Date): Array<Meal> | null {\n return this.menus.find((menu) =>\n menu.date.getDate() === date.getDate()\n && menu.date.getMonth() === date.getMonth()\n )?.meals ?? null;\n }\n\n /**\n * Checks whether the restaurant is opened at a certain date on a certain moment.\n *\n * @example\n * const today = new Date();\n * const open = restaurant.isOpen(today, Moment.Lunch);\n */\n isOpen(date: Date, moment: Moment): boolean;\n /**\n * Checks whether the restaurant is opened at a certain day index on a certain moment.\n *\n * @example\n * const open = restaurant.isOpen(Day.Monday, Moment.Lunch);\n */\n isOpen(day: Day, moment: Moment): boolean;\n isOpen(dateOrDay: Date | Day, moment: Moment): boolean {\n let day: number;\n\n if (dateOrDay instanceof Date) {\n day = dateOrDay.getDay();\n }\n else {\n // is instanceof Day enum.\n day = dateOrDay;\n }\n\n const index = moment === Moment.Morning ? 0 : moment === Moment.Lunch ? 1 : 2;\n\n return (this.opening.split(\",\")[day][index] as \"0\" | \"1\") === \"1\";\n }\n}\n","export enum RestaurantKind {\n AdministrativeRestaurant = \"Restaurant administratif\",\n ApprovedRestaurant = \"Restaurant agréé\",\n Brewery = \"Brasserie\",\n Cafeteria = \"Cafétéria\",\n CoffeeCorner = \"Coffee Corner\",\n CrousAndGo = \"crous and go\",\n FoodTruck = \"Foodtruck\",\n GroceryStore = \"épicerie\",\n Kiosk = \"Kiosque\",\n ManagedRestaurant = \"Restaurant géré\",\n Pizzeria = \"Pizzéria\",\n Restaurant = \"Restaurant\",\n SandwichShop = \"Sandwicherie\",\n Scooter = \"Triporteur\",\n SelfService = \"Libre-service\",\n Space = \"Space\"\n}\n","import { deserializeWith, rename, t, u } from \"desero\";\n\n/**\n * @hideconstructor\n */\nexport class Service {\n @deserializeWith(u.falsyToNull)\n @rename(\"short_desc\")\n description = t.option(t.string());\n\n id = t.string();\n\n @rename(\"image\")\n imageUrl = t.string();\n\n title = t.string();\n\n @rename(\"link\")\n url = t.string();\n}\n","import type * as definitions from \"~/definitions\";\nimport { deserialize } from \"desero\";\nimport { HttpRequest, send } from \"schwi\";\nimport { BASE_URL } from \"~/core/constants\";\nimport { Feed } from \"~/models\";\n\n/**\n * Get all available {@link Feed|feeds}, so every CROUS instance in France.\n * @returns A list of all available {@link Feed|feeds}.\n *\n * @example\n * const feeds = await getFeeds();\n */\nexport async function getFeeds(): Promise<Array<Feed>> {\n const request = new HttpRequest.Builder(BASE_URL + \"feeds.json\").build();\n const response = await send(request);\n\n const json = await response.toJSON<{\n results: Array<definitions.feed>;\n }>();\n\n return json.results.map((feed) => deserialize(Feed, feed));\n};\n","import type * as definitions from \"~/definitions\";\nimport { deserialize } from \"desero\";\nimport { HttpRequest, send } from \"schwi\";\nimport { BASE_URL } from \"~/core/constants\";\nimport { Article } from \"~/models\";\n\n/**\n * Get all {@link Article|articles} for a given identifier.\n *\n * @param identifier - Where we should look for articles.\n * @returns A list of all {@link Article|articles} for a given identifier.\n *\n * @example\n * const news = await getNewsFrom(\"bordeaux\");\n *\n * for (const article of news) {\n * console.log(article.category, article.title);\n * }\n *\n * @example\n * const feeds = await getFeeds();\n * const news = await getNewsFrom(feeds[0].identifier);\n * // ...\n */\nexport async function getNewsFrom(identifier: string): Promise<Array<Article>> {\n const request = new HttpRequest.Builder(BASE_URL + `${identifier}/externe/actu.xml`).build();\n const response = await send(request);\n\n const xml = await response.toXML<{\n article: Array<definitions.article>;\n }>();\n\n return xml.root.article.map((article) => deserialize(Article, article));\n};\n","import type * as definitions from \"~/definitions\";\nimport { deserialize } from \"desero\";\nimport { HttpRequest, send } from \"schwi\";\nimport { BASE_URL } from \"~/core/constants\";\nimport { Residence } from \"~/models\";\n\n/**\n * Get all {@link Residence|residences} for a given identifier.\n *\n * @param identifier - Where we should look for residences.\n * @returns A list of all {@link Residence|residences} for a given identifier.\n *\n * @example\n * const residences = await getResidencesFrom(\"bordeaux\");\n *\n * for (const home of residences) {\n * console.log(`[${home.area}]: ${home.title}`);\n * }\n *\n * @example\n * const feeds = await getFeeds();\n * const residences = await getResidencesFrom(feeds[0].identifier);\n * // ...\n */\nexport async function getResidencesFrom(identifier: string): Promise<Array<Residence>> {\n const request = new HttpRequest.Builder(BASE_URL + `${identifier}/${identifier}-logement.xml`).build();\n const response = await send(request);\n\n const xml = await response.toXML<{\n residence: Array<definitions.residence>;\n }>();\n\n return xml.root.residence.map((residence) => deserialize(Residence, residence));\n};\n","import type * as definitions from \"~/definitions\";\nimport { deserialize } from \"desero\";\nimport { HttpRequest, send } from \"schwi\";\nimport { BASE_URL } from \"~/core/constants\";\nimport { Restaurant } from \"~/models\";\n\n/**\n * Get all {@link Restaurant|restaurants} for a given identifier.\n *\n * @param identifier - Where we should look for restaurants.\n * @returns A list of all {@link Restaurant|restaurants} for a given identifier.\n *\n * @example\n * const restaurants = await getRestaurantsFrom(\"bordeaux\");\n *\n * for (const restaurant of restaurants) {\n * console.log(restaurant.title, restaurant.address);\n * }\n *\n * @example\n * const feeds = await getFeeds();\n * const restaurants = await getRestaurantsFrom(feeds[0].identifier);\n * // ...\n */\nexport async function getRestaurantsFrom(identifier: string): Promise<Array<Restaurant>> {\n const request = new HttpRequest.Builder(BASE_URL + `${identifier}/externe/crous-${identifier}.min.json`).build();\n const response = await send(request);\n\n let content = await response.toString();\n content = content.replace(/[\\u0000-\\u001F]/g, \"\");\n\n const { restaurants } = JSON.parse(content) as {\n restaurants: Array<definitions.restaurant>;\n };\n\n return restaurants.map((restaurant) => deserialize(Restaurant, restaurant));\n};\n","import type * as definitions from \"~/definitions\";\nimport { deserialize } from \"desero\";\nimport { HttpRequest, send } from \"schwi\";\nimport { BASE_URL } from \"~/core/constants\";\nimport { Service } from \"~/models\";\n\n/**\n * Get all {@link Service|services} for a given identifier.\n *\n * @param identifier - Where we should look for services.\n * @returns A list of all {@link Service|services} for a given identifier.\n *\n * @example\n * const services = await getServicesFrom(\"bordeaux\");\n *\n * for (const service of services) {\n * console.log(service.title, service.url);\n * }\n *\n * @example\n * const feeds = await getFeeds();\n * const services = await getServicesFrom(feeds[0].identifier);\n * // ...\n */\nexport async function getServicesFrom(identifier: string): Promise<Array<Service>> {\n const request = new HttpRequest.Builder(BASE_URL + `${identifier}/${identifier}-online.xml`).build();\n const response = await send(request);\n\n const xml = await response.toXML<{\n online: Array<definitions.service>;\n }>();\n\n return xml.root.online.map((service) => deserialize(Service, service));\n};\n"]}