x1ongzhu 1 жил өмнө
parent
commit
faea2d9954
11 өөрчлөгдсөн 89 нэмэгдсэн , 1120 устгасан
  1. 0 14
      1.html
  2. 0 55
      2.mjs
  3. 0 6
      3.mjs
  4. 0 513
      4.mjs
  5. 28 0
      5.js
  6. 0 472
      5.mjs
  7. 1 1
      app.mjs
  8. 6 39
      login.js
  9. 15 15
      package.json
  10. 39 0
      setupRoute.js
  11. 0 5
      yarn.lock

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 14
1.html


+ 0 - 55
2.mjs

@@ -1,55 +0,0 @@
-import axios from "axios";
-import https from "https";
-import { load } from "cheerio";
-import stringHash from "string-hash";
-import fs from "fs";
-const { data: res } = await axios.get(
-    "https://accounts.pcid.ca/oauth2/v1/authorize",
-    {
-        params: {
-            client_id: "ed22f54785b74fe688011366a65ed5fb",
-            response_type: "code",
-            scope: "openid api.loblaw.digitalpco offline_access",
-            redirect_uri: "https://pcoptimum.ca/login",
-        },
-    }
-);
-const $ = load(res);
-const form = {};
-$("form input").each((i, e) => {
-    form[$(e).attr("name")] = $(e).attr("value");
-});
-const email = "linxiaojoe@hotmail.com";
-const password = "Andy123456$";
-const hashEmail = (email = "") => {
-    const [username, domain] = email.split("@");
-    return `${stringHash(username)}@${domain}`;
-};
-try {
-    const httpsAgent = new https.Agent({
-        rejectUnauthorized: false,
-        host: "192.168.50.202",
-        port: 9090,
-    });
-    const data = {
-        email,
-        password,
-        loginCtx: form.loginCtx,
-        rememberMe: false,
-        sso: false,
-        mandatory2fa: true,
-        trustToken: null,
-        deviceDetails:
-            '{"currentTime":"Sun Mar 10 2024 02:51:27 GMT+0800 (中国标准时间)","screenWidth":390,"screenHeight":844,"screenColorDepth":24,"screenPixelDepth":24,"windowPixelRatio":3,"language":"zh-CN","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1","cookieEnabled":true,"mimeTypes":0,"plugins":0,"timeZone":-480}',
-        hashedEmail: hashEmail(email),
-        encodedEmail: btoa(email),
-    };
-    console.log(JSON.stringify(data, null, 4));
-    const { data: loginData } = await axios.post(
-        "https://accounts.pcid.ca/login",
-        data
-    );
-    console.log(loginData);
-} catch (error) {
-    console.log(error.message);
-}

+ 0 - 6
3.mjs

@@ -1,6 +0,0 @@
-import uniqueRandomArray from "unique-random-array";
-import userAgents from "top-user-agents";
-
-const randomUserAgent = uniqueRandomArray(userAgents);
-
-console.log(randomUserAgent());

+ 0 - 513
4.mjs

@@ -1,513 +0,0 @@
-import { chromium } from "playwright";
-import fs from "fs";
-import { dirname, resolve, join } from "path";
-import { fileURLToPath } from "url";
-import stringHash from "string-hash";
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = dirname(__filename);
-const browser = await chromium.launch({
-    headless: false,
-    devtools: false,
-    args: ["--no-sandbox", "--disable-setuid-sandbox"],
-});
-
-const context = await browser.newContext({
-    userAgent:
-        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0",
-    viewport: { width: 1297, height: 805 },
-    locale: "en-CA",
-    timezoneId: "America/Toronto",
-    serviceWorkers: "block",
-    // proxy: {
-    //     server: "217.23.2.7:11728",
-    //     username: "12930238-mobile-country-CA",
-    //     password: "2l159221qn",
-    // },
-});
-
-await context.addCookies([
-    {
-        name: "PIM-SESSION-ID",
-        value: "UVEVwX5GcOHuiFxC",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: -1,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_spvid_ses.931f",
-        value: "*",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710159839,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "jjSPnsABk",
-        value: "A7lZXC2OAQAA9b4Ug3Fgon7KRtKIcmrkGp6kQIdpWLS-TGj1Ken4ssy4Pl52Aa75VG4XTlIDwH9eCOfvosJeCA|1|0|a521993573582ce4b54430aa6b4d3f76c46370f8",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1744718033.165631,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "kameleoonVisitorCode",
-        value: "3efbe79a-ff61-4eea-b7fe-d71bdbbb36c8",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1741694012.088232,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "bm_sv",
-        value: "2D0975A710D77F761734E62D398C27FE~YAAQN+HdF3AFsSyOAQAAq15cLRcsGfTN+83c9xixMqPw+8ta+xkcG3jt1NEH2L5J3wzUHCR/vf+Z6K/6ueOTdmaW8HyFw+zxdLdq72SVy4+JoQHguEiyf31oy6akx/KtFEaGMwrfQxqJP8+5JkFL0kpEes+faa72Xz0GruTJNVNb+IboYa0z04wvNJl5aTve852EwV8Hr9PsUK5IZtDFgfVTDVQwBYRrc5EYPRibDa5MMfZetxNNN90j3CIiRXCxvME=~1",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710165209.152567,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "_gcl_au",
-        value: "1.1.1769014531.1710158013",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1717934013,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "ak_bmsc",
-        value: "48286B0D2A2923C08E3871A8A3EFD186~000000000000000000000000000000~YAAQ1OHdF5tM9CuOAQAAiWFcLRfbaRXM17b3kdWQ0BvKNPE5voFBJ976Ji/sUYw8zKrX8nWQKHryeSwB2CnOYA/kLlQW4Jo26X+u+jcZY7cu+8P2lcTao3F6pQTBxe7EwYnU8ky0g29RAJYbM2WjA/OATtWtLQH/MQ3k6+YDN7xP7ob2kE1HcHKssGcwWbnMUnq9buRFRU3IUXkOxV5kPMfcLD//9HH2F0LvR4DkndUWEX0M01kLVY8bVWbkKx3Bcf+gRnHAG11GEINxTv8s9DqyMA4yMPrNOGmnePnaPtMw1s4LNMBHCIsBY0RHYVYPT/ztUapfWPAFQUtoIJbSzysBpTzn45eae7HhcGr/dr/khfwKlrbPRdPMdKdF0+iPR345o7lKuj7ARSEdeih8sJcN/INpyXMZ9iq3UQ2+Fw+9K4neO5tdYx7cx9D8IPb3+nE+bxfBYxOMfcGEKDOxI3nKe0RRx66ZnHAhfABBTBquXb/i9mpYb7xHtoy0/tgsAg==",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710165208.906158,
-        httpOnly: true,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_gid",
-        value: "GA1.2.574244360.1710158015",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710244434,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_gat_UA-87445536-1",
-        value: "1",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710158074,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_fbp",
-        value: "fb.1.1710158015314.1404317019",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1717934036,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "receive-cookie-deprecation",
-        value: "1",
-        domain: ".doubleclick.net",
-        path: "/",
-        expires: 1725710035.248061,
-        httpOnly: true,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "_imp_di_pc_",
-        value: "AcDw7mUAAAAA1nCMn0bL4MlwFUHlrxKO",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1741694035.986347,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "mdLogger",
-        value: "false",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741694037,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "kampyle_userid",
-        value: "fc37-dda7-f35e-76ec-7376-f88f-7e03-b595",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741694017,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "IDE",
-        value: "AHWqTUkmQ5lw8fgkd0cehBuPmVCSQz3ygjNyXY_UfxPcTZQ7GA_mxNvQmeFvBbNF1Yk",
-        domain: ".doubleclick.net",
-        path: "/",
-        expires: 1744718018.037597,
-        httpOnly: true,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "ORA_OCIS_REQ_2",
-        value: "n3Vgwp1oSTrxmHznnCZ8Kx1sNr81ctmAo3pG+OFhSyXbwAYmeuxfIQQMKB2aaSR5s3XN53jzNeyVh2q83nkI0xeOlJ5skTtfL3s6awKzOAQ8nlZddq+I2HXRdVRnNO3LfWA68XdpKGFVlPGHuaahKOff4JSUc8fox/NCkCSk8w2HTjdY82yBh9t/TycbY2BxzXV7BKoiyLvn1xVdZawkolWV8L58C1CCa/OlkG4V1LWtLsx3KrdnU5vVBOdctXFGZS4cx29VTfyWA8WfiBlZFAkda0leldlpfjCjLa6YpNmnB5pwkRlNRMkMEKKpUuS6btTInvNrfWbzpMtMkHcunY5qyibw4D0H0ab9LvbNXh0Qd0ZOgmmNs05Snywggu6x2OYclRzQpuJ1jWpxuOT+aIuWxafe5s4rqh0YHtIAks4FleNKhUeHFtTsLF5wWhxPZvFpYJeROdHILyo/cp1bISoIiihnbGlacV4usK9crU9Kr0PxFPkBPvLgoAShPMdJr4uanTdCJ3/Ls2QJAgj+1fsF5cUzKoYHJIwLJFnKyU0aDgg09UsDSJj9fgHJP7duz/oEuDCoaFUFXB4wwkKeWIdzY2+sOIxCrEB4eP9T/JeJvfi8aDmKlWWfVwAh/jJQtNYAzTMZI0CArptddu9b+81+i/jn2j5tkEH3O9jhuimYFZEIs3taYYNfuX8JEt7n2RCN6nvpG60arn9wJI2vcndF3LBCoSYmkwoE2yPgJEB73njbNgtiWeW2iTWIxpzSYu9P9oB8Rnh8no50+XeTSbMyfLS6T8Exg1fbYvDK1dopO2C0HtV56+gUnjJRsEHOPJ/WPopC5cE77hV2MIk9Ybui48FaJU45jUl6dlO+lu2yGI2LGMuUuk/btoTOvOnhRE+R4HILMyZWFYgF9uZFOdzeBNae2mwhAHH4jboiVQ~g2h2SkXYLU1xFP4U4gtE2q1JWy0PvkuV3AEFuKFAYzo",
-        domain: "accounts.pcid.ca",
-        path: "/",
-        expires: -1,
-        httpOnly: true,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "ORA_OCIS_REQ_1",
-        value: "uiNbZB1NlBh27J5d4xERaGaRMcfJhHONj1VfhJnButEbY3AyeudE+H3Ed9oESLPrwPXvz6I31ao6Mx/a0LUH/WHjCG9BdX50cLlkBCJrtr+3Wa7d7QXXEXHAwr0nmULeH7h0fXoGX+S2pcsRGGbEF2RNad+FFbKXMbhzKXpWNRuELjL94Dkj0+EAjIXoQe8Y4tafchxomasblpMZUxHaO+Srn81fyBvh+OQsAlm/72FoFjPa0wOb6s8QCekV+tnrWxvSknohPu1addhBY9ZJx2XlCM6o7Ws6xbbSc9dvM+zcYtMz22zRgFue/53SOF0G6aIMhtZzLseBUVABaJBWlcPG7fGKwBHinBcKgvmpKe2pdHic7oPAIw6cGyuUoVc7nadOor67MZFuMV1dUsynNe6Te79AADtgKBNCmDfWSdUd+076YkCwRhlt5SbkXls/72TbQ+dqqsu/Pm0uBJOnnLl7yQ+994ouD3ytz6QsqtnSJwIr90aZDWRk0wsdLekYs64QpPaoOm2q5QdjLiZ1du8WMmKkuLQI81gsbSliz9ZZEw+EsxJM7dxOafKZa9kllDQlgKZSPURo3S33yLS52e0C7ulxSwBXu9mjgPPWBZHvPgTdks84UUZHOd5SqJa0OPQD6sjqf7JJU0iunZhv15sPnLfrsZBCgBxRcZHy+Re3y2RgZxSsuDllyircwkQ/i2Z55lrlo+g8VQbuYVkBKEdWjhAPeZc3bonM3CMhIRFLR9RbjT23k8spT/c6sU0IbMf9oZ9ZEIyP1+a550avEsY8orbd8S52JjxL3N+WHMOaFMbhoDHI5MNvDfE0f6BZ3CyrWrCZ5+l+/NrbHBrOYy6IuqKoW4+qswdR8da6qGV+qLY8tlPa7IlIOod1InkTPX7d1YlEwhs7VhZ3czzSlrKfKTtHAzG9dO2tbDt/C6PzaWdXZyDtbWFLpWk/iXK0D7WCTYghTNOTvqWfeFbrcA8L2E3Su19v/u23miMccF4T3DayOAEjA743CRw3oQoYfEYIqECRRHsE2RGUpQ0GXQhrAAexRfbJra1FFCJBpw7xTsFOyksOVwWECDpKyQ3PIe8eKyROGCrL7Dye16pN3DpXK763MIyXv/0Wnxrypi/hwhOn6xc29BUN7bs7IlJ3Hj5zovUw5oHTKhv+EHTx4k2hiZnSWPrF4i4GqgdiML/w/QjQZ5ZIBWNkUeAm/z+RJ8aZDzSzSs5AoUiDMTNHYPhwXrQ2KRvDIcTLYYJfLGWz8dOsBtCLr1ctxxW0K+cBsNFesd5Xt4bQBTpsj4fgn3zlThE/dBLqJv8ygAFOcHWWhK/8CQszMqHFzftVUDtn9L2GUOLIy9S38I9+D9AqwnnDaW6rhqUfRk5wkW5rZCBORuD7IPkE/rK/ntNaOw2jEX6pOYg5CCGkRYkVDGiy9jqyl3Zp8sG+zKmiughY6m6NBTHU0vjaQXxKF2RVYmG2o/RjYP2sEzErXM3j90DtzuPFcSCpaEroOTPxx02m7chIdLJzueyg/TQDRWA1ontCjwoOGqk8Gikk+boKGGlBR4FEhRLYKfBu/wVuNsgj6eKzKOGupiX95Qsl3vSxox2Vm3lll6TUx9tPHJol957Y8xkrZGiWrvnVzZMML1lvUiC8tZ/Z4HPGtZpKRoSOOcy4P2PMQwokEVJfAkD1ubJDPqAGxVrfT27Rdm3Hi5m26MYCUQEQdolRKHAspr1cgHgRqa0K5YxTOpN+rjbadjY08qbGKHRQ31ltYOPVHl3Ba35MY+B/uvLgrTnh/djiogkVQVcsVZern/QQGqv3w+o3uzDywPuNshbDTKGtqVRT+h/zRh7AX+eQMUbaBKC3TJHcvueAoj2g0vkyZo6Fxw7rjf3hGtaM5NuFp+zx1KIUEV39",
-        domain: "accounts.pcid.ca",
-        path: "/",
-        expires: -1,
-        httpOnly: true,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "PIM-SESSION-ID",
-        value: "Pe0vmOIHczgghdql",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: -1,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "bm_mi",
-        value: "FC3DDACD62B53504A96804ACD75E07E3~YAAQVuHdF9BI/iiOAQAAeX9cLRecc8YaGp7KP/17DAk6q0rTOR0nLAqOfdncVJ9lZNdOappuoaoYoJH+J5NHDGDDltg1/9H6Tz34Mfi0iKuaImuH8a+1K1TqbGLrxOcMi4S5qLYi2giH4unEU9AVQJ4J4kazBWZb3h3bxPWO4LCQBRRCA3u/VWG522xADqCKn274iNoHvKsNd8RwoELKkdK63CSutFqhhy7GXwEPD07FbMb/rlfg+tcdE/1JbsvgCpThtc2EQCo89ORlw6pWYrtPoLg3YZyi5xOJFRCV8OCb+RkkIJBF~1",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710165218.55062,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "bm_sv",
-        value: "E8EB54AD7BB0D7029DB1A05F10F3CFBB~YAAQVuHdF9FI/iiOAQAAeX9cLRdYMOE4xtNq6rvx42WzIORyrFTTR+xf2uZo3Fd8bBilF/6k4Si4rF2MaAhK7t8qlp/XVXfdqikzZPMntMLZyuko6GdSq5WluYy4lgtzeJIVZiHVQNTIKMCaTUzxJRU8bok82L4hjimpBl7IRADscqbgKUIdtUAqUTdPeOQiJgTpJCDoIGYeOFmJZTdmzDdxZ7HWhIPg9aoAmBpENgPumdOi52F95SoC3q9R~1",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710165220.550684,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "jjSPnsABk",
-        value: "AzqEXC2OAQAA01cSLUc98zdeeEjq8aIJeUdnbw6liaSB-zYz7uV-qeUW8PRPAa75VG4XTlIDwH9eCOfvosJeCA|1|0|b29f59493998cf1dbc0c0aa79101bf3a6c2a247d",
-        domain: "accounts.pcid.ca",
-        path: "/",
-        expires: 1744718028.828725,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "CoQWDnyf",
-        value: "%2FEZEqe8w",
-        domain: "accounts.pcid.ca",
-        path: "/",
-        expires: 1741714975.360319,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_spvid_ses.ab05",
-        value: "*",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710159829,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "ak_bmsc",
-        value: "CBDABCEDF86FAD3808CA8A60D70435E4~000000000000000000000000000000~YAAQVuHdF11J/iiOAQAADY1cLRe0hTGp8rwoxgLQ6xc98eNefzj/ZBCDh9/cP3y7Dx5rg3iaYKLwnpWKmMDnV5pXeN6x5FY3AbN6sVdsGYUFGmWPT/7Q3zwqxzOwHPc2fwkXV1NbOr0DW8e6BkJKms8I1PJ9206rtFzr1z7xLKS23gZdigpjBtoKpfdCed1c/tG1tzQMi2JEoOMBB6YAxrk5JFY16Fh6PS+SN9MqUic98G2Kc5ABYgu4BbpT/ZPnmgBM5edTXaqDbP9mGes+NEtX9FfOcE/65MzCUudPnZua1StlXoEINxcBbSEJ8tbOl738UqfmrJfxf1Rni1ruBGA0ubXYP/QnVRAtYfqDc4o+0WjrtyT5de92VU8kYgk6aWPg1H6tB+v3/dYAIxAtN8FN+aau4OlNWsjrAqeAgqb+miXYhdBqkXDUyIXha57mNz9GqrPAxRCLnuU8lclIeAy7WJnuw+xW4gtyf+K6Az8h17f0ysE7oPEsXKItF+VW8w==",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710165219.026448,
-        httpOnly: true,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_spvid_",
-        value: "76d2eb89-55ad-4796-ac47-6178829ff168",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1741694029.792496,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "_ga",
-        value: "GA1.2.1559327499.1710158025",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1744718029.538065,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_gid",
-        value: "GA1.2.573644322.1710158025",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710244429,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_gat_UA-54981048-29",
-        value: "1",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710158085,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_imp_di_pc_",
-        value: "Acrw7mUAAAAAUpFtqCQgGMYdfUxTrkmg",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1741694027.022281,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "_imp_apg_r_",
-        value: "%7B%22_d%22%3A%222005001710158027049%22%2C%22_rt%22%3A%22DQUEQKRexU%2FD8CmqnGXescZOEO6j9jK%2F30IB7iO9pt8%3D%22%2C%22_v%22%3A%22N0xveLlSqD3B6H6y8GjtosxZAPmi2xG9xDoe6kqGrpoOS6W2Pb3b3mEaL74aF2aKIHulDeDl4eWOR3jHXsdXLKoU7bAK%2BRBvATzsSPVElg%3D%3D%22%2C%22_fr%22%3A20000%2C%22diA%22%3A%22Acrw7mUAAAAAUpFtqCQgGMYdfUxTrkmg%22%2C%22diB%22%3A%22ARX3wUdJNoCq2X3xKuLwUOV0kofA0LCk%22%2C%22fr%22%3A%22hFzM-0lghS2kD_IQ6146dg%3D%3DeqjaQwgqVYcplIFRBZRUe7ST1l52CP0ERq2gET7hrrh_sTn8fN2a8hNOyV9IaibyJ2zZdgiqqVKl8Lj1ev2FxClAhm6za7gvLeXqCtYmdHOWA8rZAsY7u2anORhqMDLqQ50rr2B86dGjBVGi-F5rE325JWAMS6ztmzXc9oxvbP1MipCG7WbmSo8a%22%2C%22ct%22%3A%22N0xqfP9dvTHN%2FDf8tmCks8RWDvWc4RSm0XoG9k0%3D%22%7D",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1741714979.161319,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "_abck",
-        value: "A7DB2BC08CF9C6CD136FD72BD1C49AB8~-1~YAAQVuHdFx1K/iiOAQAAvZ9cLQtXVOvtCCzYYM+Q5axiLdZKKl5pRhIhCwGVRedbPyYTYfp80EuRJbCHjksR6XtSviOooUJ7f6VnBsHxylfKbn/nHQmZ5HG0wRzU4K6bKN8OO2rydTFqEm4dhTZtNatmebTXHRbGDMoNUBHjl/ElnkEsThNQ94Mvwm2SjP7EtaYZlP5dQb8OrLKCh9Volw+kVP2ZeSmOJ/OYQWplhVHemmvcslp7+5DDQtVOxett7dUbwV178uGNLCFohe5g6QmBaomKBHTcOpuG/wKmyPj7Gy++3rPNL8GSJlmaBeLb7bRUwnZ3dGfKkPC9kRHvH7UcJ+skvWPmGT2AIXsRzaVN+T0YBva/JhfzW5zGcdkp0akiBk54WDM=~-1~-1~1710161621",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1741694028.828942,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "bm_sz",
-        value: "D7748197C35689EC58D119BBF6BEDE6F~YAAQVuHdFx5K/iiOAQAAvZ9cLRd44o6l/Fjzvpzp7ezlJUGIa26RIJmdBGL7STOBz7lbMplTto9qrutLBOZ0HeyEKyvC0GZqf6cSbggnfUL+EPbTuX/L2myxN814/dz448eVnxMXY4YP29Ls9PEbAuOBcT+SlPAucEPo1hmtbxRFl/rQuwo4cOxvm5D2eOGz8n1d5b5L/Q49njHUXWcECQXan6RIrb/ZrgB+e+zEY5BXW/hhtaA6z9XmKa/QzXbyEwdkDbtCDqrB2CFjHs5N9fK465pWCKPs3i/LWLTDuB4GSoEdt1CYD92uIh/X+SziUV35bET/9PcosBbCOJc8kLFzSxBRKOGzc0N21BkaL6EBdSSiaNin0kEO56PVfO7V134EVoq7cSfMk2JhALmfi8I3Gw==~4538693~4340035",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710172418.829054,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "ADRUM",
-        value: "s=1710158029515&r=https%3A%2F%2Faccounts.pcid.ca%2Flogin%2Fsuccess",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: -1,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "_spvid_id.ab05",
-        value: "685d1028-a034-4073-909e-3fbf85eebd99.1710158024.1.1710158030..1230dc5d-db4c-4435-9ed5-66997ce04b38..e506e2bb-3e29-4607-803f-ed27d1cedbfa.1710158023959.4",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1744718029.547748,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "bm_sz",
-        value: "25876C2A9787BE2B2278082B20E5BA7A~YAAQ1OHdF6xT9CuOAQAAdalcLRfMqO/iYpPXMIRU5WNI1h7AnOvhUGiruX2/p3aDpHXCgnIAwHo6S3Ab0z8PR4DRkYnCE5DMbD1r3S93+4Srm6kZTTVMrb+5U24F1Xt6cwwiJANF7KWgpNjIFttsc9KaEB+8i4z0EF0Qq2lOqEUzn2c4FbOtxXJtZEMZvYgstdpPlbceXPkTVX3AYsE+cv5tlSbUK8npWtfQgfEsc92Z5W1vVGbv0UZ6Qr5vRiGWksPeVFwLhBltD82buXv1AGg/CBbyOTbUglfCOGfNvDrrnuQj9F8w6ZBIk0OwB6ssaEHteTCZU6vN6k5nNjgHqPhnZc9HFTwRKQlV7PJoNDiQw9psKUJoWAv7Bj0vHKzKKoWgmpGX2fyjJIkO8kPJaumwULfRAennkc/oLw==~3749442~4273977",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710172408.30341,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_ga",
-        value: "GA1.1.239684027.1710158014",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1744718034.395862,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "CoQWDnyf",
-        value: "r8BpuZiY",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741714987.015069,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_abck",
-        value: "47AB9C724901E809D412B25B2C40C61F~-1~YAAQ1OHdFw5V9CuOAQAAabhcLQvF+LjEkmvEMosvgnObi5kDRrXVMwYDLqEej+0bgX2wPRvj3tpIp7VpmcdGxUtMtkvgEqmJ+/01s02JWVxMFEM8vPaZHpXugdD3YhJcsNBIv7kImsJeyfT866YSG+sJvJ3USiLucCzKUQ4Kaul/qSJlWmMXMeTFTZIvTpgbgKjMn//DQzLYOaWeLFxVSkeRhw6uYvJv7e2u++62TX0qrgnYXWdJohbxlXTmuCKb3WwovVLHyjTqTBYAAZE9jqJYVZA0aAggC++l8uCx8CA3uAcNFlE79WYEn0df+l4wlK9G8PrcvySefvfEP8mYsGx5lZC5TKYjJBMqOzeD0wv++j/7ZImCsruAyogT4gSAcTuKO9t5DdiJPu7RTg==~-1~-1~1710161611",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1741694035.132282,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "kampyleUserSession",
-        value: "1710158037767",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741694037,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "kampyleUserSessionsCount",
-        value: "2",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741694037,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "kampyleUserPercentile",
-        value: "77.80078896816617",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741694037,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "_ga_805MRZ9TJL",
-        value: "GS1.1.1710158014.1.1.1710158038.0.0.0",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1744718038.284045,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_imp_apg_r_",
-        value: "%7B%22_d%22%3A%222005001710158036028%22%2C%22diA%22%3A%22AcDw7mUAAAAA1nCMn0bL4MlwFUHlrxKO%22%2C%22diB%22%3A%22ARX3wUdJNoCq2X3xKuLwUOV0kofA0LCk%22%2C%22_rt%22%3A%22DQMlTI9exU%2FD8Cmqwk2amrErHpbLyjmt6n0d5m3gsZ4%3D%22%2C%22_fr%22%3A20000%2C%22fr%22%3A%22L-8LPYbb86JDbrmsiUIL3A%3D%3DAFxUm98ebZ8GLyp3O1OO9rz8nULzZPr-ovFA5L032NM9Mr0xRENTKR9MOEWI1lG4YQufZwC9WnHt8cMvGf20ZuNyjId5pXUX4Cwj0RT6CDKebGQ9zVFSdwVp33dhdX6aas6AMYfXO2bgg80ePKxW2zJV4r2A9p3H81xtXlamhQP5swkucrzSheiI%22%2C%22ct%22%3A%22N0xqfP9dvTHN%2FDf8tmCks8RWDvWc4RSn33AA9k4%3D%22%7D",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1741714991.327783,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "_spvid_id.931f",
-        value: "3efbe79a-ff61-4eea-b7fe-d71bdbbb36c8.1710158011.1.1710158039..f5256281-11e6-4b05-93b9-3285b77d7b8e..d7226fd8-112d-487f-8deb-5595ec9148fa.1710158010549.13",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1744718039.392616,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "kampyleSessionPageCounter",
-        value: "3",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741694039,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-]);
-
-await context.route(
-    /(\.png)|(\.jpg)|(\.svg)|(\.otf)|(\.woff)|(\.woff2)|(\.ttf)|(\.mp3)/,
-    (route, request) => {
-        console.log("Aborting", request.url());
-        route.abort();
-    }
-);
-
-await context.route(/(\.js$)|(\.css)/, async (route, request) => {
-    const fileName = resolve(
-        __dirname,
-        "cache",
-        "" + stringHash(request.url())
-    );
-    if (fs.existsSync(fileName)) {
-        await route.fulfill({
-            body: fs.readFileSync(fileName),
-            contentType: /\.js$/.test(request.url())
-                ? "application/javascript"
-                : "text/css",
-        });
-    } else {
-        const response = await route.fetch();
-        fs.writeFileSync(fileName, await response.body());
-        await route.fulfill({
-            response,
-        });
-    }
-});
-
-const page = await context.newPage();
-
-await page.goto("https://www.pcoptimum.ca/dashboard");

+ 28 - 0
5.js

@@ -0,0 +1,28 @@
+import { chromium } from "playwright";
+import uniqueRandomArray from "unique-random-array";
+import userAgents from "top-user-agents";
+import setupRoute from "./setupRoute.js";
+
+const browser = await chromium.launch({
+    userAgent: uniqueRandomArray(userAgents)(),
+    headless: false,
+    devtools: true,
+    proxy: {
+        server: "190.2.130.11:12796",
+        username: "12932405-res-country-MX-session-1",
+        password: "1mrmt4wqg5",
+    },
+});
+
+const page = await browser.newPage();
+
+await setupRoute(page);
+
+await page.goto("https://www.pcoptimum.ca/login");
+
+await page.waitForURL("https://accounts.pcid.ca/login", { timeout: 60000 });
+
+await page.fill('input[id="email"]', "xiongzhu1@gmail.com");
+await page.fill('input[id="password"]', "x1ongDrew1");
+
+await page.click('button:has-text("Sign in")');

+ 0 - 472
5.mjs

@@ -1,472 +0,0 @@
-import { chromium } from "playwright";
-
-const browser = await chromium.launch({
-    headless: false,
-    devtools: false,
-});
-
-const context = await browser.newContext({
-    viewport: {
-        width: parseInt(Math.random() * 100 + 1250),
-        height: parseInt(Math.random() * 100 + 750),
-    },
-    locale: "en-CA",
-    timezoneId: "America/Toronto",
-});
-
-await context.addCookies([
-    {
-        name: "PIM-SESSION-ID",
-        value: "DlgLBbkuLyX6WMDy",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: -1,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_spvid_ses.931f",
-        value: "*",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710156681,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "kameleoonVisitorCode",
-        value: "983e1c99-3ca2-408c-b31e-b8a67c9714bb",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1741690851.810668,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "bm_sv",
-        value: "95F10C6B635DE782732BD563212EE001~YAAQN+HdF1ZWqyyOAQAAOSgsLReUq9qozWuLyLYdbXkRIZAhEEa6Ok/RbYZ/I7qtRTVgZDqrDdO1KG2HuZjIb0z7WLGtTQVvzkI5ZvXSdpGgdtHDNrSY6NPt5gVCA1oRKIefLJh19I5dandHEWFwNWHKHSwAiBs3VBtlUi/FtsO0rNIcK70K5TCGBTtzCuaQE8gwnYWh/St2a51yx9+aRiVrqVyROKhuHITd1V1kHvNbuErlMY85Ckam6LmRtNVm8E8=~1",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710162049.292684,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "jjSPnsABk",
-        value: "AxApLC2OAQAADRrCt1SKWepHx3pthvAW_Zp-z4SdztiLzwFR8YoHM0ELV69-Aa75VG6uclIDwH8AAEB3AAAAAA|1|0|772d9e6a557a32884957f48a8b5ad1d4d3b7baef",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1744714876.349525,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "ak_bmsc",
-        value: "DDFBF62A2D9FCD63E103FED9B9600ABA~000000000000000000000000000000~YAAQ1OHdFxSS8CuOAQAALC4sLRfAFS/o1SzWtY0/QRl18YVtjmY4jlmVsNGX5I7MestrsbHwIhUHTODRIPc02WPRlsnJZbc2MzE/l7xdu9W/T81vng3Mb6+uhQ3bM1NeVffJBh812RMTX6nTqSZ6mzyjpFrTNZ0rzaH+oZAQd+RBCO119pRmxHg2FqcborJ5YdvsHRNDtndurPocdauMAhVhgytRUHkeg4CPMeCxH+Fvo6iwI0xRJDFMlavKaq2oBhUPFj35xnfnUrcVLN83uhRULxQusaxAqzYSa0yg5T9pgtj3zKyjiTFjeRyDRW28B5naHhAjSfaOOtXIVIWFAYqK7JMAzgfhRXoOkyk7rYEm6Lfxq9lSO/fMkPlqEvEQaQ+b64wkv3hp0gllwyNobiypckeB/r188EWZy0oE0Ws6csbXsafgdoYla3jLwTUCupAZYVFhCjYaYc0GRIzY1fRkLg/I1bs2zTpzEnmNPbO2jfk863ZpXi8UonxcUyIgiMwXCZtnI9rf1Ccyng==",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710162049.808399,
-        httpOnly: true,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_gcl_au",
-        value: "1.1.654442519.1710154854",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1717930854,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_imp_di_pc_",
-        value: "AWbk7mUAAAAAhokpEJyAUqeA1kfXinz5",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1741690880.34572,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "_gid",
-        value: "GA1.2.649314698.1710154855",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710241282,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_gat_UA-87445536-1",
-        value: "1",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710154915,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_fbp",
-        value: "fb.1.1710154855919.187180118",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1717930883,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "receive-cookie-deprecation",
-        value: "1",
-        domain: ".doubleclick.net",
-        path: "/",
-        expires: 1725706883.768493,
-        httpOnly: true,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "mdLogger",
-        value: "false",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741690885,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "kampyle_userid",
-        value: "0664-d596-cbab-00f1-fd63-7ec6-4b2a-7582",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741690858,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "IDE",
-        value: "AHWqTUkIpOH_td_Xz-DFJ0ldEdD-mZynOYY3808Gh3YDJOqzjHY_ERclB7cs71MZWgw",
-        domain: ".doubleclick.net",
-        path: "/",
-        expires: 1744714859.157481,
-        httpOnly: true,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "ORA_OCIS_REQ_2",
-        value: "KmJzu52Jl8/PirtL69gAI7fsgZzKtvw8WdjSdgUU6vxrZRFbhNpP56WsrsMqpX8T0PBBi6WvbEYSI9PDFqqZtdMCLlqttSaPGC5B5ufVIdXOsO/Ofm2ttBVAx3oY8w6tOe3B0VWVZcY+GUq7VX1YY+jSIccuUX7euqCxZ/k66W6BZjNz1rsjluEEYYRQLOocxuh62TqlI9GiKNDUd4+opP4EElJo4hpKNOUfHCXRohT5l0sDT3zk7wefa62n9ui8y9h+8cyPtxHPr9dYNw/WZ+XSNsH4VJ3Mvm2tjlskQ5aP/VVJQBYdEDD/13O2zmIZiyeT0vChwpFj9OhOKssV4186LFsGmSEqdQs4o0qD6QjaS5AwJmvEvYi50j+jdOfnDxv+IEeZTn1KjkhdtDrz54Md0PIYFR7Axjd646QvI/HuUfSFNIfvfAFbzghzUSawB6WnSI4wHeHDTevLvhIBSlk+rS/5/rnhMAQS91vMpGmr4inZKGsUIHphq/Ci+iHXBFHl6/cztTN15/NVloFCIfgU9FoOvrc2t+8zbOX5uOU+0pBY4XZfH3QChdFreKdAfQAnZVMdP1hzQ6irLtWqlOP8qNOTrf53NhvxtVXGvMsZT4PXpFUU/hYXeHghTzK4Sl8Lkr/rqz+FzcfDT0IpPGj+Fcd01PONNKikTCT7uhb3l4pkaP4P39UXVgSfeAZq1uAkdBeIKqgSdH++gIwVvfHK9gIajAJnmHvFfHf7jlfvBK1klWw25YZXnF+p4lS9IMrDDU25qYn1PBTDGayuFJXcu8bXgWzEMczrQ4ycO5Vlk8t5lyvwnOlcgayTx2ZMmvePV+7JofM6dvcG1H2heEU4M/jWfMCWshLRvwI7o0UlX8Sea1vFdeSIgTYQXOuG0BGhBG1LVBB34Yfrs8o1xYVJHPBpIwFArBN3+XLDOA~l0Own+oNwu5uQud0bAET44ZUxqqiWR9KDBCbX9y4Ym8",
-        domain: "accounts.pcid.ca",
-        path: "/",
-        expires: -1,
-        httpOnly: true,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "ORA_OCIS_REQ_1",
-        value: "Tbdcb6fZtZf8oRkTxzqf0Doc2zDAmQQMzpTQaBagcvSJg51HPgF2NaZjljIP9KnG3fm0h8GlxKOlSjgprMG7g3p2zqi8Q1YjLgIuBW2C6nu76MwvLitQpVDlk2AUbpMNTsBxOjFwOqTgymyJcchbMHX/vwNGlrPsyWIa1lGqtiqhV354gZ0uoIL6JwYZ9AMSfGKWF3PF9sm593yzLZsn4RaUMFu0j1OUO1XPR0wAAipTK1L7iw29pyZrm9hruxF7HumfXuJhjsA0H0kZPDhmoL+KMUZfBRSy+oS5JQBFOpf2JpGReldAn1pwpFFe4XEj7Kz10OtyeHE+zfyZ4xJEf7Kzk8ocubdbiV3Ro3sC7l0SAykC7Ta0/Ys/QfAGeS+fej0ZnmuZ5IFQzSYc+eToIFQt3Z76zk8ZlIjBifH/4H6sBDP4RWEyTHXy74s1TRndeSqnGy6p5sqjgGw4PidqL3WtF0ZzLE/sct6XQYrnEMmdREfOKOPgTS84HzXL6ps0LL50aW+LHT3wWrZiyr3B2YwrOTxdKoSoYD1XKzsFvP+/paTSDClol42E13VBirC4oDR6u4LceL17IqKTk2M6YmIDGjPvaMx/lRZ6H7xMEtAM2mxk8BoOgXjpX9bRhdrmb4EgTCc0/Gx8kXuvmSul5dOSBPG5KYJhtA3zwSLNnKtihESCDve0OQawebfgQRcd3gxQ7ApMiyMypeOItXoWmfzSgywDHJivNdxPOy/ni/eREmj0K1f5IGW4k3KWCmcaqq3gWOdcXV5xpb64GC/tBUOgh1V11UyLRB/oobbfLruYvweB9L/+2yG19c+5k+GgLFHP+7hy1o9UUS455AQk/9YjHrBBPD1qUK5CmRh6Qt4ontTTW9Yk+smygQlHvSApEXEj38a85IASlhULvQHKneJG41TBh8DqG0vgd0TNk5IcSpyBRkNHGyIx/5lEOtO9YUm+MPhCf1hH5u6RU2je3FyExY3xLrY+Qrg7+Ve7dYuVgaKQLD9YRExPQ4pWPmzed1sySQoye3eDUvpuoh0Y2hB/AScP5nIdOHqS27y2/uILmHFIBuZRiI2hvuqeJZq5WLQqQrpiOfbcErnunIrQJdlgmr6UCFpZF4C6OxJonTz2iHRcpxh65rxVXP1wE+VnREysqYv0t2mBGOtC/BC9UxRYIJOvDA+CSmK+GvCBbQUw4iAohxZ+VpQ0LWoz7QyOSxuckRyJUdOiDRmAJgDnr32HGnnenaTTY7twWB2X+/UMtjURZF275OKa1eZ4yYMQvjqUurxBwbA90NDNXTh6+qI72SCLvsuCP3HUV3UrU8rz3bYL2pAgUGROmG/IWE64SbGgsphJ0SjVpHLAvfOobkTFsU+DL8BaQqdao200Tm9uKez4R9fzDQHNSiDq1y7U32f4Ocj90L9lp36CbgDEhm8AXWYVQKxHnvCxsS3gfURGz0UAxMAI3UD5lwWhDyIWKaxNHQYxBuBPrF+9KIBv8fOO3+wi6tq0/x+BhKcZwVsWewUgTEFHMSIBku6K35d0Nq16DmF7PlVEfbS7GvES793iJ5bsV0/IfGABKTO3SqTl7bOQPP61laFD0R/1k78K4969krv1Aut/RAwSeYXNyB0OOOxGLKyB/S6Se4diS9kYW5dVSmHriKngfHCrNEcvjuOZmInevIja2XRbBVHWfUiTiWKn6PVcDwJmLpP8hT0LbC7+ppTYVnpTszuG1n+xgxNyGpzZWlsX97e4RrbTf6jz8y84fZHzYmQpJ2WCWK4YVTYP2gzGgx/aN+5p544DyDziO2SwgbFNvebUA9FI3n7Y9Zs+eGDIi1GrTN1rvw2YYrTo9PtnDpAKib0MvHnyru+gK+PKyEDZ0y2SfJvFoZf28om3QrURHbkhcfyNc739",
-        domain: "accounts.pcid.ca",
-        path: "/",
-        expires: -1,
-        httpOnly: true,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "PIM-SESSION-ID",
-        value: "HfwifcsfNXgeTP8Y",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: -1,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "bm_mi",
-        value: "32637E93D710E5C763F0863E1C6BB492~YAAQX+HdF2dXbhqOAQAAE1AsLReFwa0zarIYhD/nyc+0XWX23IUmPCi9C2kZ8RgcciBLnsVMsbspV6HJeSSe5E7cZtQPKkzsZLR5eQRZliba2DE81KNcXGTKLy0jmAnOzkEWlK7+zHwjvmncwa7aB5VgbE5ATv7+J+M+4sNyCltQldra1zFONBg0PCKnQbvZnaSOXNqkKOI9fnUgvvMS9rrDpjz5H1/F/D9p8aEZE0W7G6v0LetTdTMmgr3jrHU8FW4+GPywljJJ6I7qIAh/Cr5/PfsKgSGJMKUxBM+spo0rcmmDG/yq~1",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710162060.518734,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "bm_sv",
-        value: "72452ED0F42E23ACA7CCA9233B5E9620~YAAQX+HdF2hXbhqOAQAAE1AsLRcmu+4m4BntUSwxvjNwe/GzZBjT4TrySOkfvTjXsSAfgLfE3zUqy40fzpAvu9AJMWlxvrQC6wMlUGPgMJEU7e4vRWrooHV819A2trHKq+GPohr1W/mpiiN92mOc3uZY8bJTDX+es/9Bx3YZvon5+Ag2RxbkToBqK1sKDeBnpwnpUDjcDRoOdYTjBKkYwIvYuqqzNKznXHGD0GLQhafm4Fz7ZhJpzwfttMqZ~1",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710162062.518766,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "jjSPnsABk",
-        value: "A1VXLC2OAQAAsvywYHzdOGiIGXHtd_n7YxAtapfkZQUOT6ur3yO9DVyn2RMTAa75VG6uclIDwH8AAEB3AAAAAA|1|0|9118f22bd0f0d6c4ecfb818b63a23e8e59791685",
-        domain: "accounts.pcid.ca",
-        path: "/",
-        expires: 1744714872.693156,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "CoQWDnyf",
-        value: "3GOBH6QK",
-        domain: "accounts.pcid.ca",
-        path: "/",
-        expires: 1741711818.208334,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "ak_bmsc",
-        value: "0C00E5FACBE83CA3CADAD8B81379EE62~000000000000000000000000000000~YAAQX+HdF9ZXbhqOAQAAsmAsLRcRN5uvNz0m0bdSzQhYycRI1OFXrvSyNh/ivvPHjZ/jL9LIJG53kQx/VNvJS8Mn7uft3EjQcKh8XNm3CThdapZzc9h8B0KOsii2hPEmYnjqOujxHJRMY4rzbh5jprRZBeKsfGP7ta2OmB/AGR9jWo+v0STEhx1c8qmdzCIvTeX9SDH8sk2/fg3mh2HAWPiYrO6gIdNXyXdgSXnt75iMkz9VXtrBwcLr4RT134uZ68H8A5cCbzPIvlO/0way1Evlt1xVZRpcgeYTjaOlFPaiww+DGgBjqRKLF0LxC6M0ENZGs1vPuLxWNaq93lish6Gr9yr5DscgQJfsPhxa7h0vF596eKFKw3p+LqKi4fIUx7nj5Vd5zgy5FCc2kAI+zgwCLQotAhJQrxxzC6qgeoSuY0tqllzXw9IEcQkjDl8GwmMXUuht9k/S+IG4aVh82uFbStMVL3M9qzw9SYClb4VlqaER5HNMUdqijvAbUu5VPY4=",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710162060.744036,
-        httpOnly: true,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_spvid_ses.ab05",
-        value: "*",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710156673,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "_imp_di_pc_",
-        value: "AXPk7mUAAAAAeRAwUOs8QkMGAGcczspi",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1741690867.426657,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "_ga",
-        value: "GA1.2.498324052.1710154869",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1744714873.113562,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_gid",
-        value: "GA1.2.1462971914.1710154869",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710241273,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_gat_UA-54981048-29",
-        value: "1",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710154928,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_spvid_",
-        value: "54187d19-69cb-484e-a3d0-9497988c16b3",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1741690873.47599,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "_imp_apg_r_",
-        value: "%7B%22_d%22%3A%222005001710154867429%22%2C%22diA%22%3A%22AXPk7mUAAAAAeRAwUOs8QkMGAGcczspi%22%2C%22diB%22%3A%22AWmeV2ndw%2Bpk0hi3U92sP5ptBP2BhRen%22%2C%22_rt%22%3A%22DTAOXJNKxU%2FD8Cmqgy60kbkWHNqgyCGk2WQc6jiympE%3D%22%2C%22_v%22%3A%22N0xveLlSqD3B6H6y8GjtosxZAPmi2xG9xDoe6l6Sr40WXrmufMbW8X0YOroXUGnLLjbkDbm38PSeQ2jjTqQZP6cU6rAP%2FBFpDDbnTrQJ%22%2C%22_fr%22%3A20000%2C%22fr%22%3A%22Xxy5UguC9ucRUjAMvOi3Ww%3D%3D0DlbtfL3nsrRozipO2j4wqc94LHEM59elNjsu-RsJdfpxTtVziFGSiiFCp474JYVxCQ51Anzn29a2o07GudctqMmkoV9PmtkwDE9ycJtbhlX7HYtrzK3dsUvwfSYOyUXtiaZRJ4g8elnunk-e-d2FXxk7STWj60Se_MPMMGKkt1yhUVIOS57VlyS%22%2C%22ct%22%3A%22N0xqfP9dvTHN%2FDf8tmCks8RWDvWc7RCr03kL%2Fkw%3D%22%7D",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1741711822.418511,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "_abck",
-        value: "35D4FA0F884B0BE9BAF997E880ED80EF~-1~YAAQX+HdF0VYbhqOAQAA0ncsLQtLVT22GGTCXkkfC1LQsJK73Ul0TfYhUEZx2msM+KZKc4wJxXrdHslj1xSDTEOASOlw2InZFi6hom8XCh+lOCzivZo+wXzYVaITQ997huKfMHhRDNW46W1mjRm4HV0oZKdC9QPpwzyr6q8GPxDmMF1MJDzevsD/LoLL+/iILGSibzAaUIBjtw00Gn1EXMpEA5B/f7+uxENfDpNt04JTrSWfKCOaqrkXsLY4ef8NNNSNe2hudi/t6dPJ2qbmZRY52pSm82+4jYbeblm+Pgsr2CrJhC3+/1iCObRSLSM3mXKNO1gOlYp17GqXO1bEEFjQxpQG7LOKSStlj/IKn+ceay8YRE6vF9dSNpmknoUTER1Fzq09iA==~-1~-1~-1",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1741690872.693222,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "bm_sz",
-        value: "4934AFB323FBA7A39E1F40EDA7330356~YAAQX+HdF0ZYbhqOAQAA0ncsLReTOcvZfBzd72+MhJjaJDld8eTk5Sz+exsT3EGGHbW8aRC+n9cgIJTGCNlrj0dDsHhgbBFdzLEPzdee8hIKpwmboR5hYgBlYCDA6zeFgI2Erqjv16irN6awIOhgTP/MG2JJGkwoCPYtPnutwR3udV+qA/FUcSpu5iwRC9O3H4DOYGsbW01q8j/cR9KD1Sv+uBd6/u9/5uaapNNmPIiFjbznOHpdwFj0fzDBA6nJ2ex9NG9IeZls7yVs/cKDadfLxn++p+CmMR50b/l+OyjYRdYvKXJfTmjZ332c4FEzUe7zAnS4u6p+WIeUZH5lym59fKIajUVI80CaPQjcHkz580XbP1pfFMuNnbh/t5asTabERfW2d35LgVduDnAprplJ8Q==~4404786~3227970",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1710169260.693246,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "ADRUM",
-        value: "s=1710154873107&r=https%3A%2F%2Faccounts.pcid.ca%2Flogin%2Fsuccess",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: -1,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "_spvid_id.ab05",
-        value: "69a0976a-6fe3-4d65-9fb1-f0ca6e243355.1710154867.1.1710154873..6f09428f-c218-4112-ad38-39ff5da901e5..98a17589-88da-4f33-992c-dd76b61d7fdc.1710154867383.4",
-        domain: ".pcid.ca",
-        path: "/",
-        expires: 1744714873.116673,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "bm_sz",
-        value: "A04FA8AA02DE491ABF173BE1E78FE9C8~YAAQ1OHdF/WX8CuOAQAAMYAsLRcjAv2qqQdx+H7G/IndHA6jA7SEvki1r2mLuABZh6KHVPFWS+irsT23fmb4NT8R2414rYimv+NpY5lgwtt8kibdyBTvLPUv845nYPgWX5OO3/zn4Hafyqfv8WzbxP/3YzwEaIEF8CBT+28K4g8x9renNpXpx63d7ff8vFRKe7zQST0uz6aleluGRu4hORJjRZQTlmyqnpSwRFSndb1Ni2zbWOfkMbQLQxZgHggu8iK81ieqxda68vSTdrD0tglJeLRbNyJ+poTOJhxZLTk4aCAa8S5QSwrq22k0l2+IYm6c57eEV+/gb21DKApJY9vPwGMlsYDC+5rf1dEknmPCapyz4YIhPMbPeS0LQ1Fx+Vu7X88fmlBXTULq9+qTJ26S1Zk9Os66hfdYiQ==~4277314~4338486",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1710169249.819592,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_abck",
-        value: "A91690B3181B426BF442C0D4DF9B3AD1~-1~YAAQ1OHdF6uY8CuOAQAA44osLQs7qzmTXJ1GOCACze2rdZxUiPEymkF4NrhLJPmAly7z9ntQmkLDbVX0JKBwUNcasIuU+GXrYKgwovCK44tIuQQgbcY3NIYiukNoh1T8+qSnRH4/ZmSS3rDUfJnCOKecLzeOj4ODgrQ5n6gwygS2GuNSUwJFAhoN3iWt8WxV5LeZ6dNev9N6jE+OTG6icvBAd3U+x3vWF9UTtCfBZP/0n8mj8BJaxoQ/iAiRWxCbdQfutNd+RSQMvgVKvxgkcshhvnBViRf6hK0/9nF4DffxxW9nefjkQXxxRhLrbZWF1KzjIutdw/u1RgHzOP8cwXhXmT7Qh2czAnAGN2B07KuD3jh5rkE60R8BHBx6t1ZH0BF8pJRvS9qS/zBa~-1~-1~-1",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1741690877.545745,
-        httpOnly: false,
-        secure: true,
-        sameSite: "Lax",
-    },
-    {
-        name: "CoQWDnyf",
-        value: "Et75Ofp2",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741711830.785246,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_spvid_id.931f",
-        value: "983e1c99-3ca2-408c-b31e-b8a67c9714bb.1710154851.1.1710154882..a2f1c266-93ba-44d5-9910-b8fe077333bb..60069ef3-630d-4397-9b85-677f58b8eba1.1710154850630.15",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1744714881.898254,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "_ga_805MRZ9TJL",
-        value: "GS1.1.1710154854.1.1.1710154882.0.0.0",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1744714882.129938,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_ga",
-        value: "GA1.2.51486207.1710154854",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1744714882.8616,
-        httpOnly: false,
-        secure: false,
-        sameSite: "Lax",
-    },
-    {
-        name: "_imp_apg_r_",
-        value: "%7B%22_d%22%3A%222005001710154880358%22%2C%22diA%22%3A%22AWbk7mUAAAAAhokpEJyAUqeA1kfXinz5%22%2C%22diB%22%3A%22AWmeV2ndw%2Bpk0hi3U92sP5ptBP2BhRen%22%2C%22_rt%22%3A%22DQ4NJNZKxU%2FD8Cmq20%2BmtO5dH%2BKN2Dj9i2pB%2FXSNroM%3D%22%2C%22_fr%22%3A20000%2C%22fr%22%3A%22xIEM2M0yI5Pos5jTnkLbGQ%3D%3DSNe9NyyXFZKj5fzFgdSPirTEqaZtZJh81vMBCHpvSOQ2H8Jqxt69t78j33SxuKsS1pxjdsLaaH787NHQOM4ihrPXxvtkTSkoumLhDFDNSwDQZ0J-PfSkmatWlggHkM7d8Ej0aD86CJhnxyTtURj7vX0x5hjnFziRvtuf8ucTOVWaKP7eUWW-Qmd0%22%2C%22ct%22%3A%22N0xqfP9dvTHN%2FDf8tmCks8RWDvWc7RCk33oE804%3D%22%7D",
-        domain: ".pcoptimum.ca",
-        path: "/",
-        expires: 1741711835.394307,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "kampyleUserSession",
-        value: "1710154885506",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741690885,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "kampyleUserSessionsCount",
-        value: "2",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741690885,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "kampyleSessionPageCounter",
-        value: "1",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741690885,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-    {
-        name: "kampyleUserPercentile",
-        value: "5.99587141904756",
-        domain: "www.pcoptimum.ca",
-        path: "/",
-        expires: 1741690885,
-        httpOnly: false,
-        secure: true,
-        sameSite: "None",
-    },
-]);
-
-const page = await context.newPage();
-
-await page.goto("https://www.pcoptimum.ca/dashboard");

+ 1 - 1
app.mjs

@@ -3,7 +3,7 @@ import fastifyStatic from "@fastify/static";
 import { dirname, resolve, join } from "path";
 import { fileURLToPath } from "url";
 import { Sequelize, DataTypes } from "sequelize";
-import { login } from "./login.mjs";
+import { login } from "./login.js";
 import axios from "axios";
 import is_ip_private from "private-ip";
 import { Crawler, middleware } from "es6-crawler-detect";

+ 6 - 39
login.mjs → login.js

@@ -1,17 +1,11 @@
 import { chromium } from "playwright";
 import uniqueRandomArray from "unique-random-array";
 import userAgents from "top-user-agents";
-import { dirname, resolve, join } from "path";
-import { fileURLToPath } from "url";
-import fs from "fs";
-import stringHash from "string-hash";
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = dirname(__filename);
+import setupRoute from "./setupRoute.js";
 
 export async function login(email, password, proxy) {
     const browser = await chromium.launch({
-        headless: true,
+        headless: false,
         devtools: false,
     });
 
@@ -27,6 +21,7 @@ export async function login(email, password, proxy) {
     };
 
     if (proxy) {
+        console.log("Using proxy", proxy);
         options.proxy = proxy;
     }
 
@@ -34,6 +29,8 @@ export async function login(email, password, proxy) {
 
     const page = await context.newPage();
 
+    await setupRoute(context);
+
     let points = null;
 
     await context.route(/points$/, async (route, request) => {
@@ -42,37 +39,7 @@ export async function login(email, password, proxy) {
         await route.continue();
     });
 
-    await context.route(
-        /(\.png)|(\.jpg)|(\.svg)|(\.otf)|(\.woff)|(\.woff2)|(\.ttf)|(\.mp3)/,
-        (route, request) => route.abort()
-    );
-
-    await context.route(/(\.js)|(\.css)/, async (route, request) => {
-        const fileName = resolve(
-            __dirname,
-            "cache",
-            "" + stringHash(request.url())
-        );
-        if (fs.existsSync(fileName)) {
-            await route.fulfill({
-                body: fs.readFileSync(fileName),
-                contentType: /\.js$/.test(request.url())
-                    ? "application/javascript"
-                    : "text/css",
-            });
-        } else {
-            const response = await route.fetch();
-            fs.writeFileSync(fileName, await response.body());
-            await route.fulfill({
-                response,
-            });
-        }
-    });
-
-    await page.goto("https://www.pcoptimum.ca/");
-
-    const link = await page.$('a > span:has-text("sign in")');
-    link.click();
+    await page.goto("https://www.pcoptimum.ca/login");
 
     await page.waitForURL("https://accounts.pcid.ca/login");
 

+ 15 - 15
package.json

@@ -1,17 +1,17 @@
 {
-  "dependencies": {
-    "@fastify/static": "^7.0.1",
-    "axios": "^1.6.7",
-    "cheerio": "^1.0.0-rc.12",
-    "es6-crawler-detect": "^3.3.0",
-    "fastify": "^4.26.2",
-    "mysql2": "^3.9.2",
-    "playwright": "^1.42.1",
-    "private-ip": "^3.0.2",
-    "sequelize": "^6.37.1",
-    "serve": "^14.2.1",
-    "string-hash": "^1.1.3",
-    "top-user-agents": "^2.1.13",
-    "unique-random-array": "^3.0.0"
-  }
+    "type": "module",
+    "dependencies": {
+        "@fastify/static": "^7.0.1",
+        "axios": "^1.6.7",
+        "cheerio": "^1.0.0-rc.12",
+        "es6-crawler-detect": "^3.3.0",
+        "fastify": "^4.26.2",
+        "mysql2": "^3.9.2",
+        "playwright": "^1.42.1",
+        "private-ip": "^3.0.2",
+        "sequelize": "^6.37.1",
+        "serve": "^14.2.1",
+        "top-user-agents": "^2.1.13",
+        "unique-random-array": "^3.0.0"
+    }
 }

+ 39 - 0
setupRoute.js

@@ -0,0 +1,39 @@
+import { dirname, resolve } from "path";
+import { fileURLToPath } from "url";
+import fs from "fs";
+import { createHash } from "crypto";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = dirname(__filename);
+
+export default async function setupRoute(context, options) {
+    options = options || {};
+    options.block =
+        options.block ||
+        /(\.png)|(\.jpg)|(\.svg)|(\.otf)|(\.woff)|(\.woff2)|(\.ttf)|(\.mp3)|(google)|(facebook)|(ada\.support)/;
+    options.cache = options.cache || /(\.js)|(\.css)/;
+
+    await context.route(options.block, (route, request) => route.abort());
+
+    await context.route(options.cache, async (route, request) => {
+        const fileName = resolve(
+            __dirname,
+            "cache",
+            createHash("md5").update(request.url()).digest("hex")
+        );
+        if (fs.existsSync(fileName)) {
+            await route.fulfill({
+                body: fs.readFileSync(fileName),
+                contentType: /\.js$/.test(request.url())
+                    ? "application/javascript"
+                    : "text/css",
+            });
+        } else {
+            const response = await route.fetch();
+            fs.writeFileSync(fileName, await response.body());
+            await route.fulfill({
+                response,
+            });
+        }
+    });
+}

+ 0 - 5
yarn.lock

@@ -1401,11 +1401,6 @@ statuses@2.0.1:
   resolved "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
   integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
 
-string-hash@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.npmmirror.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
-  integrity sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==
-
 "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
   name string-width-cjs
   version "4.2.3"

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно