feat: 初步完成基礎功能

This commit is contained in:
2025-01-27 16:14:31 +08:00
parent 3ff5cbc14c
commit be2e45c4fc
4 changed files with 63 additions and 0 deletions

1
config.yml Normal file
View File

@@ -0,0 +1 @@
path: string

42
index.ts Normal file
View File

@@ -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))
})

14
types.ts Normal file
View File

@@ -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
}

6
util.ts Normal file
View File

@@ -0,0 +1,6 @@
export function timeout(ms: number): Promise<unknown> {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms)
})
}