@cutls/megalodon
Version:
Mastodon, Pleroma, Misskey API client for node.js and browser
59 lines (58 loc) • 1.72 kB
JavaScript
import axios from 'axios';
export const detector = async (url) => {
return (await getData(url)).compatibleSns;
};
const getSemanticVersionNumber = (version) => {
const match = version.match(/^(\d+\.\d+\.\d+)/);
if (match) {
return match[1];
}
else {
return version;
}
};
export const getData = async (url) => {
const options = {
timeout: 20000
};
try {
const res = await axios.get(`${url}/api/v1/instance`, options);
if (res.data.version) {
const ver = getSemanticVersionNumber(res.data.version);
if (ver !== res.data.version) {
return {
url: url,
compatibleSns: 'pleroma',
softwareName: 'Pleroma',
version: res.data.version,
semanticVersionCompatibleNumber: ver
};
}
else {
return {
url: url,
compatibleSns: 'mastodon',
softwareName: 'Mastodon',
version: res.data.version,
semanticVersionCompatibleNumber: ver
};
}
}
}
catch {
const res = await axios.post(`${url}/api/meta`, options);
if (res.data.version) {
return {
url: url,
compatibleSns: 'misskey',
softwareName: 'Misskey',
version: res.data.version,
semanticVersionCompatibleNumber: res.data.version
};
}
else {
throw new Error('Unknown SNS');
}
}
throw new Error('Unknown SNS');
};