/** * 取当前请求的 origin,供声明式助手工具回调宿主自身接口用。 * * 只认 request.url 自身的 origin,不读 Host/X-Forwarded-Host 头:那些头是客户端可控的, * 拿它拼出站请求等于把 SSRF 的目标交给调用方。取不到就返回空串, * 由声明式工具按"未配置自调地址"降级,不猜。 */ export function readRequestOrigin(request: { url?: string }): string { try { const url = new URL(String(request.url ?? '')); return url.protocol === 'http:' || url.protocol === 'https:' ? url.origin : ''; } catch { return ''; } }