ntfy/web/src/app/Api.js

40 lines
1.3 KiB
JavaScript
Raw Normal View History

2022-02-26 07:40:03 +13:00
import {topicUrlJsonPoll, fetchLinesIterator, topicUrl, topicUrlAuth} from "./utils";
2022-02-23 17:22:30 +13:00
class Api {
async poll(baseUrl, topic) {
2022-02-23 17:22:30 +13:00
const url = topicUrlJsonPoll(baseUrl, topic);
const messages = [];
console.log(`[Api] Polling ${url}`);
for await (let line of fetchLinesIterator(url)) {
messages.push(JSON.parse(line));
}
2022-02-25 08:53:45 +13:00
return messages;
2022-02-23 17:22:30 +13:00
}
async publish(baseUrl, topic, message) {
2022-02-23 17:22:30 +13:00
const url = topicUrl(baseUrl, topic);
console.log(`[Api] Publishing message to ${url}`);
await fetch(url, {
method: 'PUT',
body: message
});
}
2022-02-26 07:40:03 +13:00
async auth(baseUrl, topic, user) {
const url = topicUrlAuth(baseUrl, topic);
console.log(`[Api] Checking auth for ${url}`);
const response = await fetch(url);
if (response.status >= 200 && response.status <= 299) {
return true;
} else if (!user && response.status === 404) {
return true; // Special case: Anonymous login to old servers return 404 since /<topic>/auth doesn't exist
} else if (response.status === 401 || response.status === 403) { // See server/server.go
return false;
}
throw new Error(`Unexpected server response ${response.status}`);
}
2022-02-23 17:22:30 +13:00
}
const api = new Api();
export default api;