biedronka-client

Reverse engineered client for mobile Biedronka app

MIT License

Downloads
8
Stars
9

This project is not affiliated with or endorsed by Biedronka.

Reverse engineered client for mobile Biedronka app.

npm install biedronka-client

If you also want to login, you need to install playwright browser:

npx playwright install chromium

Rate limits

Login is rate limited to 10 request per number (I don't think there is any time limit). If you exceed this limit, you will have to wait 30 minutes since the last try.

Basic example

import { createBiedronkaClient, login } from "biedronka-client";

const main = async () => {
  const credentials = await login({
    // Your phone number, without spaces (only Polish numbers are supported)
    phoneNumber: "600700800",
  });
  // You will be prompted for the SMS code in the console

  const client = createBiedronkaClient({
    accessToken: credentials.access_token,
    refreshToken: credentials.refresh_token,
    validateResponses: false,
  });

  const response = await client.users.me();

  // If something went wrong, response.ok will be false
  if (!response.ok) {
    throw new Error("Unexpected error");
  }

  console.log(JSON.stringify(response.data, null, 2));
};

void main();

With access token saved in file

import { createBiedronkaClient, login } from "./dist";
import * as fs from "node:fs";

const main = async () => {
  // If you don't have token.json file, you need to login
  if (!fs.existsSync("./token.json")) {
    const { access_token, refresh_token } = await login({
      phoneNumber: "Your phone number",
    });

    const token = {
      access_token,
      refresh_token,
    };

    // Save tokens to token.json for later use
    fs.writeFileSync("./token.json", JSON.stringify(token));
  }

  // Read tokens from token.json
  const { access_token, refresh_token } = JSON.parse(
    fs.readFileSync("./token.json", "utf-8")
  );

  const client = createBiedronkaClient({
    accessToken: access_token,
    refreshToken: refresh_token,
    // Save new tokens when they are refreshed (optional)
    onRefresh: (tokens) => {
      fs.writeFileSync("./token.json", JSON.stringify(tokens));
    },
  });

  const response = await client.users.me();

  // If something went wrong, response.ok will be false
  if (!response.ok) {
    throw new Error("Unexpected error");
  }

  console.log(JSON.stringify(response.data, null, 2));
};

void main();

FAQ

Login doesn't work

Try to pass headless: false to login function and see what's happening in the browser.

const credentials = await login({
  phoneNumber: "600700800",
  headless: false,
});