48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
// @ts-check
|
|
|
|
const fetch = require("node-fetch").default
|
|
const mixin = require("mixin-deep")
|
|
|
|
const passthrough = require("../passthrough")
|
|
const { sync } = passthrough
|
|
/** @type {import("./read-registration")} */
|
|
const reg = sync.require("./read-registration.js")
|
|
|
|
const baseUrl = "https://matrix.cadence.moe/_matrix"
|
|
|
|
class MatrixServerError extends Error {
|
|
constructor(data) {
|
|
super(data.error || data.errcode)
|
|
this.data = data
|
|
/** @type {string} */
|
|
this.errcode = data.errcode
|
|
/** @type {string} */
|
|
this.error = data.error
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param {string} method
|
|
* @param {string} url
|
|
* @param {any} [body]
|
|
* @param {any} [extra]
|
|
*/
|
|
async function mreq(method, url, body, extra = {}) {
|
|
const opts = mixin({
|
|
method,
|
|
body: (body == undefined || Object.is(body.constructor, Object)) ? JSON.stringify(body) : body,
|
|
headers: {
|
|
Authorization: `Bearer ${reg.as_token}`
|
|
}
|
|
}, extra)
|
|
|
|
// console.log(baseUrl + url, opts)
|
|
const res = await fetch(baseUrl + url, opts)
|
|
const root = await res.json()
|
|
|
|
if (!res.ok || root.errcode) throw new MatrixServerError(root)
|
|
return root
|
|
}
|
|
|
|
module.exports.MatrixServerError = MatrixServerError
|
|
module.exports.mreq = mreq
|