{"_id":"@lark-apaas/http-client","_rev":"35-74bae6e85aef9005c84aa90f2f66eebd","name":"@lark-apaas/http-client","dist-tags":{"latest":"0.1.7","alpha":"0.1.7-alpha.11","beta":"0.1.7-beta.0"},"versions":{"0.1.0":{"name":"@lark-apaas/http-client","version":"0.1.0","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.0","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},{"name":"yanmingjiang","email":"yanmingjiang@bytedance.com"}],"dist":{"shasum":"3d97703c640d139d537a59f4081c8bec1675174c","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.0.tgz","fileCount":9,"integrity":"sha512-OcR6gksQpYO4Diey/OHOFf6QdEvgg6tGzurGvVgxsEgFWRE+hlFmYSUmIlau9FDoJOJmOiSHD9KuEbAfh52QjA==","signatures":[{"sig":"MEQCIHC032c0Y/8lNhAqTz4lgHgVQFhcHZtur+CGq2V4Lo4wAiB5v20mLvbUKLW6F7QDH0FFAYzjgf9izx+G46+MgahiIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158905},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"adac648e54eba724c7ed019c4de43d145e5dc5d7","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.1.1","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.0_1766061179842_0.24707854470755763","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@lark-apaas/http-client","version":"0.1.1","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.1","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},{"name":"yanmingjiang","email":"yanmingjiang@bytedance.com"}],"dist":{"shasum":"38b67836d9dfe45af38687386ccd16eb93ea4446","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.1.tgz","fileCount":9,"integrity":"sha512-nQN8Z4wwNbDBZqeeLqNofJhj3jbpCMCrlZPPmEbrAKPNuSfmHZTSeoA5Snfnz6u0RKTWaQkoPDfKe5eXqC96Jw==","signatures":[{"sig":"MEQCIG21x6ad3EIDSNWmnr8WyyjNFE92OoBrMQvdiPUwcSJ1AiB9WSqKuiLxyKgR9mi/3fJU+ZeaNUapnB8/EGpPNDmKsA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159445},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"be22a4a29898cbe4b52c87130a6ba7e5c6046d6a","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.1.1","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.1_1766064694011_0.6539958626871698","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@lark-apaas/http-client","version":"0.1.2","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.2","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},{"name":"yanmingjiang","email":"yanmingjiang@bytedance.com"}],"dist":{"shasum":"e433898f5973871000bf63909a3cc17e5a900d61","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.2.tgz","fileCount":9,"integrity":"sha512-TJ6Ynj7kLFgMJo91f5Jhgv3yzaT2nDmpPoIjxZOol/PnkmQW2gxyy2vou6RygPVnoKcrDdS+3aUrUh82ZA1c5Q==","signatures":[{"sig":"MEQCIEXKeHRxM0RHTUtMEt8LSEP2zoCMzFl7dByGxZoP8GAoAiBv7RwNZiclzW+vJZwVMoNmg2PJVVNQC7x17rgQoAhjGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158668},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"e19a0dfa1136c20e1f1189946af7d46c716ff03b","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","ts-jest":"^29.1.1","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.2_1766071866918_0.07008732081179825","host":"s3://npm-registry-packages-npm-production"}},"0.1.3-alpha.0":{"name":"@lark-apaas/http-client","version":"0.1.3-alpha.0","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.3-alpha.0","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},{"name":"yanmingjiang","email":"yanmingjiang@bytedance.com"},{"name":"heyan.yanis","email":"heyan.yanis@bytedance.com"}],"dist":{"shasum":"e613ce128a069ddcd711ff2837f852a9a5c5fa29","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.3-alpha.0.tgz","fileCount":9,"integrity":"sha512-+KY9omYU35ix3wL14eZtH4PwE12zuXXw6uRbxjp0Y6l2xCzrlelsw2KXRpBzC/OEQSvCTuYwtRasmu9s0LCaBw==","signatures":[{"sig":"MEQCIE7Zi4VWnArAsM52Qie6UYoCz5fVRDFjvJ4K7GzKpOLjAiAGf8dP4eg+szyhs0ZK/QuxMcpVrEKirgx2ZR3jzRr19A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162333},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0ae4f8efcd364fe5fea9f03d655dca058c91fcbd","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"jest":"^29.7.0","ts-jest":"^29.1.1","typescript":"^5.0.0","@types/jest":"^29.5.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.3-alpha.0_1770726397934_0.7339552546575696","host":"s3://npm-registry-packages-npm-production"}},"0.1.3-alpha.1":{"name":"@lark-apaas/http-client","version":"0.1.3-alpha.1","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.3-alpha.1","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},{"name":"yanmingjiang","email":"yanmingjiang@bytedance.com"},{"name":"heyan.yanis","email":"heyan.yanis@bytedance.com"}],"dist":{"shasum":"9115b20a7d5330df2d8194feb6baceba710f9428","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.3-alpha.1.tgz","fileCount":9,"integrity":"sha512-XuHxK7lvKpPfQIAsNHbZq+2hdxUA/QC63TtePvwp+FHMSGqKsgd/kyKFWNFh12w1idanlNIKqHn1MqtotlodmQ==","signatures":[{"sig":"MEUCIQCw6tbafuT7mSaH5D56Q6YJ/NjMQZEl+dfUDb8DxX3z0gIgbjHZjPOrLefAHEsgJbSOsTx/h0Dnl1mzfuCn/aMKqr8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184031},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.3-alpha.1_1775793198493_0.5270069868202552","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@lark-apaas/http-client","version":"0.1.3","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.3","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},{"name":"yanmingjiang","email":"yanmingjiang@bytedance.com"},{"name":"heyan.yanis","email":"heyan.yanis@bytedance.com"}],"dist":{"shasum":"23e17a09ca22f7a86a561bc93b723a4e56743818","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.3.tgz","fileCount":9,"integrity":"sha512-RSgfPx/EuEOc2kmaQFcC/PV4lcLkKLWLKyypRFVmJqV3XTN9arhwDgTGkKFe0zjZ3sVPKX8CPu5FlDTO84xqpw==","signatures":[{"sig":"MEYCIQDT7eiRtVy6EA70O4rUOEk7Wf14ZvS22hV7sVkg8uYZ6wIhAPH9hJ0EjDpuACBVPBgxJs4XfbIWDbPiyMSdHZoCunKi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":184023},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.3_1775804001824_0.4160721408165875","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@lark-apaas/http-client","version":"0.1.4","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.4","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"8203664b7314baa577ecc75f813f704c2092cf43","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.4.tgz","fileCount":9,"integrity":"sha512-/o6//zdNPv3yZ0twC4akFQvt0QcAt0LdSl7suJ0nv16IHxwZmuSYp+mVcTum88IlPWgvEruFdUkMfo7W94Ez8g==","signatures":[{"sig":"MEUCIQCylopO58YeY64cNQ3AJmJaXa1P7P6I4+W1RdHexyW/zwIgchX6SGn0DTL+3aTpWR2b0UDLe2TMU2PtUosytRyVykQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168254},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"2b5d2f0e7bcb7990c04810789083789a9430612a","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.4_1777038257672_0.694230574394062","host":"s3://npm-registry-packages-npm-production"}},"0.1.3-alpha.2":{"name":"@lark-apaas/http-client","version":"0.1.3-alpha.2","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.3-alpha.2","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"f1a7e7ccb7289419f7bd5434a03f27cf8534aff5","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.3-alpha.2.tgz","fileCount":9,"integrity":"sha512-xhRs2D+xkPntc5MkaqjvwmGPme65hkQYrBGz6UAOKlh/IxmfdqBnNZ+r1wihe3fvnpvn3SEAwUucIPrhLy7Xuw==","signatures":[{"sig":"MEUCIQC+/MyfBGGi5FlWR92KpRrhMxzCDlcUXDqlLlfvccqRuAIgFN28C0W+oSgCKjnOhpQl0qaKm1XlXDcVdN0iX/wz1vs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168406},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b977af951774caa35aaa26c66e3e9d940ecad3fa","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.3-alpha.2_1777297077244_0.7218686409763801","host":"s3://npm-registry-packages-npm-production"}},"0.1.5-beta.0":{"name":"@lark-apaas/http-client","version":"0.1.5-beta.0","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.5-beta.0","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"cc423c2fb9044cd5530ffadd8705dddb5ffdeead","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.5-beta.0.tgz","fileCount":9,"integrity":"sha512-yMMJVPDIUZwY5NQBisLyr+pBnFItjulp61cTbVSWG24TDBpSqRU7skHQ697oAGGSc7c1tBhgo/nrdIl7s1SGsw==","signatures":[{"sig":"MEYCIQDXt3xCMMTsio4YxB72XteJgw511LyvQkmV0lBDSpqLfAIhAMpwCGbT3kn1HHDXvoqpIV6pzDqm0GYqTdWnED+wGd/M","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168405},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"7c61b9419ee1d5bb2f46a61044d0108ef92c3776","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.5-beta.0_1777299957670_0.7956368563235225","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@lark-apaas/http-client","version":"0.1.5","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.5","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"0b5716e1d0197994b7c80198951a611e0517cd67","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.5.tgz","fileCount":9,"integrity":"sha512-m8fx5dYbFt7Q60x2OPpl5Aqn7+lqezh97lUwgaf6qtQ6q5G6DhmcZ3fGglqWt0BYfasYv+zyfFaCFWF/GbNv5g==","signatures":[{"sig":"MEUCIDXa/IwDIjInFpJBy4j0dlUcKFq7NYxDKGkvwkwcCuypAiEAsHvr9rk4hihcQPcz1Vua1VpRgPllfOaHIlYoz3xLtM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168398},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"7c61b9419ee1d5bb2f46a61044d0108ef92c3776","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.5_1777302863548_0.4583830927164725","host":"s3://npm-registry-packages-npm-production"}},"0.1.6-alpha.0":{"name":"@lark-apaas/http-client","version":"0.1.6-alpha.0","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.6-alpha.0","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"18f397c05da7945409272ab60214566365af4216","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.6-alpha.0.tgz","fileCount":9,"integrity":"sha512-k9b3r/sRgDOynk+3hVVpxSucJxFXb0eWuyW/t1JArt0w5AvDie9vCdHSXTff6abSsfVR5b5cWXnL9ddJuFFY2w==","signatures":[{"sig":"MEUCIQCZCkf8MFXDTtk2izD6yfViiD+lBoo4t3yRvEp6tJ/jRAIga8KV63vpt/VhH4XbqwoV36ZaPnFd0MXpaWpMHrsqzcg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":168474},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"581d594458ce0cf9624ba897a93f4e5fd2053bf0","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.6-alpha.0_1778731892289_0.5841570004730705","host":"s3://npm-registry-packages-npm-production"}},"0.1.6-alpha.1":{"name":"@lark-apaas/http-client","version":"0.1.6-alpha.1","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.6-alpha.1","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"45f61dcc5cc23ebb6e1d159b8008934a0c79cdee","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.6-alpha.1.tgz","fileCount":9,"integrity":"sha512-UVPPSI0gZf33xe55C8uYmsPpCFR8WlPrS+F1Oj2A3cLUiZk8g5J4mXkLAu2/dA7ePeXPKHHi9yCKr6hr4g+h7g==","signatures":[{"sig":"MEUCIExIwAdvOytxON35Z5d1O+qe86EZB+T1mp32P8YoTQEMAiEArL0RvGVZN5hCOG66GIGLo5tcHujzGeLS1O+xhl0ORRo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173354},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0b56c32a706a0c637767c8c33875e4bd9235d901","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.6-alpha.1_1779285219555_0.17612683773186388","host":"s3://npm-registry-packages-npm-production"}},"0.1.6-alpha.2":{"name":"@lark-apaas/http-client","version":"0.1.6-alpha.2","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.6-alpha.2","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"757923027b11006341138f54d069f5b46362cec8","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.6-alpha.2.tgz","fileCount":9,"integrity":"sha512-k4wn8YIxVmy8Ui+prrl51dZa7xbQ3osaBOtqzMLnKOzl2jqnyUFXZ0yTAZH6978J+zOU7d/fMefPzjIt77o+Uw==","signatures":[{"sig":"MEYCIQD7Zy1H6WfQpguyKsTYlcnpotqxHS4l5P4mH7oMe84UNAIhAP6/3/quJExJBedqkDkHBOIHWhSSod9dXTZioE8VNfyA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173354},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"43fe3208d3c94a613901db47967c33208ed42db3","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.6-alpha.2_1779717774626_0.9809284060725392","host":"s3://npm-registry-packages-npm-production"}},"0.1.6-alpha.3":{"name":"@lark-apaas/http-client","version":"0.1.6-alpha.3","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.6-alpha.3","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"956b642e15257c79ece1009f2bd8f02c4342f5ce","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.6-alpha.3.tgz","fileCount":9,"integrity":"sha512-T1xhgwBGBljZ2sMWPe97mFVASqJRPFkZyVFMFDFYUpQ88Ke41NxUhsunNxxGlf3bt0TcfKy6T3V76U4k1Aa4EQ==","signatures":[{"sig":"MEUCIQCOG5xHAvlPFAEJ8SyIK8+OirYw2+oY4NR35SaOlXntBQIgZ1Gx/iHN8ZFS/JZky9l7ugolAMcJdL+vEG+ZY0WkEEI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173354},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"3c785e253375870c43e83ab69959cca5f00bebb7","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.6-alpha.3_1779853440382_0.8880740379715888","host":"s3://npm-registry-packages-npm-production"}},"0.1.6-alpha.4":{"name":"@lark-apaas/http-client","version":"0.1.6-alpha.4","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.6-alpha.4","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"9acb397fc27ac6beca66091921b1975b3d12cfab","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.6-alpha.4.tgz","fileCount":9,"integrity":"sha512-OffYyfUr5qycvt9hdWXSfZMdj7NDvFedqE8x6ypdrY8U9O21g9iENKjXqwNcISPwOS9X7dloxgG4EKK7yeu+jg==","signatures":[{"sig":"MEUCIQD55+1Kih4toHIFqiT89c/JJVkWZdA4OJXOgcKxsfx/rgIgaB076aCmDj4tDu13nBScSZ0iyjbbgdC3i3ZFj+o3lDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173702},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"d3f318875a3d3640ccaa01ae1376e63ba216d1ed","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.6-alpha.4_1779876984620_0.9983332233462101","host":"s3://npm-registry-packages-npm-production"}},"0.1.6-beta.0":{"name":"@lark-apaas/http-client","version":"0.1.6-beta.0","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.6-beta.0","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"470fe119238f87946a4ee2a54d68347d5c39cb44","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.6-beta.0.tgz","fileCount":9,"integrity":"sha512-uob21rSgXS/D9z/E0jgUKtrmWNLlhJvUziPrT0wTK+548C7krdzPXeq65jSK04JZkCpZSh9oiautS3bt/cF47A==","signatures":[{"sig":"MEUCIBlOuO1ydI4elidfFtHKG0gopLNO09TzIGaFrwYiEX3zAiEAgEF9kHFNDKUuMr514p7+12a6/lkpnDL27jfKxupzX30=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173701},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"72cef483738a6d30ba4cee517492fecfd11ab97e","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.6-beta.0_1779878491825_0.5444967906501395","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@lark-apaas/http-client","version":"0.1.6","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.6","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"1e340f6b09f2e357f40b25b6b7c6e18ab1a02c16","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.6.tgz","fileCount":9,"integrity":"sha512-LQjWiwyNBd59LuyM7z6bqot9wGjoAy1O6ZEbBJWw5Ldt1QnwM1jLH/5K7K5aefEr52jkPfw/GRICw6Za5DUUfA==","signatures":[{"sig":"MEUCIQCh3ndoE7S3Tv4hUryIy3m1CwBS0e7QOfwHoZmwmUYNzwIgC4/FeuJIFqU4YL2PGMC9auE83+3WnDc+mBHHrCINuus=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173694},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"72cef483738a6d30ba4cee517492fecfd11ab97e","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.6_1779884845661_0.6916502871088046","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.0":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.0","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.0","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"eb6dffa35ac7827ba1d7437a8f53a5c8dee441cc","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.0.tgz","fileCount":9,"integrity":"sha512-qfZOVQiJDBejzbT9tx0VYmwov2ZbGVUSI7xb4Oo2VMrhCSzIiezhIDKUm6hQRILlLJzXRFDx9N0ERNuwOtY/iw==","signatures":[{"sig":"MEUCIQDqVt5Q73y//7esR9P3GMnRT5nbBnJ++jqSlxOSuzXMZgIgfpLrO13JEQu0LI/0MR1kyN+d/aarHIrGJUuhL9jSQ+s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":186546},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"07a666aad37c6c046f0b9d50f19a3624c7841996","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.0_1780406095742_0.8877512139273176","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.1":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.1","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.1","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"f533163326c30cc308d08c1af868c15ea19dafff","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.1.tgz","fileCount":9,"integrity":"sha512-U5/MDywhrn4h4ZKX3UPbynpXX50gXoSsS+Uk8ZynGJGJwY/yRdzjhqzGBxiFA1p0pT1pqfShH2rJ54R5voy1cg==","signatures":[{"sig":"MEUCIGup4Wdar3x6jte+bUdjrb8WZjKwMt592PQcmiV0lBa0AiEA68Jl25+PJXLX7cknmtwNsi85YaF6UZi/6wJigjiox7E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":186546},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"dfbd893fb71323997e8e2091ec67cd29cfa35149","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.1_1780421589589_0.8858749657905838","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.2":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.2","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.2","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"39c527f98ec4279be6ac062c98e3a38d082bc4b4","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.2.tgz","fileCount":9,"integrity":"sha512-Gopn7CsqFxhty8lUsEZpk7PdlgEe5gSskuy3/3hfseLcggZV06VocAYtcB+MXsEXE5n3y+jUWlw04AbMNLOjxg==","signatures":[{"sig":"MEYCIQDqELB7i5Z+AErTtF6TM4HPczFpQAe14ahtl4ef9oOj8QIhALJJISDv+FO5jeiUdKZG3uff/54EEY8HiKj+STceNz6R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":186546},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"163fa26cb951f5eadcd6fa8e661aea75c1609418","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.2_1780461336785_0.6241937064940943","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.3":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.3","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.3","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"15efbb2118dacecaa94ed968284e45c1a66e146e","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.3.tgz","fileCount":9,"integrity":"sha512-Fk3igATNv5ifXpMIVuyPw0G8JaBkGkdnkjVz+uXVOTGwBMtJ3IyCG9OS2beZdCdnrgNX7NQxNIPMPmF7VxGUnQ==","signatures":[{"sig":"MEUCIQDI0Pz3PRRujTg28RjGjmUJJ7QYj7o9kc6t4xB3wpLtrgIgGXBHIeTqp3rRO6zVpGAp0g4/seh5UoZ1bSEQi8FkVwM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187074},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"319da3f0ae16f9257cc91126fe2a7327395c0b7a","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.3_1780476870546_0.4302575568209839","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.4":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.4","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.4","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"f339d9cc092f4f24135a5f366c485776f8d6b2ca","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.4.tgz","fileCount":9,"integrity":"sha512-CVvXQTJe0Want0KhzZgrbQZy9aLqRBs22YvMbQPHk4aNQAJERV6zs246HEvYJWAO9HvuyIXrfQgakAwIUSm/fQ==","signatures":[{"sig":"MEUCIAMrgP/HVIxZHGqx9M7kmrxWU13TGiFG0oFmqIl3zifnAiEAz2otFHzEjjjdCU12R0cFIjtpwuhED6366wAxRqkPVgI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187074},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"3ca9bcbb21981126b07ee2620dca73d673f120ea","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.4_1780478551845_0.8900660478181699","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.5":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.5","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.5","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"10095626735bac515621f24e304b98e8e52addb5","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.5.tgz","fileCount":9,"integrity":"sha512-qWKA4bFBFWwuHss87sP0usQmSrKR9VU+nyLzQ78yTzuFil6j0K+SY5vRzF35ECDHFZCIbTdhsxjjMiotvYfmEg==","signatures":[{"sig":"MEUCIQCj1hlrgcofFxaGRRZzBftW5I7mO2OGVyiaVvQf4P4+NgIgbstW9r8Z2rcplNeL2B1L8z6zfuBCUVV9z1LzLH8a6/Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187074},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"50f81eb50d016a15ae955faa2b8376ab6ddba9a9","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.5_1780493179765_0.3207691225415106","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.6":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.6","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.6","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"33f1273ce244e39ddfd339430728eefa26a6d530","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.6.tgz","fileCount":9,"integrity":"sha512-Rl8iTOviQgIIivTTwN9T0oKTzT218ldXb6DDbZ3w8XfgY7ZJt991i+Y5TyBnkEv/ROwQpYk20rMosMjXCFjofw==","signatures":[{"sig":"MEUCIB0X7Nd9HEpOVsnQ557UuCOX5aeV7dQE+ReOB/42kCAMAiEA/v7+oS/8z5bjq+Bs+G2oClm62EfWOpYgE8dAiAN3aMY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187074},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"492787206d3d416ea1d70d5749fc103303e95ceb","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.6_1780494796377_0.37630292468636894","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.7":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.7","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.7","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"9a79bee13582d3c78ca17cc9660bb84de89c0b25","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.7.tgz","fileCount":9,"integrity":"sha512-DAqvBEQAvm+zHiKBad75Ber6lLk0HqpLhhzMHDhpc/UEFBmiX4hzlNuHk+P8Bc87CIcOj8Jk7Ftj54xelDdsPQ==","signatures":[{"sig":"MEUCIGDXlI6E6tVtiyyCJwSiPHFPh89g18Cgvlv+Jhi4cvRhAiEAvHF0KMRVnKNcFBu7LOuAN5B0O4NlLjCtIYpLAkwS+7c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187074},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"14697b28312aee5f9d1a5c3bce7ab6e9b26b9ce0","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.7_1780569728133_0.3549002645400643","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.8":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.8","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.8","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"d3669bdd8d4aa0f661a007c947e0899d93fd0beb","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.8.tgz","fileCount":9,"integrity":"sha512-CHCRK8l2fcyzfWtUFsXKfRj1rlWLnUvb5npIWrHKdeiDBzT/5J/TQ/3miF7aKpxBOCC84rHK8s31Voj0Y+1oLg==","signatures":[{"sig":"MEUCIQDw11IEuCQEvfzUZ49FIsJNnWs0DSQK1GfWDUP2oxAWCgIgBSxVWITygzZIy1Ersqu/eFRCdw8J1eGrSxjqKa4j5J0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187074},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"0d7b10d10471c727980ea5f7d26aa7fd9b382f77","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.8_1780581341286_0.8948702656708407","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.9":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.9","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.9","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"8399ad2058de30c0dfb4b61d0b3490e99b3921ad","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.9.tgz","fileCount":9,"integrity":"sha512-hQiy0kaHk6S2sQOut+mCotuLVjcm/IHBY7f5SHmcdhuWPszm4nL38srLztjKPpqNgm9Rl5+JPALYbJ6X+YEGIA==","signatures":[{"sig":"MEYCIQC8hTpbE9F8hSD8ZUhh/ZvRvJuFCjd9H6r0ZPpxKUkmJgIhANbUPobqMwcEkuvNNBBPccPJKt1aNDYDgpOVK64PEZre","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183812},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"b364b260feea2568bb7932163a6a459390142bdc","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.9_1780658416484_0.8345804768087175","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.10":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.10","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.10","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"e39b096e63bab258cc6265c43629268e12349bb4","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.10.tgz","fileCount":9,"integrity":"sha512-fyW27KPeiz8FdEPW24vE5qPE1O0Zkr1ikgUapdjAJ7iB8Kzdz8tkQvukbX+w7nDESCPSBFNKoK6T+UrclRpFCA==","signatures":[{"sig":"MEQCIGyYkz97AFdx2pFjy7LiKIIeAvXWvLkos1yuf/i/dEF1AiAkz0jcP66GFzSQBoNTWPXqSIf9TffInSmcDjzxbd5pfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":195850},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"1af5bf590c668e900ebdaf22cafe5c5d846513fc","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.10_1780663388179_0.643319403590338","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-alpha.11":{"name":"@lark-apaas/http-client","version":"0.1.7-alpha.11","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-alpha.11","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"528460662b28348e8d048b837a9a83fb1127e9b5","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-alpha.11.tgz","fileCount":9,"integrity":"sha512-Kt3oC1PGpAV5+0vDz/z418tve3Ed1MqNCKFfZs06wfJnxwxVLIW7ywey+99Q306WvoZUCVs03Ryg/EE6lP12zA==","signatures":[{"sig":"MEYCIQCk3rrcK/Kg/NCn77oSp7F95mbiqV7YRqJuobUHEwp0gwIhAOUfYylzrUon+Ra5YtRhN2HPgbwxmQcKiNU6lnbW3r7Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204848},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"4d0e8daf954e669f12f9a3a4de2c35a9cba56f12","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-alpha.11_1780663908695_0.9131567785355108","host":"s3://npm-registry-packages-npm-production"}},"0.1.7-beta.0":{"name":"@lark-apaas/http-client","version":"0.1.7-beta.0","keywords":["http-client"],"author":{"name":"Lark APaaS"},"license":"MIT","_id":"@lark-apaas/http-client@0.1.7-beta.0","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"dist":{"shasum":"f26a2d314e317015ac021fe883b5a3d3fbc99e23","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7-beta.0.tgz","fileCount":9,"integrity":"sha512-LwNohS8kljmF/kKSJEVuLLA4WHayba37I0c2MWhecT/wKFr/ZsZ61Tu2MOLs9b4qTRFuCQB+PHTOFLhp5M5m1A==","signatures":[{"sig":"MEYCIQCPqAr5XraPznp2OI+Mx0LHwZiXgLOap4vwW1FgQeAQMQIhAIGT1OWoXoNXfBHvLjLpDhTLFM4pVclYRZPyihPvIWV/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204846},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"57a08f23d5819c49ba7c1447956fad2784b87d24","scripts":{"dev":"tsup --watch","lint":"echo 'ESLint skipped for TypeScript files'","test":"vitest run","build":"tsup","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"_npmVersion":"10.9.2","description":"HTTP client with Axios-style interceptors, built on native fetch API","directories":{},"_nodeVersion":"22.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vitest":"^3.2.4","typescript":"^5.0.0","@types/node":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/http-client_0.1.7-beta.0_1780665894982_0.013498686157984663","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@lark-apaas/http-client","version":"0.1.7","description":"HTTP client with Axios-style interceptors, built on native fetch API","main":"dist/index.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","lint":"echo 'ESLint skipped for TypeScript files'"},"keywords":["http-client"],"engines":{"node":">=18.0.0"},"author":{"name":"Lark APaaS"},"license":"MIT","devDependencies":{"@types/node":"^18.0.0","typescript":"^5.0.0","vitest":"^3.2.4"},"_id":"@lark-apaas/http-client@0.1.7","gitHead":"57a08f23d5819c49ba7c1447956fad2784b87d24","_nodeVersion":"22.17.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-ihaV4zzMWFTkG/M++Zx88yQ0kRrEWPbI25PtHku3sjGjY9RboNN3onv1lZ8M7kdKSvswU+JjBlBomrIEzbsk5Q==","shasum":"fee10572eca9145f2461bb4e66f65e1e81e07dd7","tarball":"https://registry.npmjs.org/@lark-apaas/http-client/-/http-client-0.1.7.tgz","fileCount":9,"unpackedSize":204839,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC5Cha+8XsgS2V7fUaB1X+KTIyAA7luQ8fCD8I5LzKkRQIhAIDSqL95vzi3Ag+e0L1ct/oDU3QOBY69O5s8m7sAK1Am"}]},"_npmUser":{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"},"directories":{},"maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/http-client_0.1.7_1780667250248_0.9180938078866869"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-18T12:32:59.727Z","modified":"2026-06-05T13:47:30.655Z","0.1.0":"2025-12-18T12:33:00.016Z","0.1.1":"2025-12-18T13:31:34.149Z","0.1.2":"2025-12-18T15:31:07.079Z","0.1.3-alpha.0":"2026-02-10T12:26:38.101Z","0.1.3-alpha.1":"2026-04-10T03:53:18.639Z","0.1.3":"2026-04-10T06:53:22.006Z","0.1.4":"2026-04-24T13:44:17.811Z","0.1.3-alpha.2":"2026-04-27T13:37:57.395Z","0.1.5-beta.0":"2026-04-27T14:25:57.896Z","0.1.5":"2026-04-27T15:14:23.675Z","0.1.6-alpha.0":"2026-05-14T04:11:32.423Z","0.1.6-alpha.1":"2026-05-20T13:53:39.726Z","0.1.6-alpha.2":"2026-05-25T14:02:54.786Z","0.1.6-alpha.3":"2026-05-27T03:44:00.527Z","0.1.6-alpha.4":"2026-05-27T10:16:24.799Z","0.1.6-beta.0":"2026-05-27T10:41:31.954Z","0.1.6":"2026-05-27T12:27:25.834Z","0.1.7-alpha.0":"2026-06-02T13:14:55.916Z","0.1.7-alpha.1":"2026-06-02T17:33:09.752Z","0.1.7-alpha.2":"2026-06-03T04:35:36.928Z","0.1.7-alpha.3":"2026-06-03T08:54:30.680Z","0.1.7-alpha.4":"2026-06-03T09:22:31.982Z","0.1.7-alpha.5":"2026-06-03T13:26:20.021Z","0.1.7-alpha.6":"2026-06-03T13:53:16.572Z","0.1.7-alpha.7":"2026-06-04T10:42:08.290Z","0.1.7-alpha.8":"2026-06-04T13:55:41.444Z","0.1.7-alpha.9":"2026-06-05T11:20:16.647Z","0.1.7-alpha.10":"2026-06-05T12:43:08.377Z","0.1.7-alpha.11":"2026-06-05T12:51:48.840Z","0.1.7-beta.0":"2026-06-05T13:24:55.114Z","0.1.7":"2026-06-05T13:47:30.430Z"},"author":{"name":"Lark APaaS"},"license":"MIT","keywords":["http-client"],"description":"HTTP client with Axios-style interceptors, built on native fetch API","maintainers":[{"name":"bytednpm","email":"bnpm@bytedance.com"},{"name":"fengtianran_byted","email":"fengtianran@bytedance.com"},{"name":"xiaochuanzhang_byted","email":"xiaochuanzhang@bytedance.com"},{"name":"byted.lycoiref","email":"liuyufei.lycoiref@bytedance.com"},{"name":"duanlikang_byte","email":"duanlikang@bytedance.com"}],"readme":"# @lark-apaas/http-client\n\n技术栈无关的 HTTP 客户端，基于原生 fetch API，拦截器模式遵循 Axios 标准。\n\n## 特性\n\n- ✅ **零依赖**: 基于 Node.js 原生 fetch API (Node 18+)\n- ✅ **技术栈无关**: 可在任何 Node.js 环境使用（NestJS, Express, Koa, 纯 Node）\n- ✅ **Fetch 风格 API**: 返回标准 `Response` 对象，原生支持流式响应\n- ✅ **Axios 风格拦截器**: 拦截器模式与 Axios 完全一致，AI 模型和开发者都熟悉\n- ✅ **流式响应支持**: 完美支持 SSE、OpenAI Streaming API、大文件下载等场景\n- ✅ **完整类型支持**: 100% TypeScript 编写\n- ✅ **请求超时**: 支持配置请求超时时间\n- ✅ **请求取消**: 支持 AbortController，可与超时结合使用\n- ✅ **Query Params**: 自动处理查询参数\n- ✅ **baseURL 支持**: 支持配置基础 URL\n- ✅ **平台 JWT 鉴权**: 可选启用 AK/SK → JWT 方案，自动注入 Authorization 与 x-api-key\n- ✅ **文件 Token 支持**: 支持从文件读取外部签发的 JWT token，多路径优先级链 + 自动 fallback AK/SK\n- ✅ **JWT 缓存**: 自动缓存 token，在过期前自动刷新，支持多租户和多用户\n- ✅ **安全特性**: 敏感信息脱敏、协议白名单、响应体大小限制\n\n## 安装\n\n```bash\nnpm install @lark-apaas/http-client\n```\n\n或使用 yarn:\n\n```bash\nyarn add @lark-apaas/http-client\n```\n\n## 环境要求\n\n- Node.js >= 18.0.0 (需要原生 fetch 支持)\n\n## 快速开始\n\n### 基础使用\n\n```typescript\nimport { HttpClient } from '@lark-apaas/http-client';\n\nconst client = new HttpClient({\n  baseURL: 'https://api.example.com',\n  timeout: 5000,\n});\n\n// GET 请求\nconst response = await client.get('/users');\nconst data = await response.json();\nconsole.log(data);\n\n// POST 请求\nconst newUserResponse = await client.post('/users', {\n  name: 'John Doe',\n  email: 'john@example.com',\n});\nconst newUser = await newUserResponse.json();\nconsole.log(newUser);\n```\n\n### 响应格式\n\n所有请求都返回标准的 `Response` 对象（原生 fetch API）：\n\n```typescript\nconst response = await client.get('/users');\n\n// 响应属性\nconsole.log(response.status);      // HTTP 状态码 (例如: 200)\nconsole.log(response.ok);          // 布尔值，状态码 200-299 为 true\nconsole.log(response.statusText);  // 状态文本 (例如: \"OK\")\nconsole.log(response.headers);     // Headers 对象\n\n// 解析响应体\nconst jsonData = await response.json();        // 解析 JSON\nconst textData = await response.text();        // 解析文本\nconst blobData = await response.blob();        // 解析 Blob\nconst arrayBuffer = await response.arrayBuffer(); // 解析 ArrayBuffer\n```\n\n### 流式响应支持\n\n`Response` 对象原生支持流式读取，适用于 SSE、实时 API、大文件下载等场景：\n\n```typescript\n// OpenAI Streaming API 示例\nconst response = await client.post('/v1/chat/completions', {\n  model: 'gpt-4',\n  messages: [{ role: 'user', content: 'Hello!' }],\n  stream: true,\n});\n\nconst reader = response.body!.getReader();\nconst decoder = new TextDecoder();\n\nwhile (true) {\n  const { done, value } = await reader.read();\n  if (done) break;\n\n  const chunk = decoder.decode(value);\n  console.log(chunk); // 实时输出每个数据块\n}\n```\n\n```typescript\n// Server-Sent Events (SSE) 示例\nconst response = await client.get('/events');\nconst reader = response.body!.getReader();\nconst decoder = new TextDecoder();\n\nwhile (true) {\n  const { done, value } = await reader.read();\n  if (done) break;\n\n  const text = decoder.decode(value);\n  const events = text.split('\\n\\n');\n\n  for (const event of events) {\n    if (event.startsWith('data: ')) {\n      const data = JSON.parse(event.slice(6));\n      console.log('Event:', data);\n    }\n  }\n}\n```\n\n```typescript\n// 大文件下载进度示例\nconst response = await client.get('/large-file.zip');\nconst contentLength = parseInt(response.headers.get('content-length') || '0');\nconst reader = response.body!.getReader();\n\nlet receivedLength = 0;\nconst chunks: Uint8Array[] = [];\n\nwhile (true) {\n  const { done, value } = await reader.read();\n  if (done) break;\n\n  chunks.push(value);\n  receivedLength += value.length;\n\n  const progress = (receivedLength / contentLength) * 100;\n  console.log(`Downloaded: ${progress.toFixed(2)}%`);\n}\n\nconst blob = new Blob(chunks);\nconsole.log('Download complete!', blob.size);\n```\n\n## 请求取消\n\n`http-client` 支持通过 `AbortController` 来取消请求，这与原生的 `fetch` API 和新版 `axios` 保持一致。\n\n你可以在请求配置中传入一个 `AbortSignal`。当该 `signal` 被触发时，请求会被中断。\n\n```typescript\nimport { HttpClient } from '@lark-apaas/http-client';\n\nconst client = new HttpClient();\nconst controller = new AbortController();\n\nasync function fetchWithCancellation() {\n  try {\n    const promise = client.get('https://api.example.com/long-running-task', {\n      signal: controller.signal,\n    });\n\n    // 2秒后取消请求\n    setTimeout(() => controller.abort(), 2000);\n\n    const response = await promise;\n    const data = await response.json();\n    console.log('Response:', data);\n  } catch (error) {\n    // HttpError 的 message 会是 'Request aborted'\n    console.error('Error:', error.message);\n  }\n}\n\nfetchWithCancellation();\n```\n\n该机制可以与 `timeout` 配置结合使用，任何一个先触发（超时或外部取消）都会中断请求。\n\n## 拦截器\n\n拦截器模式完全遵循 Axios 标准，API 与 Axios 一致。\n\n### 请求拦截器\n\n请求拦截器接收并返回完整的 `RequestConfig` 对象：\n\n```typescript\n// 添加请求拦截器\nconst requestInterceptorId = client.interceptors.request.use(\n  (config) => {\n    // 在请求发送前修改配置\n    config.headers = config.headers || {};\n    config.headers['Authorization'] = `Bearer ${getToken()}`;\n    config.headers['X-Request-ID'] = generateRequestId();\n    return config;\n  },\n  (error) => {\n    // 处理请求错误\n    console.error('Request error:', error);\n    return Promise.reject(error);\n  }\n);\n\n// 移除拦截器\nclient.interceptors.request.eject(requestInterceptorId);\n```\n\n### 响应拦截器\n\n响应拦截器接收并返回标准的 `Response` 对象：\n\n```typescript\n// 添加响应拦截器\nclient.interceptors.response.use(\n  (response) => {\n    // 处理响应\n    console.log(`Response status: ${response.status}`);\n\n    // 可以直接返回 Response，让业务代码自行解析\n    return response;\n  },\n  async (error) => {\n    // 处理响应错误\n    if (error.response) {\n      // 请求已发出，服务器返回错误状态码\n      const status = error.response.status;\n\n      if (status === 401) {\n        // 处理未授权\n        redirectToLogin();\n      } else if (status === 500) {\n        // 处理服务器错误\n        const errorData = await error.response.json();\n        console.error('Server error:', errorData);\n      }\n    } else {\n      // 网络错误或请求超时\n      console.error('Network error:', error.message);\n    }\n\n    return Promise.reject(error);\n  }\n);\n```\n\n## 完整示例\n\n### 在 NestJS 中使用\n\n```typescript\nimport { Injectable } from '@nestjs/common';\nimport { HttpClient } from '@lark-apaas/http-client';\n\n@Injectable()\nexport class ApiService {\n  private client: HttpClient;\n\n  constructor() {\n    this.client = new HttpClient({\n      baseURL: process.env.API_BASE_URL,\n      timeout: 10000,\n    });\n\n    // 配置请求拦截器\n    this.client.interceptors.request.use(\n      (config) => {\n        config.headers = config.headers || {};\n        config.headers['X-Service-Name'] = 'my-service';\n        return config;\n      }\n    );\n\n    // 配置响应拦截器\n    this.client.interceptors.response.use(\n      (response) => response,\n      async (error) => {\n        if (error.response?.status === 401) {\n          // 刷新 token 并重试\n          await this.refreshToken();\n          return this.client.request(error.config);\n        }\n        return Promise.reject(error);\n      }\n    );\n  }\n\n  async getUsers() {\n    const response = await this.client.get('/users');\n    return response.json();\n  }\n\n  async createUser(userData: any) {\n    const response = await this.client.post('/users', userData);\n    return response.json();\n  }\n}\n```\n\n### 在纯 Node.js 中使用\n\n```typescript\nimport { HttpClient } from '@lark-apaas/http-client';\n\nconst client = new HttpClient({\n  baseURL: 'https://jsonplaceholder.typicode.com',\n  timeout: 5000,\n  headers: {\n    'User-Agent': 'MyApp/1.0',\n  },\n});\n\n// 添加日志拦截器\nclient.interceptors.request.use((config) => {\n  console.log(`[Request] ${config.method} ${config.url}`);\n  return config;\n});\n\nclient.interceptors.response.use(\n  (response) => {\n    console.log(`[Response] ${response.status} ${response.statusText}`);\n    return response;\n  },\n  (error) => {\n    console.error(`[Error] ${error.message}`);\n    return Promise.reject(error);\n  }\n);\n\nasync function main() {\n  try {\n    // GET 请求\n    const usersResponse = await client.get('/users', {\n      params: { page: 1, limit: 10 }\n    });\n    const users = await usersResponse.json();\n    console.log('Users:', users);\n\n    // POST 请求\n    const newPostResponse = await client.post('/posts', {\n      title: 'Hello World',\n      body: 'This is a test post',\n      userId: 1,\n    });\n    const newPost = await newPostResponse.json();\n    console.log('New post:', newPost);\n  } catch (error) {\n    console.error('Request failed:', error);\n  }\n}\n\nmain();\n```\n\n## 平台 JWT 鉴权\n\n在平台内部署的服务可以开启内置 JWT 鉴权能力，SDK 会：\n\n- 读取 `apaas_ak` / `apaas_sk`（名称可通过配置覆盖）\n- 使用 HS256 生成短期 JWT（默认 30 分钟有效）\n- 自动在请求头中注入 `Authorization: Bearer <token>` 与 `x-api-key`\n- **自动缓存 token**，在过期前 5 分钟自动刷新（可配置）\n\n### 启用方式\n\n```typescript\nconst client = new HttpClient({\n  platform: {\n    enabled: true,\n    domainEnv: 'FORCE_AUTHN_INNERAPI_DOMAIN', // 默认即可省略\n    refreshBeforeMs: 5 * 60 * 1000, // 可选：过期前多久刷新（默认 5 分钟）\n    defaultClaims: {\n      tenant_id: 1001,\n      app_id: 'demo-app',\n      app_env: 'prod',\n    },\n  },\n});\n\n// baseURL 将默认为 process.env.FORCE_AUTHN_INNERAPI_DOMAIN\nawait client.get('/secure-resource');\n```\n\n也可以在单次请求中覆写 `platformAuth`，用于注入当前用户等动态信息：\n\n```typescript\nawait client.post('/secure-resource', body, {\n  platformAuth: {\n    customClaims: {\n      user_id: currentUserId,\n    },\n  },\n});\n```\n\n> ⚠️ 默认情况下该能力关闭；若 AK/SK 缺失或 JWT 生成失败，会直接抛错阻断请求。\n> 注意：平台默认/请求级 `customClaims` 禁止设置 `access_key`，该字段始终由 SDK 根据 AK 自动填充。\n\n### 文件 Token Provider\n\n在某些场景下（如 openclaw），JWT token 由外部进程签发并写入本地文件。通过配置 `tokenProvider` 可让 SDK 自动从文件读取 token，无需 AK/SK：\n\n```typescript\n// 最简配置：使用内置默认路径\nconst client = new HttpClient({\n  platform: {\n    enabled: true,\n    tokenProvider: { type: 'file' },\n  },\n});\n\n// 自定义路径\nconst client = new HttpClient({\n  platform: {\n    enabled: true,\n    tokenProvider: {\n      type: 'file',\n      paths: ['/custom/path/a', '/custom/path/b'],\n    },\n  },\n});\n```\n\n**工作机制：**\n\n- `paths` 可选，不传时使用内置默认路径\n- 按 `paths` 数组顺序依次尝试，命中第一个有效 token 即返回\n- `Authorization` 和 `x-api-key` 均从文件中的 JWT payload 解析，无需额外配置\n- 基于 token 的 `exp` 字段做内存缓存，在过期前 `refreshBeforeMs` 窗口内重新读取文件\n- 所有路径均无有效 token 时，自动 fallback 到 AK/SK 自签逻辑\n- 消费方无需感知 token 来源，行为完全透明\n\n### 性能优化：Token 缓存\n\n平台插件会自动缓存生成的 JWT token，避免每次请求都重新生成：\n\n- **缓存策略**：基于 `claims` 的组合（支持多租户和多用户场景）\n- **自动刷新**：在 token 过期前 5 分钟自动刷新（可通过 `refreshBeforeMs` 配置）\n- **多租户支持**：不同 `tenant_id` 或 `user_id` 会生成不同的 token 并分别缓存\n\n```typescript\nconst client = new HttpClient({\n  platform: {\n    enabled: true,\n    refreshBeforeMs: 3 * 60 * 1000, // 过期前 3 分钟刷新\n  },\n});\n```\n\n### 管理端 innerapi（仅用于开发态）\n\n妙搭开发态 innerapi 在网关侧配置了 admin 插件，会额外注入用户/Agent 身份。开启 `adminInnerApi` 后 SDK 会：\n\n- 把 baseURL 改从 `MIAODA_DEV_INNER_DOMAIN_WITH_PREFIX` 读取（不再回退到 `FORCE_AUTHN_INNERAPI_DOMAIN`）\n- 每次请求时从 `MIAODA_AUTHN_CODE` 读取用户凭证，注入到请求头 `X-Miaoda-Client-Token`\n- **AK/SK 的 `Authorization` 与 `x-api-key` 照旧注入**（`adminInnerApi` 只是叠加，不是替换）\n\n```typescript\nconst client = new HttpClient({\n  platform: {\n    enabled: true,\n    adminInnerApi: true, // 开启管理端 innerapi 链路\n    // adminDomainEnv: 'MIAODA_DEV_INNER_DOMAIN_WITH_PREFIX', // 默认即此\n    // clientTokenEnv: 'MIAODA_AUTHN_CODE',       // 默认即此\n  },\n});\n\n// 请求会发往 MIAODA_DEV_INNER_DOMAIN_WITH_PREFIX\n// 请求头会带 Authorization / x-api-key / X-Miaoda-Client-Token\nawait client.get('/innerapi/v1/{bizDomain}/{path}');\n```\n\n> `MIAODA_AUTHN_CODE` 由网关在运行时注入，初始化阶段不存在也不会校验。请求时若读不到，则不注入 `X-Miaoda-Client-Token` 头（其它请求头不受影响）。\n>\n> 管理端 innerapi 仅在妙搭开发态部署，运行态请勿开启 `adminInnerApi`。\n\n## 安全特性\n\n### 严格模式\n\n启用严格模式后，会自动开启所有安全检查：\n\n```typescript\nconst client = new HttpClient({\n  security: {\n    strictMode: true, // 启用严格模式\n  },\n});\n```\n\n严格模式包含：\n- ✅ **URL 协议限制**：仅允许 `http:` 和 `https:`，防止 SSRF 攻击\n- ✅ **响应体大小限制**：默认 50MB，防止内存耗尽攻击\n- ✅ **敏感信息自动脱敏**：错误对象中的敏感 headers 会被替换为 `[REDACTED]`\n\n### 自定义安全配置\n\n您也可以单独配置各项安全特性：\n\n```typescript\nconst client = new HttpClient({\n  security: {\n    allowedProtocols: ['https:'], // 仅允许 HTTPS\n    maxResponseSize: 10 * 1024 * 1024, // 限制 10MB\n  },\n});\n```\n\n### 敏感信息保护\n\n`HttpError` 对象会自动清理敏感的 headers，保护您的凭证安全：\n\n```typescript\ntry {\n  await client.get('/api', {\n    headers: {\n      Authorization: 'Bearer secret-token-12345',\n      'x-api-key': 'my-secret-api-key',\n    },\n  });\n} catch (error) {\n  console.log(error.config.headers.Authorization); // '[REDACTED]'\n  console.log(error.config.headers['x-api-key']); // '[REDACTED]'\n  // 其他非敏感 headers 保持不变\n}\n```\n\n以下 headers 会被自动脱敏：\n- `Authorization`\n- `x-api-key`\n- `Cookie`\n- `x-secret`\n\n## API 文档\n\n### HttpClient\n\n#### 构造函数\n\n```typescript\nnew HttpClient(config?: HttpClientConfig)\n```\n\n#### 请求方法\n\n所有请求方法都返回 `Promise<Response>`（标准 fetch Response 对象）：\n\n```typescript\n// GET 请求\nclient.get(url: string, config?: RequestConfig): Promise<Response>\n\n// POST 请求\nclient.post(url: string, data?: any, config?: RequestConfig): Promise<Response>\n\n// PUT 请求\nclient.put(url: string, data?: any, config?: RequestConfig): Promise<Response>\n\n// DELETE 请求\nclient.delete(url: string, config?: RequestConfig): Promise<Response>\n\n// PATCH 请求\nclient.patch(url: string, data?: any, config?: RequestConfig): Promise<Response>\n\n// 通用请求\nclient.request(config: RequestConfig): Promise<Response>\n```\n\n#### 拦截器\n\n```typescript\n// 请求拦截器\nclient.interceptors.request.use(\n  onFulfilled?: (config: RequestConfig) => RequestConfig | Promise<RequestConfig>,\n  onRejected?: (error: any) => any\n): number\n\n// 响应拦截器\nclient.interceptors.response.use(\n  onFulfilled?: (response: Response) => Response | Promise<Response>,\n  onRejected?: (error: any) => any\n): number\n\n// 移除拦截器\nclient.interceptors.request.eject(id: number): void\nclient.interceptors.response.eject(id: number): void\n```\n\n### RequestConfig\n\n```typescript\ninterface RequestConfig extends RequestInit {\n  url?: string;\n  params?: Record<string, any>;  // Query 参数\n  timeout?: number;               // 超时时间（毫秒）\n  baseURL?: string;               // 基础 URL\n  platformAuth?: {\n    customClaims?: {\n      tenant_id?: number;\n      user_id?: string;\n      app_id?: string;\n      app_env?: string;\n      sandbox_id?: string;\n    };\n  };\n}\n\ninterface SecurityConfig {\n  /**\n   * 允许的 URL 协议白名单\n   * 默认: null (不限制)\n   * 设置为 ['http:', 'https:'] 可限制只允许 HTTP/HTTPS\n   */\n  allowedProtocols?: string[] | null;\n\n  /**\n   * 最大响应体大小（字节）\n   * 默认: 0 (不限制)\n   */\n  maxResponseSize?: number;\n\n  /**\n   * 是否启用严格模式（启用所有安全检查）\n   * 默认: false\n   * 启用后会自动设置：\n   * - allowedProtocols = ['http:', 'https:']\n   * - maxResponseSize = 50MB\n   */\n  strictMode?: boolean;\n}\n\ninterface HttpClientConfig extends RequestConfig {\n  platform?: {\n    enabled?: boolean;            // 开启后自动注册平台插件\n    baseURL?: string;             // 直接指定平台域名\n    domainEnv?: string;           // 域名环境变量（默认 FORCE_AUTHN_INNERAPI_DOMAIN）\n    accessKeyEnv?: string;        // AK 环境变量名称（默认 FORCE_AUTHN_ACCESS_KEY）\n    secretKeyEnv?: string;        // SK 环境变量名称（默认 FORCE_AUTHN_ACCESS_SECRET）\n    accessKey?: string;           // 直接传入 AK（多用于本地测试）\n    secretKey?: string;           // 直接传入 SK（多用于本地测试）\n    expireTimeMs?: number;        // JWT 过期时间，默认 30 分钟\n    refreshBeforeMs?: number;     // Token 刷新时机，默认过期前 5 分钟\n    defaultClaims?: {             // 默认 Claim，可被每次请求覆盖\n      tenant_id?: number;\n      user_id?: string;\n      app_id?: string;\n      app_env?: string;\n      sandbox_id?: string;\n    };\n    adminInnerApi?: boolean;      // 管理端 innerapi 链路（仅开发态）\n    adminDomainEnv?: string;      // 管理端域名环境变量（默认 MIAODA_DEV_INNER_DOMAIN_WITH_PREFIX）\n    clientTokenEnv?: string;      // 用户凭证环境变量（默认 MIAODA_AUTHN_CODE）\n  };\n  security?: SecurityConfig;      // 安全配置\n}\n```\n\n### HttpError\n\n```typescript\nclass HttpError extends Error {\n  isHttpError: boolean;                // 始终为 true，用于类型判断\n  response: Response | undefined;      // 响应对象（如果有）\n  config: SafeRequestConfig;           // 已清理敏感信息的请求配置\n}\n```\n\n**注意**：为了安全考虑，`error.config` 中的敏感 headers（如 `Authorization`, `x-api-key`, `Cookie`）会被自动替换为 `[REDACTED]`。\n\n### SafeRequestConfig\n\n已清理敏感信息的请求配置，用于 `HttpError.config`：\n\n```typescript\ninterface SafeRequestConfig extends Omit<RequestConfig, 'headers'> {\n  headers?: Record<string, string>; // 敏感 headers 已替换为 '[REDACTED]'\n}\n```\n\n### JWT 辅助函数\n\n本包导出了 JWT 生成和验证的辅助函数，可用于手动处理 JWT token：\n\n```typescript\nimport {\n  generateJWTToken,\n  parseJWTTokenWithVerify,\n  DEFAULT_JWT_EXPIRE_TIME_MS,    // 30 * 60 * 1000 (30分钟)\n  DEFAULT_CLOCK_TOLERANCE_SEC,   // 60 (秒)\n} from '@lark-apaas/http-client';\n\n// 生成 JWT token\nconst token = generateJWTToken(\n  {\n    access_key: 'your-access-key',\n    tenant_id: 1001,\n    user_id: 'user-123',\n    app_id: 'app-456',\n  },\n  {\n    accessKey: 'your-access-key',\n    secretKey: 'your-secret-key',\n    expireTimeMs: 30 * 60 * 1000, // 30分钟\n  }\n);\n\n// 验证并解析 JWT token\nconst claims = parseJWTTokenWithVerify(\n  token,\n  {\n    accessKey: 'your-access-key',\n    secretKey: 'your-secret-key',\n    expireTimeMs: 30 * 60 * 1000,\n  },\n  {\n    clockTolerance: 60, // 时钟容差（秒）\n    skipExpiration: false, // 是否跳过过期验证\n  }\n);\n```\n\n### JWT 类型定义\n\n```typescript\ninterface CustomClaims {\n  tenant_id?: number;\n  user_id?: string;\n  app_id?: string;\n  app_env?: string;\n  sandbox_id?: string;\n  access_key: string;  // 必填\n}\n\ninterface JWTClaims extends CustomClaims {\n  iss: string;   // 签发者\n  iat: number;   // 签发时间\n  nbf: number;   // 生效时间\n  exp: number;   // 过期时间\n  jti: string;   // JWT ID\n  [key: string]: any;\n}\n\ninterface JWTConfig {\n  accessKey: string;\n  secretKey: string;\n  expireTimeMs: number;\n}\n\ninterface JWTVerifyOptions {\n  clockTolerance?: number;  // 时钟容差（秒），默认 60\n  skipExpiration?: boolean; // 跳过过期验证，默认 false\n}\n```\n\n### 平台插件函数\n\n以下函数用于手动注册平台插件（通常通过 `HttpClientConfig.platform` 自动注册）：\n\n```typescript\nimport {\n  registerPlatformPlugin,\n  resolvePlatformBaseURL,\n} from '@lark-apaas/http-client';\n\n// 解析平台 baseURL（从环境变量或配置）\nconst baseURL = resolvePlatformBaseURL({\n  enabled: true,\n  baseURL: 'https://api.example.com', // 优先使用\n  domainEnv: 'FORCE_AUTHN_INNERAPI_DOMAIN', // 其次从环境变量读取\n});\n\n// 手动注册平台插件到 HttpClient 拦截器\nconst client = new HttpClient();\nconst tokenManager = registerPlatformPlugin(client.interceptors, {\n  enabled: true,\n  accessKey: 'your-ak',\n  secretKey: 'your-sk',\n});\n```\n\n### 平台插件类型定义\n\n```typescript\ninterface PlatformPluginOptions {\n  enabled?: boolean;            // 是否启用\n  baseURL?: string;             // 直接指定平台域名\n  domainEnv?: string;           // 域名环境变量名\n  accessKeyEnv?: string;        // AK 环境变量名\n  secretKeyEnv?: string;        // SK 环境变量名\n  accessKey?: string;           // 直接传入 AK\n  secretKey?: string;           // 直接传入 SK\n  expireTimeMs?: number;        // JWT 过期时间\n  refreshBeforeMs?: number;     // Token 刷新时机\n  defaultClaims?: PlatformClaims;\n  tokenProvider?: TokenProviderConfig; // 文件 Token Provider\n}\n\ninterface TokenProviderConfig {\n  type: 'file';                 // Provider 类型\n  paths?: string[];             // 文件路径优先级链（可选，不传使用内置默认路径）\n}\n\ninterface PlatformRequestAuthConfig {\n  customClaims?: PlatformClaims;\n}\n\n// PlatformClaims 不包含 access_key（由 SDK 自动填充）\ntype PlatformClaims = Omit<CustomClaims, 'access_key'>;\n```\n\n## 设计理念\n\n### 为什么采用 Fetch 风格的响应格式？\n\n1. **原生支持流式响应**: `Response.body` 是 `ReadableStream`，完美支持 SSE、实时 API、大文件下载\n2. **Web 标准**: 遵循 WHATWG Fetch API 标准，与浏览器和 Deno 行为一致\n3. **更灵活**: 业务代码可根据需要选择 `.json()`, `.text()`, `.blob()`, `.arrayBuffer()` 等\n4. **社区趋势**: 现代 HTTP 客户端（ky, ofetch, undici）都采用 fetch 风格\n\n```typescript\n// Fetch 风格 - 灵活且原生支持流\nconst response = await client.get('/data');\nconst data = await response.json();  // 或 .text(), .blob(), .arrayBuffer()\n\n// 流式读取（Axios 风格无法原生支持）\nconst reader = response.body!.getReader();\nwhile (true) {\n  const { done, value } = await reader.read();\n  if (done) break;\n  console.log(value); // 实时处理数据块\n}\n```\n\n### 为什么遵循 Axios 的拦截器模式？\n\n1. **最广泛使用**: Axios 是最流行的 HTTP 客户端，几乎所有开发者都熟悉\n2. **AI 模型友好**: 训练数据中有大量 Axios 使用示例，模型更容易生成正确的代码\n3. **清晰的职责分离**: 请求拦截器、响应拦截器、错误处理分别处理\n4. **成熟可靠**: 经过多年生产环境验证的模式\n5. **可预测**: 开发者知道拦截器的执行顺序和行为\n\n### 为什么基于 fetch 而不是 axios？\n\n1. **零依赖**: 使用 Node.js 原生 API，无需额外依赖\n2. **更小体积**: 代码体积小，打包后更轻量\n3. **技术栈无关**: 不依赖特定框架，可在任何环境使用\n4. **现代化**: fetch 是 Web 标准，未来趋势\n\n### 与社区其他方案的对比\n\n| 方案 | 响应风格 | 流式支持 | 拦截器模式 | 依赖 | 体积 | 熟悉度 |\n|------|---------|---------|-----------|------|------|--------|\n| @lark-apaas/http-client | Fetch | ✅ 原生 | Axios 风格 | 零依赖 | 小 | 高（Axios API） |\n| axios | Axios | ❌ 需封装 | Axios 风格 | 有依赖 | 35.6KB | 最高 |\n| ky | Fetch | ✅ 原生 | Hooks 风格 | 零依赖 | ~6KB | 中 |\n| ofetch | Fetch | ✅ 原生 | 简单 | 零依赖 | ~4KB | 中 |\n| undici | Fetch | ✅ 原生 | 简单 | Node专用 | 大 | 中 |\n| wretch | Fetch | ✅ 原生 | 中间件风格 | 零依赖 | ~2KB | 低 |\n| got | 自定义 | ⚠️ 部分 | Hooks 风格 | 有依赖 | 大 | 中 |\n\n## 最佳实践\n\n### 1. 创建专用的客户端实例\n\n不要在每个请求中重新配置拦截器：\n\n```typescript\n// ❌ 不好\nasync function fetchUser() {\n  const client = new HttpClient();\n  client.interceptors.request.use(/* ... */);\n  const response = await client.get('/user');\n  return response.json();\n}\n\n// ✅ 好\nconst apiClient = new HttpClient({\n  baseURL: process.env.API_URL,\n});\n\napiClient.interceptors.request.use(/* ... */);\n\nasync function fetchUser() {\n  const response = await apiClient.get('/user');\n  return response.json();\n}\n```\n\n### 2. 统一错误处理\n\n在响应拦截器中统一处理错误：\n\n```typescript\nclient.interceptors.response.use(\n  (response) => response,\n  async (error) => {\n    // 统一错误日志\n    logger.error('HTTP Error', {\n      url: error.config?.url,\n      status: error.response?.status,\n      message: error.message,\n    });\n\n    // 统一错误转换\n    throw new ApplicationError(error);\n  }\n);\n```\n\n### 3. 请求重试\n\n使用拦截器实现请求重试：\n\n```typescript\nconst MAX_RETRIES = 3;\n\nclient.interceptors.response.use(\n  (response) => response,\n  async (error) => {\n    const config = error.config;\n    config.retryCount = config.retryCount || 0;\n\n    if (config.retryCount < MAX_RETRIES && shouldRetry(error)) {\n      config.retryCount += 1;\n      await sleep(1000 * config.retryCount);\n      return client.request(config);\n    }\n\n    return Promise.reject(error);\n  }\n);\n```\n\n### 4. 处理流式响应时的错误\n\n流式响应需要特殊的错误处理：\n\n```typescript\nasync function streamData() {\n  const response = await client.post('/stream', data);\n\n  if (!response.ok) {\n    // 即使是错误响应，也可能是流式的\n    const errorText = await response.text();\n    throw new Error(`Stream failed: ${errorText}`);\n  }\n\n  const reader = response.body!.getReader();\n  const decoder = new TextDecoder();\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) break;\n\n      const chunk = decoder.decode(value);\n      processChunk(chunk);\n    }\n  } catch (error) {\n    // 处理流读取错误\n    reader.cancel();\n    throw error;\n  }\n}\n```\n\n## 从 Axios 风格迁移\n\n如果你之前使用的是 `response.data` 风格的 API，迁移很简单：\n\n```typescript\n// 旧代码（Axios 风格）\nconst response = await client.get('/users');\nconsole.log(response.data);\nconsole.log(response.status);\n\n// 新代码（Fetch 风格）\nconst response = await client.get('/users');\nconst data = await response.json();  // 手动解析 JSON\nconsole.log(data);\nconsole.log(response.status);\n```\n\n拦截器中的变化：\n\n```typescript\n// 旧代码（Axios 风格）\nclient.interceptors.response.use((response) => {\n  console.log(response.data);  // data 已解析\n  return response;\n});\n\n// 新代码（Fetch 风格）\nclient.interceptors.response.use((response) => {\n  // response 是原生 Response 对象，未解析\n  // 拦截器中通常不解析，让业务代码决定如何解析\n  return response;\n});\n```\n\n详见 [TEST_MIGRATION.md](./docs/TEST_MIGRATION.md) 获取完整迁移指南。\n\n## 许可证\n\nMIT\n\n## 关键字\n\n- http-client\n- fetch\n- axios\n- interceptor\n- typescript\n- technology-agnostic\n","readmeFilename":"README.md"}