openreplay/tracker/tracker-graphql/src/relayMiddleware.ts
Delirium 6a42d96e21
Graphql plugin update (#1835) -- v1.19.0
* feat(tracker): relay + apollo plugins

* fix(tracker): type fixes

* fix(tracker): update mobs messages

* fix msg conflict
2024-06-25 10:13:13 +02:00

37 lines
1 KiB
TypeScript

import { App, Messages } from '@openreplay/tracker';
import type { Middleware, RelayRequest } from './relaytypes';
const createRelayMiddleware = (app: App | null): Middleware => {
if (!app) {
return (next) => async (req) => await next(req);
}
return (next) => async (req) => {
const start = app.timestamp();
const resp = await next(req)
const end = app.timestamp();
if ('requests' in req) {
req.requests.forEach((request) => {
app.send(getMessage(request, resp.json as Record<string, any>, end - start))
})
} else {
app.send(getMessage(req, resp.json as Record<string, any>, end - start))
}
return resp;
}
};
function getMessage(request: RelayRequest, json: Record<string, any>, duration: number) {
const opKind = request.operation.kind;
const opName = request.operation.name;
const vars = JSON.stringify(request.variables)
const opResp = JSON.stringify(json)
return Messages.GraphQL(
opKind,
opName,
vars,
opResp,
duration
)
}
export default createRelayMiddleware