1- import { parse as parseCookieString , serialize as serializeCookie } from 'cookie'
1+ import { serialize as serializeCookie } from 'cookie'
22import { setCookie , getCookies } from 'cookies-next'
33
44import { getProxyHeadersForIp } from './proxying'
55import { getRequestIp } from './proxying'
66import {
77 FINGERPRINT_ID_COOKIE_NAME ,
88 generateFingerprint ,
9- getClientSideFingerprint ,
109} from './sender'
11- import { generateUUIDv4 } from './uuid '
10+ import { getAppTracingHeaders } from './tracing '
1211
1312import type { DefaultContext , RequestHandler } from '@apollo/client'
1413import type { IncomingMessage , ServerResponse } from 'http'
@@ -20,16 +19,6 @@ type SSRContext = {
2019 defaultContext : DefaultContext
2120}
2221
23- const SSR_DEFAULT_FINGERPRINT = 'webAppSSR'
24- const COOKIE_HEADER_NAME = 'cookie'
25- const REMOTE_APP_HEADER_NAME = 'x-remote-app'
26- const REMOTE_VERSION_HEADER_NAME = 'x-remote-version'
27- const REMOTE_CLIENT_HEADER_NANE = 'x-remote-client'
28- const REMOTE_ENV_HEADER_NAME = 'x-remote-env'
29- const TARGET_HEADER_NAME = 'x-target'
30- const START_REQUEST_ID_HEADER_NAME = 'x-start-request-id'
31- const PARENT_REQUEST_ID_HEADER_NAME = 'x-parent-request-id'
32-
3322export type TracingMiddlewareOptions = {
3423 serviceUrl : string
3524 codeVersion : string
@@ -42,46 +31,17 @@ export type SSRProxyingMiddlewareOptions = {
4231 proxySecret ?: string
4332}
4433
45- function generateRequestId ( ) {
46- return `BR${ generateUUIDv4 ( ) . replaceAll ( '-' , '' ) } `
47- }
48-
4934export function getTracingMiddleware ( options : TracingMiddlewareOptions ) : RequestHandler {
5035 return function ( operation , forward ) {
5136 operation . setContext ( ( previousContext : DefaultContext ) => {
5237 const { headers : previousHeaders } = previousContext
5338
54- const reqId = generateRequestId ( )
55-
56- const headers = {
57- ...previousHeaders ,
58- [ REMOTE_APP_HEADER_NAME ] : options . serviceUrl ,
59- [ REMOTE_VERSION_HEADER_NAME ] : options . codeVersion ,
60- [ PARENT_REQUEST_ID_HEADER_NAME ] : reqId ,
61- [ START_REQUEST_ID_HEADER_NAME ] : reqId ,
62- }
63-
64- if ( options . target ) {
65- headers [ TARGET_HEADER_NAME ] = options . target
66- }
67-
68- headers [ REMOTE_ENV_HEADER_NAME ] = typeof document === 'undefined' ? 'SSR' : 'CSR'
69-
70-
71-
72- // NOTE: CSR
73- if ( typeof document !== 'undefined' && document . cookie ) {
74- headers [ REMOTE_CLIENT_HEADER_NANE ] = getClientSideFingerprint ( )
75- } else if ( headers [ COOKIE_HEADER_NAME ] ) {
76- const ssrCookies = parseCookieString ( headers [ COOKIE_HEADER_NAME ] )
77-
78- headers [ REMOTE_CLIENT_HEADER_NANE ] = ssrCookies [ FINGERPRINT_ID_COOKIE_NAME ] || SSR_DEFAULT_FINGERPRINT
79- }
80-
81-
8239 return {
8340 ...previousContext ,
84- headers,
41+ headers : getAppTracingHeaders ( {
42+ ...options ,
43+ previousHeaders,
44+ } ) ,
8545 }
8646 } )
8747
0 commit comments