{"_id":"js-rpc2","_rev":"32-c9e964c1eceb9a042f42ce42a0cec4ed","name":"js-rpc2","dist-tags":{"latest":"2.7.1"},"versions":{"1.0.0":{"name":"js-rpc2","version":"1.0.0","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.0.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"4aad085593c9df63b13b379e290433d550bbd237","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.0.0.tgz","fileCount":8,"integrity":"sha512-gNYYcRIRLKIrAYhbUCQHh3ks6qf2UY//yCS6/wub2We4IW/auTeAqenjwu5NrsnRL/3KKqftsBFcaC9FnXCJMw==","signatures":[{"sig":"MEYCIQCKbr04b/aN7q1+0bSf6g/yxEXzZuEzUtcHf21op30kCgIhAPPea6m/0/hjvSy2qT4OQnRU1GLY4bvHpY7YthmJE7Um","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":44124},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"07be52c5785a1c42f8f8fe5cbfa21b76cecb9a4b","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"10.8.3","description":"js web websocket http rpc","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.9.4"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.0.0_1733839544076_0.5676447116235281","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"js-rpc2","version":"1.0.1","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.0.1","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"c83910e84f8661aa229dc3ce39eafd68cefc2486","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.0.1.tgz","fileCount":9,"integrity":"sha512-pjp8DK/QDr371GevuqQ4vN8ADmyMEJhUrZP+X7N9cNEmM4hfKiMv0DgoZPiaHNT2dsX/jd1aypcGojdE3teiFg==","signatures":[{"sig":"MEYCIQChScHRxYYKlfBpA0XL/k/bVMHKxI4/jv+UxjR49N8eIwIhAKGN9dgYBn0axIdz6VdWeHnhBVFb4d01FbW0Jf8uSZkf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":59908},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"56bfa6efa5a47f1480a984ea300e8cc25b9ff2be","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"10.8.3","description":"js web websocket http rpc","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.9.4"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.0.1_1733842791093_0.7074616943688536","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"js-rpc2","version":"1.0.2","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.0.2","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"8cc827edaede2b63428dc5d2360a1340881576ef","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.0.2.tgz","fileCount":9,"integrity":"sha512-1ckYPXDEKGx3Lr+meVJLwOFUujPAPlRhUB5cDlQBuqiKznv2/XF7yxJkJnY5CmMSEMNvVSenxiDBa3xa1LXuWA==","signatures":[{"sig":"MEUCIQCKBcfzHp/t48HQnyd/ipgQkZoGcMkFMCrwiD4pTpEEvgIgPxOT8fafN88PsbcLCqZclGcqLOOTT07QGDrp5l8jui8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61136},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"e69906370f1879b666c13e8c88170f49938c0dd4","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"10.8.3","description":"js web websocket http rpc","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.9.4"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.0.2_1734237767483_0.755150026883562","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"js-rpc2","version":"1.0.3","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.0.3","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"407d6c01c0584af8aaa1758cb0d9d9b716006baf","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.0.3.tgz","fileCount":9,"integrity":"sha512-1FYmaff6yV/df7F1G5cISqPUzem03ImZsjDXsalAe9BKOILTtvvbm+oiD64DAvyNKkh5sCWZD2UgNQ7vP/3tXg==","signatures":[{"sig":"MEQCIEJD/TOWTswkU4D6pBMk5dwYB/R6/WGejD6HOe0Ap0NnAiBruqllTAWKKy0cOM4TgApneAiQnY0pDRdMUyruYPv9hA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":61380},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"e89fa23773b75652c0ffd1a9a367fd09dc89427b","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"10.8.3","description":"js web websocket http rpc","directories":{},"_nodeVersion":"22.9.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.9.4"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.0.3_1735368266295_0.6345518098840754","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"js-rpc2","version":"1.0.4","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.0.4","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"5e9b42e5b578267b794f2f71d64641f341d73d74","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.0.4.tgz","fileCount":9,"integrity":"sha512-8Am7h1kbzsHPNn7hw5uGTF+xKbQaGIp+/l8Lz5xR00dJ86xEKpVeNpceOO4GShFtT3KGJq8SFk84KoCTahkQHg==","signatures":[{"sig":"MEMCIHnNLvgZja2KzcVeSvWH0/TL3cptHhj7PPNdpayrerKdAh8OXwox5OiMVYrU5D/CQOgEHLtCUpane+lsmC8BtqtS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62748},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"8d6b614192f56649c2804b2721e1805d92ccd25a","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"10.9.2","description":"js web websocket http rpc","directories":{},"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.9.4"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.0.4_1737796122365_0.6312314583531284","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"js-rpc2","version":"1.0.5","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.0.5","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"9f39b36cac76e5ba6e142152811d2f0959a66dc0","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.0.5.tgz","fileCount":9,"integrity":"sha512-ToOQgvXHUG7i/A+vDbvYUrFW32Xs8K0FTKkm7KDWJ34WfHZ0toz9aohUEQht0k6DX53nreOC/uqRQSsvEx1xUA==","signatures":[{"sig":"MEUCIEkDMCRW8a11+9LV/7FqhPykRmYaGzlfC91ejeIcOhjuAiEAyKU1jCcAKES3SoMMA0wXIwoNK+a2hGiEc/MLXaTXYOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":62949},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"28d7bad3c4b631e1ca492e7512b93399915a61f6","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"10.9.2","description":"js web websocket http rpc","directories":{},"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.0.5_1743219060315_0.6167204298406743","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"js-rpc2","version":"1.0.6","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.0.6","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"e096f4eea16de43faf273433232b4fe2e9ad1bf4","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.0.6.tgz","fileCount":9,"integrity":"sha512-PjB/b8dOOUtDADL/czSzC+dDNmwBzFnOckWCj8/qkJY7LHHo1LQgv7D8zAEfXEC5r1yyfc0mwYtEnIbMttOmtw==","signatures":[{"sig":"MEUCIQCkWYEOsNjtqSoTAGBfrzp0BeAyPyTrj3eQvTGQL/sMBgIgOFA7t+KH5sbHlCnfP9jt7FAdR5hzLB8azcraMnuT47Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":63976},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"49fb87d676811c8f830047d4abfe3d012f22497f","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"10.9.2","description":"js web websocket http rpc","directories":{},"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.0.6_1745139607084_0.9075132706182549","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"js-rpc2","version":"1.0.7","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.0.7","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"91f20151c82190ef1e83e82fe988043dfa640ed4","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.0.7.tgz","fileCount":9,"integrity":"sha512-E4O/JHwLVpMfWBQV+x+hoaFv/F9Z3l50L1ORAg+nVSvkmwBcTEDmBUls7AWWijqJDCt5LTao4kuWDS+Ohic6Lg==","signatures":[{"sig":"MEUCIQDvPQNkjK2qb59SWndyCtwCDaNA/yD/r9PzxerD1C9GXQIgHsgruH0kBDzm50vIRPPWha/GlEpso5KNTlLGoQ3hS3I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64028},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"cc10784316825816aca15672a6127b1a2b62943b","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"10.9.2","description":"js web websocket http rpc","directories":{},"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.0.7_1745140582915_0.19304500880002595","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"js-rpc2","version":"1.1.0","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.1.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"45c5d330a8ece69caab72d04612a6dbbcd6f8e36","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.1.0.tgz","fileCount":9,"integrity":"sha512-SabSUcZbWW0XHi8dz0dVJWkgXiLAa5VRAcMohJJIMWZM1zpqGmbXTK8l9fURf15CQTUKO/kVSMd7Xx+Daf/z2Q==","signatures":[{"sig":"MEUCIQDWHRac1EgpeAOw/BCuETl24/k47lrCD0YheUs1gfAsggIgCgVs2/SoLurmFAeviMCNytAjwgLwii5RT/SjGV9dv+g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64532},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"fc6779c9e9409b05a49c191a05aeed5db7c45f7a","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"10.9.2","description":"js web websocket http rpc","directories":{},"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.1.0_1745142344638_0.7532264046793788","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"js-rpc2","version":"1.1.1","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.1.1","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"2be700495a2ac72f0431182589d648c877c1b39f","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.1.1.tgz","fileCount":9,"integrity":"sha512-TmKJb1qfQ6KJ0FoNE4svhvdW75NyErgylmtiMyz/EnrTRWZNjnO/kt20Ee9L/7s7TXRGrj7dDNov8PSUp/LKbg==","signatures":[{"sig":"MEYCIQCZHljGS+4GctdJ6h+CeHKf8aN5T6W1FOh4OvqEneKO+AIhAOWLn6hCBg9/5wYsLivCU92/FKz1dhpkjtfPUBLAYjsN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64713},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"ade06831dd3126c33ffa3251867f9dc32e40c7c4","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"10.8.2","description":"js web websocket http rpc","directories":{},"_nodeVersion":"22.7.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.1.1_1746597787797_0.733700399801291","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"js-rpc2","version":"1.2.0","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.2.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"67aa613bcb6878f7bc23900b9a31dd96e8044a32","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.2.0.tgz","fileCount":10,"integrity":"sha512-rbztvTKlciryn65z69qEUks4sWjzRC//5ynRwpfzaXug5hs5iusblkmW0KX73T69lrtmDYNELL2YBFff/tmmSg==","signatures":[{"sig":"MEYCIQCDtTapVJ2mxvDNvqb5K7Ob7WKD6+gqK+6wkroovENKZQIhAMi6zPGjvSwqzToGog6ZpaM9MFn7G8oKXLXYeB91COhU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69297},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"2dd3fa59ed3207aa4679ae71124cb21d5fea5fa8","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.2.0_1752539028624_0.3987380676835406","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"js-rpc2","version":"1.2.1","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.2.1","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"9d094fc2fa66068e50cba6a879d5a79db4e04c1a","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.2.1.tgz","fileCount":10,"integrity":"sha512-dK883PpU15zFxieolE97OHVfdOy5UEUgXwyMrEhDHCjUYixmD4ddle5RHKV5LLYH1WFxDx1j71JHz8Ue4vPnKg==","signatures":[{"sig":"MEUCIQDGjuDBl69ZOKC0revomhXuii2D2qkK31ZeHY5jFThHsAIgepDy1uFxKXb36CYA+QJsCcA2g+SwZ5AHez+9TZi4J5Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70032},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"c9bea3c556140f223455b2f10f2fe70c2619b884","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.2.1_1752889912246_0.7185072071017999","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"js-rpc2","version":"1.2.2","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.2.2","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"f2dbecfa0d4981c71ca2465a3662b6ba33449fae","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.2.2.tgz","fileCount":10,"integrity":"sha512-Cq8U8lsiCCoCRSKsE+hLdgRKW/J3muK5zn4XV/ji0IihpJwZ0ddP3pkq5NpPbz9GpgJHUCs8e4x4y9GCWyftlA==","signatures":[{"sig":"MEUCIQDLZGUMpqdXBRXIIQjgUnwC1sfamSu0pEn9UwYvsofrQAIgRAczxgcqrRXTXvtTuE5mS/ElXUg1RC1rxJteJ20KxgA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69993},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"a6a891321b55dedefd994c0e2497333455993be7","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","koa-router":"^13.0.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.2.2_1752910836451_0.6162929354765438","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"js-rpc2","version":"1.2.3","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@1.2.3","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"51114819b26f329e8d4899b9aec98b67125e577d","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-1.2.3.tgz","fileCount":10,"integrity":"sha512-AsCR8ybHLeoflTIzKlr17uBt5/4xdWuGBxdj4loCVmrStJPdiau8JOo9QMON1gzsKX8QSiaN0PpLSzmujkMA8Q==","signatures":[{"sig":"MEUCIQCpPUDB0IhbH1WhekG92C6fDR54KTS2V8AAG+wexxI4WgIgFIQVqumaEdhEK8s8yuabMCOzFGyQPNUl1WsN6wWVpwA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69996},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"136ab189cbb4a6a8fcc844df26ea402c4fce9a12","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","@koa/router":"^13.1.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_1.2.3_1753459928385_0.4648708334941565","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"js-rpc2","version":"2.0.0","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.0.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"cdbba765e364e1eb52cd7c9c2bb46a4d9254a7fd","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.0.0.tgz","fileCount":10,"integrity":"sha512-hA0OBXIT1tEuUHD18lm8fJEWYb46Dvc7Ach66UlRRnKU/eEPTpfmKIWpAxhZSr6OqvvDdNeVDVzuJfjKfpWP/Q==","signatures":[{"sig":"MEYCIQDJKCA1Z61fTzFLFRFXD4IeQnaYyf+F3IiMrw/bbkxDlAIhANceZ8LBEe+2kFhCKYKUF7gg34vEAtt4VhMZXVv19lCS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70359},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"09a328adc9b97644fe2a0c2b2bc8fa0d28ad54e5","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","@koa/router":"^13.1.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.0.0_1754112291159_0.3622834139813884","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"js-rpc2","version":"2.1.0","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.1.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"cb95dfca2b85e25e65b5e0a6d765b518f455b2ea","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.1.0.tgz","fileCount":10,"integrity":"sha512-Ngz+Lh/lBu3KmEpxcCR5b2eqaj/P2fj8KTsf+jwqipl8sLtg1/u/Tvch0bsU5nYnDzUjICt3n6O5SQAKkiexGA==","signatures":[{"sig":"MEUCIQDr2+u6CgwwNcuReH282KUxLjQlGMdEqxW/mEgvuqp78wIgMvwTkeLA3gX4zKACgFGWhFyb6GJHkp+mTKOHXOEZkpk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70658},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"21e0f02d32fc89ea727f564d00fce1d65885a201","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","koa":"^2.15.3","@koa/router":"^13.1.1","@types/node":"^22.13.14"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.1.0_1754117715915_0.010479061469195194","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"js-rpc2","version":"2.2.0","keywords":["js","web","http","websocket","rpc"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.2.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"acfd59757c58d1cefc49e6ae193a775c05c7ab07","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.2.0.tgz","fileCount":10,"integrity":"sha512-qok8cHP8sjfr7oitfP2ABM0Nmq+bhGjh7G975B3NNT1ljPUT4XNa7mG/6kLhqO8UWmAhWRmss0kI1maiVwdO/g==","signatures":[{"sig":"MEUCIBz+ZwYi6MF9/rUX0OTUaIpsCQLQqg6dptTj0oJ3QnoYAiEApErpk3Zap3fjKpQqSJuSZzf+TIhF83fVBLH9q2xHIKg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75573},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"809754e4eb9777cc84abd25f52a8f43612d4754b","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.2.0_1755141579256_0.3967895847541465","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"js-rpc2","version":"2.2.1","keywords":["js","web","http","websocket","rpc","electron"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.2.1","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"b2be1fd49d2d44202464f964a212d6ccd7c7deae","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.2.1.tgz","fileCount":10,"integrity":"sha512-443aMuwz3IFyUXp+2ePLv9VDczy9/mKHqeBw4XDx1ZgX5dOgcTnfiqm/EdNpwgBFsCvCxrf4+l/EerhiXrQZOw==","signatures":[{"sig":"MEQCIG9siMa04Ntej/vDH8SSBMLJ3J3UlHM8LG3R06NPx3GFAiAHkN40fE6uXIy9CQwLIiHTa2jAmmjscVr+ByOBpNYpuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":75678},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"ee799f9edf72226f4cb8351082e5401acb98f0a1","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.2.1_1755142242321_0.02324046514073741","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"js-rpc2","version":"2.3.0","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.3.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"2caea01bcef5e2c97503b2718a6bb147bb006753","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.3.0.tgz","fileCount":12,"integrity":"sha512-SEdEybo3gbcpCJ3X2X8g0gH26lO2i7mFzq3BPx4tZ3YSVB04Uo+Oi8ngawQKNBeDaxlloPgML8BMsSg2G9+XrQ==","signatures":[{"sig":"MEYCIQCnEnCGadGj4UOuJ+bOvwYjYlvy4beJ92Oqm5JqNk1/LQIhAMS6WB7RZrfa3U8zv4R9gqh2HEYA2T6WfXdTbCyo1jqP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90157},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"31cf3b0eaededf0e6df597ee0aadc8c4354a3afa","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.3.0_1756002112362_0.22639138347602095","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"js-rpc2","version":"2.3.1","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.3.1","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"b57a2d64d60f340103a7c2b20b401453cdf62515","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.3.1.tgz","fileCount":12,"integrity":"sha512-5ii7qCC8ri0a5f8eNR/cws7HcfuOOJEYMDo3TJuzfPyjWMq5q9KOjxVlCAtIqZyk9ZODEl/lzAt83sNNtrfSFg==","signatures":[{"sig":"MEYCIQDujpKYjisYOEOn0MBopyBf6mZRrdZS97PuWuFTA7tmMgIhAPd73x11Dh32Pil9yziyVU10rnUX6FqUuAm1ibMdVJg7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91792},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"3e4e80fe950527671dc9cc872ecc0164e4b352c4","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.3.1_1756015168113_0.4263922271142111","host":"s3://npm-registry-packages-npm-production"}},"2.3.2":{"name":"js-rpc2","version":"2.3.2","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.3.2","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"815f24c8d73f2fea21a47cb9cb4f54f5b6934fda","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.3.2.tgz","fileCount":12,"integrity":"sha512-2E9FGxxotn3Sa1X8MJALOi5mO7kbCbsDlmK/EekFrebZguEstc16cTREGlGMbY4lSNC6LHH8zFNQ6M5abTotcQ==","signatures":[{"sig":"MEQCIGiGALUDAOAhs3eZbhPPBcWeA5DxeFAfXAP4V4OqXGFoAiAirkKCfiWEFGdDgNtlsMSR3pt0s2oZvAFrNrZ431qHtA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91719},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"2efe1a76f37c730b523e25627b87e3697837877a","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.3.2_1756024624853_0.12433879564063899","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"js-rpc2","version":"2.4.0","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.4.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"c236368169ed425424859f291911abfdc84199b0","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.4.0.tgz","fileCount":13,"integrity":"sha512-tQl7Kpi4dMudFteny19A+60Kxswn5ctT6wuiKDrEcvA1mpiBB2u+nrrXQJni4i6g6G/IlV6ZAv0Q38fGk5gzMg==","signatures":[{"sig":"MEUCIQCv/BG20bnNC0n1GnzKlRvDJ0brsqImP3Y6FtN74uOw/QIgS4oCOaOaO0yGMYQ19EDQ5FfYsN6z3k1XBjtcNF+HvZ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":98064},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"04c2b9f993368a530c1abd8645759f7c8b9075a3","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.4.0_1756620719258_0.9588982436880031","host":"s3://npm-registry-packages-npm-production"}},"2.4.1":{"name":"js-rpc2","version":"2.4.1","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.4.1","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"03591a0220ccafb0574090b660ded4d1560c57e1","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.4.1.tgz","fileCount":16,"integrity":"sha512-9VTAfdxTUawRWPQZtbCFLObfT4AaJZJtLBjUbpkPHDr9EVfpLNTe7KpPmum2UbvPiKbHBO/v3oB/hGBdSH4R6A==","signatures":[{"sig":"MEYCIQDQoqbukCjbLPMax3OCofrYEt9oDGuSC1pHshVfKr4aKQIhAOkZ4emaRWBS/5Nfjik61xXi0mqo5PbTS/Rvw3+rIWT9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121559},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"2e80be119d43600e5544bb01cbab8b9ddc80d4fd","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.3.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.2.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.4.1_1756621156140_0.13385809536354","host":"s3://npm-registry-packages-npm-production"}},"2.4.2":{"name":"js-rpc2","version":"2.4.2","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.4.2","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"f39fb28330c809e788713e0e91cc13861c1159b8","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.4.2.tgz","fileCount":16,"integrity":"sha512-JV//uMdL4mh4LwUs8/aipmkfQEOYhAOHCAH/vafuOltOXJJT2RL+s1weei99YK32NlveVoNfoA+ndeyizFa8jg==","signatures":[{"sig":"MEUCIQDY6R25QWbeBXvvGspcq5xxxCoq6tz6RM8by4Bx2ujmrgIge1Rv8hkkzzO5fruypOzb20xZB9B74EkVhbHXHaUcats=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121073},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"b7b1b4e1724458fece3c2065ccb5466bd47430bd","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.6.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.9.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.4.2_1774518617415_0.6583463326598231","host":"s3://npm-registry-packages-npm-production"}},"2.4.3":{"name":"js-rpc2","version":"2.4.3","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.4.3","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"4278b0b4ebc65ecf898bb939640f3a0a51bb5e3c","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.4.3.tgz","fileCount":16,"integrity":"sha512-aXbJAR30p0h20QjwO+AXkb4QiFRZWeVf6qxREcaY848uhlg+rF8gJJhXjS1eYXq2hzrMoxZMwjXxCGTik2JhMg==","signatures":[{"sig":"MEYCIQDLjVcmzDneMLNqwijHC1n2N1Mcc6sex3Bzf8syvLymEwIhAOOmrhmJ+KGRkofMubq3J5vZ+GRmRjmzT/lA6kiJyel5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":121078},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"ac70608c009976507617f408f4b70b79987fce6c","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.6.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.9.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.4.3_1774519180182_0.5440919472139472","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"js-rpc2","version":"2.5.0","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.5.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"452d6e0cef6be8281da722700ae8b18cd5f57ac1","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.5.0.tgz","fileCount":16,"integrity":"sha512-TOTg70x6k8ug7SWcgza5pVCWgWOeeSIv9galzALkOX06ea6l+3LxtssNmg9cU7RhnSdhbRymlxkWe5epaX6cJA==","signatures":[{"sig":"MEUCICpEY/w93LHZ4Mrwrqsdc6fy1JziFK5chFrglL6ntCu+AiEA8kO2aladsfVimtRsd+/M+FvVdg6LyuY212Oq7KXoMjc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123383},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"f9363741fb5b4e55af7fd389fd384f2177054881","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.6.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.9.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.5.0_1775115669469_0.9107582193262713","host":"s3://npm-registry-packages-npm-production"}},"2.5.1":{"name":"js-rpc2","version":"2.5.1","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.5.1","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"21cafe48c9e0b681f87b5afeaa921738989bd637","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.5.1.tgz","fileCount":16,"integrity":"sha512-qjPr9akwRsSONoW0a8YFui8IJXSv5Vo1v8ux6A8ErqaqadGfBolrQdyJh48hd0nPp+BGyFebNqjZfNcu6ur7Qg==","signatures":[{"sig":"MEQCIF3JaMRm54n6wADqI9Cg2WDS2lzPrxEvSmcJl5PkasAQAiBh73wfY7OscwJml2tfhLsBeGnzTbe1EcdXuAH9eE0ypQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123357},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"984847a198eb361ac5c1da7541c3eec8a6fb040d","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.6.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.9.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.5.1_1775128562823_0.5739255904888882","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"js-rpc2","version":"2.6.0","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.6.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"dffc8e4d9b795cafdaccb4207ab3b0d9ff3d7492","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.6.0.tgz","fileCount":17,"integrity":"sha512-oaXL0wKka5TZ9Jjsfvve3eb1NgWxnKQkG0SnbZYhrVHjY8pf2WmNNEb3RWE/1p5tSmkcL6JKssDd2bLJ8NmCPg==","signatures":[{"sig":"MEUCIBBfe4sU2vJ11vS4kmiA+P3oGhZQVSHso+dZ8iA90F8AAiEA/hrCIN6nq9TTJ+sOrr5fS0uHXW2CeC5tWQQ6Gcseif8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123979},"main":"index.js","type":"module","types":"types.d.ts","gitHead":"0991a2aea35ab6e70058378de3fab31b0b9f7ff8","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.6.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.9.0","dependencies":{"msgpackr":"^1.11.5"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.3","koa":"^3.0.1","@koa/router":"^14.0.0","@types/node":"^24.2.1"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.6.0_1775184787025_0.56151856478001","host":"s3://npm-registry-packages-npm-production"}},"2.6.1":{"name":"js-rpc2","version":"2.6.1","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.6.1","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"9e9bc71ad997122a421ac4c0cc63c9999f59e689","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.6.1.tgz","fileCount":17,"integrity":"sha512-InOD8h/Hwmfv4KJxxfj4YgimY7Z9vrKaWK9xrxXH/ilwwKr6gesAIq+X5JAsgfnt7sHQTts1XPpFMO5d6h+rfQ==","signatures":[{"sig":"MEUCIGTujUHM/kh6omo+UZPzghuOgVw3hjwQLNnLOSyNn+8WAiEAgPy/BqcJpTGoVvYtLt2k4c+EKfmA6Isvxh25eXxk2aY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":123983},"main":"src/lib.js","type":"module","types":"src/types.ts","gitHead":"fd9dc489b109b9e0817d2197f79f58ef9c31fbfa","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.6.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.9.0","dependencies":{"msgpackr":"^1.11.9"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.20.0","koa":"^3.2.0","@koa/router":"^15.4.0","@types/node":"^25.5.2"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.6.1_1779699613579_0.402658676974051","host":"s3://npm-registry-packages-npm-production"}},"2.6.2":{"name":"js-rpc2","version":"2.6.2","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.6.2","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"09dbcca4de6bbe2c1a2562874ef1201cd537da71","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.6.2.tgz","fileCount":17,"integrity":"sha512-qbK2UcDgRSwdBIsP0itPceiARsXJN4+dMjcdSU86EvW54OEGKV5FXdcIvAo9nP5zlzk/skl4yWywkQJ70Kk1jg==","signatures":[{"sig":"MEYCIQCmlXrlDMFTT2kyUjcMAusnJkCyArpUswlvm/9l0y5rIgIhAKmoz8QwDQBJXN0CejedVt2I8iN9C50FuAIxsWuQyF91","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":124311},"main":"src/lib.js","type":"module","types":"src/types.ts","gitHead":"a1f8342fcdacc09c0d7c50a8a60ea011ff65ba72","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.6.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.9.0","dependencies":{"msgpackr":"^2.0.4"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.21.0","koa":"^3.2.1","@koa/router":"^15.7.0","@types/node":"^25.9.5"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.6.2_1783833776836_0.025361316250366972","host":"s3://npm-registry-packages-npm-production"}},"2.7.0":{"name":"js-rpc2","version":"2.7.0","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions","ipc","socket","named-pipe"],"author":{"name":"yuanliwei"},"license":"MIT","_id":"js-rpc2@2.7.0","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"homepage":"https://github.com/yuanliwei/js-rpc#readme","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"b8444027e25259a695d3e5d9aa7dfd6e909bf938","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.7.0.tgz","fileCount":18,"integrity":"sha512-oIaJJS14GNAVwnkj6P1/bdKpvguas5drYr8QTee3X8La5RWZF3NDlFfxF/w9JQPzTPs/bOP2D9jgl8l304Glhw==","signatures":[{"sig":"MEUCIQDqwsvxDJ1VWnQaoqvMT9ROq8QYuqt8BFlNtGwo+bguFQIgCanqE8V0DTmfSdMeQaafpYrO5XAU6ap7QhCFrmU9jPo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":129170},"main":"src/lib.js","type":"module","types":"src/types.ts","gitHead":"fede5a71cd34e10b0a417bc5e0a8131aff1872f7","scripts":{"test":"node --test"},"_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.6.0","description":"js web websocket http rpc","directories":{},"_nodeVersion":"24.9.0","dependencies":{"msgpackr":"^2.0.4"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.21.0","koa":"^3.2.1","@koa/router":"^15.7.0","@types/node":"^25.9.5"},"_npmOperationalInternal":{"tmp":"tmp/js-rpc2_2.7.0_1783843287764_0.06553281696494007","host":"s3://npm-registry-packages-npm-production"}},"2.7.1":{"_id":"js-rpc2@2.7.1","bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"dist":{"shasum":"038fc787477d593507930e666a57417a1b4337b6","tarball":"https://registry.npmjs.org/js-rpc2/-/js-rpc2-2.7.1.tgz","fileCount":18,"integrity":"sha512-Llomp13c/akWRrvzf509d4eRAIratg8X+kdam8TTDoOWpleLkABUYtoo374yycjqqAnbT2N7L7uS38IMdzyqCA==","signatures":[{"sig":"MEYCIQDGbBEo9PEp1YYp+bV52vlPcjUu2XwE6XANTHl/j/yeqwIhAL6chdFBMGzrFwLJLTH9Wxkt8B9wKnkXpy6gFjAaq2uc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC7cuiFChWkmSNRo7mKhGy4Zopfd7ho8Zg2VgcKBS1yfgIhAKFrX3kYZZXaU9uZzgxOF9uZYkCOB1nTaEkXLx/ynFs8"}],"unpackedSize":128965},"main":"src/lib.js","name":"js-rpc2","type":"module","types":"src/types.ts","author":{"name":"yuanliwei"},"gitHead":"b0287aabd37299a82fbb3734a463ab80e62ea5ca","license":"MIT","scripts":{"test":"node --test"},"version":"2.7.1","_npmUser":{"name":"yuanliwei","email":"891789592@qq.com"},"homepage":"https://github.com/yuanliwei/js-rpc#readme","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions","ipc","socket","named-pipe"],"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"_npmVersion":"11.6.0","description":"js web websocket http rpc","directories":{},"maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"_nodeVersion":"24.9.0","dependencies":{"msgpackr":"^2.0.4"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.21.0","koa":"^3.2.1","@koa/router":"^15.7.0","@types/node":"^25.9.5"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/js-rpc2_2.7.1_1788540736133_0.8156169760219136"}}},"time":{"created":"2024-12-10T14:05:44.075Z","modified":"2026-09-04T16:52:16.484Z","1.0.0":"2024-12-10T14:05:44.256Z","1.0.1":"2024-12-10T14:59:51.270Z","1.0.2":"2024-12-15T04:42:47.643Z","1.0.3":"2024-12-28T06:44:26.490Z","1.0.4":"2025-01-25T09:08:42.580Z","1.0.5":"2025-03-29T03:31:00.488Z","1.0.6":"2025-04-20T09:00:07.272Z","1.0.7":"2025-04-20T09:16:23.119Z","1.1.0":"2025-04-20T09:45:44.803Z","1.1.1":"2025-05-07T06:03:07.956Z","1.2.0":"2025-07-15T00:23:48.828Z","1.2.1":"2025-07-19T01:51:52.417Z","1.2.2":"2025-07-19T07:40:36.617Z","1.2.3":"2025-07-25T16:12:08.581Z","2.0.0":"2025-08-02T05:24:51.356Z","2.1.0":"2025-08-02T06:55:16.142Z","2.2.0":"2025-08-14T03:19:39.450Z","2.2.1":"2025-08-14T03:30:42.552Z","2.3.0":"2025-08-24T02:21:52.570Z","2.3.1":"2025-08-24T05:59:28.315Z","2.3.2":"2025-08-24T08:37:05.029Z","2.4.0":"2025-08-31T06:11:59.432Z","2.4.1":"2025-08-31T06:19:16.338Z","2.4.2":"2026-03-26T09:50:17.604Z","2.4.3":"2026-03-26T09:59:40.325Z","2.5.0":"2026-04-02T07:41:09.608Z","2.5.1":"2026-04-02T11:16:02.976Z","2.6.0":"2026-04-03T02:53:07.156Z","2.6.1":"2026-05-25T09:00:13.733Z","2.6.2":"2026-07-12T05:22:56.971Z","2.7.0":"2026-07-12T08:01:27.907Z","2.7.1":"2026-09-04T16:52:16.210Z"},"bugs":{"url":"https://github.com/yuanliwei/js-rpc/issues"},"author":{"name":"yuanliwei"},"license":"MIT","homepage":"https://github.com/yuanliwei/js-rpc#readme","keywords":["js","web","http","websocket","rpc","electron","chrome","extensions","ipc","socket","named-pipe"],"repository":{"url":"git+ssh://git@github.com/yuanliwei/js-rpc.git","type":"git"},"description":"js web websocket http rpc","maintainers":[{"name":"yuanliwei","email":"891789592@qq.com"}],"readme":"# js-rpc2 库介绍\n\n`js-rpc2` 是一个轻量级的远程过程调用（RPC）库，旨在简化客户端和服务器之间的通信。该库支持多种数据类型，包括字符串、二进制数据、对象、数组等，并且提供了强大的回调机制，以便在异步操作中实时反馈进度。\n\n## 主要特性\n\n- **简单易用**：通过简单的 API 设计，使得客户端和服务器端的集成变得非常容易。\n- **多种数据类型支持**：支持字符串、二进制数据、对象、数组等多种数据类型。\n- **回调机制**：在异步操作中可以通过回调函数实时反馈进度。\n- **灵活的路由配置**：支持 Koa 框架，可以轻松地将 RPC 路由集成到现有的 Koa 应用中。\n- **跨域支持**：客户端可以通过 HTTP 请求与不同域的服务器进行通信。\n\n## 安装\n\n```sh\nnpm i js-rpc2\n```\n\n## 使用示例\n\n### 服务器端\n\n```js\nimport { createServer } from 'http'\nimport Koa from 'koa'\nimport Router from 'koa-router'\nimport { createRpcServerKoaRouter } from 'js-rpc2/src/server.js'\n\nconst app = new Koa()\nconst router = new Router()\napp.use(router.routes())\napp.use(router.allowedMethods())\ncreateServer(app.callback()).listen(9000)\n\nclass RpcApi {\n    /**\n     * @param {string} string \n     * @param {Uint8Array} buffer \n     * @param {Object} object \n     * @param {null} _null \n     * @param {undefined} _undefined \n     * @param {object[]} array \n     * @param {(arg1:string,arg2:number)=>void} callback \n     */\n    async hello(string, buffer, object, _null, _undefined, array, callback) {\n        for (let i = 0; i < 3; i++) {\n            callback('progress : ', i)\n            await new Promise((resolve) => setTimeout(resolve, 1000))\n        }\n        return [\n            `${typeof string}-${typeof buffer}-${typeof object}-${typeof _null}-${typeof _undefined}-${typeof array}`,\n            new Uint8Array(3),\n            { a: 1, b: 2, c: 3 },\n            1,\n            true,\n            undefined,\n            [1, 2, 3, 4],\n        ]\n    }\n}\n\nconst extension = new RpcApi()\n\ncreateRpcServerKoaRouter({\n    path: '/rpc/abc',\n    router: router,\n    extension: extension,\n})\n```\n\n### 客户端\n\n```js\nimport { createRpcClientHttp } from 'js-rpc2/src/client.js'\n\n/** @type{RpcApi} */\nconst rpc = createRpcClientHttp({\n    url: `/rpc/abc`,                      // in same site html page\n    url: `http://127.0.0.1:9000/rpc/abc`, // others\n})\n\nlet ret = await rpc.hello('123', new Uint8Array(3), { q: 2, w: 3, e: 4 }, null, undefined, [1, 2, 3, 4], (message, num) => {\n    console.info('callback', message, num)\n})\nconsole.info(ret)\n```\n\n## 输出示例\n\n```sh\nnode --test-name-pattern=\"^basic$\" src/lib.test.js\n✔ basic (4.5986ms)\ncallback progress :  0\ncallback progress :  1\ncallback progress :  2\n[\n  'string-object-object-object-undefined-object',\n  Uint8Array(3) [ 0, 0, 0 ],\n  { a: 1, b: 2, c: 3 },\n  1,\n  true,\n  undefined,\n  [ 1, 2, 3, 4 ]\n]\n```\n\n希望 `js-rpc2` 能够帮助你更高效地构建和管理客户端与服务器之间的通信。\n\n\n## example\n```js\nimport { test } from 'node:test'\nimport { deepStrictEqual, strictEqual } from 'node:assert'\nimport { createRpcClientHttp, createRpcClientWebSocket, sleep, Uint8Array_from } from './lib.js'\nimport { createServer } from 'node:http'\nimport { WebSocketServer } from 'ws'\nimport Koa from 'koa'\nimport Router from 'koa-router'\nimport { createRpcServerKoaRouter, createRpcServerWebSocket } from './server.js'\n\ntest('测试RPC调用-WebSocket', async () => {\n    // node --test-name-pattern=\"^测试RPC调用-WebSocket$\" src/lib.test.js\n\n    const extension = {\n        hello: async function (/** @type {string} */ name) {\n            return `hello ${name}`\n        },\n        callback: async function (/** @type {string} */ name, /** @type {(data: string) => void} */ update) {\n            for (let i = 0; i < 3; i++) {\n                update(`progress ${i}`)\n                await sleep(30)\n            }\n            return `hello callback ${name}`\n        },\n        callback2: async function (/** @type {string} */ name, /** @type {(data: string, data2:Uint8Array) => void} */ update) {\n            for (let i = 0; i < 3; i++) {\n                update(`progress ${i}`, Uint8Array_from('2345'))\n                await sleep(30)\n            }\n            return `hello callback ${name}`\n        },\n        buffer: async function (/** @type {Uint8Array} */ buffer) {\n            return buffer.slice(3, 8)\n        },\n        buffer2: async function (/**@type{string}*/string,/** @type {Uint8Array} */ buffer) {\n            return ['message:' + string, buffer.slice(3, 8)]\n        },\n        bigbuffer: async function (/** @type {Uint8Array} */ buffer) {\n            return buffer.slice(3)\n        },\n        array: async function (/** @type {string} */ name,/** @type {Uint8Array} */ buffer) {\n            return [123, 'abc', 'hi ' + name, buffer.slice(3, 8)]\n        },\n        void: async function (/** @type {string} */ name,/** @type {Uint8Array} */ buffer) {\n            console.info('call void')\n        }\n    }\n\n    await runWithAbortController(async (ac) => {\n        let server = createServer()\n        ac.signal.addEventListener('abort', () => { server.close() })\n        let wss = new WebSocketServer({ server })\n        createRpcServerWebSocket({\n            path: '/3f1d664e469aa24b54d6bad0d6d869c0',\n            wss: wss,\n            rpcKey: '11474f3dfbb861700cb6c3864b328311',\n            extension: extension,\n        })\n        server.listen(9000)\n        await sleep(100)\n\n        /** @type{typeof extension} */\n        let client = createRpcClientWebSocket({\n            url: `ws://127.0.0.1:9000/3f1d664e469aa24b54d6bad0d6d869c0`,\n            rpcKey: '11474f3dfbb861700cb6c3864b328311',\n            signal: ac.signal,\n        })\n        await sleep(100)\n\n        let string = await client.hello('asdfghjkl')\n        console.info(string)\n        strictEqual(string, 'hello asdfghjkl')\n\n        let stringcallback = await client.callback('asdfghjkl', (progress) => {\n            console.info(`client : ${progress}`)\n        })\n        strictEqual(stringcallback, 'hello callback asdfghjkl')\n\n        let callbackCount = 0\n        let stringcallback2 = await client.callback2('asdfghjkl', (progress, buffer) => {\n            console.info(`client : ${progress}`, buffer)\n            callbackCount++\n        })\n        strictEqual(3, callbackCount)\n        strictEqual(stringcallback2, 'hello callback asdfghjkl')\n\n        let buffer = Uint8Array_from('qwertyuiop')\n        let slice = await client.buffer(buffer)\n        deepStrictEqual(slice, buffer.slice(3, 8))\n\n        let slice2 = await client.buffer(new Uint8Array(300000))\n        deepStrictEqual(slice2, new Uint8Array(10).slice(3, 8))\n\n        let array = await client.array('asdfghjkl', buffer)\n        deepStrictEqual(array, [123, 'abc', 'hi asdfghjkl', buffer.slice(3, 8)])\n\n        let retvoid = await client.void('asdfghjkl', buffer)\n        strictEqual(retvoid, undefined)\n\n        let retbuffer2 = await client.buffer2('asdfghjkl', new Uint8Array(300000))\n        deepStrictEqual(retbuffer2, ['message:asdfghjkl', new Uint8Array(300).slice(3, 8)])\n    })\n\n})\n\ntest('测试RPC调用-KoaRouter', async () => {\n    // node --test-name-pattern=\"^测试RPC调用-KoaRouter$\" src/lib.test.js\n    const extension = {\n        hello: async function (/** @type {string} */ name) {\n            return `hello ${name}`\n        },\n        callback: async function (/** @type {string} */ name, /** @type {(data: string) => void} */ update) {\n            for (let i = 0; i < 3; i++) {\n                update(`progress ${i}`)\n                await sleep(30)\n            }\n            return `hello callback ${name}`\n        },\n        callback2: async function (/** @type {string} */ name, /** @type {(data: string, data2:Uint8Array) => void} */ update) {\n            for (let i = 0; i < 3; i++) {\n                update(`progress ${i}`, Uint8Array_from('2345'))\n                await sleep(30)\n            }\n            return `hello callback ${name}`\n        },\n        buffer: async function (/** @type {Uint8Array} */ buffer) {\n            return buffer.slice(3, 8)\n        },\n        array: async function (/** @type {string} */ name,/** @type {Uint8Array} */ buffer) {\n            return [123, 'abc', 'hi ' + name, buffer.slice(3, 8)]\n        },\n        void: async function (/** @type {string} */ name,/** @type {Uint8Array} */ buffer) {\n            console.info('call void')\n        }\n    }\n\n    await runWithAbortController(async (ac) => {\n        let server = createServer()\n        let app = new Koa()\n        let router = new Router()\n\n        ac.signal.addEventListener('abort', () => { server.close() })\n        createRpcServerKoaRouter({\n            path: '/3f1d664e469aa24b54d6bad0d6d869c0',\n            router: router,\n            rpcKey: '11474f3dfbb861700cb6c3864b328311',\n            extension: extension,\n        })\n\n        server.addListener('request', app.callback())\n        app.use(router.routes())\n        app.use(router.allowedMethods())\n\n        server.listen(9000)\n        await sleep(100)\n\n        /** @type{typeof extension} */\n        let client = createRpcClientHttp({\n            url: `http://127.0.0.1:9000/3f1d664e469aa24b54d6bad0d6d869c0`,\n            rpcKey: '11474f3dfbb861700cb6c3864b328311',\n            signal: ac.signal,\n        })\n        await sleep(100)\n\n        let string = await client.hello('asdfghjkl')\n        console.info(string)\n        strictEqual(string, 'hello asdfghjkl')\n\n        let callbackCount = 0\n        let stringcallback = await client.callback('asdfghjkl', (progress) => {\n            console.info(`client : ${progress}`)\n            callbackCount++\n        })\n\n        strictEqual(3, callbackCount)\n        strictEqual(stringcallback, 'hello callback asdfghjkl')\n\n        let stringcallback2 = await client.callback2('asdfghjkl', (progress, buffer) => {\n            console.info(`client : ${progress}`, buffer)\n        })\n        strictEqual(stringcallback2, 'hello callback asdfghjkl')\n\n        let buffer = Uint8Array_from('qwertyuiop')\n        let slice = await client.buffer(buffer)\n        deepStrictEqual(slice, buffer.slice(3, 8))\n\n        let array = await client.array('asdfghjkl', buffer)\n        deepStrictEqual(array, [123, 'abc', 'hi asdfghjkl', buffer.slice(3, 8)])\n\n        let retvoid = await client.void('asdfghjkl', buffer)\n        strictEqual(retvoid, undefined)\n    })\n    console.info('over!')\n})\n\n/**\n * @param {(ac: AbortController) => Promise<void>} func\n */\nexport async function runWithAbortController(func) {\n    let ac = new AbortController()\n    try {\n        await func(ac)\n        await sleep(1000)\n    } finally { ac.abort() }\n}\n```","readmeFilename":"README.zh.md"}