Created
May 4, 2025 11:04
-
-
Save kobzarvs/02e1e04c4c03d7846900dfe69189b192 to your computer and use it in GitHub Desktop.
grpc logger
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export function loggerDecoratorUnary(func: GrpcWebImpl['unary']) { | |
return async function (this: GrpcWebImpl, ...params: Parameters<GrpcWebImpl['unary']>) { | |
const id = uuidv7(); | |
try { | |
params[2] = createMetadata(); | |
window.postMessage( | |
{ | |
source: '__gRPC_devtools_content_scripts_main__', | |
payload: { | |
id, | |
// @ts-expect-error params[0] | |
methodName: `* ${params[0].methodName}`, | |
requestMessage: params[1], | |
requestMetadata: params[2], | |
timestamp: Date.now(), | |
// @ts-expect-error params[0] | |
serviceName: `${params[0].service.serviceName}`, | |
}, | |
}, | |
'*', | |
); | |
try { | |
const result = await func.apply(this, params); | |
window.postMessage( | |
{ | |
source: '__gRPC_devtools_content_scripts_main__', | |
payload: { | |
id, | |
responseMessage: JSON.parse(JSON.stringify(result)), | |
timestamp: Date.now(), | |
}, | |
}, | |
'*', | |
); | |
window.postMessage( | |
{ | |
source: '__gRPC_devtools_content_scripts_main__', | |
payload: { | |
id, | |
responseMessage: { EOF: Date.now() }, | |
timestamp: Date.now(), | |
}, | |
}, | |
'*', | |
); | |
return result; | |
} catch (error) { | |
if (error instanceof RpcError) { | |
window.postMessage( | |
{ | |
source: '__gRPC_devtools_content_scripts_main__', | |
payload: { | |
id, | |
errorMetadata: {}, | |
responseMessage: { | |
code: error.code, | |
name: `RpcError: ${RpcStatusCodes[error.code]}`, | |
messsage: error.message, | |
}, | |
timestamp: Date.now(), | |
}, | |
}, | |
'*', | |
); | |
} else { | |
window.postMessage( | |
{ | |
source: '__gRPC_devtools_content_scripts_main__', | |
payload: { | |
id, | |
errorMetadata: {}, | |
responseMessage: { | |
code: -1, | |
name: 'Unexoected error', | |
messsage: String(error), | |
}, | |
timestamp: Date.now(), | |
}, | |
}, | |
'*', | |
); | |
} | |
} | |
} catch (error) { | |
console.error(error); | |
throw new Error(error as any); | |
} | |
}; | |
} | |
export function loggerDecoratorStream(func: GrpcWebImpl['invoke']) { | |
return function (this: GrpcWebImpl, ...params: Parameters<GrpcWebImpl['invoke']>) { | |
let response: any; | |
const id = uuidv7(); | |
try { | |
params[2] = createMetadata(); | |
window.postMessage( | |
{ | |
source: '__gRPC_devtools_content_scripts_main__', | |
payload: { | |
id, | |
// @ts-expect-error params[0] | |
methodName: `* ${params[0].methodName}`, | |
requestMessage: params[1], | |
requestMetadata: params[2], | |
timestamp: Date.now(), | |
// @ts-expect-error params[0] | |
serviceName: `${params[0].service.serviceName}`, | |
}, | |
}, | |
'*', | |
); | |
response = func.apply(this, params); | |
response.subscribe( | |
(data: any) => { | |
window.postMessage( | |
{ | |
source: '__gRPC_devtools_content_scripts_main__', | |
payload: { | |
id, | |
responseMessage: JSON.parse(JSON.stringify(data)), | |
timestamp: Date.now(), | |
}, | |
}, | |
'*', | |
); | |
}, | |
(error: RpcError) => { | |
window.postMessage( | |
{ | |
source: '__gRPC_devtools_content_scripts_main__', | |
payload: { | |
id, | |
errorMetadata: {}, | |
responseMessage: { | |
code: error.code, | |
name: `RpcError: ${RpcStatusCodes[error.code]}`, | |
messsage: error.message, | |
}, | |
timestamp: Date.now(), | |
}, | |
}, | |
'*', | |
); | |
}, | |
() => { | |
window.postMessage( | |
{ | |
source: '__gRPC_devtools_content_scripts_main__', | |
payload: { | |
id, | |
responseMessage: { EOF: Date.now() }, | |
timestamp: Date.now(), | |
}, | |
}, | |
'*', | |
); | |
}, | |
); | |
return response; | |
} catch (error) { | |
console.error(error); | |
throw new Error(error as any); | |
} | |
}; | |
} | |
const rpc = new GrpcWebImpl(`${window.location.protocol}//${window.location.host}`, { debug: false }); | |
rpc.invoke = loggerDecoratorStream(rpc.invoke); | |
rpc.unary = loggerDecoratorUnary(rpc.unary); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment