node-hitomi
Version:
Hitomi.la API for Node.js
54 lines (51 loc) • 1.37 kB
JavaScript
import { HitomiError } from '../structures/error.js';
import { DEFAULT_HEADERS } from '../internal/constants.js';
function createContext(host, path, type, range) {
return {
host: host,
path: path,
type: type,
options: {
headers: Object.assign(range ? {
range: 'bytes=' + range
} : {}, DEFAULT_HEADERS),
referrerPolicy: 'same-origin'
}
};
}
async function request(host, path, type, range) {
let context = createContext(host, path, type, range);
context = await this.onRequest(context) || context;
const response = await fetch('https://' + context.host + context.path, context.options);
switch(response.status) {
case 200:
case 206: {
switch(type) {
case 0: {
return new Uint8Array(await response.arrayBuffer());
}
case 1: {
return new DataView(await response.arrayBuffer());
}
case 2: {
return response.text();
}
case 3: {
return response.json();
}
}
}
default: {
throw HitomiError.unexpectedResponseStatus(context.host, context.path, response.status);
}
}
}
const encoder = new TextEncoder();
async function hashTerm(text) {
return new Uint8Array(await crypto.subtle.digest('sha256', encoder.encode(text)), 0, 4);
}
const decoder = new TextDecoder();
function toString(buffer) {
return decoder.decode(buffer);
}
export { createContext, hashTerm, request, toString };