"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")); /** * https://docs.api.wanikani.com/20170710/#rate-limit * * Requests per minute 60 * * @param apiKey @default process.env['WANIKANI_API_KEY'] * @returns */ 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; }, }), { /** * Per second */ maxRequests: 1, perMilliseconds: 1000, }); return Object.assign(wkApi, { async *kanji(params = {}) { let nextUrl = '/subjects'; while (true) { const r = await wkApi.get(nextUrl, { params: { ...params, types: 'kanji', }, }); for (const d of r.data.data) { yield { 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; } } }, async *vocabulary(params = {}) { let nextUrl = '/subjects'; while (true) { const r = await wkApi.get(nextUrl, { params: { ...params, types: 'vocabulary', }, }); for (const d of r.data.data) { yield { 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; } } }, async *subjects(params = {}) { let nextUrl = '/subjects'; while (true) { const r = await wkApi.get(nextUrl, { params }); for (const d of r.data.data) { yield { id: d.id, data_updated_at: d.data_updated_at, object: d.object, url: d.url, data: d.data, }; } console.error(r.data.url); nextUrl = r.data.pages.next_url || ''; if (!nextUrl) { break; } } }, async *assignments(params = { unlocked: 'true', }) { let nextUrl = '/assignments'; while (true) { const r = await wkApi.get(nextUrl, { params, }); console.error(r.data.url); for (const d of r.data.data) { yield { id: d.data.subject_id, srsLevel: d.data.srs_stage, }; } nextUrl = r.data.pages.next_url || ''; if (!nextUrl) { break; } } }, }); } exports.makeWanikani = makeWanikani; //# sourceMappingURL=index.js.map