Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rei-x/biedronka-client
Reverse engineered client for mobile Biedronka app
https://github.com/rei-x/biedronka-client
Last synced: about 1 month ago
JSON representation
Reverse engineered client for mobile Biedronka app
- Host: GitHub
- URL: https://github.com/rei-x/biedronka-client
- Owner: Rei-x
- License: mit
- Created: 2024-01-21T18:59:15.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-03-01T21:15:12.000Z (9 months ago)
- Last Synced: 2024-10-03T07:08:46.503Z (about 2 months ago)
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/biedronka-client
- Size: 127 KB
- Stars: 9
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
🐞 Biedronka Client 🐞
This project is not affiliated with or endorsed by Biedronka.
Reverse engineered client for mobile Biedronka app.
```sh
npm install biedronka-client
```If you also want to login, you need to install `playwright` browser:
```sh
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
```typescript
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 consoleconst 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
```typescript
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.
```typescript
const credentials = await login({
phoneNumber: "600700800",
headless: false,
});
```