2022-02-26 05:25:04 +01:00
|
|
|
import {topicUrlJsonPoll, fetchLinesIterator, topicUrl, topicUrlAuth, maybeWithBasicAuth} from "./utils";
|
2022-02-23 05:22:30 +01:00
|
|
|
|
|
|
|
class Api {
|
2022-02-26 05:25:04 +01:00
|
|
|
async poll(baseUrl, topic, user) {
|
2022-02-23 05:22:30 +01:00
|
|
|
const url = topicUrlJsonPoll(baseUrl, topic);
|
|
|
|
const messages = [];
|
2022-02-26 05:25:04 +01:00
|
|
|
const headers = maybeWithBasicAuth({}, user);
|
2022-02-23 05:22:30 +01:00
|
|
|
console.log(`[Api] Polling ${url}`);
|
2022-02-26 05:25:04 +01:00
|
|
|
for await (let line of fetchLinesIterator(url, headers)) {
|
2022-02-23 05:22:30 +01:00
|
|
|
messages.push(JSON.parse(line));
|
|
|
|
}
|
2022-02-24 20:53:45 +01:00
|
|
|
return messages;
|
2022-02-23 05:22:30 +01:00
|
|
|
}
|
|
|
|
|
2022-02-26 05:25:04 +01:00
|
|
|
async publish(baseUrl, topic, user, message) {
|
2022-02-23 05:22:30 +01:00
|
|
|
const url = topicUrl(baseUrl, topic);
|
|
|
|
console.log(`[Api] Publishing message to ${url}`);
|
|
|
|
await fetch(url, {
|
|
|
|
method: 'PUT',
|
2022-02-26 05:25:04 +01:00
|
|
|
body: message,
|
|
|
|
headers: maybeWithBasicAuth({}, user)
|
2022-02-23 05:22:30 +01:00
|
|
|
});
|
|
|
|
}
|
2022-02-25 19:40:03 +01:00
|
|
|
|
|
|
|
async auth(baseUrl, topic, user) {
|
|
|
|
const url = topicUrlAuth(baseUrl, topic);
|
|
|
|
console.log(`[Api] Checking auth for ${url}`);
|
2022-02-25 22:07:25 +01:00
|
|
|
const response = await fetch(url, {
|
2022-02-26 05:25:04 +01:00
|
|
|
headers: maybeWithBasicAuth({}, user)
|
2022-02-25 22:07:25 +01:00
|
|
|
});
|
2022-02-25 19:40:03 +01:00
|
|
|
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 05:22:30 +01:00
|
|
|
}
|
|
|
|
|
2022-02-24 02:30:12 +01:00
|
|
|
const api = new Api();
|
|
|
|
export default api;
|