1 let stream_buffers = require('stream-buffers')
3 return async (env, api, func) => {
4 let Problem = await _require('/_lib/Problem.jst')
8 if (env.request.method !== 'POST') {
9 env.response.setHeader('Allow', 'POST')
12 `The endpoint "${env.parsed_url.path}" requires a POST request.`,
17 let write_stream = new stream_buffers.WritableStreamBuffer()
18 let data = new Promise(
19 (resolve, reject) => {
21 on('finish', () => {resolve(write_stream.getContents())}).
22 on('error', () => {reject()})
25 env.request.pipe(write_stream)
26 let arguments = JSON.parse((await data).toString())
27 console.log('api', api, 'arguments', arguments)
29 result = await func(...arguments)
30 if (result === undefined)
32 console.log('api', api, 'result', result)
36 error instanceof Problem ?
40 'Internal server error',
46 console.log('api', api, 'problem', problem.detail)
48 env.mime_type = 'application/problem+json; charset=utf-8'
56 detail: problem.detail,
57 status: problem.status
72 Buffer.from(JSON.stringify(result, null, 2) + '\n', 'utf-8'),