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 = `${path}/${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)) { console.error('無效的請求方式') return } requestData.Response = {Headers: {}} console.log(`接收到請求:${filename} => ${method} ${requestData.Request.URL}`) try { const res = await got({ url: requestData.Request.URL, method: method, headers: requestData.Request.Headers, body: method !== 'GET' ? requestData.Request.Body : undefined, }) requestData.Response.StatusCode = res.statusCode Object.keys(res.headers).forEach((e) => { if (requestData.Response) 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 console.error(`處理失敗:${filename}\n`, error) } } requestData.Processed = true fs.writeFileSync(jpath, JSON.stringify(requestData)) })