in runtimes/runtimes/auth/standalone/encryption.ts [49:88]
export function readEncryptionDetails(stream: Readable): Promise<EncryptionInitialization> {
return new Promise<EncryptionInitialization>((resolve, reject) => {
let buffer = Buffer.alloc(0)
const TIMEOUT_INTERVAL_MS = 5000
const timer: NodeJS.Timeout = setTimeout(() => {
clearTimer()
stream.removeListener('readable', onStreamIsReadable)
reject(`Encryption details followed by newline must be sent during first ${TIMEOUT_INTERVAL_MS}ms`)
}, TIMEOUT_INTERVAL_MS)
const clearTimer = () => {
if (timer) {
clearTimeout(timer)
}
}
// Fires when the stream has contents that can be read
const onStreamIsReadable = () => {
let byteRead
while ((byteRead = stream.read(1)) !== null) {
if (byteRead.toString('utf-8') == '\n') {
clearTimer()
// Stop reading this stream, we have read a line from it
stream.removeListener('readable', onStreamIsReadable)
try {
resolve(JSON.parse(buffer.toString('utf-8')) as EncryptionInitialization)
} catch (error) {
reject(error)
}
break
} else {
buffer = Buffer.concat([buffer, byteRead])
}
}
}
stream.on('readable', onStreamIsReadable)
})
}