leetcode-query
TypeScript icon, indicating that this package has built-in type declarations

1.2.3 • Public • Published

LeetCode Query

The API to get user profiles, submissions, and problems on LeetCode, with highly customizable GraphQL API and Rate Limiter.

Features

Without Authentication

  • [x] Get Public User Profile.
  • [x] Get User's Recent Submissions. (Public, Max: 20)
  • [x] Get User Contest Records. (thanks to @laporchen)
  • [x] Get All Problem List, or with filter of difficulty and tags.
  • [x] Get Problem Detail.
  • [x] Get Daily Challenge.

Authenticated

  • [x] Get All Submissions of The Authenticated User.
  • [x] Get Submission Details, including the code and percentiles.

Other

  • [x] Customable GraphQL Query API.
  • [x] Customable Rate Limiter. (Default: 20 req / 10 sec)
  • [x] Customable Fetcher.

Examples

Get An User's Public Profile

Includes recent submissions and posts.

import { LeetCode } from "leetcode-query";

const leetcode = new LeetCode();
const user = await leetcode.user("username");

Get All Of Your Submissions

import { LeetCode, Credential } from "leetcode-query";

const credential = new Credential();
await credential.init("YOUR-LEETCODE-SESSION-COOKIE");

const leetcode = new LeetCode(credential);
console.log(await leetcode.submissions(100, 0));

Use Custom Fetcher

You can use your own fetcher, for example, fetch through a real browser.

import { LeetCode, fetcher } from "leetcode-query";
import { chromium } from "playwright-extra";
import stealth from "puppeteer-extra-plugin-stealth";

// setup browser
const _browser = chromium.use(stealth()).launch();
const _page = _browser
    .then((browser) => browser.newPage())
    .then(async (page) => {
        await page.goto("https://leetcode.com");
        return page;
    });

// use a custom fetcher
fetcher.set(async (...args) => {
    const page = await _page;

    const res = await page.evaluate(async (args) => {
        const res = await fetch(...args);
        return {
            body: await res.text(),
            status: res.status,
            statusText: res.statusText,
            headers: Object.fromEntries(res.headers),
        };
    }, args);

    return new Response(res.body, res);
});

// use as normal
const lc = new LeetCode();
const daily = await lc.daily();
console.log(daily);
await _browser.then((browser) => browser.close());

Documentation

Documentation for this package is available on https://jacoblincool.github.io/LeetCode-Query/.

Links

Readme

Keywords

Package Sidebar

Install

npm i leetcode-query

Weekly Downloads

1,237

Version

1.2.3

License

MIT

Unpacked Size

100 kB

Total Files

7

Last publish

Collaborators

  • jacoblincool