{"_id":"@basketikun/canvas-proxy","name":"@basketikun/canvas-proxy","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@basketikun/canvas-proxy","version":"0.1.0","description":"Minimal local forwarding proxy that lets the Infinite Canvas web app call AI provider APIs without CORS restrictions.","license":"MIT","type":"module","main":"./index.js","bin":{"canvas-proxy":"index.js"},"scripts":{"start":"node index.js"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"_id":"@basketikun/canvas-proxy@0.1.0","gitHead":"be0612bffe6de777a7fb931e445ef60769981c29","_nodeVersion":"20.19.3","_npmVersion":"10.8.2","dist":{"integrity":"sha512-L3z4+FAJt9DjponyvQFHHyf3IM2sSwRq/CwfTftwehcZftQhqfKuyhxmH7pesAdXWQGY8GWAxV/wLgPZdYj6gA==","shasum":"7906c00bee165dee20d4d49e7695c1861c268ecb","tarball":"https://registry.npmjs.org/@basketikun/canvas-proxy/-/canvas-proxy-0.1.0.tgz","fileCount":3,"unpackedSize":7910,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEtAYPuGunauFlJLXmT04q5j5hqTXBSWDMSlfJcJgFxDAiEArH3W8HZpi6NnzY4qEcUAhMUdEwnZOub1LMGtHJkKSzo="}]},"_npmUser":{"name":"basketikun","email":"hyf1844025705@gmail.com"},"directories":{},"maintainers":[{"name":"basketikun","email":"hyf1844025705@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/canvas-proxy_0.1.0_1788337402402_0.9024514269003698"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-02T08:23:22.163Z","0.1.0":"2026-09-02T08:23:22.530Z","modified":"2026-09-02T08:23:22.753Z"},"maintainers":[{"name":"basketikun","email":"hyf1844025705@gmail.com"}],"description":"Minimal local forwarding proxy that lets the Infinite Canvas web app call AI provider APIs without CORS restrictions.","license":"MIT","readme":"# @basketikun/canvas-proxy\n\nInfinite Canvas 的本地转发代理。浏览器直连第三方 AI 接口时经常被 CORS 拦截，启动它之后，网页会把请求先发到本机，再由本机转发到目标地址。\n\n代理只做转发：不改写请求体，不校验 API Key，不落盘任何日志。\n\n## 使用\n\n```bash\nnpx @basketikun/canvas-proxy\n```\n\n默认监听 `http://127.0.0.1:23210`。把这个地址填进 Infinite Canvas 的「配置 → 本地代理」，并打开开关即可。\n\n可选参数：\n\n```bash\nnpx @basketikun/canvas-proxy --port 23210 --host 127.0.0.1\n```\n\n也支持 `PORT` / `HOST` 环境变量。\n\n## 转发规则\n\n把完整目标地址接在代理地址后面：\n\n```\nhttp://127.0.0.1:23210/https://api.openai.com/v1/models\n        └─── 代理地址 ──┘└──────── 目标地址 ────────┘\n```\n\n请求方法、请求头（除 `host` 等逐跳头外）、请求体原样转发；响应状态码、响应头和响应体原样返回，并补上宽松的 CORS 头。SSE 流式响应按块透传，不做缓冲。\n\n访问根路径 `/` 会返回代理版本信息，可用于连通性检测，不会记入转发日志。\n\n## 转发日志\n\n每转发一条请求就在终端打印一行，包含时间、方法、完整目标地址、上游状态码和耗时：\n\n```\n4:05:42 PM GET https://api.openai.com/v1/models -> 200 0.9s\n4:05:43 PM POST https://api.openai.com/v1/images/generations -> 200 26.4s\n4:05:45 PM GET https://api.example.com/v1/models -> failed (fetch failed) 1.6s\n```\n\n日志在收到上游响应头时打印，所以流式请求会立刻出现一行，而不是等整段响应结束。日志只输出到终端，不落盘，也不包含请求头和请求体，因此不会泄露 API Key。\n\n## 安全提示\n\n代理默认只监听 `127.0.0.1`，仅本机可访问。它会转发任何请求到任何地址，请不要用 `--host 0.0.0.0` 暴露到公网。API Key 依然由浏览器持有并随请求转发，代理本身不存储。\n\n## 环境要求\n\nNode.js >= 18。\n","readmeFilename":"README.md","_rev":"1-6a0b929cfbe9b837aa9edfaff9f660e3"}