import { serve } from "https://deno.land/std@0.192.0/http/server.ts"; import "../../util/string.ts"; import RawCore from "../raw/api.ts"; import { ConnectionProps, ConnectionPropsDefault } from "./props.ts"; import { CoreRequest, CoreRequestSearchSentence, CoreRequestSearchTerms, CoreRequestUserTermPriority, CoreResponseSearchSentence, CoreResponseSearchTerms, CoreResponseUserTermPriority } from "./types.ts"; export default class RemoteCoreServer extends RawCore { private props: ConnectionProps; private handlers: Record Promise> = { "search.terms": async _req => { var req = _req as CoreRequestSearchTerms; var term = req.options?.term; if (!term) return new Response("", { status: 404 }); return new Response(JSON.stringify({ response: await this.search.terms(term), } as CoreResponseSearchTerms)); }, "search.sentence": async _req => { var req = _req as CoreRequestSearchSentence; var sentence = req.options?.sentence var optional = req.options?.optional; if (!sentence) return new Response("", { status: 404 }); return new Response(JSON.stringify({ response: await this.search.sentence(sentence, optional), } as CoreResponseSearchSentence)); }, "user.termPriority": async _req => { var req = _req as CoreRequestUserTermPriority; var ok = true; ok = ok && (typeof req.options?.userID === "number"); ok = ok && !!(req.options?.expression); ok = ok && !!(req.options?.reading); ok = ok && (typeof req.options?.priority === "number"); if (!ok) return new Response("", { status: 404 }); await this.user.termPriority(req.options!.userID, req.options!.expression, req.options!.reading, req.options!.priority); return new Response(JSON.stringify({} as CoreResponseUserTermPriority)); }, }; constructor(options?: ConnectionProps) { super(); this.props = { ...ConnectionPropsDefault, ...options }; } async start() { serve(async (req) => { if (req.method != "POST") return new Response("", { status: 400 }); // wrong request (not post) var request = (await req.text()).json({}) as CoreRequest; if (!request.command) return new Response("", { status: 400 }); // wrong request (no command) var handler = this.handlers[request.command]; if (!handler) return new Response("", { status: 404 }); // not found (unknown command) return await handler(request); }, { port: this.props.port, onListen: () => { } }); } }