Files
wk-api/lib/index.js
T
2021-10-05 23:40:24 +07:00

102 lines
3.2 KiB
JavaScript
Vendored

"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