47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
function encode(input: Uint8Array) {
|
|
const keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
|
let output = '';
|
|
let chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
|
let i = 0;
|
|
|
|
while (i < input.length) {
|
|
chr1 = input[i++];
|
|
chr2 = i < input.length ? input[i++] : Number.NaN; // Not sure if the index
|
|
chr3 = i < input.length ? input[i++] : Number.NaN; // checks are needed here
|
|
|
|
enc1 = chr1 >> 2;
|
|
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
|
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
|
enc4 = chr3 & 63;
|
|
|
|
if (isNaN(chr2)) {
|
|
enc3 = enc4 = 64;
|
|
} else if (isNaN(chr3)) {
|
|
enc4 = 64;
|
|
}
|
|
output += keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);
|
|
}
|
|
return output;
|
|
}
|
|
|
|
export async function GET({ request, params }) {
|
|
const response = await fetch('https://catapi.cf4.workers.dev/list');
|
|
const asJson = await response.json();
|
|
|
|
const resultcats = await Promise.all(
|
|
asJson.map(async (cat) => {
|
|
const catimage = await fetch(`https://catapi.cf4.workers.dev/${cat.key}`);
|
|
const img = await catimage.arrayBuffer();
|
|
|
|
const b64 = encode(new Uint8Array(img));
|
|
return { ...cat, b64 };
|
|
}),
|
|
);
|
|
|
|
return {
|
|
status: response.status,
|
|
body: {
|
|
cats: response.ok && resultcats,
|
|
},
|
|
};
|
|
}
|