in sdk/webpubsub-socketio-extension/src/SIO/components/negotiate.ts [27:59]
export function negotiate(
io: SIO.Server | AzureSocketIOOptions | AzureSocketIOCredentialOptions,
configureNegotiateOptions?: ConfigureNegotiateOptions
): (req: IncomingMessage, res: ServerResponse, next: (err?: Error) => void) => void {
debug(`getNegotiateExpressMiddleware`);
const wpsOptions: AzureSocketIOOptions | AzureSocketIOCredentialOptions =
io instanceof SIO.Server ? io[WEB_PUBSUB_OPTIONS_PROPERY_NAME] : io;
const serviceClient = getWebPubSubServiceClient(wpsOptions);
return async (req: IncomingMessage, res: ServerResponse, _next: (err?: Error) => void): Promise<void> => {
try {
debug("negotiate, start");
if (!configureNegotiateOptions) {
configureNegotiateOptions = defaultNegotiateOptions;
}
const negotiateOptions = await configureNegotiateOptions(req);
const tokenResponse = await serviceClient.getClientAccessToken(negotiateOptions);
const url = new URL(tokenResponse.baseUrl);
const message: NegotiateResponse = {
endpoint: url.origin,
path: url.pathname,
token: tokenResponse.token,
};
writeResponse(res, 200, message);
debug("negotiate, finished");
} catch (e) {
writeResponse(res, 500, { message: "Internal Server Error" });
debug(`negotiate, error: ${e.message}`);
}
};
}