import { Filter } from './Filter'; import { HttpHeaders } from '../codes/HttpHeaders'; import {Intent, sim} from '@dooboostore/simple-boot'; import { IntentManager } from '@dooboostore/simple-boot'; import { Sim } from '@dooboostore/simple-boot'; import { HttpStatus } from '../codes/HttpStatus'; import { RequestResponse } from '../models/RequestResponse'; import { SimpleBootHttpServer } from '../SimpleBootHttpServer'; import { Mimes } from '../codes/Mimes'; import { NotFoundError } from '../errors/NotFoundError'; @sim export class IntentSchemeFilter implements Filter { constructor(private intentManager: IntentManager) {} async onInit(app: SimpleBootHttpServer) {} async proceedBefore({ rr, app }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map }) { // const rr = rrr; const url = rr.reqUrl; const contentLength = Number(rr.reqHeader(HttpHeaders.ContentLength.toLowerCase() ?? '0')); const acceptType = rr.reqHeader(HttpHeaders.Accept); const contentType = rr.reqHeader(HttpHeaders.ContentType); const intentScheme = rr.reqHeader(HttpHeaders.XSimpleBootSsrIntentScheme); if (acceptType === Mimes.ApplicationJsonPostSimpleBootSsrIntentScheme && intentScheme) { let intent = new Intent(`${intentScheme}:/${url}`); // console.log('---------1--intent request', intentScheme, url, contentLength, contentType ); // const responseHeader = {} as any; // responseHeader[HttpHeaders.ContentType] = Mimes.ApplicationJson; if (contentLength > 0) { if (contentType.includes(Mimes.ApplicationJson)) { intent.data = [await rr.reqBodyJsonData(), rr]; } else if (contentType.includes(Mimes.MultipartFormData)) { intent.data = [await rr.reqBodyMultipartFormDataObject(), rr]; } // console.log('---------2--intent request',intent); const { return: rdatas, target } = await this.intentManager.publishMeta(intent); if (target.length <= 0) { throw new NotFoundError({ message: 'Not found intent target' }); } const rdata = rdatas[0]; const wdata = rdata instanceof Promise ? await rdata : rdata; rr.resStatusCode(HttpStatus.Ok); rr.resSetHeader(HttpHeaders.ContentType, [Mimes.ApplicationJson]); await rr.resEnd(wdata ? JSON.stringify(wdata) : undefined); } else { intent.data = rr.reqUrlSearchParamTuples.length > 0 ? [rr.reqUrlSearchParamsObj, rr] : [rr]; const { return: rdatas, target } = await this.intentManager.publishMeta(intent); if (target.length <= 0) { throw new NotFoundError({ message: 'Not found intent target' }); } const rdata = rdatas[0]; const wdata = rdata instanceof Promise ? await rdata : rdata; // const wdata =undefined; rr.resStatusCode(HttpStatus.Ok); rr.resSetHeader(HttpHeaders.ContentType, [Mimes.ApplicationJson]); await rr.resEnd(wdata ? JSON.stringify(wdata) : undefined); } // console.log('---------3--intent request', rr.req.readable, rr.req.readableLength); return false; } else { return true; } } async proceedAfter({ rr, app }: { rr: RequestResponse; app: SimpleBootHttpServer; carrier: Map }) { return true; } }