UNPKG

@leetnotion/leetcode-api

Version:

Get user profiles, submissions, and problems on LeetCode.

162 lines (120 loc) 4.14 kB
# @leetnotion/leetcode-api A TypeScript library for interacting with LeetCode's API. Supports both LeetCode.com and LeetCode.cn, with authenticated and unauthenticated access, rate limiting, caching, and custom GraphQL queries. ## Installation ```bash npm install @leetnotion/leetcode-api # or pnpm add @leetnotion/leetcode-api ``` ## Features ### Without Authentication - Get public user profile - Get user's recent submissions (max: 20) - Get user contest records - Get problem list with optional filters (difficulty, tags) - Get problem detail by slug - Get daily challenge - Get problem types for all questions - Get title slug to question number mapping - Get topic tags for all questions - Get company tags ### With Authentication - Get all submissions of the authenticated user - Get submission details (code, percentiles) - Check in to collect a coin - Get and collect easter eggs - Get user's LeetCode lists and questions within a list - Get company tags per question (premium) ### Advanced - `LeetCodeAdvanced` class with detailed problem fetching, custom problem properties, and batch operations - `LeetCodeCN` class for LeetCode.cn - Customizable GraphQL query API - Customizable rate limiter (default: 20 req / 10 sec) - Customizable fetcher (e.g., use Playwright for browser-based requests) - In-memory TTL cache (replaceable) ## Usage ### Get a User's Public Profile ```typescript import { LeetCode } from '@leetnotion/leetcode-api'; const leetcode = new LeetCode(); const user = await leetcode.user('username'); ``` ### Get Daily Challenge ```typescript import { LeetCode } from '@leetnotion/leetcode-api'; const leetcode = new LeetCode(); const daily = await leetcode.daily(); ``` ### Get Problem Detail ```typescript import { LeetCode } from '@leetnotion/leetcode-api'; const leetcode = new LeetCode(); const problem = await leetcode.problem('two-sum'); ``` ### Get Problems with Filters ```typescript import { LeetCode } from '@leetnotion/leetcode-api'; const leetcode = new LeetCode(); const problems = await leetcode.problems({ category: 'algorithms', offset: 0, limit: 50, filters: { difficulty: 'MEDIUM' }, }); ``` ### Get All Submissions (Authenticated) ```typescript import { LeetCode, Credential } from '@leetnotion/leetcode-api'; const credential = new Credential(); await credential.init('YOUR-LEETCODE-SESSION-COOKIE'); const leetcode = new LeetCode(credential); const submissions = await leetcode.submissions({ limit: 100, offset: 0 }); ``` ### Get Problem Types ```typescript import { LeetCodeAdvanced } from '@leetnotion/leetcode-api'; const leetcode = new LeetCodeAdvanced(); const problemTypes = await leetcode.getProblemTypes(); // { "1": "algorithms", "595": "database", ... } ``` ### Get Title Slug to Question Number Mapping ```typescript import { LeetCodeAdvanced } from '@leetnotion/leetcode-api'; const leetcode = new LeetCodeAdvanced(); const mapping = await leetcode.getTitleSlugQuestionNumberMapping(); // { "two-sum": "1", "add-two-numbers": "2", ... } ``` ### Use Custom Fetcher You can use your own fetcher, for example, fetch through a real browser. ```typescript import { LeetCode, fetcher } from '@leetnotion/leetcode-api'; import { chromium } from 'playwright-extra'; import stealth from 'puppeteer-extra-plugin-stealth'; const _browser = chromium.use(stealth()).launch(); const _page = _browser .then((browser) => browser.newPage()) .then(async (page) => { await page.goto('https://leetcode.com'); return page; }); 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); }); const lc = new LeetCode(); const daily = await lc.daily(); console.log(daily); await _browser.then((browser) => browser.close()); ``` ## Links - NPM Package: <https://www.npmjs.com/package/@leetnotion/leetcode-api> - GitHub Repository: <https://github.com/codewithsathya/leetcode-api>