UNPKG

migros-api-wrapper

Version:

Making the api of migros more accessible to the public.

366 lines (346 loc) 11.6 kB
import { productDisplay } from "./product-display"; import { productSearch } from "./onesearch-oc-seaapi"; import { marketableStock } from "./marketablestock"; import { oauth2 } from "./oauth2"; import { security } from "./security"; import { cumulus } from "./cumulus"; import { IProductSupplyOptions } from "./marketablestock/product-supply"; import { ICumulusCookies, ILoginCookies } from "./interfaces/cookies"; import { ICumulusReceiptOptions, ICumulusReceiptsOptions, } from "./cumulus/receipts"; import { combineCookies } from "../utils/combineCookies"; import { ICumulusReceiptResponse, ICumulusReceiptsResponse, } from "./interfaces/receipts"; import { IProductCardsOptions } from "./product-display/product-cards"; import { IProductSearchBody, IProductSearchOptions, } from "./onesearch-oc-seaapi/product-search"; import { migusto } from "./migusto"; import { ICategoryListOptions } from "./onesearch-oc-seaapi/category"; import { stores } from "./stores"; import { ISearchStoresOptions } from "./stores/search-stores"; import { shoppingList } from "./shopping-list"; import { IProductPromotionSearchOptions } from "./product-display/product-promotion"; if (!process.env.MIGROS_API_WRAPPER_USERAGENT) { process.env.MIGROS_API_WRAPPER_USERAGENT = "Mozilla/5.0 (X11; Linux x86_64; rv:144.0) Gecko/20100101 Firefox/144.0"; } export class MigrosAPI { private _leShopToken: string | undefined; get leShopToken(): string { return <string>this._leShopToken; } set leShopToken(value: string) { this._leShopToken = value; } private _cumulusToken: string | undefined; get cumulusToken(): string { return <string>this._cumulusToken; } set cumulusToken(value: string) { this._cumulusToken = value; } private _loginCookies: ILoginCookies | undefined; get loginCookies(): ILoginCookies | undefined { return this._loginCookies; } set loginCookies(value: ILoginCookies | undefined) { this._loginCookies = value; } private _cumulusCookies: ICumulusCookies | undefined; get cumulusCookies(): ICumulusCookies | undefined { return this._cumulusCookies; } set cumulusCookies(value: ICumulusCookies | undefined) { this._cumulusCookies = value; } static products = { productStock: marketableStock, productDisplay: productDisplay, productSearch: productSearch, shoppingList: shoppingList, }; static stores = stores; static account = { oauth2: oauth2, security: security, cumulus: cumulus, }; static migusto = { recipeSearch: migusto.recipeSearch, recipeProducts: migusto.recipeProducts, recipeDetails: migusto.recipeDetails, }; stores = { searchStores: async ( searchStoresOptions: ISearchStoresOptions, token: string | undefined = this.leShopToken, ): Promise<any> => { return await stores.searchStores(searchStoresOptions, { leshopch: token, }); }, }; products = { productStock: { getProductSupply: async ( productSupplyOptions: IProductSupplyOptions, token: string | undefined = this.leShopToken, ): Promise<any> => { if (!token) { throw Error("LeShop Token is undefined"); } return await marketableStock.getProductSupply(productSupplyOptions, { leshopch: token, }); }, }, productDisplay: { getProductCards: async ( productCardOptions: IProductCardsOptions, token: string | undefined = this.leShopToken, ): Promise<any> => { if (!token) { throw Error("LeShop Token is undefined"); } return await productDisplay.getProductCards(productCardOptions, { leshopch: token, }); }, getProductDetails: async ( productSupplyOptions: IProductSupplyOptions, token: string | undefined = this.leShopToken, ): Promise<any> => { if (!token) { throw Error("LeShop Token is undefined"); } return await productDisplay.getProductDetails(productSupplyOptions, { leshopch: token, }); }, getProductPromotionSearch: async ( productPromotionOptions: IProductPromotionSearchOptions, token: string | undefined = this.leShopToken, ): Promise<any> => { if (!token) { throw Error("LeShop Token is undefined"); } return await productDisplay.getProductPromotionSearch( productPromotionOptions, { leshopch: token, }, ); }, }, productSearch: { categoryList: async ( categoryListOptions?: ICategoryListOptions, token: string | undefined = this.leShopToken, ): Promise<any> => { if (!token) { throw Error("LeShop Token is undefined"); } return await productSearch.listCategories( { leshopch: token, }, categoryListOptions, ); }, searchProduct: async ( productSearchBody: IProductSearchBody, productSearchOptions?: IProductSearchOptions, token: string | undefined = this.leShopToken, ): Promise<any> => { if (!token) { throw Error("LeShop Token is undefined"); } return await productSearch.searchProduct( productSearchBody, { leshopch: token, }, productSearchOptions, ); }, }, shoppingList: { listCategories: async ( token: string | undefined = this.leShopToken, categoryListOptions?: ICategoryListOptions, ): Promise<any> => { if (!token) { throw Error("LeShop Token is undefined"); } return await shoppingList.listCategories( { leshopch: token, }, categoryListOptions, ); }, }, }; account = { oauth2: { loginGuestToken: async (): Promise<any> => { const guestInfo = await oauth2.getGuestToken(); this.leShopToken = guestInfo.token; return await guestInfo; }, getUserInfo: async ( token: string | undefined = this.cumulusToken, ): Promise<any> => { if (!token) { throw Error("Cumulus Token is undefined"); } return await oauth2.getUserInfo(token); }, }, security: { getOptions: async ( cookies: ILoginCookies | undefined = this.loginCookies, ): Promise<any> => { if (!cookies) { throw Error("Login Cookies are undefined"); } const { body, "set-cookie": setCookie } = await security.getOptions(cookies); this.loginCookies = <ILoginCookies>combineCookies(cookies, setCookie); return body; }, getPaymentDevices: async ( cookies: ILoginCookies | undefined = this.loginCookies, ): Promise<any> => { if (!cookies) { throw Error("Login Cookies are undefined"); } const { body, "set-cookie": setCookie } = await security.getPaymentDevices(cookies); this.loginCookies = <ILoginCookies>combineCookies(cookies, setCookie); return body; }, }, cumulus: { getCumulusStats: async ( cookies: ILoginCookies | undefined = this.loginCookies, ): Promise<any> => { if (!cookies) { throw Error("Login Cookies are undefined"); } const { body, "set-cookie": setCookie } = await cumulus.getCumulusStats(cookies); this.loginCookies = <ILoginCookies>combineCookies(cookies, setCookie); return body; }, getCumulusReceipt: async ( cumulusReceiptOptions: ICumulusReceiptOptions, cookies: ICumulusCookies | undefined = this.cumulusCookies, htmlOnly = false, ): Promise<ICumulusReceiptResponse | string> => { if (!cookies) { throw Error("Cumulus Cookies are undefined"); } return await cumulus.getCumulusReceipt( cumulusReceiptOptions, cookies, htmlOnly, ); }, getCumulusReceiptFromUrl: async ( url: string, cookies: ICumulusCookies | undefined = this.cumulusCookies, htmlOnly = false, ): Promise<ICumulusReceiptResponse | string> => { if (!cookies) { throw Error("Cumulus Cookies are undefined"); } return await cumulus.getCumulusReceiptFromUrl(url, cookies, htmlOnly); }, getCumulusReceipts: async ( cumulusReceiptsOptions: ICumulusReceiptsOptions, cookies: ICumulusCookies | undefined = this.cumulusCookies, ): Promise<ICumulusReceiptsResponse> => { if (!cookies) { throw Error("Cumulus Cookies are undefined"); } return await cumulus.getCumulusReceipts( cumulusReceiptsOptions, cookies, ); }, getCumulusPrincipal: async ( cookies: ILoginCookies | undefined = this.loginCookies, ): Promise<any> => { if (!cookies) { throw Error("Login Cookies are undefined"); } const { body, "set-cookie": setCookie } = await cumulus.getCumulusPrincipal(cookies); this.loginCookies = <ILoginCookies>combineCookies(cookies, setCookie); return body; }, getCumulusServicesSmall: async ( cookies: ILoginCookies | undefined = this.loginCookies, ): Promise<any> => { if (!cookies) { throw Error("Login Cookies are undefined"); } const { body, "set-cookie": setCookie } = await cumulus.getCumulusServicesSmall(cookies); this.loginCookies = <ILoginCookies>combineCookies(cookies, setCookie); return body; }, getCumulusPaymentSites: async ( cookies: ILoginCookies | undefined = this.loginCookies, ): Promise<any> => { if (!cookies) { throw Error("Login Cookies are undefined"); } const { body, "set-cookie": setCookie } = await cumulus.getCumulusPaymentSites(cookies); this.loginCookies = <ILoginCookies>combineCookies(cookies, setCookie); return body; }, getCumulusCreditCard: async ( cookies: ILoginCookies | undefined = this.loginCookies, ): Promise<any> => { if (!cookies) { throw Error("Login Cookies are undefined"); } const { body, "set-cookie": setCookie } = await cumulus.getCumulusCreditCard(cookies); this.loginCookies = <ILoginCookies>combineCookies(cookies, setCookie); return body; }, getCumulusHousehold: async ( cookies: ILoginCookies | undefined = this.loginCookies, ): Promise<any> => { if (!cookies) { throw Error("Login Cookies are undefined"); } const { body, "set-cookie": setCookie } = await cumulus.getCumulusHousehold(cookies); this.loginCookies = <ILoginCookies>combineCookies(cookies, setCookie); return body; }, getCumulusInvoice: async ( cookies: ILoginCookies | undefined = this.loginCookies, ): Promise<any> => { if (!cookies) { throw Error("Login Cookies are undefined"); } const { body, "set-cookie": setCookie } = await cumulus.getCumulusInvoice(cookies); this.loginCookies = <ILoginCookies>combineCookies(cookies, setCookie); return body; }, }, }; }