{"version":3,"file":"SystemApiMiddlewareFactory.cjs","sources":["../../../../../packages/engine-http/src/system/SystemApiMiddlewareFactory.ts"],"sourcesContent":["import { HttpController } from '../application'\nimport { ProjectContextResolver } from '../project-common'\nimport { HttpErrorResponse } from '../common'\nimport { SystemGraphQLContextFactory } from './SystemGraphQLContextFactory'\nimport { GraphQLKoaState } from '../graphql'\n\n\nexport class SystemApiMiddlewareFactory {\n\tconstructor(\n\t\tprivate readonly debug: boolean,\n\t\tprivate readonly systemGraphqlContextFactory: SystemGraphQLContextFactory,\n\t\tprivate readonly projectContextResolver: ProjectContextResolver,\n\t) {\n\t}\n\n\tcreate(): HttpController {\n\t\treturn async context => {\n\t\t\tconst { timer, projectGroup, authResult, koa } = context\n\t\t\tif (!authResult) {\n\t\t\t\treturn new HttpErrorResponse(401, 'Authentication required')\n\t\t\t}\n\t\t\tconst { projectContainer, project } = await this.projectContextResolver.resolve(context)\n\n\t\t\tconst logger = context.logger.child({\n\t\t\t\tproject: project.slug,\n\t\t\t})\n\n\t\t\tconst tenantContainer = projectGroup.tenantContainer\n\t\t\tconst memberships = await timer('MembershipFetch', () =>\n\t\t\t\ttenantContainer.projectMemberManager.getEffectiveProjectMemberships(\n\t\t\t\t\ttenantContainer.databaseContext,\n\t\t\t\t\t{ slug: project.slug },\n\t\t\t\t\t{\n\t\t\t\t\t\tid: authResult.identityId,\n\t\t\t\t\t\troles: authResult.roles,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t)\n\t\t\tlogger.debug('Memberships fetched', { memberships })\n\n\t\t\tif (memberships.length === 0) {\n\t\t\t\tthrow this.debug\n\t\t\t\t\t? new HttpErrorResponse(403, `You are not allowed to access project ${project.slug}`)\n\t\t\t\t\t: new HttpErrorResponse(404, `Project ${project.slug} NOT found`)\n\t\t\t}\n\n\t\t\tawait logger.scope(async logger => {\n\t\t\t\tlogger.debug('System query processing started')\n\t\t\t\tconst graphqlContext = await this.systemGraphqlContextFactory.create({\n\t\t\t\t\tauthResult,\n\t\t\t\t\tmemberships,\n\t\t\t\t\tprojectContainer,\n\t\t\t\t\tsystemContainer: projectGroup.systemContainer,\n\t\t\t\t\tonClearCache: () => {\n\t\t\t\t\t\tprojectContainer.contentSchemaResolver.clearCache()\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tconst handler = projectGroup.systemGraphQLHandler\n\n\t\t\t\tawait timer('GraphQL', () => handler({\n\t\t\t\t\trequest: koa.request,\n\t\t\t\t\tresponse: koa.response,\n\t\t\t\t\tcreateContext: ({ operation }) => {\n\t\t\t\t\t\t(koa.state as GraphQLKoaState).graphql = {\n\t\t\t\t\t\t\toperationName: operation,\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn graphqlContext\n\t\t\t\t\t},\n\t\t\t\t}))\n\t\t\t\tlogger.debug('System query finished')\n\t\t\t})\n\t\t}\n\t}\n}\n"],"names":["HttpErrorResponse","logger"],"mappings":";;;AAOO,MAAM,2BAA2B;AAAA,EACvC,YACkB,OACA,6BACA,wBAChB;AAHgB,SAAA,QAAA;AACA,SAAA,8BAAA;AACA,SAAA,yBAAA;AAAA,EAAA;AAAA,EAIlB,SAAyB;AACxB,WAAO,OAAM,YAAW;AACvB,YAAM,EAAE,OAAO,cAAc,YAAY,IAAQ,IAAA;AACjD,UAAI,CAAC,YAAY;AACT,eAAA,IAAIA,aAAAA,kBAAkB,KAAK,yBAAyB;AAAA,MAAA;AAEtD,YAAA,EAAE,kBAAkB,QAAQ,IAAI,MAAM,KAAK,uBAAuB,QAAQ,OAAO;AAEjF,YAAA,SAAS,QAAQ,OAAO,MAAM;AAAA,QACnC,SAAS,QAAQ;AAAA,MAAA,CACjB;AAED,YAAM,kBAAkB,aAAa;AACrC,YAAM,cAAc,MAAM;AAAA,QAAM;AAAA,QAAmB,MAClD,gBAAgB,qBAAqB;AAAA,UACpC,gBAAgB;AAAA,UAChB,EAAE,MAAM,QAAQ,KAAK;AAAA,UACrB;AAAA,YACC,IAAI,WAAW;AAAA,YACf,OAAO,WAAW;AAAA,UAAA;AAAA,QACnB;AAAA,MAEF;AACA,aAAO,MAAM,uBAAuB,EAAE,YAAA,CAAa;AAE/C,UAAA,YAAY,WAAW,GAAG;AAC7B,cAAM,KAAK,QACR,IAAIA,aAAAA,kBAAkB,KAAK,yCAAyC,QAAQ,IAAI,EAAE,IAClF,IAAIA,aAAkB,kBAAA,KAAK,WAAW,QAAQ,IAAI,YAAY;AAAA,MAAA;AAG5D,YAAA,OAAO,MAAM,OAAMC,YAAU;AAClCA,gBAAO,MAAM,iCAAiC;AAC9C,cAAM,iBAAiB,MAAM,KAAK,4BAA4B,OAAO;AAAA,UACpE;AAAA,UACA;AAAA,UACA;AAAA,UACA,iBAAiB,aAAa;AAAA,UAC9B,cAAc,MAAM;AACnB,6BAAiB,sBAAsB,WAAW;AAAA,UAAA;AAAA,QACnD,CACA;AACD,cAAM,UAAU,aAAa;AAEvB,cAAA,MAAM,WAAW,MAAM,QAAQ;AAAA,UACpC,SAAS,IAAI;AAAA,UACb,UAAU,IAAI;AAAA,UACd,eAAe,CAAC,EAAE,gBAAgB;AAChC,gBAAI,MAA0B,UAAU;AAAA,cACxC,eAAe;AAAA,YAChB;AAEO,mBAAA;AAAA,UAAA;AAAA,QACR,CACA,CAAC;AACFA,gBAAO,MAAM,uBAAuB;AAAA,MAAA,CACpC;AAAA,IACF;AAAA,EAAA;AAEF;;"}