Files
wk-api/lib/index.js
T
2021-10-06 00:23:45 +07:00

125 lines
4.0 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"));
/**
* 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