Skip to content

Commit

Permalink
feat: add polaris headers support in response
Browse files Browse the repository at this point in the history
auto generate uuid for request id if not sent
remove event-kind unused request header
change upn to oicd-claim-upn
  • Loading branch information
DoctorVoid committed Jun 16, 2019
1 parent 5b0dd57 commit a6cd96f
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 72 deletions.
49 changes: 19 additions & 30 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
},
"homepage": "https://github.com/yarinvak/polaris#readme",
"dependencies": {
"@bitjourney/uuid-v4": "^1.0.1",
"@enigmatis/polaris-logs": "^2.5.3",
"@enigmatis/utills": "^1.3.1",
"@types/graphql": "^14.2.0",
Expand Down
14 changes: 9 additions & 5 deletions src/http/request/polaris-request-headers.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { generateUUIDv4 } from '@bitjourney/uuid-v4';
import { PolarisRequestHeaders } from '@enigmatis/utills';
import { UserInputError } from 'apollo-server-koa';
import * as joi from 'joi';
Expand All @@ -8,8 +9,7 @@ const headersSchema = joi.object().keys({
'include-linked-oper': joi.boolean(),
'snap-page-size': joi.number(),
'request-id': joi.string(),
upn: joi.string(),
'event-kind': joi.string(),
'oicd-claim-upn': joi.string(),
'reality-id': joi.number(),
'requesting-sys': joi.string(),
'requesting-sys-name': joi.string(),
Expand All @@ -22,14 +22,18 @@ export const getHeaders = (candidate: object): PolarisRequestHeaders => {
if (error) {
throw new UserInputError(error.message);
} else {
let requestId = validatedHeaders['request-id'];
if (requestId === undefined) {
requestId = generateUUIDv4();
}

return {
dataVersion: validatedHeaders['data-version'],
isSnapshot: validatedHeaders['snap-request'],
includeLinkedOperation: validatedHeaders['include-linked-oper'],
snapshotPageSize: validatedHeaders['snap-page-size'],
requestId: validatedHeaders['request-id'],
upn: validatedHeaders.upn,
eventKind: validatedHeaders['event-kind'],
requestId,
upn: validatedHeaders['oicd-claim-upn'],
realityId: validatedHeaders['reality-id'],
requestingSystemId: validatedHeaders['requesting-sys'],
requestingSystemName: validatedHeaders['requesting-sys-name'],
Expand Down
6 changes: 5 additions & 1 deletion src/server/graphql-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import { createMiddleware } from '../middlewares/polaris-middleware-creator';
import { PolarisProperties } from '../properties/polaris-properties';
import { IrrelevantEntitiesExtension } from './irrelevant-entities-extension';
import { PolarisContext } from './polaris-context';
import { ResponseHeadersExtension } from './response-headers-extension';

export interface GraphQLServer {
server: ApolloServer;
Expand Down Expand Up @@ -51,7 +52,10 @@ export class PolarisGraphQLServer implements GraphQLServer {
context: (args: { ctx: Koa.Context; connection: any }) => this.getContext(args),
formatError: (error: any) => this.formatError(error),
formatResponse: (response: any) => this.formatResponse(response),
extensions: [() => new IrrelevantEntitiesExtension()],
extensions: [
() => new IrrelevantEntitiesExtension(),
() => new ResponseHeadersExtension(),
],
};
this.server = new ApolloServer(config);
this.app = new Koa();
Expand Down
30 changes: 30 additions & 0 deletions src/server/response-headers-extension.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { GraphQLExtension, GraphQLResponse } from 'graphql-extensions';
import { PolarisContext } from './polaris-context';

export const requestIdHeaderName: string = 'Request-Id';
export const oicdClaimUpnHeaderName: string = 'Oicd-Claim-Upn';
export const realityIdHeaderName: string = 'Reality-Id';

export class ResponseHeadersExtension extends GraphQLExtension {
willSendResponse(responseContext: {
graphqlResponse: GraphQLResponse;
context: PolarisContext;
}) {
const { context, graphqlResponse } = responseContext;
if (graphqlResponse.http && graphqlResponse.http.headers) {
const headers = [];
if (context.headers.requestId !== undefined) {
headers.push([requestIdHeaderName, context.headers.requestId]);
}
if (context.headers.upn !== undefined) {
headers.push([oicdClaimUpnHeaderName, context.headers.upn]);
}
if (context.headers.realityId !== undefined) {
headers.push([realityIdHeaderName, context.headers.realityId]);
}
// @ts-ignore
graphqlResponse.http = { headers };
}
return responseContext;
}
}
Loading

0 comments on commit a6cd96f

Please sign in to comment.