{"_id":"@buidlrrr/rain-sdk","_rev":"9-9c82136a62401fcc701bf69829ba3d63","name":"@buidlrrr/rain-sdk","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"@buidlrrr/rain-sdk","version":"1.0.0","keywords":["web3","account-abstraction","smart-account","rain","viem","alchemy"],"author":{"name":"Rain Protocol"},"license":"MIT","_id":"@buidlrrr/rain-sdk@1.0.0","maintainers":[{"name":"buidlrrr","email":"buidlr@rain.one"}],"dist":{"shasum":"2fc19a179d5db7d13d4b2dd20840609e93e1b44f","tarball":"https://registry.npmjs.org/@buidlrrr/rain-sdk/-/rain-sdk-1.0.0.tgz","fileCount":114,"integrity":"sha512-nHnSGEnoEVflBdkNbCGgKCK0gEdyb1sAISvy16xdD5ulr1WLc5Au4m5O3NaHUSv6/2M2Rr0JDTIOymzrGigXqw==","signatures":[{"sig":"MEQCICw9kOuB0exZOovNRrIUS1mRai/KXJqslGSVXHw02bV2AiB8l56DuPC3JJ0a8PPswgWaGVTjX3TbCvz/NWRvUVjFGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":663551},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a975cf2df5fb5590b816189418540d29a1eceb4d","scripts":{"dev":"tsc -w","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","test:integration":"tsx scripts/test-all.ts"},"_npmUser":{"name":"buidlrrr","email":"buidlr@rain.one"},"_npmVersion":"11.6.2","description":"Rain SDK","directories":{},"_nodeVersion":"25.1.0","dependencies":{"ethers":"^6.16.0","@alchemy/aa-core":"^3.0.0","@account-kit/infra":"^4.48.0","@alchemy/aa-alchemy":"^3.0.0","@account-kit/wallet-client":"^0.1.0-alpha.10"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","typescript":"^5.9.3"},"peerDependencies":{"viem":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rain-sdk_1.0.0_1772965105228_0.2642028060308592","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@buidlrrr/rain-sdk","version":"1.0.1","keywords":["web3","account-abstraction","smart-account","rain","viem","alchemy"],"author":{"name":"Rain Protocol"},"license":"MIT","_id":"@buidlrrr/rain-sdk@1.0.1","maintainers":[{"name":"buidlrrr","email":"buidlr@rain.one"}],"dist":{"shasum":"c71b17938fafe2258aaefcb3b3a2028f50dc98b7","tarball":"https://registry.npmjs.org/@buidlrrr/rain-sdk/-/rain-sdk-1.0.1.tgz","fileCount":114,"integrity":"sha512-uefjOdgV6KdJGtlEIknWsI+tGFruIBf9i80rs8Sj37KCT1mqJKyzFAvucNq7QJ4BN9+urrk5zui1FD5oUAxsZQ==","signatures":[{"sig":"MEUCIFAuAHmgg8bsC0Hrez5NukROpMCQt1GmDZ6rlFoYNF20AiEAhl72CRM7XJTbLhAa0iQ/Bd8GZzH+iGrVX7c0xEU6Hoc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":663545},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"a975cf2df5fb5590b816189418540d29a1eceb4d","scripts":{"dev":"tsc -w","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","test:integration":"tsx scripts/test-all.ts"},"_npmUser":{"name":"buidlrrr","email":"buidlr@rain.one"},"_npmVersion":"11.6.2","description":"Rain SDK","directories":{},"_nodeVersion":"25.1.0","dependencies":{"ethers":"^6.16.0","@alchemy/aa-core":"^3.0.0","@account-kit/infra":"^4.48.0","@alchemy/aa-alchemy":"^3.0.0","@account-kit/wallet-client":"^0.1.0-alpha.10"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","typescript":"^5.9.3"},"peerDependencies":{"viem":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rain-sdk_1.0.1_1772982957024_0.22208040318145872","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@buidlrrr/rain-sdk","version":"1.0.2","keywords":["web3","account-abstraction","smart-account","rain","viem","alchemy"],"author":{"name":"Rain Protocol"},"license":"MIT","_id":"@buidlrrr/rain-sdk@1.0.2","maintainers":[{"name":"buidlrrr","email":"buidlr@rain.one"}],"dist":{"shasum":"482d2a2b1fe6732a08a1a250c040b104b6bcf568","tarball":"https://registry.npmjs.org/@buidlrrr/rain-sdk/-/rain-sdk-1.0.2.tgz","fileCount":114,"integrity":"sha512-Oz0hKXAD7jqnTC+qw6iCafvyxnB/xvfBrC8rT7sQSaWDxNqbdVKiyxyos6IM1E++PK4eyKxaHaAP973BIbdUcw==","signatures":[{"sig":"MEUCIQDJUmD+jxfMIsYFfpDxk2RTC05H1pr4L37PRP0yWv0D+AIgUMaHvkYM4Op/LI9vl7Zxbqvc0M5qjjWppfLquP3jBEk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":663545},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"690cc82daa2966688bd1a1bd859776c2e15aed37","scripts":{"dev":"tsc -w","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","test:integration":"tsx scripts/test-all.ts"},"_npmUser":{"name":"buidlrrr","email":"buidlr@rain.one"},"_npmVersion":"11.6.2","description":"Rain SDK","directories":{},"_nodeVersion":"25.1.0","dependencies":{"ethers":"^6.16.0","@alchemy/aa-core":"^3.0.0","@account-kit/infra":"^4.48.0","@alchemy/aa-alchemy":"^3.0.0","@account-kit/wallet-client":"^0.1.0-alpha.10"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","typescript":"^5.9.3"},"peerDependencies":{"viem":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rain-sdk_1.0.2_1772984217961_0.7497823038034366","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@buidlrrr/rain-sdk","version":"1.0.3","keywords":["web3","account-abstraction","smart-account","rain","viem","alchemy"],"author":{"name":"Rain Protocol"},"license":"MIT","_id":"@buidlrrr/rain-sdk@1.0.3","maintainers":[{"name":"buidlrrr","email":"buidlr@rain.one"}],"dist":{"shasum":"0b6c513d3e92d580ad1455a4ccd2d39ecc6f7a24","tarball":"https://registry.npmjs.org/@buidlrrr/rain-sdk/-/rain-sdk-1.0.3.tgz","fileCount":115,"integrity":"sha512-RgR/tqPW/gNI87LZGXVB5sYy3Af9CowJP47/pJcil96MgCoSZSUG1jE1Ob9ZioI7muZYrvo2GvP3vvY7stf+oQ==","signatures":[{"sig":"MEUCIQCLGZq/Rk4JZZQolV4R1S+yVeG64TE6AUd93JH921FyvQIgGM/nxedkPNDMNBxaSzzJWyqcuVYXoIvkiRF7LqUBvog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":692497},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"79494821859a65e8bb2c3e2c9cb946982565f8d9","scripts":{"dev":"tsc -w","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","test:integration":"tsx scripts/test-all.ts"},"_npmUser":{"name":"buidlrrr","email":"buidlr@rain.one"},"_npmVersion":"11.6.2","description":"Rain SDK","directories":{},"_nodeVersion":"25.1.0","dependencies":{"ethers":"^6.16.0","@alchemy/aa-core":"^3.0.0","@account-kit/infra":"^4.48.0","@alchemy/aa-alchemy":"^3.0.0","@account-kit/wallet-client":"^0.1.0-alpha.10"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","typescript":"^5.9.3"},"peerDependencies":{"viem":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/rain-sdk_1.0.3_1773061474989_0.30666976520092026","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@buidlrrr/rain-sdk","version":"1.1.0","keywords":["web3","account-abstraction","smart-account","rain","viem","alchemy"],"author":{"name":"Rain Protocol"},"license":"MIT","_id":"@buidlrrr/rain-sdk@1.1.0","maintainers":[{"name":"buidlrrr","email":"buidlr@rain.one"}],"dist":{"shasum":"00f7b00a4c1410b04224216882e6a448a57ad4f8","tarball":"https://registry.npmjs.org/@buidlrrr/rain-sdk/-/rain-sdk-1.1.0.tgz","fileCount":141,"integrity":"sha512-C6SxhEVW3aTmuTQ7UDOuRtoRsCQ2+pUcqMvrGDqlNDqhLmWvS9s7vyx+eHauHnYLGe5mLcA29C2Uz+DORPjXGg==","signatures":[{"sig":"MEYCIQDWZZiHnU/oQfWECQOIGq0djUvoEf57Nqchi1ccPZov3AIhALaApbRQKMmG+DJhKZihbEJFvpIGWiufgS4WjKwqZwit","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":729046},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"35e907ca0fae037f6cd8d8da4d7c3e48d727aad4","scripts":{"dev":"tsc -w","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","test:integration":"tsx scripts/test-all.ts"},"_npmUser":{"name":"buidlrrr","email":"buidlr@rain.one"},"_npmVersion":"11.6.2","description":"Rain SDK","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.25.76","ethers":"^6.16.0","socket.io-client":"^4.8.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","typescript":"^5.9.3"},"peerDependencies":{"viem":"^2.0.0","@alchemy/aa-core":"^3.0.0","@account-kit/infra":"^4.48.0","@alchemy/aa-alchemy":"^3.0.0","@account-kit/wallet-client":"^0.1.0-alpha.10"},"peerDependenciesMeta":{"@alchemy/aa-core":{"optional":true},"@account-kit/infra":{"optional":true},"@alchemy/aa-alchemy":{"optional":true},"@account-kit/wallet-client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rain-sdk_1.1.0_1773699298904_0.08181598798120593","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@buidlrrr/rain-sdk","version":"1.1.1","keywords":["web3","account-abstraction","smart-account","rain","viem","alchemy"],"author":{"name":"Rain Protocol"},"license":"MIT","_id":"@buidlrrr/rain-sdk@1.1.1","maintainers":[{"name":"buidlrrr","email":"buidlr@rain.one"}],"dist":{"shasum":"8d153789da354bcce533fa040d49d73fbfbeda42","tarball":"https://registry.npmjs.org/@buidlrrr/rain-sdk/-/rain-sdk-1.1.1.tgz","fileCount":141,"integrity":"sha512-KQKPqikoWNayHjmrCOvwBxtbkl3zXV8l0E6wvTGsI1A+sOoG+cxVdJsCjQLnF1TJEWeGdKYGRVuJj9pTOvc3/Q==","signatures":[{"sig":"MEUCIQDUTFakE6uMiBOUlCgeS1PNLXYLgKqVUl8aEinDh2N7pAIgbfWV3jKBXMWzV6tf0HADcUCs5wnG9fXVZTk7FlWgfvg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":729046},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d702bfa9804280955dec50412a5d46a9c5914690","scripts":{"dev":"tsc -w","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","test:integration":"tsx scripts/test-all.ts"},"_npmUser":{"name":"buidlrrr","email":"buidlr@rain.one"},"_npmVersion":"11.6.2","description":"Rain SDK","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.25.76","ethers":"^6.16.0","socket.io-client":"^4.8.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","typescript":"^5.9.3"},"peerDependencies":{"viem":"^2.0.0","@alchemy/aa-core":"^3.0.0","@account-kit/infra":"^4.48.0","@alchemy/aa-alchemy":"^3.0.0","@account-kit/wallet-client":"^0.1.0-alpha.10"},"peerDependenciesMeta":{"@alchemy/aa-core":{"optional":true},"@account-kit/infra":{"optional":true},"@alchemy/aa-alchemy":{"optional":true},"@account-kit/wallet-client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rain-sdk_1.1.1_1774732874243_0.5526882010699041","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@buidlrrr/rain-sdk","version":"1.1.2","keywords":["web3","account-abstraction","smart-account","rain","viem","alchemy"],"author":{"name":"Rain Protocol"},"license":"MIT","_id":"@buidlrrr/rain-sdk@1.1.2","maintainers":[{"name":"buidlrrr","email":"buidlr@rain.one"}],"dist":{"shasum":"eaed59a2c2adb0ac99a08dc33cbbe6e2901d864d","tarball":"https://registry.npmjs.org/@buidlrrr/rain-sdk/-/rain-sdk-1.1.2.tgz","fileCount":141,"integrity":"sha512-xA+A2qo/rZAFSI4MkWZrYcLgBGRQFj9UR6OQ3fIAinMlwXODkp16goOdo3EWF70z4zpwjOJoQuL5aftpO6ORiw==","signatures":[{"sig":"MEUCIQCVgkb5bUjzq4/R1WZmxr+SCt7utDByx8NERdo5STKACwIgRT2BB9j5HEjkeIn4axwAyU6cKZjQqH/0lukJ2SnnJ6A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":729142},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b472261b0f9c5258674b3c7e68f4049080fc7593","scripts":{"dev":"tsc -w","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","test:integration":"tsx scripts/test-all.ts"},"_npmUser":{"name":"buidlrrr","email":"buidlr@rain.one"},"_npmVersion":"11.6.2","description":"Rain SDK","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.25.76","ethers":"^6.16.0","socket.io-client":"^4.8.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","typescript":"^5.9.3"},"peerDependencies":{"viem":"^2.0.0","@alchemy/aa-core":"^3.0.0","@account-kit/infra":"^4.48.0","@alchemy/aa-alchemy":"^3.0.0","@account-kit/wallet-client":"^0.1.0-alpha.10"},"peerDependenciesMeta":{"@alchemy/aa-core":{"optional":true},"@account-kit/infra":{"optional":true},"@alchemy/aa-alchemy":{"optional":true},"@account-kit/wallet-client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rain-sdk_1.1.2_1774878678670_0.09999581613930641","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@buidlrrr/rain-sdk","version":"1.1.3","keywords":["web3","account-abstraction","smart-account","rain","viem","alchemy"],"author":{"name":"Rain Protocol"},"license":"MIT","_id":"@buidlrrr/rain-sdk@1.1.3","maintainers":[{"name":"buidlrrr","email":"buidlr@rain.one"}],"dist":{"shasum":"9f28070ec6abcea761a8e89f71a725b2db4a253e","tarball":"https://registry.npmjs.org/@buidlrrr/rain-sdk/-/rain-sdk-1.1.3.tgz","fileCount":142,"integrity":"sha512-ig/ffM4rjACqHZzzQb7ersU9/6ldBCfEU7mANrlekxzqFgtq5V0vwb5XRLKmUejubSLKHNhZ9CVuXsyMX8Mz0Q==","signatures":[{"sig":"MEYCIQC/vDfCyci+gqCeIEhWn92vAiKbSQqMET08yoOroFURQQIhAPYc/woIfTFM9g2USzbFR7CFN0bn0PxU0Op54Ki0tDMj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":732083},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"75e4af7e5c47eb97a4bd99e36594b591bb6d748e","scripts":{"dev":"tsc -w","test":"vitest run","build":"tsc","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build","test:integration":"tsx scripts/test-all.ts"},"_npmUser":{"name":"buidlrrr","email":"buidlr@rain.one"},"_npmVersion":"11.6.2","description":"Rain SDK","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^3.25.76","ethers":"^6.16.0","socket.io-client":"^4.8.3"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^4.0.18","typescript":"^5.9.3"},"peerDependencies":{"viem":"^2.0.0","@alchemy/aa-core":"^3.0.0","@account-kit/infra":"^4.48.0","@alchemy/aa-alchemy":"^3.0.0","@account-kit/wallet-client":"^0.1.0-alpha.10"},"peerDependenciesMeta":{"@alchemy/aa-core":{"optional":true},"@account-kit/infra":{"optional":true},"@alchemy/aa-alchemy":{"optional":true},"@account-kit/wallet-client":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/rain-sdk_1.1.3_1774880805501_0.4904171655541989","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@buidlrrr/rain-sdk","version":"2.0.0","type":"module","description":"Rain SDK","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"tsc","dev":"tsc -w","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","test:integration":"tsx scripts/test-all.ts","prepublishOnly":"npm run build"},"keywords":["web3","account-abstraction","smart-account","rain","viem","alchemy"],"author":{"name":"Rain Protocol"},"license":"MIT","peerDependencies":{"@account-kit/infra":"^4.48.0","@account-kit/wallet-client":"^0.1.0-alpha.10","@alchemy/aa-alchemy":"^3.0.0","@alchemy/aa-core":"^3.0.0","viem":"^2.0.0"},"peerDependenciesMeta":{"@account-kit/infra":{"optional":true},"@account-kit/wallet-client":{"optional":true},"@alchemy/aa-alchemy":{"optional":true},"@alchemy/aa-core":{"optional":true}},"dependencies":{"ethers":"^6.16.0","socket.io-client":"^4.8.3","zod":"^3.25.76"},"devDependencies":{"tsx":"^4.21.0","typescript":"^5.9.3","vitest":"^4.0.18"},"gitHead":"641800b2f6b9249694a194f0a504e5ec3dccdde9","_id":"@buidlrrr/rain-sdk@2.0.0","_nodeVersion":"25.1.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-Tg05HaI4UsYjXqLzILhu1MxypZVbYVcdRVXsdF7aHERmpSf6rDMRF+F55PFI10JHqWu/6452XZ7D6xgKVnZ0Jg==","shasum":"df1d051d23f450ca53a8c0fa633d2dca03261ed1","tarball":"https://registry.npmjs.org/@buidlrrr/rain-sdk/-/rain-sdk-2.0.0.tgz","fileCount":142,"unpackedSize":733021,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGOrgpMIbvLrnB9wD/QCp+XzI1YhbTIEa6CyOIDTOKEaAiAU00j/265R3jFwmuUY0vqu8OkPT6J23NvrO3NkdYY9nw=="}]},"_npmUser":{"name":"buidlrrr","email":"buidlr@rain.one"},"directories":{},"maintainers":[{"name":"buidlrrr","email":"buidlr@rain.one"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rain-sdk_2.0.0_1776357575963_0.5888812741893745"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-08T10:18:25.130Z","modified":"2026-04-16T16:39:36.287Z","1.0.0":"2026-03-08T10:18:25.390Z","1.0.1":"2026-03-08T15:15:57.246Z","1.0.2":"2026-03-08T15:36:58.106Z","1.0.3":"2026-03-09T13:04:35.128Z","1.1.0":"2026-03-16T22:14:59.062Z","1.1.1":"2026-03-28T21:21:14.392Z","1.1.2":"2026-03-30T13:51:18.847Z","1.1.3":"2026-03-30T14:26:45.651Z","2.0.0":"2026-04-16T16:39:36.190Z"},"author":{"name":"Rain Protocol"},"license":"MIT","keywords":["web3","account-abstraction","smart-account","rain","viem","alchemy"],"description":"Rain SDK","maintainers":[{"name":"buidlrrr","email":"buidlr@rain.one"}],"readme":"# Rain SDK\n\nTypeScript SDK for the Rain prediction-markets protocol on Arbitrum One.\n\nBuild, sign, and send prediction market transactions — from creating markets and trading options to claiming winnings and streaming live events.\n\n## Architecture\n\n```\n┌──────────────────────────────────────────────────────────┐\n│                      Your Application                     │\n├────────────────────────┬─────────────────────────────────┤\n│         Rain           │            RainAA               │\n│   (WHAT to do)         │       (HOW to execute)          │\n│                        │                                 │\n│  • Market queries      │  • Smart account creation       │\n│  • Tx builders         │  • Gas-sponsored execution      │\n│  • Position reads      │  • Tx submission                │\n│  • WebSocket streams   │  • Session management           │\n│  • Analytics           │                                 │\n├────────────────────────┴─────────────────────────────────┤\n│                     RawTransaction                        │\n│              { to, data, value? }                         │\n├──────────────────────────────────────────────────────────┤\n│               Arbitrum One (on-chain)                     │\n│         Diamond Proxy Pools + AMM per option              │\n└──────────────────────────────────────────────────────────┘\n```\n\nThe SDK is split into two independent classes:\n\n- **`Rain`** — Stateless. Fetches data, builds unsigned transactions, subscribes to events. Does not require a wallet.\n- **`RainAA`** — Stateful. Manages Alchemy smart accounts, signs and sends transactions via account abstraction.\n\nAll transaction builders return a `RawTransaction` — the caller decides how to execute it (via `RainAA`, wagmi, ethers, or any provider).\n\n## Installation\n\n```bash\nnpm install @buidlrrr/rain-sdk\n```\n\n**Peer dependency**: `viem ^2.0.0`\n\n## Quick Start\n\n```ts\nimport { Rain, RainAA } from '@buidlrrr/rain-sdk';\n\n// 1. Initialize (stateless — no wallet needed)\nconst rain = new Rain({ environment: 'development' });\n\n// 2. Fetch markets\nconst markets = await rain.getPublicMarkets({ limit: 10 });\n\n// 3. Build a buy transaction\nconst rawTx = rain.buildBuyOptionRawTx({\n  marketContractAddress: '0x...',\n  selectedOption: 1n,\n  buyAmountInWei: 10_000_000n,  // 10 USDT (6 decimals)\n});\n\n// 4. Execute via your provider, OR via RainAA:\nawait yourProvider.sendTransaction(rawTx);\n```\n\n## Configuration\n\n```ts\nconst rain = new Rain({\n  environment: 'development',         // 'development' | 'stage' | 'production'\n  rpcUrl: 'https://...',              // Optional — defaults to public Arbitrum RPCs\n  wsRpcUrl: 'wss://...',             // Required for subscribeToMarketEvents / subscribePriceUpdates\n  subgraphUrl: 'https://...',        // Required for transaction history / price history / analytics\n  subgraphApiKey: '...',             // Optional — TheGraph API key\n  wsReconnect: { attempts: 5, delay: 1000 },  // Optional — WebSocket auto-reconnect\n});\n```\n\n### Environments\n\n| Environment   | API                    | Factory Address                              |\n| ------------- | ---------------------- | -------------------------------------------- |\n| `development` | `dev-api.rain.one`     | `0x05b1fd504583B81bd14c368d59E8c3e354b6C1dc` |\n| `stage`       | `stg-api.rain.one`     | `0xD4900CA167228365806FBA4cB21f7EAe8b6d96BE` |\n| `production`  | `prod-api.rain.one`    | `0xA8640B62D755e42C9ed6A86d0fc65CE09e31F264` |\n\n---\n\n## API Reference\n\n### Market Queries\n\n#### `getPublicMarkets(params)` — Browse markets\n\n```ts\nconst markets = await rain.getPublicMarkets({\n  limit: 12,\n  offset: 0,\n  sortBy: 'Liquidity',          // 'Liquidity' | 'Volumn' | 'latest'\n  status: 'Live',               // 'Live' | 'Trading' | 'Closed' | ...\n  creator: '0x...',             // Optional — filter by creator\n});\n// Returns: Market[]\n// { id, title, totalVolume, status, contractAddress, poolOwnerWalletAddress }\n```\n\n#### `getMarketDetails(marketId)` — Full market data\n\nCombines Rain API data with on-chain reads from the diamond proxy.\n\n```ts\nconst details = await rain.getMarketDetails('698c8f116e985bbfacc7fc01');\n// Returns: MarketDetails\n// {\n//   id, title, status, contractAddress,\n//   options: [{ choiceIndex, optionName, currentPrice, totalFunds, totalVotes }],\n//   poolState, numberOfOptions, startTime, endTime, oracleEndTime,\n//   allFunds, allVotes, totalLiquidity, winner, poolFinalized,\n//   isPublic, baseToken, baseTokenDecimals, poolOwner, resolver,\n//   resolverIsAI, isDisputed, isAppealed\n// }\n```\n\n#### `getMarketPrices(marketId)` — Current option prices\n\n```ts\nconst prices = await rain.getMarketPrices('698c8f116e985bbfacc7fc01');\n// Returns: OptionPrice[]\n// [{ choiceIndex: 0, optionName: 'Yes', currentPrice: 650000000000000000n }]\n// currentPrice is in 1e18 — divide by 1e18 for decimal (0.65 = 65%)\n```\n\n#### `getMarketVolume(marketId)` — Volume breakdown\n\n```ts\nconst volume = await rain.getMarketVolume('698c8f116e985bbfacc7fc01');\n// Returns: MarketVolume\n// { marketId, contractAddress, totalVolume, optionVolumes: [{ choiceIndex, optionName, volume }] }\n```\n\n#### `getMarketLiquidity(marketId)` — Liquidity & order book\n\n```ts\nconst liq = await rain.getMarketLiquidity('698c8f116e985bbfacc7fc01');\n// Returns: MarketLiquidity\n// { marketId, contractAddress, totalLiquidity, allFunds,\n//   optionLiquidity: [{ choiceIndex, optionName, totalFunds, firstBuyOrderPrice, firstSellOrderPrice }] }\n```\n\n#### `getMarketAddress(marketId)` / `getMarketId(marketAddress)` — ID/Address lookup\n\n```ts\nconst address = await rain.getMarketAddress('698c8f116e985bbfacc7fc01');\nconst id = await rain.getMarketId('0xd262abd3d58038e15736Ec32c4F7b020C2B21dB5');\n```\n\n#### `getProtocolStats()` — Protocol-wide metrics\n\n```ts\nconst stats = await rain.getProtocolStats();\n// Returns: ProtocolStats\n// { tvl, totalVolume, activeMarkets, totalMarkets, uniqueTraders }\n```\n\n---\n\n### Transaction Builders\n\nAll builders return `RawTransaction` — `{ to, data, value? }`. They do **not** send transactions.\n\n#### `buildApprovalTx(params)` — ERC20 approve\n\n```ts\nconst tx = rain.buildApprovalTx({\n  tokenAddress: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',  // USDT\n  spender: '0x...',    // market contract address\n  amount: 100_000_000n, // Optional — defaults to max uint256\n});\n```\n\n#### `buildCreateMarketTx(params)` — Create a market\n\nReturns an array: `[approveTx, createTx]` if approval is needed, or `[createTx]` if already approved.\n\n```ts\nconst txs = await rain.buildCreateMarketTx({\n  marketQuestion: 'Will BTC hit 100k?',\n  marketOptions: ['Yes', 'No'],\n  marketTags: ['crypto', 'bitcoin'],\n  marketDescription: 'Prediction market for BTC price',\n  isPublic: true,\n  isPublicPoolResolverAi: false,\n  creator: '0x996ea23940f4a01610181D04bdB6F862719b63f0',\n  startTime: 1770836400n,\n  endTime: 1770922800n,\n  no_of_options: 2n,\n  inputAmountWei: 100_000_000n,   // 100 USDT (min 10 tokens)\n  barValues: [50, 50],             // Initial probability distribution (%)\n  baseToken: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n  tokenDecimals: 6,\n});\n\n// Execute sequentially\nfor (const tx of txs) {\n  await provider.sendTransaction(tx);\n}\n```\n\n#### `buildBuyOptionRawTx(params)` — Market buy\n\n```ts\nconst tx = rain.buildBuyOptionRawTx({\n  marketContractAddress: '0x...',\n  selectedOption: 1n,              // Option index (bigint)\n  buyAmountInWei: 10_000_000n,    // 10 USDT\n});\n```\n\n#### `buildLimitBuyOptionTx(params)` — Limit buy order\n\n```ts\nconst tx = rain.buildLimitBuyOptionTx({\n  marketContractAddress: '0x...',\n  selectedOption: 1,\n  pricePerShare: 500000000000000000n,  // 0.50 in 1e18\n  buyAmountInWei: 10_000_000n,\n  tokenDecimals: 6,\n});\n```\n\n#### `buildSellOptionTx(params)` — Place sell order\n\n```ts\nconst tx = rain.buildSellOptionTx({\n  marketContractAddress: '0x...',\n  selectedOption: 1,\n  pricePerShare: 0.75,     // Target price (0-1)\n  shares: 5_000_000n,     // Shares to sell\n  tokenDecimals: 6,\n});\n```\n\n#### `buildCancelBuyOrdersTx(params)` / `buildCancelSellOrdersTx(params)` — Cancel orders\n\n```ts\nconst tx = rain.buildCancelBuyOrdersTx({\n  marketContractAddress: '0x...',\n  orders: [\n    { option: 1, price: 0.5, orderID: 1n },\n    { option: 1, price: 0.6, orderID: 2n },\n  ],\n});\n```\n\n#### `buildAddLiquidityTx(params)` — Provide liquidity\n\n```ts\nconst tx = rain.buildAddLiquidityTx({\n  marketContractAddress: '0x...',\n  liquidityAmountInWei: 100_000_000n,  // 100 USDT\n});\n```\n\n> Note: Liquidity is locked until market resolution. There is no `removeLiquidity` — LPs recover their share via `buildClaimTx` after resolution.\n\n#### `buildClaimTx(params)` — Claim winnings\n\n```ts\nconst tx = await rain.buildClaimTx({\n  marketId: '698c8f116e985bbfacc7fc01',\n  walletAddress: '0x996ea23940f4a01610181D04bdB6F862719b63f0',\n});\n```\n\n#### `buildResolveMarketTx(params)` — Resolve a market (admin)\n\nCombines close + choose winner into a multi-step transaction array.\n\n```ts\nconst txs = await rain.buildResolveMarketTx({\n  marketId: '698c8f116e985bbfacc7fc01',\n  winningOption: 1,  // 1-indexed\n});\n\nfor (const tx of txs) {\n  await provider.sendTransaction(tx);\n}\n```\n\nIndividual steps are also available: `buildCloseMarketTx(params)` and `buildChooseWinnerTx(params)`.\n\n#### `buildDepositToSmartAccountTx(params)` / `buildWithdrawFromSmartAccountTx(params)`\n\n```ts\n// Deposit: EOA → Smart Account\nconst depositTx = rain.buildDepositToSmartAccountTx({\n  tokenAddress: '0x...USDT',\n  smartAccountAddress: '0x...smartAccount',\n  amount: 50_000_000n,\n});\n\n// Withdraw: Smart Account → EOA\nconst withdrawTx = rain.buildWithdrawFromSmartAccountTx({\n  tokenAddress: '0x...USDT',\n  eoaAddress: '0x...eoa',\n  amount: 50_000_000n,\n});\n```\n\n---\n\n### Positions & Portfolio\n\n#### `getPositions(address)` — All positions across markets\n\n```ts\nconst positions = await rain.getPositions('0x...');\n// Returns: PositionsResult\n// { address, markets: [{ marketId, title, status, contractAddress,\n//     options: [{ choiceIndex, optionName, shares, sharesInEscrow, amountInEscrow, currentPrice }],\n//     userLiquidity, claimed, dynamicPayout }] }\n```\n\n#### `getPositionByMarket(address, marketId)` — Single market position\n\n```ts\nconst pos = await rain.getPositionByMarket('0x...', '698c8f116e985bbfacc7fc01');\n// Returns: PositionByMarket (same shape as a single MarketPosition)\n```\n\n#### `getLPPosition(address, marketId)` — LP position details\n\n```ts\nconst lp = await rain.getLPPosition('0x...', '698c8f116e985bbfacc7fc01');\n// Returns: LPPosition\n// { marketId, title, status, contractAddress,\n//   userLiquidity, totalLiquidity, poolShareBps, liquidityShareBps }\n```\n\n#### `getPortfolioValue(params)` — Aggregate portfolio\n\n```ts\nconst portfolio = await rain.getPortfolioValue({\n  address: '0x...',\n  tokenAddresses: ['0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'],  // USDT\n});\n// Returns: PortfolioValue\n// { address, tokenBalances, positions: [{ marketId, title, dynamicPayout, totalPositionValue }],\n//   totalPositionValue }\n```\n\n`dynamicPayout` is per-option: `[0, 804164316, 0, 0]` means ~804 USDT payout if option 1 wins.\n\n---\n\n### Account Management\n\n#### `getSmartAccountBalance(params)` — Token balances\n\n```ts\nconst balance = await rain.getSmartAccountBalance({\n  address: '0x...',\n  tokenAddresses: ['0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9'],\n});\n// Returns: AccountBalanceResult { address, balances: [{ token, balance, decimals }] }\n```\n\n#### `getEOAFromSmartAccount(smartAccountAddress)` — Reverse lookup\n\n```ts\nconst eoa = await rain.getEOAFromSmartAccount('0x...smartAccount');\n// Returns: '0x...eoa'\n```\n\n---\n\n### Transaction History\n\nRequires `subgraphUrl` in the constructor config (or per-method override).\n\n#### `getTransactions(params)` — Wallet transaction history\n\n```ts\nconst txs = await rain.getTransactions({\n  address: '0x...',\n  first: 20,\n  skip: 0,\n  orderBy: 'timestamp',\n  orderDirection: 'desc',\n});\n```\n\n#### `getTransactionDetails(params)` — Decode a single transaction\n\n```ts\nconst details = await rain.getTransactionDetails({ txHash: '0x...' });\n```\n\n#### `getMarketTransactions(params)` — All trades on a market\n\n```ts\nconst trades = await rain.getMarketTransactions({\n  marketAddress: '0x...',\n  first: 50,\n});\n```\n\n#### `getTradeHistory(params)` — User trades on a specific market\n\n```ts\nconst history = await rain.getTradeHistory({\n  address: '0x...',\n  marketAddress: '0x...',\n});\n```\n\n---\n\n### Analytics\n\n#### `getPriceHistory(params)` — OHLC candle data\n\n```ts\nconst candles = await rain.getPriceHistory({\n  marketAddress: '0x...',\n  interval: '1h',       // '5m' | '15m' | '1h' | '4h' | '1d'\n  option: 0,\n});\n// Returns: PriceHistoryResult { candles: [{ open, high, low, close, timestamp }] }\n```\n\n#### `getPnL(params)` — Realized & unrealized P&L\n\n```ts\nconst pnl = await rain.getPnL({\n  address: '0x...',\n  marketId: '...',  // Optional — omit for aggregate\n});\n```\n\n#### `getLeaderboard(params)` — Top traders\n\n```ts\nconst leaders = await rain.getLeaderboard({\n  timeframe: '7d',       // '24h' | '7d' | '30d' | 'all'\n  sortBy: 'pnl',        // 'pnl' | 'volume' | 'winRate'\n  first: 10,\n});\n```\n\n---\n\n### WebSocket Subscriptions\n\nRequires `wsRpcUrl` in the constructor config.\n\n#### `subscribeToMarketEvents(params)` — Live on-chain events\n\n```ts\nconst rain = new Rain({\n  environment: 'development',\n  wsRpcUrl: 'wss://arbitrum-one-rpc.publicnode.com',\n});\n\nconst unsubscribe = rain.subscribeToMarketEvents({\n  marketAddress: '0x...',\n  eventNames: ['EnterOption', 'Sync'],  // Optional filter — omit for all events\n  onEvent: (event) => {\n    console.log(event.eventName, event.args);\n  },\n  onError: (err) => console.error(err),\n});\n\n// Stop listening\nunsubscribe();\n```\n\n**Available events:**\n\n| Category   | Events                                                                                        |\n| ---------- | --------------------------------------------------------------------------------------------- |\n| Trades     | `EnterOption`, `PlaceBuyOrder`, `PlaceSellOrder`, `ExecuteBuyOrder`, `ExecuteSellOrder`, `CancelBuyOrder`, `CancelSellOrder` |\n| Price sync | `Sync` — AMM reserve rebalance (emitted once per option pair per trade)                       |\n| Lifecycle  | `Claim`, `ChooseWinner`, `ClosePool`                                                          |\n\n#### `subscribePriceUpdates(params)` — Real-time price feed\n\n```ts\nconst unsubscribe = rain.subscribePriceUpdates({\n  marketAddress: '0x...',\n  onPriceUpdate: (update) => {\n    // update.prices: OptionPrice[] — fresh prices after each trade\n    // update.triggeredBy: MarketTradeEvent — the event that caused the update\n    console.log(update.prices);\n  },\n  onError: (err) => console.error(err),\n});\n```\n\n#### `destroyWebSocket()` — Cleanup\n\n```ts\nawait rain.destroyWebSocket();\n```\n\n---\n\n## RainAA — Account Abstraction\n\n`RainAA` manages Alchemy smart accounts with gas sponsorship.\n\n```ts\nimport { RainAA } from '@buidlrrr/rain-sdk';\nimport { arbitrum } from 'viem/chains';\n\nconst rainAA = new RainAA({\n  walletClient: yourWalletClient,       // viem WalletClient\n  alchemyApiKey: 'your-alchemy-key',\n  paymasterPolicyId: 'your-policy-id',\n  chain: arbitrum,\n  rpcUrl: 'https://...',               // Optional\n});\n\n// Connect — derives smart account from EOA\nconst smartAccountAddress = await rainAA.connect();\nconsole.log('Smart account:', smartAccountAddress);\n\n// Send transactions built by Rain\nconst rain = new Rain({ environment: 'production' });\nconst rawTx = rain.buildBuyOptionRawTx({ ... });\nconst txHash = await rainAA.sendTransaction(rawTx);\n\n// Accessors\nrainAA.address;   // Smart account address (throws if not connected)\nrainAA.client;    // Underlying AA client (throws if not connected)\n\n// Disconnect\nrainAA.disconnect();\n```\n\n### Flow: Rain + RainAA Together\n\n```ts\n// 1. Rain builds the transaction (WHAT)\nconst rawTx = rain.buildBuyOptionRawTx({\n  marketContractAddress: '0x...',\n  selectedOption: 1n,\n  buyAmountInWei: 10_000_000n,\n});\n\n// 2. RainAA sends it via smart account (HOW)\nconst txHash = await rainAA.sendTransaction(rawTx);\n```\n\n---\n\n## Data Sources\n\nThe SDK reads from three sources depending on the method:\n\n| Source       | Used by                                                        | Config                       |\n| ------------ | -------------------------------------------------------------- | ---------------------------- |\n| **Rain API** | `getPublicMarkets`, `getMarketDetails` (partial), `buildClaimTx`, `buildCreateMarketTx` | `environment` (auto)         |\n| **On-chain** | `getMarketPrices`, `getMarketVolume`, `getPositions`, all tx builders | `rpcUrl` (auto-selected)     |\n| **Subgraph** | `getTransactions`, `getPriceHistory`, `getPnL`, `getLeaderboard` | `subgraphUrl` + `subgraphApiKey` |\n\nMethods that require the subgraph will throw if `subgraphUrl` is not configured.\n\n---\n\n## Key Types\n\n```ts\n// Core transaction type — returned by all builders\ninterface RawTransaction {\n  to: `0x${string}`;\n  data: `0x${string}`;\n  value?: bigint;\n}\n\n// Market from listing endpoint\ninterface Market {\n  id: string;\n  title: string;\n  totalVolume: string;\n  status: MarketStatus;\n  contractAddress?: string;\n}\n\n// Full market details (API + on-chain)\ninterface MarketDetails {\n  id: string;\n  title: string;\n  status: MarketStatus;\n  contractAddress: `0x${string}`;\n  options: MarketOption[];\n  poolState: number;\n  numberOfOptions: bigint;\n  startTime: bigint;\n  endTime: bigint;\n  totalLiquidity: bigint;\n  // ... and more\n}\n\n// Position data per market\ninterface MarketPosition {\n  marketId: string;\n  title: string;\n  options: OptionPosition[];\n  userLiquidity: bigint;\n  claimed: boolean;\n  dynamicPayout: bigint[];\n}\n\n// WebSocket event payload\ninterface MarketTradeEvent {\n  eventName: MarketEventName;\n  marketAddress: `0x${string}`;\n  blockNumber: bigint;\n  transactionHash: `0x${string}`;\n  logIndex: number;\n  args: Record<string, unknown>;\n}\n\ntype MarketStatus = 'Live' | 'New' | 'WaitingForResult' | 'UnderDispute' |\n  'UnderAppeal' | 'ClosingSoon' | 'InReview' | 'InEvaluation' | 'Closed' | 'Trading';\n```\n\n---\n\n## Full Method Reference\n\n### Rain Class\n\n| Category             | Method                              | Returns                  | Async |\n| -------------------- | ----------------------------------- | ------------------------ | ----- |\n| **Markets**          | `getPublicMarkets(params)`          | `Market[]`               | Yes   |\n|                      | `getMarketDetails(marketId)`        | `MarketDetails`          | Yes   |\n|                      | `getMarketPrices(marketId)`         | `OptionPrice[]`          | Yes   |\n|                      | `getMarketVolume(marketId)`         | `MarketVolume`           | Yes   |\n|                      | `getMarketLiquidity(marketId)`      | `MarketLiquidity`        | Yes   |\n|                      | `getMarketAddress(marketId)`        | `0x${string}`            | Yes   |\n|                      | `getMarketId(marketAddress)`        | `string`                 | Yes   |\n|                      | `getProtocolStats()`                | `ProtocolStats`          | Yes   |\n| **Tx Builders**      | `buildApprovalTx(params)`           | `RawTransaction`         | No    |\n|                      | `buildCreateMarketTx(params)`       | `RawTransaction[]`       | Yes   |\n|                      | `buildBuyOptionRawTx(params)`       | `RawTransaction`         | No    |\n|                      | `buildLimitBuyOptionTx(params)`     | `RawTransaction`         | No    |\n|                      | `buildSellOptionTx(params)`         | `RawTransaction`         | No    |\n|                      | `buildCancelBuyOrdersTx(params)`    | `RawTransaction`         | No    |\n|                      | `buildCancelSellOrdersTx(params)`   | `RawTransaction`         | No    |\n|                      | `buildAddLiquidityTx(params)`       | `RawTransaction`         | No    |\n|                      | `buildClaimTx(params)`              | `RawTransaction`         | Yes   |\n|                      | `buildCloseMarketTx(params)`        | `RawTransaction`         | Yes   |\n|                      | `buildChooseWinnerTx(params)`       | `RawTransaction`         | Yes   |\n|                      | `buildResolveMarketTx(params)`      | `RawTransaction[]`       | Yes   |\n|                      | `buildDepositToSmartAccountTx(p)`   | `RawTransaction`         | No    |\n|                      | `buildWithdrawFromSmartAccountTx(p)`| `RawTransaction`         | No    |\n| **Positions**        | `getPositions(address)`             | `PositionsResult`        | Yes   |\n|                      | `getPositionByMarket(addr, id)`     | `PositionByMarket`       | Yes   |\n|                      | `getLPPosition(addr, id)`           | `LPPosition`             | Yes   |\n|                      | `getPortfolioValue(params)`         | `PortfolioValue`         | Yes   |\n| **Accounts**         | `getSmartAccountBalance(params)`    | `AccountBalanceResult`   | Yes   |\n|                      | `getEOAFromSmartAccount(addr)`      | `0x${string}`            | Yes   |\n| **Tx History**       | `getTransactions(params)`           | `TransactionsResult`     | Yes   |\n|                      | `getTransactionDetails(params)`     | `TransactionDetails`     | Yes   |\n|                      | `getMarketTransactions(params)`     | `MarketTransactionsResult` | Yes |\n|                      | `getTradeHistory(params)`           | `TradeHistoryResult`     | Yes   |\n| **Analytics**        | `getPriceHistory(params)`           | `PriceHistoryResult`     | Yes   |\n|                      | `getPnL(params)`                    | `PnLResult`              | Yes   |\n|                      | `getLeaderboard(params)`            | `LeaderboardResult`      | Yes   |\n| **WebSocket**        | `subscribeToMarketEvents(params)`   | `Unsubscribe`            | No    |\n|                      | `subscribePriceUpdates(params)`     | `Unsubscribe`            | No    |\n|                      | `destroyWebSocket()`                | `void`                   | Yes   |\n\n### RainAA Class\n\n| Method               | Returns              | Async |\n| -------------------- | -------------------- | ----- |\n| `connect()`          | `0x${string}`        | Yes   |\n| `sendTransaction(tx)`| `0x${string}` (hash) | Yes   |\n| `disconnect()`       | `void`               | No    |\n| `.address`           | `0x${string}`        | —     |\n| `.client`            | Smart wallet client  | —     |\n\n---\n\n## Development\n\n```bash\n# Build\ncd rain-sdk && npm run build\n\n# Watch mode\nnpm run dev\n\n# Run tests\nnpm test\n\n# Integration tests\nnpm run test:integration\n```\n","readmeFilename":"README.md"}