"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeWanikani = void 0; const axios_1 = __importDefault(require("axios")); const axios_rate_limit_1 = __importDefault(require("axios-rate-limit")); function makeWanikani(apiKey = process.env['WANIKANI_API_KEY']) { const wkApi = (0, axios_rate_limit_1.default)(axios_1.default.create({ baseURL: 'https://api.wanikani.com/v2/', headers: { Authorization: `Bearer ${apiKey}`, }, validateStatus: function () { return true; }, }), /** * https://docs.api.wanikani.com/20170710/#rate-limit * Requests per minute 60 */ { /** * Per second */ maxRequests: 1, perMilliseconds: 1000, }); return Object.assign(wkApi, { async getKanji() { const allData = []; let nextUrl = '/subjects'; while (true) { const r = await wkApi.get(nextUrl, { params: { types: 'kanji', }, }); allData.push(...r.data.data.map((d) => ({ id: d.id, level: d.data.level, characters: d.data.characters, }))); console.error(r.data.url); nextUrl = r.data.pages.next_url || ''; if (!nextUrl) { break; } } return allData; }, async getVocab() { const allData = []; let nextUrl = '/subjects'; while (true) { const r = await wkApi.get(nextUrl, { params: { types: 'vocabulary', }, }); allData.push(...r.data.data.map((d) => ({ id: d.id, level: d.data.level, characters: d.data.characters, sentences: d.data.context_sentences, }))); console.error(r.data.url); nextUrl = r.data.pages.next_url || ''; if (!nextUrl) { break; } } return allData; }, async getLearnt() { const allData = []; let nextUrl = '/assignments'; while (true) { const r = await wkApi.get(nextUrl, { params: { unlocked: 'true', }, }); console.error(r.data.url); r.data.data.map((d) => { allData.push({ id: d.data.subject_id, srsLevel: d.data.srs_stage, }); }); nextUrl = r.data.pages.next_url || ''; if (!nextUrl) { break; } } return allData; } }); } exports.makeWanikani = makeWanikani; //# sourceMappingURL=index.js.map