#!/usr/bin/env node const PORT_PATTERN = /^(?:[1-9]\d{3,4})$/ const fail = (code) => { throw new Error(code) } export function renderFrontDoorSnippet(portValue) { const text = String(portValue ?? '') if (!PORT_PATTERN.test(text)) fail('HOLOLAKE_RELEASE_FRONT_DOOR_PORT_REQUIRED') const port = Number(text) if (!Number.isInteger(port) || port < 1024 || port > 65535) fail('HOLOLAKE_RELEASE_FRONT_DOOR_PORT_INVALID') return `location = /hololake/releases { return 308 /hololake/releases/; } location ^~ /hololake/releases/ { limit_except GET HEAD { deny all; } client_max_body_size 0; proxy_pass http://127.0.0.1:${port}; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header Connection ""; proxy_set_header Authorization ""; proxy_set_header Cookie ""; proxy_set_header X-Forwarded-For ""; proxy_set_header X-Forwarded-Host ""; proxy_set_header X-Forwarded-Proto ""; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_connect_timeout 2s; proxy_send_timeout 10s; proxy_read_timeout 60s; } ` } export function main(argv = process.argv.slice(2)) { const portIndex = argv.indexOf('--loopback-port') if (portIndex < 0 || portIndex + 1 >= argv.length || argv.length !== 2) { fail('HOLOLAKE_RELEASE_FRONT_DOOR_USAGE:--loopback-port PORT') } process.stdout.write(renderFrontDoorSnippet(argv[portIndex + 1])) } if (process.argv[1] && import.meta.url === new URL(`file://${process.argv[1]}`).href) { try { main() } catch (error) { process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`) process.exitCode = 1 } }