| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- const { getStream, getSecureStream } = getStreamFuncs()
- module.exports = {
- /**
- * Get a socket stream compatible with the current runtime environment.
- * @returns {Duplex}
- */
- getStream,
- /**
- * Get a TLS secured socket, compatible with the current environment,
- * using the socket and other settings given in `options`.
- * @returns {Duplex}
- */
- getSecureStream,
- }
- /**
- * The stream functions that work in Node.js
- */
- function getNodejsStreamFuncs() {
- function getStream(ssl) {
- const net = require('net')
- return new net.Socket()
- }
- function getSecureStream(options) {
- const tls = require('tls')
- return tls.connect(options)
- }
- return {
- getStream,
- getSecureStream,
- }
- }
- /**
- * The stream functions that work in Cloudflare Workers
- */
- function getCloudflareStreamFuncs() {
- function getStream(ssl) {
- const { CloudflareSocket } = require('pg-cloudflare')
- return new CloudflareSocket(ssl)
- }
- function getSecureStream(options) {
- options.socket.startTls(options)
- return options.socket
- }
- return {
- getStream,
- getSecureStream,
- }
- }
- /**
- * Are we running in a Cloudflare Worker?
- *
- * @returns true if the code is currently running inside a Cloudflare Worker.
- */
- function isCloudflareRuntime() {
- // Since 2022-03-21 the `global_navigator` compatibility flag is on for Cloudflare Workers
- // which means that `navigator.userAgent` will be defined.
- // eslint-disable-next-line no-undef
- if (typeof navigator === 'object' && navigator !== null && typeof navigator.userAgent === 'string') {
- // eslint-disable-next-line no-undef
- return navigator.userAgent === 'Cloudflare-Workers'
- }
- // In case `navigator` or `navigator.userAgent` is not defined then try a more sneaky approach
- if (typeof Response === 'function') {
- const resp = new Response(null, { cf: { thing: true } })
- if (typeof resp.cf === 'object' && resp.cf !== null && resp.cf.thing) {
- return true
- }
- }
- return false
- }
- function getStreamFuncs() {
- if (isCloudflareRuntime()) {
- return getCloudflareStreamFuncs()
- }
- return getNodejsStreamFuncs()
- }
|