From be2e45c4fc0d3fb1a3381d6989e3a8316294dc6a Mon Sep 17 00:00:00 2001 From: WongXX Date: Mon, 27 Jan 2025 16:14:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=9F=BA=E7=A4=8E=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.yml | 1 + index.ts | 42 ++++++++++++++++++++++++++++++++++++++++++ types.ts | 14 ++++++++++++++ util.ts | 6 ++++++ 4 files changed, 63 insertions(+) create mode 100644 config.yml create mode 100644 index.ts create mode 100644 types.ts create mode 100644 util.ts diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..6e1af8c --- /dev/null +++ b/config.yml @@ -0,0 +1 @@ +path: string \ No newline at end of file diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..53cd232 --- /dev/null +++ b/index.ts @@ -0,0 +1,42 @@ +import fs from 'fs' +import got, {HTTPError, Options} from 'got' +import YAML from 'yaml' + +import {timeout} from './util.js' +import {IrequestData} from './types.js' + +const path: string = YAML.parse(fs.readFileSync('../config.yml', 'utf-8')).path + +fs.watch(path, async function (event, filename) { + if (!(filename && event === 'change')) return + + const jpath: string = `./${filename}` + const requestData: IrequestData = JSON.parse(fs.readFileSync(jpath).toString()) + if (requestData.Processed === true) return + const method: any = requestData.Request.Mode.toUpperCase() + if (!['GET', 'POST', 'PUT', 'PATCH', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE'].includes(method)) { + return + } + try { + const res = await got({ + url: requestData.Request.URL, + method: method, + headers: requestData.Request.Headers, + body: requestData.Request.Body, + }) + + requestData.Response.StatusCode = res.statusCode + Object.keys(res.headers).forEach((e) => { + requestData.Response.Headers[e] = res.headers[e] + }) + requestData.Response.Body = res.body + } catch (error) { + if (error instanceof HTTPError) { + requestData.Response.StatusCode = error.response.statusCode + } else { + requestData.Response.StatusCode = -1 + } + } + requestData.Processed = true + fs.writeFileSync(jpath, JSON.stringify(requestData)) +}) diff --git a/types.ts b/types.ts new file mode 100644 index 0000000..edcabc8 --- /dev/null +++ b/types.ts @@ -0,0 +1,14 @@ +export interface IrequestData { + Request: { + Mode: string + URL: string + Headers: any + Body: string + } + Response: { + StatusCode: number + Headers: any + Body: string + } + Processed?: boolean +} diff --git a/util.ts b/util.ts new file mode 100644 index 0000000..b25095c --- /dev/null +++ b/util.ts @@ -0,0 +1,6 @@ +export function timeout(ms: number): Promise { + return new Promise((resolve, reject) => { + setTimeout(resolve, ms) + }) + } + \ No newline at end of file