UNPKG

migros-api-wrapper

Version:

Making the api of migros more accessible to the public.

188 lines 9.69 kB
"use strict"; /* eslint-disable @typescript-eslint/naming-convention */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCumulusReceipts = exports.getCumulusReceiptFromUrl = exports.getCumulusReceipt = void 0; const cheerio = __importStar(require("cheerio")); const requests_1 = require("../../utils/requests"); const apiPaths_1 = require("../apiPaths"); const Language_1 = require("../enums/Language"); const urlExport = apiPaths_1.migrosApiPaths["account"].purchases.receipts; const urlList = apiPaths_1.migrosApiPaths["account"].purchases.receipts; const defaultCumulusReceiptOptions = { transactionId: "", fallbackLanguage: Language_1.Language.DE, type: "HTML", }; async function getCumulusReceiptRequest(url, options, cookies, htmlOnly) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1; const headers = { accept: "application/json, text/plain, */*", "accept-language": "en-US,en;q=0.5", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "X-CSRF-TOKEN": cookies.CSRF || "", Referer: "https://account.migros.ch/purchases/receipts", }; const response = await (0, requests_1.getRequest)(url, options, headers, cookies); if (!response.text) { throw new Error("No receipt has been found!"); } if (htmlOnly) { return await response.text(); } const $ = cheerio.load(await response.text()); const articles = $("[class='article pre']").text().split("\n"); const store = $("[class='store text-center pre']").text().split("\n"); const discountRounding = $("[class='discount pre']") .text() .trim() .split(/\s\s+/)[1]; const discountTotal = $("[class='discounttotal pre']") .text() .trim() .split(/\s\s+/)[1]; const totalCost = $("[class='total pre']").text().trim().split(/\s+/); const payment = $("[class='payment pre']").text().split("\n"); const eftPayment = $("[class='eftpayments pre']").text().split("\n"); const cumulus = $("[class='cumukus pre']").text().split("\n"); const footer = $("[class='footer pre']").text().split("\n"); const receiptArticles = []; // eslint-disable-next-line no-loops/no-loops for (let i = 2; i < articles.length - 1; i++) { const receiptArticleStringArray = articles[i].trim().split(/\s\s+/); receiptArticles.push({ product: receiptArticleStringArray[0], count: parseFloat(receiptArticleStringArray[1]), price: { single: parseFloat(receiptArticleStringArray[2]), discount: receiptArticleStringArray.length === 6 ? parseFloat(receiptArticleStringArray[3]) : 0, total: receiptArticleStringArray.length === 6 ? parseFloat(receiptArticleStringArray[4]) : parseFloat(receiptArticleStringArray[3]), }, }); } return { store: { cooperative: store[0].trim(), outlet: (_a = store[1]) === null || _a === void 0 ? void 0 : _a.trim(), }, articles: receiptArticles, discount: { rounding: discountRounding ? parseFloat(discountRounding.split("-")[0]) : 0, total: parseFloat(discountTotal) || 0, }, total: { value: parseFloat(totalCost[2]), currency: totalCost[1], }, payment: { value: parseFloat((_b = payment[0].trim().split(/\s\s+/)[1]) === null || _b === void 0 ? void 0 : _b.trim()), type: payment[0].trim().split(/\s\s+/)[0].trim(), return: payment[1] ? parseFloat((_c = payment[1].trim().split(/\s\s+/)[1]) === null || _c === void 0 ? void 0 : _c.trim()) : 0, }, eft: eftPayment ? { booking: { type: (_e = (_d = eftPayment[1]) === null || _d === void 0 ? void 0 : _d.trim().split(/\s\s+/)[1]) === null || _e === void 0 ? void 0 : _e.trim(), card: (_f = eftPayment[2]) === null || _f === void 0 ? void 0 : _f.trim(), }, date: new Date(+((_g = eftPayment[3]) === null || _g === void 0 ? void 0 : _g.trim().split(/\s\s+/)[0].trim().split(".")[2]), +((_h = eftPayment[3]) === null || _h === void 0 ? void 0 : _h.trim().split(/\s\s+/)[0].trim().split(".")[1]) - 1, +((_j = eftPayment[3]) === null || _j === void 0 ? void 0 : _j.trim().split(/\s\s+/)[0].trim().split(".")[0]), +((_k = eftPayment[3]) === null || _k === void 0 ? void 0 : _k.trim().split(/\s\s+/)[1].trim().split(":")[0]), +((_l = eftPayment[3]) === null || _l === void 0 ? void 0 : _l.trim().split(/\s\s+/)[1].trim().split(":")[1]), 0), total: parseFloat((_m = eftPayment[5]) === null || _m === void 0 ? void 0 : _m.trim().split(/\s\s+/)[1].trim()), } : null, cumulus: { nr: (_o = cumulus[2]) === null || _o === void 0 ? void 0 : _o.trim().split(/\s\s+/)[1], points: { current: parseFloat((_p = cumulus[3]) === null || _p === void 0 ? void 0 : _p.trim().split(/\s\s+/)[1]), received: parseFloat((_q = cumulus[4]) === null || _q === void 0 ? void 0 : _q.trim().split(/\s\s+/)[1]), }, }, details: { outlet: (_r = footer[2]) === null || _r === void 0 ? void 0 : _r.trim().split(/\s\s+/)[0], bed: (_s = footer[2]) === null || _s === void 0 ? void 0 : _s.trim().split(/\s\s+/)[1], box: (_t = footer[2]) === null || _t === void 0 ? void 0 : _t.trim().split(/\s\s+/)[2], bon: (_u = footer[2]) === null || _u === void 0 ? void 0 : _u.trim().split(/\s\s+/)[3], date: new Date(+((_v = footer[2]) === null || _v === void 0 ? void 0 : _v.trim().split(/\s\s+/)[4].split(".")[2]), +((_w = footer[2]) === null || _w === void 0 ? void 0 : _w.trim().split(/\s\s+/)[4].split(".")[1]) - 1, +((_x = footer[2]) === null || _x === void 0 ? void 0 : _x.trim().split(/\s\s+/)[4].split(".")[0]), +((_y = footer[2]) === null || _y === void 0 ? void 0 : _y.trim().split(/\s\s+/)[5].split(":")[0]), +((_z = footer[2]) === null || _z === void 0 ? void 0 : _z.trim().split(/\s\s+/)[5].split(":")[1]), +((_0 = footer[2]) === null || _0 === void 0 ? void 0 : _0.trim().split(/\s\s+/)[5].split(":")[2])), letter: (_1 = footer[2]) === null || _1 === void 0 ? void 0 : _1.trim().split(/\s\s+/)[6].trim(), }, }; } async function getCumulusReceipt(cumulusReceiptOptions, cookies, htmlOnly = false) { cumulusReceiptOptions = { ...defaultCumulusReceiptOptions, ...cumulusReceiptOptions, }; return getCumulusReceiptRequest(urlExport + "/" + cumulusReceiptOptions.receiptId, cumulusReceiptOptions, cookies, htmlOnly); } exports.getCumulusReceipt = getCumulusReceipt; async function getCumulusReceiptFromUrl(url, cookies, htmlOnly = false) { url = apiPaths_1.migrosApiPaths["cumulus"] + url; return getCumulusReceiptRequest(url, {}, cookies, htmlOnly); } exports.getCumulusReceiptFromUrl = getCumulusReceiptFromUrl; function convertDateToCumulusDateString(date) { const offset = date.getTimezoneOffset(); date = new Date(date.getTime() - offset * 60 * 1000); return date.toISOString().split("T")[0]; } const defaultCumulusReceiptsOptions = { dateFrom: new Date(), dateTo: new Date(), }; async function getCumulusReceiptsRequest(url, options, cookies) { const headers = { accept: "application/json, text/plain, */*", "accept-language": "en-US,en;q=0.5", "sec-fetch-dest": "empty", "sec-fetch-mode": "cors", "sec-fetch-site": "same-origin", "X-CSRF-TOKEN": cookies.CSRF || "", Referer: "https://account.migros.ch/purchases/receipts", }; const newOptions = { dateFrom: convertDateToCumulusDateString(options.dateFrom), dateTo: convertDateToCumulusDateString(options.dateTo || new Date()), }; const response = await (0, requests_1.getRequest)(url, newOptions, headers, cookies); return await response.json(); } async function getCumulusReceipts(cumulusReceiptsOptions, cookies) { cumulusReceiptsOptions = { ...defaultCumulusReceiptsOptions, ...cumulusReceiptsOptions, }; return getCumulusReceiptsRequest(urlList, cumulusReceiptsOptions, cookies); } exports.getCumulusReceipts = getCumulusReceipts; //# sourceMappingURL=receipts.js.map