@fails-components/webtransport-transport-http3-quiche
Version:
A component to add webtransport support (server and client) to node.js, transport using libquiche
52 lines (41 loc) • 1.6 kB
JavaScript
import { existsSync } from 'fs'
import { createRequire } from 'module'
import * as path from 'path'
import * as url from 'url'
import { arch, platform } from 'node:process'
import { logger } from './utils.js'
/**
* @typedef {import('./types.js').QUICHE_LOG} QUICHE_LOG
*/
const log = logger(`webtransport:native(${process?.pid})`)
const binplatform = platform + '_' + arch
const require = createRequire(import.meta.url)
const dirname = url.fileURLToPath(new URL('.', import.meta.url))
let buildpath = '../build_' + binplatform
if (!existsSync(path.join(dirname, buildpath))) buildpath = '../build' // use precompiled only if own compilation does not exist
let wtpath = buildpath + '/Release/webtransport.node'
if (
process.env.NODE_ENV !== 'production' &&
existsSync(path.join(dirname, buildpath + '/Debug/webtransport.node'))
) {
wtpath = buildpath + '/Debug/webtransport.node'
}
log('load webtransport binary:', wtpath)
export const wtrouter = require(wtpath)
export const quicheInit = wtrouter.quicheInit
let quicheInited = false
/**
* @param {{quicheLogVerbose?: QUICHE_LOG, path?: string}} [args]
*/
export const checkQuicheInit = function (args) {
if (!quicheInited) {
quicheInit({
quicheLogVerbose: args?.quicheLogVerbose ? args.quicheLogVerbose : -1
})
quicheInited = true
}
}
export const Http3WebTransportClient = wtrouter.Http3WebTransportClient
export const Http3WebTransportServer = wtrouter.Http3WebTransportServer
export { Http3WebTransportClientSocket } from './clientsocket.js'
export { Http3WebTransportServerSocket } from './serversocket.js'