68 lines
1.9 KiB
JavaScript

import Core from "evite/src/core"
import createClient from "comty.js"
import measurePing from "comty.js/handlers/measurePing"
import request from "comty.js/handlers/request"
import useRequest from "comty.js/hooks/useRequest"
export default class APICore extends Core {
static refName = "api"
static namespace = "api"
instance = null
public = {
instance: function () {
return this.instance
}.bind(this),
customRequest: request,
listenEvent: this.listenEvent.bind(this),
unlistenEvent: this.unlistenEvent.bind(this),
measurePing: measurePing,
useRequest: useRequest,
}
listenEvent(key, handler, instance) {
this.instance.wsInstances[instance ?? "default"].on(key, handler)
}
unlistenEvent(key, handler, instance) {
this.instance.wsInstances[instance ?? "default"].off(key, handler)
}
async onInitialize() {
this.instance = await createClient({
useWs: true,
})
this.instance.eventBus.on("auth:login_success", () => {
app.eventBus.emit("auth:login_success")
})
this.instance.eventBus.on("auth:logout_success", () => {
app.eventBus.emit("auth:logout_success")
})
this.instance.eventBus.on("session.invalid", (error) => {
app.eventBus.emit("session.invalid", error)
})
// make a basic request to check if the API is available
await this.instance.instances["default"]({
method: "GET",
url: "/ping",
}).catch((error) => {
console.error("[API] Ping error", error)
throw new Error(`
Could not connect to the API.
Please check your connection and try again.
`)
})
console.debug("[API] Attached to", this.instance)
return this.instance
}
}