{"_id":"@allenhark/slipstream","_rev":"14-006fc0ece5d86af40f4de3f9a8de5dce","name":"@allenhark/slipstream","dist-tags":{"latest":"0.3.5"},"versions":{"0.1.1":{"name":"@allenhark/slipstream","version":"0.1.1","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.1.1","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"6b279ec24a7653750e06274cdc4cfd2b9280b7d7","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.1.1.tgz","fileCount":31,"integrity":"sha512-t0SZqDQGyGwZKDgzaksBERSOuhKNg3Z+z79v8rY4JnXSnfVf/Cr4QU8i6s5Jh4vpiGGSpBwXokdIEBt/BtIw/w==","signatures":[{"sig":"MEQCIGeU7UTb8InIKXbTiCBVW1foIhkj55wJlDxUW/5sOjFsAiAnuToRIPXiqjI8DxLYx/EKreeK4P1zuIy2SiZ+onOUNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223162},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"5d8bf9bbcc847e1707d620023e809d527e083780","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"optionalDependencies":{"@aspect-build/quic":"^0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.1.1_1770935716026_0.022459025690623857","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@allenhark/slipstream","version":"0.1.2","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.1.2","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"7655138d5327816d838985696cf50ac712a86a44","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.1.2.tgz","fileCount":31,"integrity":"sha512-PcrStCPeiNcURkXd5Vzk3ltpI4cwuazo5l7SdaVe/tMseNiip47dvALXTaQb2B+YTTtbR/nY11GXFkswkCi+tg==","signatures":[{"sig":"MEUCIG40lcey9v04xTYEK1NO8Br3xKEkmOOtoUD56lCGRb4tAiEA+vW9LWs/yYLMNqY+EKMLBmAAy6V+UhAQf7iaYzTak5A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223076},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"19dc6021c83c4606caff3f5c25cdba2ca85a0fe2","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.1.2_1770936456664_0.8655451214415948","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@allenhark/slipstream","version":"0.1.3","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.1.3","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"d5d17b2ca195f2174183f118c117d05fc893073b","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.1.3.tgz","fileCount":31,"integrity":"sha512-3sm/S7U93ZuPzMWdjIWnKLQGlVpIg2FkkZSdo9FaBovmU8mo+Y9ax7CZfpTDedtZoeziXkKZ0ZduYYBH1aznMQ==","signatures":[{"sig":"MEUCIQDpdvgD9PWcq6A4J3Pnjhl6FGUKOOZm77ZLRbNGJucfUAIgcvW4aMaR15urQHTkngTax6JU2lTBG92wh9+a0/WBuyY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223901},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"665c8ea14266f1374dec58065ac0c0b092c96bab","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.1.3_1771788992376_0.05252932819411682","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@allenhark/slipstream","version":"0.1.5","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.1.5","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"b5bb6b1cdc09eccea097a22d8c932ebacb88c8ec","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.1.5.tgz","fileCount":31,"integrity":"sha512-NcI4UZjUJkcKiOn09tZD2oegUdeYDsAibPaLWAhYETlt5UfZ5pguefqC5shwZiabneEaQWQMZufSp/3plPAB+Q==","signatures":[{"sig":"MEUCIQCGXzTucqmHy8smf+7E6PiAShIOASMkKE63PPyPi3l1SAIgDBuxsXJ0LR+oMv/vxzrmNymHT7xSEKxJGjc5BVtEEG8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225312},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"bfb37547d2e24e70e2e1c24a5261d2917c5ec388","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.1.5_1771792400553_0.01101844301187116","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@allenhark/slipstream","version":"0.1.9","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.1.9","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"3877a0d986263607fa0bb5ae5a67b71d01d9b5fd","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.1.9.tgz","fileCount":31,"integrity":"sha512-v6psLCH6HhUJ30Ue2vkEobuSjovjVYyA4eu4/Po1PdO8Om8QbizbOYVcrvVdJ1Bg6iIEuM5qhe3rKctCW9t6VA==","signatures":[{"sig":"MEUCIAE8vUFJnfopHM5L4/6gjXsnmYZ3RClgXKB6jV+l4GQ/AiEAl05CWL5+mj5WB8kMuKS42WtMytfw3yliiqJGsr613L8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225522},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"0aa82f2281013ef332f486c55ea6571f6372ff66","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.1.9_1771863330233_0.900628376666748","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@allenhark/slipstream","version":"0.2.2","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.2.2","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"49d11b8e28abfdcf846df8a807889ecc21f1ba05","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.2.2.tgz","fileCount":33,"integrity":"sha512-BdaEGFADOod0m0eJsdcQ2WNKZbZZ8iXNsvq6TsZT0uJsWfQp910hawdqc2IySKsqS1d5fzoKpqabcHrJGjwVdg==","signatures":[{"sig":"MEQCID1p5VvgEneau58GS375VjQzWEAAcc7rD1JAwr7rveTOAiB4brpYDgz3JilSUaMIvHRE7UCTL5WsC4fR29yk6qFEcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239163},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"f491e22ab757ee76f991bec4e3d4b058d4e350e9","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.2.2_1771866591939_0.5653965616376515","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@allenhark/slipstream","version":"0.2.3","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.2.3","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"920974c43ed473f1fbab724b634efaaefa306694","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.2.3.tgz","fileCount":33,"integrity":"sha512-fmsOJrjbboZeQtG5dM3cziscK7o6nTi1Z7sKkL+z23gZ9p4lRpCXxF0D+oY7Zb/BW0xwEgKD4Qxf/rGkQM99gQ==","signatures":[{"sig":"MEQCIFDbntW4FcMSfmfoYpfVCriGDU8uVDiSpYXnFBWEmNgpAiAn3MhtbsmPM8L/ohe+4sDYTSoK/aT6QEkbcxnCZoSQ1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":249082},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"86c38c2720734157594b03f6ccced9e2c3c3b400","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.2.3_1771869211077_0.522375808083513","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@allenhark/slipstream","version":"0.2.4","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.2.4","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"9fdb9a3d503eccf11dfa0e3b3a6fba6f7b410366","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.2.4.tgz","fileCount":33,"integrity":"sha512-3+HqhnDipN7rgMBekvgd0zh/l+0o4dZl30DWciShwv2xjYAVACcjRWlL7t6k6G6QHbDTzgbMkt9oR6tI6b/Ljw==","signatures":[{"sig":"MEYCIQCSuuoYGWauj5+XTf24fi9y2eVLgCrKKivGcEHQbhnAZQIhAL9cO+WYJV5XnYQlaC7FKC1nf43hXRr1hWzFwA3bcXWN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252562},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"7170816f0f336cc2579c4fd8e67da1656d45e979","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.2.4_1771930609251_0.07043652784726806","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@allenhark/slipstream","version":"0.2.5","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.2.5","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"93e720e7a24ad9961e6132119f1499168df0dd45","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.2.5.tgz","fileCount":33,"integrity":"sha512-0gx2ZbYwcA9errVJkcwewT7JQu+Mp8/NgTxuYIlJ5jhNhPqe88AkZwmO9BEKRZ2jsoy4zh2qezXZYU8qXJUoeA==","signatures":[{"sig":"MEYCIQCFuR/gac8e5T1ICITqywTfU1Wd5kGpWmFACEgM3X4MNgIhAOiR5y6uUi0ggAhtnnpPy0c1DLj3wmZ7REqwf/LzEbfI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252551},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"c1835d6b4b9adc847168a15889956348afcf1997","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.2.5_1771944005736_0.5934026877564091","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@allenhark/slipstream","version":"0.2.6","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.2.6","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"9da910995fcd1c7ff0941a01c7573b0ab24b26c7","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.2.6.tgz","fileCount":33,"integrity":"sha512-A+D6uQNc+cD49x1Hy0Xl9QDCxTdUFARSP2yhEujC+qCcx8qor0S4BmmcMJsXkqYHRIM3nAdFKg1GJd5+bCADig==","signatures":[{"sig":"MEYCIQDPkbmy0ZFl2OzoaErvtmxW/4tlYxw+oz18VOZ/sN5n1gIhAMfjpxusY7vOMze2vP9J9yxt8xZCXjI4CWlgrkkW7KfF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253970},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"a8610236425a3261873c2eabe43abc4297ad7b91","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.2.6_1771947016996_0.7708668483708154","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@allenhark/slipstream","version":"0.2.7","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.2.7","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"9dd88d098edad01019323e688fe087d78c61b37b","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.2.7.tgz","fileCount":33,"integrity":"sha512-aW3KNMFuwa/WAYN0ifUxPgJyzgyhkix/97ZWvcM1R3U/n9Ava1HiVqbCf3HnssdZXYZeYgRVDPIHcWY9XHv77g==","signatures":[{"sig":"MEQCIDJxh++v5o+03RX9LmxsmeEP8SOSXsYk09XZSuxGqSURAiBA3zKsvxsz3cuvQ2vhiPJw6kJFS4/e1vW8F6aWNE6G8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":255310},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"44b6fa2df6e9f50c9fea3bd29a6ed536918133a2","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.2.7_1771962929327_0.2658112724619921","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"@allenhark/slipstream","version":"0.2.8","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.2.8","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"c6dbc18d7a3566cbf2ce7db0da8dda2739aa3df5","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.2.8.tgz","fileCount":33,"integrity":"sha512-nCxUIsRnayic7rGMLOSQckZdlxFgoYCNvonvtBnBtrrGqTSulLBv/gxc0eIqJE6h7UXAaGB9CsTVFMz8gGLVag==","signatures":[{"sig":"MEQCIB/U5+RcDyFJxQPu4z6swCsQN28cJfS0LnWveeajg1nuAiATg+dZhvzo74r3rD1X9qA7xfkJo9nAaWWt1wnx8w2JLw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256190},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"4cc5ad9986c7b5017d89ba85dee406ffe110926e","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.2.8_1771963912401_0.04505685616093591","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@allenhark/slipstream","version":"0.3.4","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"license":"Apache-2.0","_id":"@allenhark/slipstream@0.3.4","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"dist":{"shasum":"f9d4a8174656ebde9ac40955aa9b2761ce36cf20","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.3.4.tgz","fileCount":33,"integrity":"sha512-W6SeM0GZMOmaVVRNrHPjS6njo9rAHAwcw9MpirwgXG7htW2PCyjIKOaTlGoHhw+SzkdFNpVsIpip/7U7zK0fJA==","signatures":[{"sig":"MEUCIC7VPcU8NHZiWrxORrBBgMUZ4HPcjRsUc1Ky9llP2UKiAiEA0GQGpHI/e7USezphqWkwgDS7QoZhtWb0ZmWH/hfRO8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258629},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=23.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js","require":"./dist/node.js"}},"gitHead":"9840a5c4e6c67961821b529dffc2c3ca01200a8d","scripts":{"lint":"eslint src/","test":"jest","build":"tsc","format":"prettier --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"repository":{"url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git","type":"git"},"_npmVersion":"10.9.2","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","directories":{},"_nodeVersion":"23.11.1","dependencies":{"ws":"^8.16.0","@solana/web3.js":"^1.87.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","ts-jest":"^29.0.0","prettier":"^3.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","@types/jest":"^29.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/slipstream_0.3.4_1772630046921_0.8598457801178021","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@allenhark/slipstream","version":"0.3.5","description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"require":"./dist/index.js","import":"./dist/index.js","types":"./dist/index.d.ts"},"./node":{"require":"./dist/node.js","import":"./dist/node.js","types":"./dist/node.d.ts"}},"repository":{"type":"git","url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git"},"scripts":{"build":"tsc","test":"jest","lint":"eslint src/","format":"prettier --write src/","typecheck":"tsc --noEmit"},"dependencies":{"@solana/web3.js":"^1.87.0","ws":"^8.16.0"},"devDependencies":{"@types/node":"^20.0.0","@types/ws":"^8.5.0","typescript":"^5.0.0","jest":"^29.0.0","@types/jest":"^29.0.0","ts-jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0"},"engines":{"node":">=23.0.0"},"license":"Apache-2.0","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"_id":"@allenhark/slipstream@0.3.5","gitHead":"ce0b0635009f20d72ad797243cbb299daabc8d23","bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","_nodeVersion":"23.11.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-YtQNtOS53t9Y9BJJDcrMGC6nQ8AwaCMCFpnEzVJVamrcWp4FlBcRYNfBmwDO4mO6F2RJVZQ3cXcsbUAQIUow/w==","shasum":"9b2b15355dc661ea454837817659e1a60bb6b010","tarball":"https://registry.npmjs.org/@allenhark/slipstream/-/slipstream-0.3.5.tgz","fileCount":33,"unpackedSize":260046,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHkJkFHfbdqqeR17XNIm8/lZYze0zKP8yF0uAA22hZ09AiEA+3AnHdch4TOJMR2iMQvxRsrDFDYmSudx4jlzAsjKRFI="}]},"_npmUser":{"name":"agworld","email":"agworld1046@gmail.com"},"directories":{},"maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/slipstream_0.3.5_1772646774538_0.36328000375353287"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-12T22:35:15.902Z","modified":"2026-03-04T17:52:54.930Z","0.1.1":"2026-02-12T22:35:16.169Z","0.1.2":"2026-02-12T22:47:36.822Z","0.1.3":"2026-02-22T19:36:32.528Z","0.1.5":"2026-02-22T20:33:20.703Z","0.1.9":"2026-02-23T16:15:30.383Z","0.2.2":"2026-02-23T17:09:52.079Z","0.2.3":"2026-02-23T17:53:31.237Z","0.2.4":"2026-02-24T10:56:49.405Z","0.2.5":"2026-02-24T14:40:05.913Z","0.2.6":"2026-02-24T15:30:17.146Z","0.2.7":"2026-02-24T19:55:29.476Z","0.2.8":"2026-02-24T20:11:52.593Z","0.3.4":"2026-03-04T13:14:07.075Z","0.3.5":"2026-03-04T17:52:54.738Z"},"bugs":{"url":"https://github.com/AllenHark-Inc/slipstream-sdk-ts/issues"},"license":"Apache-2.0","homepage":"https://github.com/AllenHark-Inc/slipstream-sdk-ts#readme","keywords":["solana","slipstream","transaction","relay","blockchain","web3","quic"],"repository":{"type":"git","url":"git+https://github.com/AllenHark-Inc/slipstream-sdk-ts.git"},"description":"Slipstream client SDK for TypeScript/JavaScript - Solana transaction relay","maintainers":[{"name":"agworld","email":"agworld1046@gmail.com"}],"readme":"[![allenhark.com](https://allenhark.com/allenhark-logo.png)](https://allenhark.com)\r\n\r\n# Slipstream TypeScript SDK\r\n\r\nThe official TypeScript/JavaScript client for **AllenHark Slipstream**, the high-performance Solana transaction relay and intelligence network.\r\n\r\n[![npm](https://img.shields.io/npm/v/@allenhark/slipstream.svg)](https://www.npmjs.com/package/@allenhark/slipstream)\r\n[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)\r\n\r\n## Features\r\n\r\n- **Discovery-based connection** -- auto-discovers workers, no manual endpoint configuration\r\n- **Leader-proximity routing** -- real-time leader hints route transactions to the lowest-latency region\r\n- **Multi-region support** -- connect to workers across regions, auto-route based on leader schedule\r\n- **QUIC transport** -- binary protocol for lowest latency on server-side bots (Node.js)\r\n- **6 real-time streams** -- leader hints, tip instructions, priority fees, latest blockhash, latest slot, transaction updates\r\n- **Stream billing** -- each stream costs 1 token; 1-hour reconnect grace period\r\n- **Billing tiers** -- Free (100 tx/day), Standard, Pro, Enterprise with tier-specific rate limits and pricing\r\n- **Token billing** -- check balance, deposit SOL, view usage and deposit history\r\n- **Keep-alive & time sync** -- background ping with RTT measurement and NTP-style clock synchronization\r\n- **Protocol fallback** -- QUIC -> WebSocket -> HTTP automatic fallback chain\r\n- **Dual entry points** -- `@allenhark/slipstream` (browser) and `@allenhark/slipstream/node` (server with QUIC)\r\n- **Atomic bundles** -- submit 2-5 transactions as a Jito-style atomic bundle\r\n- **Solana RPC proxy** -- 22 Solana JSON-RPC methods proxied through Slipstream (accounts, transactions, tokens, fees, cluster info)\r\n- **Full TypeScript types** -- complete type safety for all API surfaces\r\n- **TPU submission** -- send transactions directly to validator TPU ports via UDP, bypassing senders (0.0001 SOL per TX)\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @allenhark/slipstream\r\n```\r\n\r\nRequires Node.js 23+. Also works in modern browsers via WebSocket.\r\n\r\n## Quick Start\r\n\r\n### Browser / General (WebSocket + HTTP)\r\n\r\n```typescript\r\nimport { SlipstreamClient, configBuilder } from '@allenhark/slipstream';\r\n\r\nconst client = await SlipstreamClient.connect(\r\n  configBuilder().apiKey('sk_live_your_key_here').build()\r\n);\r\n\r\nconst result = await client.submitTransaction(signedTxBytes);\r\nconsole.log(`TX: ${result.transactionId} (${result.status})`);\r\n\r\nconst balance = await client.getBalance();\r\nconsole.log(`Balance: ${balance.balanceTokens} tokens`);\r\n\r\nawait client.disconnect();\r\n```\r\n\r\n### Server-Side Bot (QUIC)\r\n\r\n```typescript\r\nimport { SlipstreamClient, configBuilder } from '@allenhark/slipstream/node';\r\n\r\n// Automatically uses QUIC when available, otherwise falls back to WebSocket\r\nconst client = await SlipstreamClient.connect(\r\n  configBuilder().apiKey('sk_live_your_key_here').build()\r\n);\r\nconsole.log(`Connected via ${client.connectionStatus().protocol}`); // 'quic'\r\n```\r\n\r\n---\r\n\r\n## Configuration\r\n\r\n### ConfigBuilder Reference\r\n\r\nUse `configBuilder()` to construct a `SlipstreamConfig`. Only `apiKey` is required.\r\n\r\n```typescript\r\nimport { configBuilder, BackoffStrategy, PriorityFeeSpeed } from '@allenhark/slipstream';\r\n\r\nconst config = configBuilder()\r\n  .apiKey('sk_live_your_key_here')\r\n  .region('us-east')\r\n  .tier('pro')\r\n  .minConfidence(80)\r\n  .build();\r\n```\r\n\r\n| Method | Type | Default | Description |\r\n|--------|------|---------|-------------|\r\n| `apiKey(key)` | `string` | **required** | API key (must start with `sk_`) |\r\n| `region(region)` | `string` | auto | Preferred region (e.g., `'us-east'`, `'eu-central'`) |\r\n| `endpoint(url)` | `string` | auto | Override discovery with explicit worker endpoint |\r\n| `discoveryUrl(url)` | `string` | `https://discovery.allenhark.network` | Custom discovery service URL |\r\n| `tier(tier)` | `BillingTier` | `'pro'` | Billing tier: `'free'`, `'standard'`, `'pro'`, `'enterprise'` |\r\n| `connectionTimeout(ms)` | `number` | `10000` | Connection timeout in milliseconds |\r\n| `maxRetries(n)` | `number` | `3` | Maximum retry attempts for failed requests |\r\n| `leaderHints(bool)` | `boolean` | `true` | Auto-subscribe to leader hint stream on connect |\r\n| `streamTipInstructions(bool)` | `boolean` | `false` | Auto-subscribe to tip instruction stream on connect |\r\n| `streamPriorityFees(bool)` | `boolean` | `false` | Auto-subscribe to priority fee stream on connect |\r\n| `streamLatestBlockhash(bool)` | `boolean` | `false` | Auto-subscribe to latest blockhash stream on connect |\r\n| `streamLatestSlot(bool)` | `boolean` | `false` | Auto-subscribe to latest slot stream on connect |\r\n| `protocolTimeouts(obj)` | `ProtocolTimeouts` | `{ quic: 2000, websocket: 3000, http: 5000 }` | Per-protocol timeout in ms |\r\n| `quicConfig(obj)` | `QuicConfig` | see below | QUIC transport options (server-side only) |\r\n| `priorityFee(obj)` | `PriorityFeeConfig` | `{ enabled: false, speed: 'fast' }` | Priority fee optimization (see below) |\r\n| `retryBackoff(strategy)` | `BackoffStrategy` | `'exponential'` | Retry backoff: `'linear'` or `'exponential'` |\r\n| `minConfidence(n)` | `number` | `70` | Minimum confidence (0-100) for leader hint routing |\r\n| `keepAlive(bool)` | `boolean` | `true` | Enable background keep-alive ping loop |\r\n| `keepAliveInterval(ms)` | `number` | `5000` | Keep-alive ping interval in milliseconds |\r\n| `idleTimeout(ms)` | `number` | none | Disconnect after idle period |\r\n| `webhookUrl(url)` | `string` | none | HTTPS endpoint to receive webhook POST deliveries |\r\n| `webhookEvents(events)` | `string[]` | `['transaction.confirmed']` | Webhook event types to subscribe to |\r\n| `webhookNotificationLevel(level)` | `string` | `'final'` | Transaction notification level: `'all'`, `'final'`, or `'confirmed'` |\r\n\r\n### Billing Tiers\r\n\r\nEach API key has a billing tier that determines transaction cost, rate limits, and priority queuing. Set the tier to match your API key's assigned tier:\r\n\r\n```typescript\r\nconst config = configBuilder()\r\n  .apiKey('sk_live_your_key_here')\r\n  .tier('pro')   // 'free' | 'standard' | 'pro' | 'enterprise'\r\n  .build();\r\n```\r\n\r\n| Tier | Cost per TX | Cost per Stream | Rate Limit | Burst | Priority Slots | Daily Limit |\r\n|------|------------|-----------------|------------|-------|----------------|-------------|\r\n| **free** | 0 (counter) | 0 (counter) | 5 rps | 10 | 5 concurrent | 100 tx/day |\r\n| **standard** | 50,000 lamports (0.00005 SOL) | 50,000 lamports | 5 rps | 10 | 10 concurrent | Unlimited |\r\n| **pro** | 100,000 lamports (0.0001 SOL) | 50,000 lamports | 20 rps | 50 | 50 concurrent | Unlimited |\r\n| **enterprise** | 1,000,000 lamports (0.001 SOL) | 50,000 lamports | 100 rps | 200 | 200 concurrent | Unlimited |\r\n\r\n- **Free tier**: Uses a daily counter instead of token billing. Transactions and stream subscriptions both decrement the counter. Resets at UTC midnight.\r\n- **Standard/Pro/Enterprise**: Deducted from token balance per transaction. Stream subscriptions cost 1 token each with a 1-hour reconnect grace period.\r\n\r\n### PriorityFeeConfig\r\n\r\nControls automatic priority fee optimization for transactions.\r\n\r\n```typescript\r\nconst config = configBuilder()\r\n  .apiKey('sk_live_your_key_here')\r\n  .priorityFee({\r\n    enabled: true,\r\n    speed: PriorityFeeSpeed.UltraFast,\r\n    maxTip: 0.01,  // Max 0.01 SOL\r\n  })\r\n  .build();\r\n```\r\n\r\n| Field | Type | Default | Description |\r\n|-------|------|---------|-------------|\r\n| `enabled` | `boolean` | `false` | Enable automatic priority fee optimization |\r\n| `speed` | `PriorityFeeSpeed` | `'fast'` | Fee tier: `'slow'`, `'fast'`, or `'ultra_fast'` |\r\n| `maxTip` | `number` | none | Maximum tip in SOL (caps the priority fee) |\r\n\r\n**PriorityFeeSpeed tiers:**\r\n\r\n| Speed | Compute Unit Price | Landing Probability | Use Case |\r\n|-------|-------------------|--------------------|---------|\r\n| `'slow'` | Low | ~60-70% | Cost-sensitive, non-urgent transactions |\r\n| `'fast'` | Medium | ~85-90% | Default balance of cost and speed |\r\n| `'ultra_fast'` | High | ~95-99% | Time-critical trading, MEV protection |\r\n\r\n### ProtocolTimeouts\r\n\r\n| Field | Type | Default | Description |\r\n|-------|------|---------|-------------|\r\n| `quic` | `number` | `2000` | QUIC connection timeout (ms) |\r\n| `websocket` | `number` | `3000` | WebSocket connection timeout (ms) |\r\n| `http` | `number` | `5000` | HTTP request timeout (ms) |\r\n\r\n### QuicConfig (Server-Side Only)\r\n\r\n| Field | Type | Default | Description |\r\n|-------|------|---------|-------------|\r\n| `timeout` | `number` | `2000` | QUIC connection timeout (ms) |\r\n| `keepAliveIntervalMs` | `number` | `5000` | Transport-level keep-alive (ms) |\r\n| `maxIdleTimeoutMs` | `number` | `30000` | Max idle before disconnect (ms) |\r\n| `insecure` | `boolean` | `false` | Skip TLS cert verification (dev only) |\r\n\r\n### Protocol Fallback Chain\r\n\r\n| Environment | Fallback Order |\r\n|-------------|---------------|\r\n| **Server** (`/node`) | QUIC (2s) -> WebSocket (3s) -> HTTP (5s) |\r\n| **Browser** (default) | WebSocket (3s) -> HTTP (5s) |\r\n\r\n---\r\n\r\n## Connecting\r\n\r\n### Auto-Discovery (Recommended)\r\n\r\n```typescript\r\nimport { SlipstreamClient, configBuilder } from '@allenhark/slipstream';\r\n\r\n// Minimal -- discovery finds the best worker\r\nconst client = await SlipstreamClient.connect(\r\n  configBuilder().apiKey('sk_live_xxx').build()\r\n);\r\n\r\n// With region preference\r\nconst client = await SlipstreamClient.connect(\r\n  configBuilder().apiKey('sk_live_xxx').region('us-east').build()\r\n);\r\n```\r\n\r\n### Direct Endpoint (Advanced)\r\n\r\n```typescript\r\nconst client = await SlipstreamClient.connect(\r\n  configBuilder()\r\n    .apiKey('sk_live_xxx')\r\n    .endpoint('http://worker-ip:9000')\r\n    .build()\r\n);\r\n```\r\n\r\n### Connection Info\r\n\r\n```typescript\r\nconst info = client.connectionInfo();\r\nconsole.log(`Session: ${info.sessionId}`);\r\nconsole.log(`Protocol: ${info.protocol}`);  // 'quic', 'ws', 'http'\r\nconsole.log(`Region: ${info.region}`);\r\nconsole.log(`Rate limit: ${info.rateLimit.rps} rps (burst: ${info.rateLimit.burst})`);\r\n```\r\n\r\n---\r\n\r\n## Transaction Submission\r\n\r\n### Basic Submit\r\n\r\n```typescript\r\nconst result = await client.submitTransaction(signedTxBytes);\r\nconsole.log(`TX ID: ${result.transactionId}`);\r\nconsole.log(`Status: ${result.status}`);\r\nif (result.signature) {\r\n  console.log(`Signature: ${result.signature}`);\r\n}\r\n```\r\n\r\n### Submit with Options\r\n\r\n```typescript\r\nimport { SubmitOptions } from '@allenhark/slipstream';\r\n\r\nconst result = await client.submitTransactionWithOptions(signedTxBytes, {\r\n  broadcastMode: true,          // Fan-out to multiple regions\r\n  preferredSender: 'nozomi',    // Prefer a specific sender\r\n  maxRetries: 5,                // Override default retry count\r\n  timeoutMs: 10000,             // Custom timeout\r\n  dedupId: 'my-unique-id',     // Custom deduplication ID\r\n});\r\n```\r\n\r\n#### SubmitOptions Fields\r\n\r\n| Field | Type | Default | Description |\r\n|-------|------|---------|-------------|\r\n| `broadcastMode` | `boolean` | `false` | Fan-out to multiple regions simultaneously |\r\n| `preferredSender` | `string` | none | Prefer a specific sender (e.g., `'nozomi'`, `'0slot'`) |\r\n| `maxRetries` | `number` | `2` | Retry attempts on failure |\r\n| `timeoutMs` | `number` | `30000` | Timeout per attempt in milliseconds |\r\n| `dedupId` | `string` | none | Custom deduplication ID (prevents double-submit) |\r\n| `tpuSubmission` | `boolean` | `false` | Send directly to validator TPU ports via UDP (bypasses senders, 0.0001 SOL per TX) |\r\n\r\n### TransactionResult Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `requestId` | `string` | Internal request ID |\r\n| `transactionId` | `string` | Slipstream transaction ID |\r\n| `signature` | `string?` | Solana transaction signature (base58, when confirmed) |\r\n| `status` | `TransactionStatus` | Current status (see table below) |\r\n| `slot` | `number?` | Solana slot (when confirmed) |\r\n| `timestamp` | `number` | Unix timestamp in milliseconds |\r\n| `routing` | `RoutingInfo?` | Routing details (region, sender, latencies) |\r\n| `error` | `TransactionError?` | Error details (on failure) |\r\n\r\n### TransactionStatus Values\r\n\r\n| Status | Description |\r\n|--------|-------------|\r\n| `'pending'` | Received, not yet processed |\r\n| `'processing'` | Being validated and routed |\r\n| `'sent'` | Forwarded to sender |\r\n| `'confirmed'` | Confirmed on Solana |\r\n| `'failed'` | Failed permanently |\r\n| `'duplicate'` | Deduplicated (already submitted) |\r\n| `'rate_limited'` | Rate limit exceeded for your tier |\r\n| `'insufficient_tokens'` | Token balance too low (or free tier daily limit reached) |\r\n\r\n### RoutingInfo Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `region` | `string` | Region that handled the transaction |\r\n| `sender` | `string` | Sender service used |\r\n| `routingLatencyMs` | `number` | Time spent in routing logic (ms) |\r\n| `senderLatencyMs` | `number` | Time spent in sender submission (ms) |\r\n| `totalLatencyMs` | `number` | Total end-to-end latency (ms) |\r\n\r\n### TPU Submission\r\n\r\nSend transactions directly to Solana validator TPU ports via UDP, bypassing external sender services. Targets the current leader + next 3 leaders for redundancy. Fire-and-forget -- no sender acknowledgment, but transactions are still tracked by signature for confirmation polling.\r\n\r\n```typescript\r\nconst result = await client.submitTransaction(txBytes, {\r\n  tpuSubmission: true,\r\n});\r\nconsole.log(`Signature: ${result.signature}`);\r\n// Use standard confirmation polling to check landing\r\n```\r\n\r\n**TPU submission billing:** 0.0001 SOL (100,000 lamports) per transaction -- separate from standard sender-based billing.\r\n\r\n---\r\n\r\n## Sender Discovery\r\n\r\nFetch the list of configured senders with their tip wallets and pricing tiers.\r\nThis is essential for building transactions in both broadcast and streaming modes.\r\n\r\n### Get Available Senders\r\n\r\n```typescript\r\nconst senders = await client.getSenders();\r\n\r\nfor (const sender of senders) {\r\n  console.log(`${sender.displayName} (${sender.senderId})`);\r\n  console.log(`  Tip wallets: ${sender.tipWallets.join(', ')}`);\r\n  for (const tier of sender.tipTiers) {\r\n    console.log(`  ${tier.name}: ${tier.amountSol} SOL (~${tier.expectedLatencyMs}ms)`);\r\n  }\r\n}\r\n```\r\n\r\n### SenderInfo Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `senderId` | `string` | Sender identifier (e.g., `'nozomi'`, `'0slot'`) |\r\n| `displayName` | `string` | Human-readable name |\r\n| `tipWallets` | `string[]` | Solana wallet addresses for tips |\r\n| `tipTiers` | `TipTier[]` | Pricing tiers with speed/cost tradeoffs |\r\n\r\n### TipTier Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `name` | `string` | Tier name (e.g., `'standard'`, `'fast'`, `'ultra_fast'`) |\r\n| `amountSol` | `number` | Tip amount in SOL |\r\n| `expectedLatencyMs` | `number` | Expected submission latency in milliseconds |\r\n\r\n---\r\n\r\n## Atomic Bundles\r\n\r\nSubmit 2-5 transactions as a Jito-style atomic bundle. All transactions execute sequentially and atomically -- either all land or none do.\r\n\r\n### Basic Bundle\r\n\r\n```typescript\r\nconst txs = [tx1Bytes, tx2Bytes, tx3Bytes];\r\nconst result = await client.submitBundle(txs);\r\nconsole.log(`Bundle ID: ${result.bundleId}`);\r\nconsole.log(`Accepted: ${result.accepted}`);\r\nfor (const sig of result.signatures) {\r\n  console.log(`  Signature: ${sig}`);\r\n}\r\n```\r\n\r\n### Bundle with Tip\r\n\r\n```typescript\r\n// Explicit tip amount in lamports\r\nconst result = await client.submitBundle(txs, 100_000);\r\nconsole.log(`Sender: ${result.senderId}`);\r\n```\r\n\r\n### BundleResult Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `bundleId` | `string` | Unique bundle identifier |\r\n| `accepted` | `boolean` | Whether the bundle was accepted by the sender |\r\n| `signatures` | `string[]` | Transaction signatures (base58) |\r\n| `senderId` | `string?` | Sender that processed the bundle |\r\n| `error` | `string?` | Error message if rejected |\r\n\r\n### Bundle Constraints\r\n\r\n| Constraint | Value |\r\n|------------|-------|\r\n| Min transactions | 2 |\r\n| Max transactions | 5 |\r\n| Cost | 5 tokens (0.00025 SOL) flat rate per bundle |\r\n| Execution | Atomic -- all-or-nothing sequential execution |\r\n| Sender requirement | Must have `supportsBundles` enabled |\r\n\r\n---\r\n\r\n## Streaming\r\n\r\nReal-time data feeds over QUIC (binary on server) or WebSocket (browser). Subscribe with `on()`, unsubscribe with `off()`.\r\n\r\n**Billing:** Each stream subscription costs **1 token (0.00005 SOL)**. If the SDK reconnects within 1 hour for the same stream, no re-billing occurs (reconnect grace period). Free-tier keys deduct from the daily counter instead of tokens.\r\n\r\n### Leader Hints\r\n\r\nWhich region is closest to the current Solana leader. Emitted every 250ms when confidence >= threshold.\r\n\r\n```typescript\r\nclient.on('leaderHint', (hint) => {\r\n  console.log(`Slot ${hint.slot}: best region = ${hint.preferredRegion}`);\r\n  console.log(`  Leader: ${hint.leaderPubkey}`);\r\n  console.log(`  Confidence: ${hint.confidence}%`);\r\n  console.log(`  TPU RTT: ${hint.metadata.tpuRttMs}ms`);\r\n  console.log(`  Backups: ${hint.backupRegions.join(', ')}`);\r\n});\r\n\r\nawait client.subscribeLeaderHints();\r\n```\r\n\r\n#### LeaderHint Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `timestamp` | `number` | Unix millis |\r\n| `slot` | `number` | Current slot |\r\n| `expiresAtSlot` | `number` | Slot when this hint expires |\r\n| `preferredRegion` | `string` | Best region for current leader |\r\n| `backupRegions` | `string[]` | Fallback regions in priority order |\r\n| `confidence` | `number` | Confidence score (0-100) |\r\n| `leaderPubkey` | `string` | Current leader validator pubkey |\r\n| `metadata.tpuRttMs` | `number` | RTT to leader's TPU from preferred region (ms) |\r\n| `metadata.regionScore` | `number` | Region quality score |\r\n| `metadata.leaderTpuAddress` | `string?` | Leader's TPU address (ip:port) |\r\n| `metadata.regionRttMs` | `Record<string, number>?` | Per-region RTT to leader |\r\n\r\n### Tip Instructions\r\n\r\nWallet address and tip amount for building transactions in streaming tip mode.\r\n\r\n```typescript\r\nclient.on('tipInstruction', (tip) => {\r\n  console.log(`Sender: ${tip.senderName} (${tip.sender})`);\r\n  console.log(`  Wallet: ${tip.tipWalletAddress}`);\r\n  console.log(`  Amount: ${tip.tipAmountSol} SOL (tier: ${tip.tipTier})`);\r\n  console.log(`  Latency: ${tip.expectedLatencyMs}ms, Confidence: ${tip.confidence}%`);\r\n  for (const alt of tip.alternativeSenders) {\r\n    console.log(`  Alt: ${alt.sender} @ ${alt.tipAmountSol} SOL`);\r\n  }\r\n});\r\n\r\nawait client.subscribeTipInstructions();\r\n\r\n// Latest cached tip (no subscription required)\r\nconst latestTip = client.getLatestTip();\r\n```\r\n\r\n#### TipInstruction Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `timestamp` | `number` | Unix millis |\r\n| `sender` | `string` | Sender ID |\r\n| `senderName` | `string` | Human-readable sender name |\r\n| `tipWalletAddress` | `string` | Tip wallet address (base58) |\r\n| `tipAmountSol` | `number` | Required tip amount in SOL |\r\n| `tipTier` | `string` | Tip tier name |\r\n| `expectedLatencyMs` | `number` | Expected submission latency (ms) |\r\n| `confidence` | `number` | Confidence score (0-100) |\r\n| `validUntilSlot` | `number` | Slot until which this tip is valid |\r\n| `alternativeSenders` | `AlternativeSender[]` | Alternative sender options (`{ sender, tipAmountSol, confidence }`) |\r\n\r\n### Priority Fees\r\n\r\nNetwork-condition-based fee recommendations, updated every second.\r\n\r\n```typescript\r\nclient.on('priorityFee', (fee) => {\r\n  console.log(`Speed: ${fee.speed}`);\r\n  console.log(`  CU price: ${fee.computeUnitPrice} micro-lamports`);\r\n  console.log(`  CU limit: ${fee.computeUnitLimit}`);\r\n  console.log(`  Est cost: ${fee.estimatedCostSol} SOL`);\r\n  console.log(`  Landing probability: ${fee.landingProbability}%`);\r\n  console.log(`  Congestion: ${fee.networkCongestion}`);\r\n  console.log(`  Recent success rate: ${(fee.recentSuccessRate * 100).toFixed(1)}%`);\r\n});\r\n\r\nawait client.subscribePriorityFees();\r\n```\r\n\r\n#### PriorityFee Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `timestamp` | `number` | Unix millis |\r\n| `speed` | `string` | Fee speed tier (`'slow'`, `'fast'`, `'ultra_fast'`) |\r\n| `computeUnitPrice` | `number` | Compute unit price in micro-lamports |\r\n| `computeUnitLimit` | `number` | Recommended compute unit limit |\r\n| `estimatedCostSol` | `number` | Estimated total priority fee in SOL |\r\n| `landingProbability` | `number` | Estimated landing probability (0-100) |\r\n| `networkCongestion` | `string` | Network congestion level (`'low'`, `'medium'`, `'high'`) |\r\n| `recentSuccessRate` | `number` | Recent success rate (0.0-1.0) |\r\n\r\n### Latest Blockhash\r\n\r\nStreams the latest blockhash every 2 seconds. Build transactions without a separate RPC call.\r\n\r\n```typescript\r\nclient.on('latestBlockhash', (data) => {\r\n  console.log(`Blockhash: ${data.blockhash}`);\r\n  console.log(`  Valid until block height: ${data.lastValidBlockHeight}`);\r\n});\r\n\r\nawait client.subscribeLatestBlockhash();\r\n```\r\n\r\n#### LatestBlockhash Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `blockhash` | `string` | Latest blockhash (base58) |\r\n| `lastValidBlockHeight` | `number` | Last valid block height for this blockhash |\r\n| `timestamp` | `number` | Unix millis when fetched |\r\n\r\n### Latest Slot\r\n\r\nStreams the current confirmed slot on every slot change (~400ms).\r\n\r\n```typescript\r\nclient.on('latestSlot', (data) => {\r\n  console.log(`Current slot: ${data.slot}`);\r\n});\r\n\r\nawait client.subscribeLatestSlot();\r\n```\r\n\r\n#### LatestSlot Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `slot` | `number` | Current confirmed slot number |\r\n| `timestamp` | `number` | Unix millis |\r\n\r\n### Transaction Updates\r\n\r\nReal-time status updates for submitted transactions.\r\n\r\n```typescript\r\nclient.on('transactionUpdate', (update) => {\r\n  console.log(`TX ${update.transactionId}: ${update.status}`);\r\n  if (update.routing) {\r\n    console.log(`  Routed via ${update.routing.region} -> ${update.routing.sender}`);\r\n  }\r\n});\r\n```\r\n\r\n### Auto-Subscribe on Connect\r\n\r\nEnable streams at configuration time so they activate immediately:\r\n\r\n```typescript\r\nconst config = configBuilder()\r\n  .apiKey('sk_live_your_key_here')\r\n  .leaderHints(true)                  // default: true\r\n  .streamTipInstructions(true)        // default: false\r\n  .streamPriorityFees(true)           // default: false\r\n  .streamLatestBlockhash(true)        // default: false\r\n  .streamLatestSlot(true)             // default: false\r\n  .build();\r\n\r\nconst client = await SlipstreamClient.connect(config);\r\n// All 5 streams are active immediately -- just register listeners\r\nclient.on('leaderHint', onHint);\r\nclient.on('tipInstruction', onTip);\r\nclient.on('priorityFee', onFee);\r\nclient.on('latestBlockhash', onBlockhash);\r\nclient.on('latestSlot', onSlot);\r\n```\r\n\r\n### All Events\r\n\r\n| Event | Payload | Description |\r\n|-------|---------|-------------|\r\n| `leaderHint` | `LeaderHint` | Region recommendation update (every 250ms) |\r\n| `tipInstruction` | `TipInstruction` | Tip wallet/amount update |\r\n| `priorityFee` | `PriorityFee` | Priority fee recommendation (every 1s) |\r\n| `latestBlockhash` | `LatestBlockhash` | Latest blockhash (every 2s) |\r\n| `latestSlot` | `LatestSlot` | Current confirmed slot (~400ms) |\r\n| `transactionUpdate` | `TransactionResult` | Transaction status change |\r\n| `connected` | -- | Transport connected |\r\n| `disconnected` | -- | Transport disconnected |\r\n| `ping` | `PingResult` | Keep-alive ping result (RTT, clock offset) |\r\n| `error` | `Error` | Transport error |\r\n\r\n---\r\n\r\n## Keep-Alive & Time Sync\r\n\r\nBackground keep-alive mechanism providing latency measurement and NTP-style clock synchronization.\r\n\r\n```typescript\r\n// Enabled by default (5s interval)\r\nconst config = configBuilder()\r\n  .apiKey('sk_live_your_key_here')\r\n  .keepAlive(true)                // default: true\r\n  .keepAliveInterval(5000)        // default: 5000ms\r\n  .build();\r\n\r\nconst client = await SlipstreamClient.connect(config);\r\n\r\n// Manual ping\r\nconst ping = await client.ping();\r\nconsole.log(`RTT: ${ping.rttMs}ms, Clock offset: ${ping.clockOffsetMs}ms`);\r\n\r\n// Derived measurements (median from sliding window of 10 samples)\r\nconst latency = client.latencyMs();     // number | null (RTT / 2)\r\nconst offset = client.clockOffsetMs();  // number | null\r\nconst serverNow = client.serverTime();  // number (unix ms, local time + offset)\r\n\r\n// Listen for ping events\r\nclient.on('ping', (result) => {\r\n  console.log(`Ping #${result.seq}: RTT ${result.rttMs}ms, offset ${result.clockOffsetMs}ms`);\r\n});\r\n```\r\n\r\n#### PingResult Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `seq` | `number` | Sequence number |\r\n| `rttMs` | `number` | Round-trip time in milliseconds |\r\n| `clockOffsetMs` | `number` | Clock offset: `serverTime - (clientSendTime + rtt/2)` (can be negative) |\r\n| `serverTime` | `number` | Server timestamp at time of pong (unix millis) |\r\n\r\n---\r\n\r\n## Token Billing\r\n\r\nToken-based billing system. Paid tiers (Standard/Pro/Enterprise) deduct tokens per transaction and stream subscription. Free tier uses a daily counter.\r\n\r\n### Billing Costs\r\n\r\n| Operation | Cost | Notes |\r\n|-----------|------|-------|\r\n| Transaction submission | 1 token (0.00005 SOL) | Per transaction sent to Solana |\r\n| TPU submission | 0.0001 SOL (100,000 lamports) | Direct to validator TPU ports, bypasses senders |\r\n| Bundle submission | 5 tokens (0.00025 SOL) | Per bundle (2-5 transactions, flat rate) |\r\n| Stream subscription | 1 token (0.00005 SOL) | Per stream type; 1-hour reconnect grace period |\r\n| Webhook delivery | 0.00001 SOL (10,000 lamports) | Per successful POST delivery; retries not charged |\r\n| RPC query | 1 token (0.00005 SOL) | Per `rpc()` call (`simulateTransaction`, `getTransaction`, etc.) |\r\n| Bundle simulation | 1 token per TX (0.00005 SOL each) | `simulateBundle()` calls `simulateTransaction` for each TX |\r\n| Keep-alive ping | Free | Background ping/pong not billed |\r\n| Discovery | Free | `GET /v1/discovery` has no auth or billing |\r\n| Balance/billing queries | Free | `getBalance()`, `getUsageHistory()`, etc. |\r\n| Webhook management | Free | `registerWebhook()`, `getWebhook()`, `deleteWebhook()` not billed |\r\n| Free tier daily limit | 100 operations/day | Transactions + stream subs + webhook deliveries + RPC queries all count |\r\n\r\n### Token Economics\r\n\r\n| Unit | Value |\r\n|------|-------|\r\n| 1 token | 0.00005 SOL = 50,000 lamports |\r\n| Initial balance | 200 tokens (0.01 SOL) per new API key |\r\n| Minimum deposit | 2,000 tokens (0.1 SOL / ~$10 USD) |\r\n| Grace period | -20 tokens (-0.001 SOL) before hard block |\r\n\r\n### Check Balance\r\n\r\n```typescript\r\nconst balance = await client.getBalance();\r\nconsole.log(`SOL:    ${balance.balanceSol}`);\r\nconsole.log(`Tokens: ${balance.balanceTokens}`);\r\nconsole.log(`Lamports: ${balance.balanceLamports}`);\r\nconsole.log(`Grace remaining: ${balance.graceRemainingTokens} tokens`);\r\n```\r\n\r\n#### Balance Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `balanceSol` | `number` | Balance in SOL |\r\n| `balanceTokens` | `number` | Balance in tokens (1 token = 1 query) |\r\n| `balanceLamports` | `number` | Balance in lamports |\r\n| `graceRemainingTokens` | `number` | Grace tokens remaining before hard block |\r\n\r\n### Get Deposit Address\r\n\r\n```typescript\r\nconst deposit = await client.getDepositAddress();\r\nconsole.log(`Send SOL to: ${deposit.depositWallet}`);\r\nconsole.log(`Minimum: ${deposit.minAmountSol} SOL`);\r\n```\r\n\r\n### Minimum Deposit\r\n\r\nDeposits must reach **$10 USD equivalent** in SOL before tokens are credited. Deposits below this threshold accumulate as pending.\r\n\r\n```typescript\r\nconst minUsd = SlipstreamClient.getMinimumDepositUsd(); // 10.0\r\n\r\nconst pending = await client.getPendingDeposit();\r\nif (pending.pendingCount > 0) {\r\n  console.log(`${pending.pendingSol} SOL pending (${pending.pendingCount} deposits)`);\r\n}\r\n```\r\n\r\n### Usage History\r\n\r\n```typescript\r\nconst usage = await client.getUsageHistory({ limit: 50, offset: 0 });\r\nfor (const entry of usage) {\r\n  console.log(`${entry.txType}: ${entry.amountLamports} lamports (balance: ${entry.balanceAfterLamports})`);\r\n}\r\n```\r\n\r\n### Deposit History\r\n\r\n```typescript\r\nconst deposits = await client.getDepositHistory({ limit: 20 });\r\nfor (const d of deposits) {\r\n  console.log(`${d.amountSol} SOL | $${d.usdValue ?? 0} USD | ${d.credited ? 'CREDITED' : 'PENDING'}`);\r\n}\r\n```\r\n\r\n### Free Tier Usage\r\n\r\nFor free-tier API keys, check the daily usage counter:\r\n\r\n```typescript\r\nconst usage = await client.getFreeTierUsage();\r\nconsole.log(`Used: ${usage.used}/${usage.limit}`);       // e.g. 42/100\r\nconsole.log(`Remaining: ${usage.remaining}`);              // e.g. 58\r\nconsole.log(`Resets at: ${usage.resetsAt}`);               // UTC midnight ISO string\r\n```\r\n\r\n#### FreeTierUsage Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `used` | `number` | Transactions used today |\r\n| `remaining` | `number` | Remaining transactions today |\r\n| `limit` | `number` | Daily transaction limit (100) |\r\n| `resetsAt` | `string` | UTC midnight reset time (RFC 3339) |\r\n\r\n---\r\n\r\n## Webhooks\r\n\r\nServer-side HTTP notifications for transaction lifecycle events and billing alerts. One webhook per API key.\r\n\r\n### Setup\r\n\r\nRegister a webhook via config (auto-registers on connect) or manually:\r\n\r\n```typescript\r\n// Option 1: Via config (auto-registers on connect)\r\nconst client = await SlipstreamClient.connect(\r\n  configBuilder()\r\n    .apiKey('sk_live_12345678')\r\n    .webhookUrl('https://your-server.com/webhooks/slipstream')\r\n    .webhookEvents(['transaction.confirmed', 'transaction.failed', 'billing.low_balance'])\r\n    .webhookNotificationLevel('final')\r\n    .build()\r\n);\r\n\r\n// Option 2: Manual registration\r\nconst webhook = await client.registerWebhook(\r\n  'https://your-server.com/webhooks/slipstream',\r\n  ['transaction.confirmed', 'billing.low_balance'],  // events (optional)\r\n  'final'                                             // level (optional)\r\n);\r\n\r\nconsole.log(`Webhook ID: ${webhook.id}`);\r\nconsole.log(`Secret: ${webhook.secret}`);  // Save this -- shown only once\r\n```\r\n\r\n### Manage Webhooks\r\n\r\n```typescript\r\n// Get current webhook config\r\nconst webhook = await client.getWebhook();\r\nif (webhook) {\r\n  console.log(`URL: ${webhook.url}`);\r\n  console.log(`Events: ${webhook.events.join(', ')}`);\r\n  console.log(`Active: ${webhook.isActive}`);\r\n}\r\n\r\n// Remove webhook\r\nawait client.deleteWebhook();\r\n```\r\n\r\n### Event Types\r\n\r\n| Event | Description | Payload |\r\n|-------|-------------|---------|\r\n| `transaction.sent` | TX accepted and sent to Solana | `signature`, `region`, `sender`, `latencyMs` |\r\n| `transaction.confirmed` | TX confirmed on-chain | `signature`, `confirmedSlot`, `confirmationTimeMs`, full `getTransaction` response |\r\n| `transaction.failed` | TX timed out or errored | `signature`, `error`, `elapsedMs` |\r\n| `bundle.sent` | Bundle submitted to sender | `bundleId`, `region`, `sender`, `latencyMs` |\r\n| `bundle.confirmed` | All transactions in bundle confirmed on-chain | `bundleId`, `signatures`, `confirmedSlot`, `confirmationTimeMs` |\r\n| `bundle.failed` | Bundle timed out with partial confirmations | `bundleId`, `error`, `elapsedMs` |\r\n| `billing.low_balance` | Balance below threshold | `balanceTokens`, `thresholdTokens` |\r\n| `billing.depleted` | Balance at zero / grace period | `balanceTokens`, `graceRemainingTokens` |\r\n| `billing.deposit_received` | SOL deposit credited | `amountSol`, `tokensCredited`, `newBalanceTokens` |\r\n\r\n### Notification Levels (transaction and bundle events)\r\n\r\n| Level | Events delivered |\r\n|-------|-----------------|\r\n| `'all'` | `transaction.sent` + `transaction.confirmed` + `transaction.failed` + `bundle.sent` + `bundle.confirmed` + `bundle.failed` |\r\n| `'final'` | `transaction.confirmed` + `transaction.failed` + `bundle.confirmed` + `bundle.failed` (terminal states only) |\r\n| `'confirmed'` | `transaction.confirmed` + `bundle.confirmed` only |\r\n\r\nBilling events are always delivered when subscribed (no level filtering).\r\n\r\n### Webhook Payload\r\n\r\nEach POST includes these headers:\r\n- `X-Slipstream-Signature: sha256=<hex>` -- HMAC-SHA256 of body using webhook secret\r\n- `X-Slipstream-Timestamp: <unix_seconds>` -- for replay protection\r\n- `X-Slipstream-Event: <event_type>` -- event name\r\n- `Content-Type: application/json`\r\n\r\n```json\r\n{\r\n  \"id\": \"evt_01H...\",\r\n  \"type\": \"transaction.confirmed\",\r\n  \"created_at\": 1707000000,\r\n  \"api_key_prefix\": \"sk_live_\",\r\n  \"data\": {\r\n    \"signature\": \"5K8c...\",\r\n    \"transaction_id\": \"uuid\",\r\n    \"confirmed_slot\": 245678902,\r\n    \"confirmation_time_ms\": 450,\r\n    \"transaction\": { \"...full Solana getTransaction response...\" }\r\n  }\r\n}\r\n```\r\n\r\n### Verifying Webhook Signatures (Node.js)\r\n\r\n```typescript\r\nimport crypto from 'crypto';\r\n\r\nfunction verifyWebhook(body: string, signatureHeader: string, secret: string): boolean {\r\n  const expected = signatureHeader.replace('sha256=', '');\r\n  const computed = crypto\r\n    .createHmac('sha256', secret)\r\n    .update(body)\r\n    .digest('hex');\r\n  return crypto.timingSafeEqual(Buffer.from(computed), Buffer.from(expected));\r\n}\r\n\r\n// Express example\r\napp.post('/webhooks/slipstream', (req, res) => {\r\n  const signature = req.headers['x-slipstream-signature'] as string;\r\n  const timestamp = req.headers['x-slipstream-timestamp'] as string;\r\n\r\n  // Reject if timestamp is too old (>5 min)\r\n  if (Date.now() / 1000 - parseInt(timestamp) > 300) {\r\n    return res.status(400).send('Timestamp too old');\r\n  }\r\n\r\n  if (!verifyWebhook(JSON.stringify(req.body), signature, WEBHOOK_SECRET)) {\r\n    return res.status(401).send('Invalid signature');\r\n  }\r\n\r\n  const event = req.body;\r\n  switch (event.type) {\r\n    case 'transaction.confirmed':\r\n      console.log(`TX ${event.data.signature} confirmed at slot ${event.data.confirmed_slot}`);\r\n      break;\r\n    case 'billing.low_balance':\r\n      console.log(`Low balance: ${event.data.balance_tokens} tokens`);\r\n      break;\r\n  }\r\n\r\n  res.status(200).send('OK');\r\n});\r\n```\r\n\r\n### Billing\r\n\r\nEach successful webhook delivery costs **0.00001 SOL (10,000 lamports)**. Failed deliveries (non-2xx or timeout) are not charged. Free tier deliveries count against the daily limit.\r\n\r\n### Retry Policy\r\n\r\n- Max 3 attempts: immediate, then 30s, then 5 minutes\r\n- Webhook auto-disabled after 10 consecutive failed deliveries\r\n\r\n#### WebhookConfig Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `id` | `string` | Webhook ID |\r\n| `url` | `string` | Delivery URL |\r\n| `secret` | `string?` | HMAC signing secret (only shown on registration) |\r\n| `events` | `string[]` | Subscribed event types |\r\n| `notificationLevel` | `string` | Transaction notification level |\r\n| `isActive` | `boolean` | Whether webhook is active |\r\n| `createdAt` | `string` | Creation timestamp (ISO 8601) |\r\n\r\n---\r\n\r\n## Multi-Region Routing\r\n\r\n`MultiRegionClient` connects to workers across multiple regions and automatically routes transactions to the region closest to the current Solana leader.\r\n\r\n### Auto-Discovery\r\n\r\n```typescript\r\nimport { MultiRegionClient, configBuilder } from '@allenhark/slipstream';\r\n\r\nconst multi = await MultiRegionClient.connect(\r\n  configBuilder().apiKey('sk_live_your_key_here').build()\r\n);\r\n\r\n// Transactions auto-route to the best region\r\nconst result = await multi.submitTransaction(signedTxBytes);\r\n\r\nconsole.log(`Connected regions: ${multi.connectedRegions().join(', ')}`);\r\n\r\n// Listen for routing changes\r\nmulti.on('routingUpdate', (routing) => {\r\n  console.log(`Now routing to ${routing.bestRegion} (confidence: ${routing.confidence}%)`);\r\n  console.log(`Leader: ${routing.leaderPubkey}`);\r\n});\r\n\r\nawait multi.disconnectAll();\r\n```\r\n\r\n### Manual Worker Configuration\r\n\r\n```typescript\r\nimport { MultiRegionClient, configBuilder, WorkerEndpoint } from '@allenhark/slipstream';\r\n\r\nconst workers: WorkerEndpoint[] = [\r\n  { id: 'w1', region: 'us-east', http: 'http://10.0.1.1:9000', websocket: 'ws://10.0.1.1:9000/ws' },\r\n  { id: 'w2', region: 'eu-central', http: 'http://10.0.2.1:9000', websocket: 'ws://10.0.2.1:9000/ws' },\r\n  { id: 'w3', region: 'ap-tokyo', http: 'http://10.0.3.1:9000', websocket: 'ws://10.0.3.1:9000/ws' },\r\n];\r\n\r\nconst multi = await MultiRegionClient.create(\r\n  configBuilder().apiKey('sk_live_your_key_here').build(),\r\n  workers,\r\n  {\r\n    autoFollowLeader: true,\r\n    minSwitchConfidence: 70,\r\n    switchCooldownMs: 5000,\r\n    broadcastHighPriority: false,\r\n    maxBroadcastRegions: 3,\r\n  }\r\n);\r\n```\r\n\r\n#### MultiRegionConfig Fields\r\n\r\n| Field | Type | Default | Description |\r\n|-------|------|---------|-------------|\r\n| `autoFollowLeader` | `boolean` | `true` | Auto-switch region based on leader hints |\r\n| `minSwitchConfidence` | `number` | `60` | Minimum confidence (0-100) to trigger region switch |\r\n| `switchCooldownMs` | `number` | `5000` | Cooldown between region switches (ms) |\r\n| `broadcastHighPriority` | `boolean` | `false` | Broadcast high-priority transactions to all regions |\r\n| `maxBroadcastRegions` | `number` | `3` | Maximum regions for broadcast mode |\r\n\r\n### Routing Recommendation\r\n\r\nAsk the server for the current best region:\r\n\r\n```typescript\r\nconst rec = await client.getRoutingRecommendation();\r\nconsole.log(`Best: ${rec.bestRegion} (${rec.confidence}%)`);\r\nconsole.log(`Leader: ${rec.leaderPubkey}`);\r\nconsole.log(`Fallbacks: ${rec.fallbackRegions.join(', ')} (${rec.fallbackStrategy})`);\r\nconsole.log(`Valid for: ${rec.validForMs}ms`);\r\n```\r\n\r\n#### RoutingRecommendation Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `bestRegion` | `string` | Recommended region |\r\n| `leaderPubkey` | `string` | Current leader validator pubkey |\r\n| `slot` | `number` | Current slot |\r\n| `confidence` | `number` | Confidence score (0-100) |\r\n| `expectedRttMs` | `number?` | Expected RTT to leader from best region (ms) |\r\n| `fallbackRegions` | `string[]` | Fallback regions in priority order |\r\n| `fallbackStrategy` | `FallbackStrategy` | `'sequential'`, `'broadcast'`, `'retry'`, or `'none'` |\r\n| `validForMs` | `number` | Time until this recommendation expires (ms) |\r\n\r\n---\r\n\r\n## Solana RPC Proxy\r\n\r\nSlipstream proxies a curated set of Solana JSON-RPC methods through its infrastructure, billed at 1 token per call. The `client.rpc` property provides a fully typed interface -- no need for a separate RPC provider for common read operations.\r\n\r\n### Typed Methods\r\n\r\nEvery supported Solana RPC method has a typed wrapper on `client.rpc`:\r\n\r\n```typescript\r\n// Cluster info\r\nconst slot = await client.rpc.getSlot();\r\nconst height = await client.rpc.getBlockHeight();\r\nconst epoch = await client.rpc.getEpochInfo();\r\n\r\n// Fees & blockhash\r\nconst bh = await client.rpc.getLatestBlockhash();\r\nconsole.log(`Blockhash: ${bh.value.blockhash}`);\r\nconst fees = await client.rpc.getRecentPrioritizationFees();\r\n\r\n// Account data\r\nconst lamports = await client.rpc.getBalance('So11111111111111111111111111111111');\r\nconst acct = await client.rpc.getAccountInfo(pubkey, { encoding: 'base64' });\r\nconst accounts = await client.rpc.getMultipleAccounts([pk1, pk2]);\r\n\r\n// Tokens\r\nconst tokenBal = await client.rpc.getTokenAccountBalance(tokenAccount);\r\nconst supply = await client.rpc.getTokenSupply(mintAddress);\r\n\r\n// Transactions\r\nconst statuses = await client.rpc.getSignatureStatuses([sig1, sig2]);\r\nconst tx = await client.rpc.getTransaction(sig, { maxSupportedTransactionVersion: 0 });\r\n```\r\n\r\n### Generic Escape Hatch\r\n\r\nFor any method not covered by the typed wrappers, use `client.rpc.call()`:\r\n\r\n```typescript\r\nconst response = await client.rpc.call('getVersion', []);\r\nconsole.log(response.result);\r\n```\r\n\r\n### Simulate Transaction\r\n\r\n```typescript\r\nconst simulation = await client.simulateTransaction(signedTxBytes);\r\nif (simulation.err) {\r\n  console.error('Simulation failed:', simulation.err);\r\n  console.log('Logs:', simulation.logs);\r\n} else {\r\n  console.log('Units consumed:', simulation.unitsConsumed);\r\n}\r\n```\r\n\r\n### Simulate Bundle\r\n\r\nSimulates each transaction in a bundle sequentially. Stops on first failure. Costs 1 token per transaction simulated.\r\n\r\n```typescript\r\nconst results = await client.simulateBundle([tx1Bytes, tx2Bytes, tx3Bytes]);\r\nfor (const sim of results) {\r\n  if (sim.err) {\r\n    console.error(`TX failed:`, sim.err);\r\n    break;\r\n  }\r\n  console.log(`TX OK — ${sim.unitsConsumed} CUs`);\r\n}\r\n```\r\n\r\n### Typed Method Reference\r\n\r\n**Network**\r\n\r\n| Method | Signature | Returns |\r\n|--------|-----------|---------|\r\n| `getHealth()` | `() => string` | `\"ok\"` |\r\n\r\n**Cluster**\r\n\r\n| Method | Signature | Returns |\r\n|--------|-----------|---------|\r\n| `getSlot()` | `(commitment?) => number` | Current slot |\r\n| `getBlockHeight()` | `(commitment?) => number` | Current block height |\r\n| `getEpochInfo()` | `(commitment?) => SolanaEpochInfo` | Epoch details |\r\n| `getSlotLeaders()` | `(startSlot, limit) => string[]` | Leader pubkeys |\r\n\r\n**Fees**\r\n\r\n| Method | Signature | Returns |\r\n|--------|-----------|---------|\r\n| `getLatestBlockhash()` | `(commitment?) => SolanaLatestBlockhash` | `{ value: { blockhash, lastValidBlockHeight } }` |\r\n| `getFeeForMessage()` | `(message, commitment?) => number \\| null` | Lamports or null |\r\n| `getRecentPrioritizationFees()` | `(accounts?) => SolanaPrioritizationFee[]` | `[{ slot, prioritizationFee }]` |\r\n\r\n**Accounts**\r\n\r\n| Method | Signature | Returns |\r\n|--------|-----------|---------|\r\n| `getAccountInfo()` | `(pubkey, opts?) => SolanaAccountInfo` | Account data or null value |\r\n| `getMultipleAccounts()` | `(pubkeys, opts?) => { value: [] }` | Array of account data |\r\n| `getBalance()` | `(pubkey, commitment?) => number` | Lamports (unwrapped) |\r\n| `getMinimumBalanceForRentExemption()` | `(dataSize, commitment?) => number` | Lamports |\r\n\r\n**Tokens**\r\n\r\n| Method | Signature | Returns |\r\n|--------|-----------|---------|\r\n| `getTokenAccountBalance()` | `(pubkey, commitment?) => SolanaTokenBalance` | Token balance with decimals |\r\n| `getTokenSupply()` | `(mint, commitment?) => SolanaTokenBalance` | Token supply |\r\n| `getSupply()` | `(commitment?) => SolanaSupply` | SOL supply breakdown |\r\n| `getTokenLargestAccounts()` | `(mint, commitment?) => SolanaTokenLargestAccount[]` | Top 20 holders |\r\n\r\n**Transactions**\r\n\r\n| Method | Signature | Returns |\r\n|--------|-----------|---------|\r\n| `sendTransaction()` | `(tx, opts?) => string` | Signature |\r\n| `simulateTransaction()` | `(tx, opts?) => SimulationResult` | Logs, CUs, errors |\r\n| `getSignatureStatuses()` | `(sigs, opts?) => { value: [] }` | Status per signature |\r\n| `getTransaction()` | `(sig, opts?) => unknown` | Full transaction data |\r\n\r\n**Blocks**\r\n\r\n| Method | Signature | Returns |\r\n|--------|-----------|---------|\r\n| `getBlockCommitment()` | `(slot) => SolanaBlockCommitment` | Commitment + total stake |\r\n| `getFirstAvailableBlock()` | `() => number` | First available slot |\r\n\r\n**Escape Hatch**\r\n\r\n| Method | Signature | Returns |\r\n|--------|-----------|---------|\r\n| `call()` | `(method, params?) => RpcResponse` | Raw JSON-RPC response |\r\n\r\n### SimulationResult Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `err` | `object \\| null` | Error if simulation failed, `null` on success |\r\n| `logs` | `string[]` | Program log messages |\r\n| `unitsConsumed` | `number` | Compute units consumed |\r\n| `returnData` | `object \\| null` | Program return data (if any) |\r\n\r\n### RpcResponse Fields\r\n\r\n| Field | Type | Description |\r\n|-------|------|-------------|\r\n| `jsonrpc` | `string` | Always `\"2.0\"` |\r\n| `id` | `number` | Request ID |\r\n| `result` | `any` | RPC-method-specific result |\r\n| `error` | `object \\| null` | JSON-RPC error (if any) |\r\n\r\n---\r\n\r\n## Deduplication\r\n\r\nPrevent duplicate submissions with `dedupId`:\r\n\r\n```typescript\r\nconst result = await client.submitTransactionWithOptions(txBytes, {\r\n  dedupId: 'unique-tx-id-12345',\r\n  maxRetries: 5,\r\n});\r\n\r\n// Same dedupId across retries = safe from double-spend\r\n```\r\n\r\n---\r\n\r\n## Connection Status & Metrics\r\n\r\n```typescript\r\n// Connection status\r\nconst status = client.connectionStatus();\r\nconsole.log(`State: ${status.state}`);       // 'connected', 'disconnected', etc.\r\nconsole.log(`Protocol: ${status.protocol}`); // 'quic', 'ws', 'http'\r\nconsole.log(`Region: ${status.region}`);\r\nconsole.log(`Latency: ${status.latencyMs}ms`);\r\n\r\n// Connection events\r\nclient.on('connected', () => console.log('Connected'));\r\nclient.on('disconnected', () => console.log('Disconnected'));\r\nclient.on('error', (err) => console.error('Error:', err));\r\n\r\n// Performance metrics\r\nconst metrics = client.metrics();\r\nconsole.log(`Submitted: ${metrics.transactionsSubmitted}`);\r\nconsole.log(`Confirmed: ${metrics.transactionsConfirmed}`);\r\nconsole.log(`Avg latency: ${metrics.averageLatencyMs.toFixed(1)}ms`);\r\nconsole.log(`Success rate: ${(metrics.successRate * 100).toFixed(1)}%`);\r\n```\r\n\r\n---\r\n\r\n## Error Handling\r\n\r\n```typescript\r\nimport { SlipstreamError } from '@allenhark/slipstream';\r\n\r\ntry {\r\n  const result = await client.submitTransaction(txBytes);\r\n} catch (err) {\r\n  if (err instanceof SlipstreamError) {\r\n    switch (err.code) {\r\n      case 'INSUFFICIENT_TOKENS':\r\n        const balance = await client.getBalance();\r\n        const deposit = await client.getDepositAddress();\r\n        console.log(`Low balance: ${balance.balanceTokens} tokens`);\r\n        console.log(`Deposit to: ${deposit.depositWallet}`);\r\n        break;\r\n      case 'RATE_LIMITED':\r\n        console.log('Slow down -- rate limited for your tier');\r\n        break;\r\n      case 'TIMEOUT':\r\n        console.log('Request timed out');\r\n        break;\r\n      case 'CONNECTION':\r\n        console.log('Connection error:', err.message);\r\n        break;\r\n      default:\r\n        console.log(`Error [${err.code}]: ${err.message}`);\r\n    }\r\n  }\r\n}\r\n```\r\n\r\n### Error Codes\r\n\r\n| Code | Description |\r\n|------|-------------|\r\n| `CONFIG` | Invalid configuration |\r\n| `CONNECTION` | Connection failure |\r\n| `AUTH` | Authentication failure (invalid API key) |\r\n| `PROTOCOL` | Protocol-level error |\r\n| `TRANSACTION` | Transaction submission error |\r\n| `TIMEOUT` | Operation timed out |\r\n| `RATE_LIMITED` | Rate limit exceeded for your tier |\r\n| `NOT_CONNECTED` | Client not connected |\r\n| `STREAM_CLOSED` | Stream closed unexpectedly |\r\n| `INSUFFICIENT_TOKENS` | Token balance too low (or free tier daily limit reached) |\r\n| `ALL_PROTOCOLS_FAILED` | All connection protocols failed |\r\n| `INTERNAL` | Internal SDK error |\r\n\r\n---\r\n\r\n## Examples\r\n\r\n| Example | Description |\r\n|---------|-------------|\r\n| [`basic.ts`](./examples/basic.ts) | Connect and submit a transaction |\r\n| [`streaming.ts`](./examples/streaming.ts) | Leader hints, tips, priority fees, blockhash, slot streams |\r\n| [`billing.ts`](./examples/billing.ts) | Balance, deposits, and usage history |\r\n| [`multi-region.ts`](./examples/multi-region.ts) | Auto-routing with MultiRegionClient |\r\n| [`advanced-config.ts`](./examples/advanced-config.ts) | All ConfigBuilder options |\r\n| [`submit-transaction.ts`](./examples/submit-transaction.ts) | Transaction submission with options |\r\n| [`priority-fees.ts`](./examples/priority-fees.ts) | Priority fee configuration and streaming |\r\n| [`deduplication.ts`](./examples/deduplication.ts) | Deduplication patterns |\r\n\r\n## Contact\r\n\r\n- Website: https://allenhark.com\r\n- Contact: https://allenhark.com/contact\r\n- Discord: https://discord.gg/JpzS72MAKG\r\n\r\n## License\r\n\r\nApache-2.0\r\n","readmeFilename":"README.md"}