UNPKG

leetcode-query

Version:

Get user profiles, submissions, and problems on LeetCode.

111 lines (79 loc) 2.89 kB
# 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](https://github.com/laporchen)) - [x] Get All of User's Submissions. (Only for `leetcode.cn` endpoint) - [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. ```typescript import { LeetCode } from "leetcode-query"; const leetcode = new LeetCode(); const user = await leetcode.user("username"); /* // An Example for leetcode.cn endpoint import { LeetCodeCN } from "leetcode-query"; const leetcodeCN = new LeetCodeCN(); const user = await leetcodeCN.user("leetcode"); */ ``` ### Get All Of Your Submissions ```typescript 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({ limit: 10, offset: 0 })); ``` ### Use Custom Fetcher You can use your own fetcher, for example, fetch through a real browser. ```typescript 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 - NPM Package: <https://www.npmjs.com/package/leetcode-query> - GitHub Repository: <https://github.com/JacobLinCool/LeetCode-Query/>