ci/woodpecker/push/publish Pipeline was successful
Co-authored-by: ops-deploy-01 <[email protected]>
27 lines
961 B
TypeScript
27 lines
961 B
TypeScript
import { createInterface } from 'node:readline';
|
|
|
|
/**
|
|
* Read email + password as two lines from non-TTY stdin (the headless dual
|
|
* path for callers that cannot pass argv: printf 'email\npassword\n' | …).
|
|
* Caller gates on !isTTY; the password line is kept as-is (no trim —
|
|
* whitespace may be intentional).
|
|
*
|
|
* Separate module (not login.ts) so tests can exercise the REAL reader
|
|
* against real streams while token-ops specs mock this seam cleanly.
|
|
*/
|
|
export function readCredentialsFromPipedStdin(
|
|
input: NodeJS.ReadableStream = process.stdin,
|
|
): Promise<{ email: string | null; password: string | null }> {
|
|
return new Promise((resolve) => {
|
|
const lines: string[] = [];
|
|
const rl = createInterface({ input });
|
|
rl.on('line', (l) => {
|
|
lines.push(l);
|
|
if (lines.length >= 2) rl.close();
|
|
});
|
|
rl.on('close', () => {
|
|
resolve({ email: (lines[0] ?? '').trim() || null, password: lines[1] ?? null });
|
|
});
|
|
});
|
|
}
|