{"_id":"@aori/mega-swap-widget","_rev":"22-78f032de4b0ce02d7f55160f52d79e74","name":"@aori/mega-swap-widget","dist-tags":{"latest":"0.1.21"},"versions":{"0.1.0":{"name":"@aori/mega-swap-widget","version":"0.1.0","keywords":["aori","swap","widget","cross-chain","dex","defi","react","ethereum","wagmi","viem"],"license":"MIT","_id":"@aori/mega-swap-widget@0.1.0","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"homepage":"https://github.com/aori-io/mega-swap-widget#readme","bugs":{"url":"https://github.com/aori-io/mega-swap-widget/issues"},"dist":{"shasum":"1d91a575a845a943e459a73c606f4bf34e937f60","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.0.tgz","fileCount":71,"integrity":"sha512-6K35ylxRPrDCtjxbOAQIg17JUOoXU4MYkAMjZPl7KnLQR/x+bvTg3LRfzOiipanbvVkaynwdQZ+0vB75k6DPHA==","signatures":[{"sig":"MEUCIHMTfRcx0oBN0YS9QMnJs4EWJ/Wm6t+b+78r2HXUlbl2AiEAhjgloSH1tie2TMtPPNs49B5yjAEeWwRGWAYlnKqCfKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3110030},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"1c9e477061f5746f66f7ee7fbfbc59b28d86bcbc","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"flooreyes","email":"wyattcravatas@gmail.com"},"repository":{"url":"git+https://github.com/aori-io/mega-swap-widget.git","type":"git"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.0_1773692869037_0.7891146082329792","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aori/mega-swap-widget","version":"0.1.1","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.1","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"8b3f3f36bb86767cec84d7e16d510f7e81274427","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.1.tgz","fileCount":38,"integrity":"sha512-JYq7bmwdDnM2UIpuTsyKdN/81Y9iTPrjkz1NDpmT4c0mRKeGxnPJs/vrmBR5bOveG/hQwdNENCgDSMLTmn0xug==","signatures":[{"sig":"MEUCIQDioUsfHvxbfEZV2WqEQTSqqm+u9pFDQ7XJBcTyZQyfIwIgUin7rVSLn1P65lczQ+Ie8KFz+KrRx+RoUuxJeGLtu3A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":956771},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"813bb3efadb3fa854b1aaa11cc24666628731145","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"flooreyes","email":"wyattcravatas@gmail.com"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.1_1773693855507_0.990541103344903","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aori/mega-swap-widget","version":"0.1.2","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.2","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"9936bc777ef70c399066e57134f651f4e3c07ad3","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.2.tgz","fileCount":38,"integrity":"sha512-+x3movHXx8nQTIwqilt4PWDVQnHamFnoIF7nXvJlQ1ktmG4gsZo0diw/2+I8WEfXmvz9qRAdDq7AnOhT7FbW6A==","signatures":[{"sig":"MEUCIBXzHIAFFbCRAwkTw08F8j5niJnxSnJBd6D1WJ1wqnliAiEAiTHrNNCu2u0s21iG58kycIFGJq4mfKqEaMo/F98uwZY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":957033},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"2ec0c18c3fde2fabd64c07013d85706de6d549e2","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"flooreyes","email":"wyattcravatas@gmail.com"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.2_1773715517225_0.5366398327476978","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@aori/mega-swap-widget","version":"0.1.3","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.3","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"624b118abd36c10aa68ed10a461025123361f766","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.3.tgz","fileCount":44,"integrity":"sha512-eC8GM2cBOpcJLvefF0ioT1A+RBgABweogM5qekqQtGjQneOeR/O3Bm0XOk/h5JRIBeoDc+81JfcSJb1y2Yl0rw==","signatures":[{"sig":"MEQCIAqKw9KjqjQ9xFtkLFFd/rkypfEEnzQ+T8myrT9IpQicAiAgB7TMZPN6s0K5+lTd1AGl062xMnsm3FqYmTq+FrU+9A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":962441},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"3c6968208b4ccdb479c6b8d15792635f0feb8993","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.3_1773762622985_0.8829471871243963","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@aori/mega-swap-widget","version":"0.1.4","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.4","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"8b6f1971931fed418b3bfb4093dc19f26dc8a504","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.4.tgz","fileCount":46,"integrity":"sha512-34h/7IYGpDhQzcwdus1dcUNPZ3Xz+6If8gUpgcLMRh2mToLzSJLMnFqewnlpirXNpOSxq/6noFoQnUas2ubDsg==","signatures":[{"sig":"MEYCIQCaaJvz2rgvWePUqqno4LOsTHstVGbMB4pWFtWQwf5MBAIhAOwYzprxlNeenM+CN+zHx+ZMVVDJoo5bMXXCGgtrtmyU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":968539},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"dba625f96fc22f40e71f4ae471da1e753fe812c8","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.4_1773775026364_0.31162699293393525","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@aori/mega-swap-widget","version":"0.1.5","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.5","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"924c0d68e2228984f60993875515c6cdd5537240","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.5.tgz","fileCount":46,"integrity":"sha512-HvZZ2Hl3VmZqHSPFNtD3Il3iaJy0czfTCcaUDBHQsTEX+KFBn0+13MFxKLe/DZ7QOdYcAofyxaLj0z7JVLcVNQ==","signatures":[{"sig":"MEUCIQD4Uf7FKBUXiQo0MtstWaXT/hBgBZ3TWakBhcBVt3fsRwIgI8o3K3lH/6F3LEPp6NgZFrhKXOWMN3srgSxMRbvwneo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":996597},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"3f2ab4e056fa742bbd108f6ae4e32c53ea5ae2aa","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.5_1773942223754_0.2825393389781903","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@aori/mega-swap-widget","version":"0.1.6","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.6","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"dfad22b5039721d081e85c4ad23095407d846f57","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.6.tgz","fileCount":46,"integrity":"sha512-xsc4hqSUqYBNG/GGZQiqYpFrHsVYjMcJhV41yLCdObA7Emu/SlCheY6C4lTP8rIBlWlHab1GoaDC+w6eVECnzg==","signatures":[{"sig":"MEQCIFCq2HLH/G3Nlo1laklFUkfS5VKdaO/RIMDJimInts0UAiAsPv8C0+Foe5lq55GW+/27F2UtahNJxjPt3eOtix/uMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1001690},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"8aa0ab78a6aa5ecdb58a68ba4f8ce52d6572046c","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.6_1773957965906_0.7242787001888908","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@aori/mega-swap-widget","version":"0.1.7","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.7","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"8bb824c9f71e2a7511e1da704e46d38dd0bc8857","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.7.tgz","fileCount":46,"integrity":"sha512-emJRaHFjROT1udeoBlMS0QpvyGwxs8Wsu+17Ei3HXb1i4hpLMNGLEQ7e6LMLTABKVXTYN1OYNc713rRPByg4Tg==","signatures":[{"sig":"MEUCIGQFzkliu3hO75g6gOz1vIufr/Fy+Js17/u+U3ujNOA3AiEAwWL0mPEBBfALQOazq1L/lr+WXRS6pKprqZDB3Ypl1p8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1008373},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"7a09f1740169de6b261b63a0723fe26be5edf819","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.7_1773961913038_0.4759389194997341","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@aori/mega-swap-widget","version":"0.1.8","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.8","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"56b73b25facc45ceacf46b09f98be5f27d5756c6","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.8.tgz","fileCount":46,"integrity":"sha512-JzF48tqA33rNZYaDMAoMt9QzanTfCbO35AXCY/S3rQwCRrwDKSnidzPiKUNyrfA8fpaFDA/oJhpe2rDOCR82uw==","signatures":[{"sig":"MEUCIQCWIjdMKMzN8UJI2zN9BGdOuO2TQ1vTeyeRytVCmrLNdwIgdv6ZfJm0nYphfxMtITm6wEERJ/1jbrGhk8YKC/XV9Zs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1012434},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"c3514d721d1702506724980416cc8402a6e59e14","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.8_1774015613664_0.267292634439541","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@aori/mega-swap-widget","version":"0.1.9","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.9","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"5363d6644e14170ec250077d71464c0d0b53d6e5","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.9.tgz","fileCount":46,"integrity":"sha512-M4Glaly0AFjrOyTUSxUQ7QAisxq7zI7zH0XxJ013bgM36khQ4+dTTT4WRuR/sv5/jwaPBI7KmJWuYl1mykYrfg==","signatures":[{"sig":"MEQCIFgyytUqghwhGFvcOMVTG53IWXEdbw2woXwxqaeB6aaWAiAqizt+ZAsjUPz4e6aiImgaLfzEXdV8p1Iz90BlX/bgcA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1012452},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"694618648645863e8e35a757aa397ee89b17ff14","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.9_1774289383471_0.6866131857717452","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@aori/mega-swap-widget","version":"0.1.10","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.10","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"f0f805d1d1053a1a6689adc00a43e39b0a72826c","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.10.tgz","fileCount":46,"integrity":"sha512-pdnEREoBrIl4b58f18abYUj7SNy2YbwSmWoVCs86n/M55KPnCk+KFbsxnPbY2L4bSPUltmP91Llh6R6NE/UJyg==","signatures":[{"sig":"MEYCIQDTOQZqIhb5xpoXQ4GQw4S5Z2PpxL2NvQuebnmaFhtGsgIhAJiZ347shQmJc843/iJ3YZ/w7cKwTRwiJNn2pn6+irlH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1021453},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"d141590160d725b183d8f40d2a2dcf945d6b2f75","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.10_1774321722421_0.6198704621863527","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@aori/mega-swap-widget","version":"0.1.11","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.11","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"d2df3d001c619803b3bf86652552c2a4ef365b06","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.11.tgz","fileCount":46,"integrity":"sha512-ZD0ZftAl69Lz5Y94DBe3nyQs+EY2WcQwKX/BOPZddYTeTV7AQTZG6eTHuJjQsJSJKAfj2W2WUXKOhlTJoJ+gcw==","signatures":[{"sig":"MEUCIQCMj8hKTeWF/r7BSoqBDnJEzfNL8y0XyO0Z/FJ8DHB7vgIgUuneoFUNqWvSsId2ksXjVjou+IH0uYZ31Qjbw4CORQ4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1021816},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"b0b058f1004cc80bab40d9159efd14ba80048035","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"flooreyes","email":"wyattcravatas@gmail.com"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.11_1774324553463_0.7256386524142449","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@aori/mega-swap-widget","version":"0.1.12","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.12","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"27b85cfb86074e01783dc8b5da9bcdae73018eb6","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.12.tgz","fileCount":46,"integrity":"sha512-UJ8ZpMqLtu1A7CTh5fb0pbfeZtev1NNN90wCfU7QyFs3VpWNl/E7ADwCP9hSYq+yE9jVxIJwEyLSGJ2ksrtfYA==","signatures":[{"sig":"MEYCIQDNZK4JE0T0oVGvyc5DhcqtINQ57Sr1IEDoSNJ/NJts4QIhAJV8X6vhvxwnpv5gWjlj7HtgIGfba1Syz+wqOiJsZPhY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1022265},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"2f8fd89cc56d57db8794261b497fbd4dfca729ca","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.12_1774445508689_0.83213278799804","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@aori/mega-swap-widget","version":"0.1.13","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.13","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"295f96cae09f8b99327c79f60f87a9b057ab218a","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.13.tgz","fileCount":46,"integrity":"sha512-7q3KbatLed1TCg1qBywNnO7Jb46pK0waWrAmEiUAqVgwDsoVJKxN3y1MqO0bp0WVZbLrCokqfd1ckkWnNUciZA==","signatures":[{"sig":"MEUCIQCthePbwN5x65KOIAyyFbeZEyBdfoDCkl0QS+i91QEVnAIgBE0/45d4XCk3faSQh2gyVF4W9b45hV3ds6sBbDxZwVc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1023420},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"09e85504a859857cddb7688c9ebfda5b886d1619","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.13_1774471099331_0.1792089997723656","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@aori/mega-swap-widget","version":"0.1.14","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.14","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"0430aed63bb857ed97820060079c2393a45afd6c","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.14.tgz","fileCount":46,"integrity":"sha512-5G03EV0ZClbKvLBjncq+TOymixdut5C9nzgq30OVmwT+40EYHTh0E901uQEhU7IF0UkhtTmftDQ1BZbDZCno+Q==","signatures":[{"sig":"MEUCIBP3PmW5+YB+19rFzfngPWo5rOi8LPl5PKnwaSsupXghAiEAnjldKvE5bHTcQPPKBB9LmcjebGo2a/JzrXhZ3KiVkpo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1023438},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"0dcdb1d8367229e8265ad7c3cd18d5d9ae2b412f","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.14_1774543182055_0.4907845478195123","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@aori/mega-swap-widget","version":"0.1.15","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.15","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"d0d6620a725595085551f82af71e10c1eb264565","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.15.tgz","fileCount":46,"integrity":"sha512-HRGAQnw4dl6TNJysB3Nu/XtuKAdt8qC2HGGc7AO6QoE3/hcNMmvmldqPRUsI5rDsjxJT2A49CCmgCeEmQVQLrA==","signatures":[{"sig":"MEUCIAb4A+2AFZkbrmJN0sgtIpFgGnKAyzqY5DMN1g3H3hGGAiEA7Kt9l+wDo9HW53917PYVNPo3ZrURmqt3vT4Yi6Civyo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1026144},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"38e76ccfac82571523d9379c59deee854f1433c8","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.15_1774629152567_0.683911038388985","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@aori/mega-swap-widget","version":"0.1.16","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.16","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"57c836aac4198397e89716eb2e7a54322d3a8cea","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.16.tgz","fileCount":46,"integrity":"sha512-mIfmn5yfytBq70bCV70a3KaiTq+3bc/PJEQo41RvCHlpLEyWRpj5pJPyN+J+QFuTeFUxk/60rfOBSD8qqwxPaw==","signatures":[{"sig":"MEUCIQDzLKXT3ZOP3irUKDbMlMBhbGPksow5Kc1idPhQPU2vmwIgJ9hu4CfFKfWnaNTDeiQwDxl+GJtX6RGugqIEXnMpXGA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1028860},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"8f6cd13e7bf106fbe22c7e43137b174dbde00fbd","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.16_1774662309134_0.6742521646102666","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@aori/mega-swap-widget","version":"0.1.17","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.17","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"2cffdc3f2b587b46a80f7c46367930ce6a701921","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.17.tgz","fileCount":46,"integrity":"sha512-ugQytRVxh46EiVlKvCynYaJweorft+YtHQNsUxHDQWz6G/TK9GUPF0Wf/CF2grq+Q0SpwYOcfgjuK1/nEGTf6g==","signatures":[{"sig":"MEQCIENdhE8xUV//ZCxw6EbBviBdUQu4StDBLo/ichbHOaIQAiBmX0qpry5z0/mg2oqKYHpGoJQb4u7rfA/lrkFj25sReA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1032110},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"76e71d7ef7b38cd2cd7abe2751736a29ab1a5d74","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.17_1775009464252_0.4000303926906952","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@aori/mega-swap-widget","version":"0.1.18","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.18","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"2381540a556262e6f5992b5a83dfb7ab976ee83a","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.18.tgz","fileCount":46,"integrity":"sha512-zCT3uiW60b9U4Fm9YaexccjnGyPVr+gBbWtCWuOfzXmUKx+I83kMmb5IN/u2cifggLf7UFPVSX24KvMCNUC1Kw==","signatures":[{"sig":"MEYCIQCCIcVA28ROrDlostSB+uLGT9Rv9LETXOXeerKH3vIRMQIhAJduTE2TJpiuNmDIryLm7YL4ZITTMSSxWyY1Z5ep+njT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1034101},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"69b58eb0b82d4e95e8cd571adb9802c18df4f35f","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.18_1775855351518_0.9056370183204032","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@aori/mega-swap-widget","version":"0.1.19","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.19","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"bb115973e0c6bc86edfb1085fa5e8a6d66f45937","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.19.tgz","fileCount":46,"integrity":"sha512-7b2d4zaNaxfxn7NgKsHc3N41HskwH7NByo7GlJ1FPyAsegB42EVq8ai6UK4kXk3vGbG/pAETTL0mi72cZbtymQ==","signatures":[{"sig":"MEYCIQDpIUqJ4m7+QR4aJ2AohJbJfbakuj6lIry9zdvSzlWO0wIhAJTRDoDBQr8l0Ik5SaNeP4mG6j9//ShtvsXR5Xg3E8FY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1054998},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"43f9f0d5d294c2b3b9c90ca09fed8dc3f48d3c10","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.19_1776184532990_0.9754809289458386","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@aori/mega-swap-widget","version":"0.1.20","license":"UNLICENSED","_id":"@aori/mega-swap-widget@0.1.20","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"dist":{"shasum":"b6eb9710dbc720f8a1e458137e92c7c9b01caf72","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.20.tgz","fileCount":46,"integrity":"sha512-8rq5aX9c4FQJ2de96yZKhsCIqwhAfPlpZCTz1kqLIHi7NZFORWPt/hFrkBWrW3t9JK40KV88vDRWzIA4UKK7VQ==","signatures":[{"sig":"MEUCIQCor+mJ+pp4KPg5je1srmAkZXf4QXCAqAiljoZ4xMbEFAIgZrIjWC4JliKdru90NJasgAOulhp5ffo+uxVMnwk58LM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1060961},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"gitHead":"7f652d74f610b6567614ce6aba62bdea8e57cbfa","private":false,"scripts":{"dev":"tsup --watch","lint":"echo 'Widget package lint complete'","build":"tsup","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"_npmVersion":"11.3.0","description":"Embeddable cross-chain swap widget powered by Aori","directories":{},"sideEffects":["**/*.css"],"_nodeVersion":"24.2.0","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.4.0","postcss":"^8.5.0","typescript":"^5","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@tailwindcss/postcss":"^4.1.0","postcss-prefix-selector":"^2.1.1","ethereum-gradient-base64":"^1.0.0"},"peerDependencies":{"viem":"^2","react":"^18 || ^19","wagmi":"^2","abitype":">=1","zustand":"^4 || ^5","react-dom":"^18 || ^19","@wagmi/core":"^2","@tanstack/react-query":">=5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/mega-swap-widget_0.1.20_1776871163289_0.19078125903181342","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@aori/mega-swap-widget","version":"0.1.21","description":"Embeddable cross-chain swap widget powered by Aori","license":"UNLICENSED","type":"module","private":false,"publishConfig":{"access":"public"},"sideEffects":["**/*.css"],"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./styles.css":"./dist/index.css"},"scripts":{"build":"tsup","dev":"tsup --watch","lint":"echo 'Widget package lint complete'","type-check":"tsc --noEmit","prepublishOnly":"bun run build"},"peerDependencies":{"react":"^18 || ^19","react-dom":"^18 || ^19","@tanstack/react-query":">=5","@wagmi/core":"^2","abitype":">=1","viem":"^2","wagmi":"^2","zustand":"^4 || ^5"},"peerDependenciesMeta":{"abitype":{"optional":true}},"dependencies":{},"devDependencies":{"@tailwindcss/postcss":"^4.1.0","@types/node":"^22","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","ethereum-gradient-base64":"^1.0.0","postcss":"^8.5.0","postcss-prefix-selector":"^2.1.1","tsup":"^8.4.0","typescript":"^5"},"_id":"@aori/mega-swap-widget@0.1.21","gitHead":"47946b22851fa5934ce3d55de84def13e92d0685","_nodeVersion":"24.2.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-Hd0HtiAU6d9fNTAPFvk2kMhR17Rvt5tgnhn3wI+RkXT7VGCK5qDcm6y9w8paj81FcxST1DfsgPTC0wMeTANKJA==","shasum":"43781990412d3ec0e0e84ffd2d1e1ab976deefb6","tarball":"https://registry.npmjs.org/@aori/mega-swap-widget/-/mega-swap-widget-0.1.21.tgz","fileCount":46,"unpackedSize":1065474,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG6uAvjka7m2qaGKYoh7qPoUsQaJtLmsg5D6bFlpkfvmAiBTmP4sAb8KFUoK3BOCqEls3Dt6IEzYANCsVduvq6jqwg=="}]},"_npmUser":{"name":"aduliba","email":"andrew@aori.io"},"directories":{},"maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mega-swap-widget_0.1.21_1777567352085_0.738065222325937"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-16T20:27:48.938Z","modified":"2026-04-30T16:42:32.487Z","0.1.0":"2026-03-16T20:27:49.297Z","0.1.1":"2026-03-16T20:44:15.699Z","0.1.2":"2026-03-17T02:45:17.418Z","0.1.3":"2026-03-17T15:50:23.157Z","0.1.4":"2026-03-17T19:17:06.538Z","0.1.5":"2026-03-19T17:43:43.957Z","0.1.6":"2026-03-19T22:06:06.146Z","0.1.7":"2026-03-19T23:11:53.216Z","0.1.8":"2026-03-20T14:06:53.883Z","0.1.9":"2026-03-23T18:09:43.667Z","0.1.10":"2026-03-24T03:08:42.679Z","0.1.11":"2026-03-24T03:55:53.633Z","0.1.12":"2026-03-25T13:31:48.858Z","0.1.13":"2026-03-25T20:38:19.525Z","0.1.14":"2026-03-26T16:39:42.276Z","0.1.15":"2026-03-27T16:32:32.781Z","0.1.16":"2026-03-28T01:45:09.370Z","0.1.17":"2026-04-01T02:11:04.451Z","0.1.18":"2026-04-10T21:09:11.743Z","0.1.19":"2026-04-14T16:35:33.182Z","0.1.20":"2026-04-22T15:19:23.597Z","0.1.21":"2026-04-30T16:42:32.302Z"},"license":"UNLICENSED","description":"Embeddable cross-chain swap widget powered by Aori","maintainers":[{"name":"flooreyes","email":"wyattcravatas@gmail.com"},{"name":"hmsimha","email":"hartsimha@gmail.com"},{"name":"adammac7","email":"adam@aori.io"},{"name":"aduliba","email":"andrew@aori.io"}],"readme":"# @aori/mega-swap-widget\n\nEmbeddable cross-chain swap widget powered by [Aori](https://aori.io).\n\n## Install\n\n```bash\nnpm install @aori/mega-swap-widget\n# or\nyarn add @aori/mega-swap-widget\n# or\nbun add @aori/mega-swap-widget\n```\n\n## Peer Dependencies\n\n| Package                         | Version  | Required |\n| ------------------------------- | -------- | -------- |\n| `wagmi`                         | ^2       | Yes      |\n| `@wagmi/core`                   | ^2       | Yes      |\n| `viem`                          | ^2       | Yes      |\n| `@tanstack/react-query`         | ≥5       | Yes      |\n| `zustand`                       | ^4 / ^5  | Yes      |\n| `abitype`                       | ≥1       | Optional |\n\n## Quick Start\n\n### 1. Configure the widget\n\n```ts\nimport type { AoriSwapWidgetConfig } from '@aori/mega-swap-widget';\n\nconst config: AoriSwapWidgetConfig = {\n  vtApiBaseUrl: '/api/vt',\n  walletConnectProjectId: 'YOUR_WALLETCONNECT_PROJECT_ID',\n  rpcOverrides: {\n    1: '/api/rpc/1',\n    10: '/api/rpc/10',\n    8453: '/api/rpc/8453',\n    42161: '/api/rpc/42161',\n    // ...\n  },\n  theme: {\n    mode: 'dark',\n    dark: { /* color overrides */ },\n    light: { /* color overrides */ },\n  },\n  // All token/chain fields are optional — omit to allow all supported tokens and chains.\n  tokens: {\n    defaultBase: { chainId: 1, address: '0x...' },\n    defaultQuote: { chainId: 4326, address: '0x...' },\n    supportedInputTokens: [\n      { chainId: 1, address: '0x...' },\n      // ...\n    ],\n    supportedOutputTokens: [\n      { chainId: 4326, address: '0x...' },\n      // ...\n    ],\n    unsupportedInputTokens: [\n      { chainId: 4326, address: '0x...' }, // hide a token from the input/base side\n    ],\n    unsupportedOutputTokens: [\n      { chainId: 4326, address: '0x...' }, // hide a token from the output/quote side\n    ],\n    supportedInputChains: [1, 10, 8453, 42161],\n    supportedOutputChains: [4326],\n    enabledChains: [1, 10, 56, 143, 4326, 8453, 42161],\n    lockBase: false,\n    lockQuote: false,\n    disableInverting: true,\n  },\n  appearance: {\n    widgetType: 'default',\n    tokenDisplay: 'default',\n    fillContainer: false,\n    hideBorder: true,\n    walletButtonEnabled: false,\n  },\n  settings: {\n    defaultSlippage: 0.01,\n  },\n};\n```\n\n### 2. Import styles\n\n```ts\nimport '@aori/mega-swap-widget/styles.css';\n```\n\nAdd this import once in your app's entry point (e.g. `_app.tsx`, `layout.tsx`, or `main.tsx`). Without it, the widget will render unstyled.\n\n### 3. Render\n\n```tsx\nimport { SwapWidget } from '@aori/mega-swap-widget';\nimport { ConnectButton, useConnectModal, useAccountModal } from '@rainbow-me/rainbowkit';\n\nexport default function App() {\n  const { openConnectModal } = useConnectModal();\n  const { openAccountModal } = useAccountModal();\n\n  return (\n    <div>\n      <ConnectButton />\n      <SwapWidget\n        config={config}\n        customWalletUI=\"provider\"\n        onRequestConnect={() => openConnectModal?.()}\n        onRequestAccount={() => openAccountModal?.()}\n      />\n    </div>\n  );\n}\n```\n\n## Wallet Connection\n\nThe widget expects your app to provide the wallet context (wagmi, RainbowKit, AppKit, etc.). A typical integration uses `customWalletUI=\"provider\"` with `onRequestConnect` and `onRequestAccount` to wire the widget's connect/account buttons into your existing wallet modals — this is the recommended approach for most integrators.\n\n### Provider (recommended)\n\nWrap the widget inside your existing wallet provider. Pass `onRequestConnect` and `onRequestAccount` so the widget's built-in buttons open your modals. The widget inherits the wagmi context automatically.\n\n```tsx\nimport { useConnectModal, useAccountModal } from '@rainbow-me/rainbowkit';\n\nfunction SwapPage() {\n  const { openConnectModal } = useConnectModal();\n  const { openAccountModal } = useAccountModal();\n\n  return (\n    <SwapWidget\n      config={config}\n      customWalletUI=\"provider\"\n      onRequestConnect={() => openConnectModal?.()}\n      onRequestAccount={() => openAccountModal?.()}\n    />\n  );\n}\n```\n\nThis works the same way with AppKit or any other wagmi-compatible wallet kit — just swap the modal hooks.\n\n\n\n## Chain & RPC Configuration\n\nYour wagmi config **must include all Aori-supported chains** or approvals, wrapping/unwrapping, and chain switching will fail silently.\n\nImport `wagmiChains` and `buildTransports` from the widget package — these provide every supported chain with built-in RPC fallback (multiple public RPCs per chain, tried in order on error or rate-limit).\n\n```ts\nimport { wagmiChains, buildTransports } from '@aori/mega-swap-widget';\nimport { getDefaultConfig } from '@rainbow-me/rainbowkit';\nimport { aoriConfig } from './aori.config';\n\nconst wagmiConfig = getDefaultConfig({\n  appName: 'My App',\n  projectId: 'YOUR_WALLETCONNECT_PROJECT_ID',\n  chains: wagmiChains,\n  transports: buildTransports(aoriConfig.rpcOverrides),\n  ssr: false,\n});\n```\n\nThere are two separate RPC paths in the widget:\n\n| Path | Source | Used for |\n| --- | --- | --- |\n| **Widget internal** | `rpcOverrides` in `AoriSwapWidgetConfig` | Balance fetching, quote pricing |\n| **Wagmi** | `buildTransports()` in your wagmi config | Signing, sending txs, chain switching |\n\n`rpcOverrides` in your `aori.config` only affects the widget's internal viem clients. Wagmi transports are configured separately via `buildTransports()` — any URLs passed there are **client-side JavaScript** and will be visible in the browser. Never pass private RPC URLs directly to `buildTransports`.\n\nTo keep private RPCs server-side for both paths, use the same relative proxy paths (e.g. `/api/rpc/1`) in your `rpcOverrides` and pass them to `buildTransports` as shown above. The browser hits your API route, which forwards to the real RPC with credentials from environment variables. See [Server-Side Proxying](#server-side-proxying) for how to set up the proxy routes.\n\n## Server-Side Proxying\n\nIn production you almost certainly want to keep your API key **and** private RPC URLs off the client. The widget supports this via two config fields: `vtApiBaseUrl` and `rpcOverrides`. Both accept relative paths that hit your own backend routes, which then forward requests upstream with the real credentials attached.\n\n### API Key Proxy (`vtApiBaseUrl`)\n\nInstead of passing `apiKey` in the client config, point `vtApiBaseUrl` at your own API route. The widget will send all transfer/quote requests there instead of directly to the Aori API.\n\n**Widget config:**\n\n```ts\nconst config: AoriSwapWidgetConfig = {\n  vtApiBaseUrl: '/api/vt',\n  // no apiKey needed — the server injects it\n  // ...\n};\n```\n\n**Next.js API route** (`pages/api/vt/[...path].ts`):\n\n```ts\nimport type { NextApiRequest, NextApiResponse } from 'next';\n\nconst VT_UPSTREAM = 'https://transfer.layerzero-api.com/v1';\n\nexport default async function handler(req: NextApiRequest, res: NextApiResponse) {\n  const { path } = req.query;\n  const segments = Array.isArray(path) ? path.join('/') : path ?? '';\n  const queryString = new URL(req.url!, `http://${req.headers.host}`).search;\n  const upstreamUrl = `${VT_UPSTREAM}/${segments}${queryString}`;\n\n  const apiKey = process.env.VT_API_KEY;\n  if (!apiKey) {\n    return res.status(500).json({ error: 'VT_API_KEY not configured' });\n  }\n\n  const headers: Record<string, string> = {\n    'Content-Type': 'application/json',\n    'x-api-key': apiKey,\n  };\n\n  const upstream = await fetch(upstreamUrl, {\n    method: req.method,\n    headers,\n    body: req.method !== 'GET' && req.method !== 'HEAD' ? JSON.stringify(req.body) : undefined,\n  });\n\n  const contentType = upstream.headers.get('content-type') ?? 'application/json';\n  res.setHeader('Content-Type', contentType);\n  res.status(upstream.status);\n\n  const body = await upstream.text();\n  res.send(body);\n}\n```\n\nThen set `VT_API_KEY` in your `.env` (or hosting provider's environment variables):\n\n```\nVT_API_KEY=your_aori_api_key\n```\n\n### Private RPC Proxy (`rpcOverrides`)\n\nThe same pattern works for RPC endpoints. Point each chain's override at a local route that forwards JSON-RPC requests to your private RPC, keeping the URL and any auth tokens server-side.\n\n**Widget config:**\n\n```ts\nconst config: AoriSwapWidgetConfig = {\n  vtApiBaseUrl: '/api/vt',\n  rpcOverrides: {\n    1: '/api/rpc/1',\n    10: '/api/rpc/10',\n    56: '/api/rpc/56',\n    8453: '/api/rpc/8453',\n    42161: '/api/rpc/42161',\n    143: '/api/rpc/143',\n    4326: '/api/rpc/4326',\n  },\n  // ...\n};\n```\n\n**Next.js API route** (`pages/api/rpc/[chainId].ts`):\n\n```ts\nimport type { NextApiRequest, NextApiResponse } from 'next';\n\nconst RPC_URLS: Record<string, string | undefined> = {\n  '1': process.env.ETHEREUM_RPC_URL,\n  '10': process.env.OPTIMISM_RPC_URL,\n  '56': process.env.BSC_RPC_URL,\n  '8453': process.env.BASE_RPC_URL,\n  '42161': process.env.ARBITRUM_RPC_URL,\n  '143': process.env.MONAD_RPC_URL,\n  '4326': process.env.MEGAETH_RPC_URL,\n};\n\nfunction jsonRpcError(res: NextApiResponse, id: unknown, code: number, message: string) {\n  return res.status(200).json({ jsonrpc: '2.0', id: id ?? null, error: { code, message } });\n}\n\nexport default async function handler(req: NextApiRequest, res: NextApiResponse) {\n  if (req.method !== 'POST') {\n    return res.status(405).json({ error: 'Method not allowed' });\n  }\n\n  const chainId = req.query.chainId as string;\n  const rpcUrl = RPC_URLS[chainId];\n\n  if (!rpcUrl) {\n    return jsonRpcError(res, null, -32603, `RPC not configured for chain ${chainId}`);\n  }\n\n  try {\n    const response = await fetch(rpcUrl, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify(req.body),\n    });\n\n    res.setHeader('Cache-Control', 'no-store');\n    return res.status(200).json(await response.json());\n  } catch (error) {\n    return jsonRpcError(res, null, -32603, error instanceof Error ? error.message : 'RPC request failed');\n  }\n}\n```\n\n**.env:**\n\n```\nETHEREUM_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY\nOPTIMISM_RPC_URL=https://opt-mainnet.g.alchemy.com/v2/YOUR_KEY\nBSC_RPC_URL=https://bsc-mainnet.g.alchemy.com/v2/YOUR_KEY\nBASE_RPC_URL=https://base-mainnet.g.alchemy.com/v2/YOUR_KEY\nARBITRUM_RPC_URL=https://arb-mainnet.g.alchemy.com/v2/YOUR_KEY\nMONAD_RPC_URL=https://your-monad-rpc.example.com\nMEGAETH_RPC_URL=https://your-megaeth-rpc.example.com\n```\n\n> **Not using Next.js?** The same approach works with any backend — Express, Fastify, Cloudflare Workers, etc. The proxy just needs to forward the request body upstream and return the response. The widget doesn't care what's behind the route as long as it speaks the same protocol (REST for VT, JSON-RPC for RPCs).\n\n## Props\n\n| Prop                 | Type                                     | Default        | Description                                      |\n| -------------------- | ---------------------------------------- | -------------- | ------------------------------------------------ |\n| `config`             | `AoriSwapWidgetConfig`                   | —              | Widget configuration (required)                  |\n| `customWalletUI`     | `'none' \\| 'provider'`                  | `'provider'`   | `'provider'` wires into your wallet modals via callbacks; `'none'` hides all wallet UI |\n| `onRequestConnect`   | `() => void`                             | —              | Open the host app's connect modal                |\n| `onRequestAccount`   | `() => void`                             | —              | Open the host app's account modal                |\n| `onSwapSubmitted`    | `(quoteId: string) => void`              | —              | Fires immediately after the user's signing/transaction steps complete and the order is submitted to the Aori backend. `quoteId` is the VT quote ID for tracking. |\n| `onSwapComplete`     | `(data: SwapCompleteData) => void`       | —              | Fires when polling confirms the swap is settled on-chain. Returns `{ quoteId, aoriOrderHash, explorerUrl, details }` where `details` is the full Aori `/data/details` response. |\n| `onBlockedWallet`    | `(data: BlockedWalletEvent) => void`     | —              | Fires after wallet screening completes. Returns `{ address, allowed, source? }` where `source` is `'chainalysis-oracle'` or `'screening-url'` (present when blocked). |\n| `onBaseTokenChange`  | `(token: Asset) => void`                 | —              | Callback when the base token changes             |\n| `onQuoteTokenChange` | `(token: Asset) => void`                 | —              | Callback when the quote token changes            |\n| `className`          | `string`                                 | —              | Additional CSS class on the root element         |\n\n### Swap Lifecycle Hooks Example\n\nUse `onSwapSubmitted` to know when the order hits the Aori backend, and `onSwapComplete` to get the full details once it settles on-chain:\n\n```tsx\n<SwapWidget\n  config={aoriConfig}\n  onSwapSubmitted={(quoteId) => {\n    // Fires immediately after the user signs and the order is submitted.\n    // quoteId is the VT quote ID — use it to track the order or just wait for onSwapComplete.\n  }}\n  onSwapComplete={({ aoriOrderHash, explorerUrl, details }) => {\n    // Fires when polling confirms the swap is settled on-chain.\n    // details is the full response from https://api.aori.io/data/details/${aoriOrderHash}\n\n    // Redirect to a confirmation page\n    router.push(`/confirmation?order=${aoriOrderHash}`);\n\n    // Or persist to your own tx history\n    const getEventTime = (type: string) =>\n      details.events.find(e => e.event === type)?.timestamp ?? null;\n\n    addToHistory({\n      orderHash: aoriOrderHash,\n      explorerUrl,\n      inputAmount: details.inputAmount,\n      inputChain: details.inputChain,\n      outputAmount: details.outputAmount,\n      outputChain: details.outputChain,\n      srcTx: details.srcTx,\n      dstTx: details.dstTx,\n      // individual event timestamps — use these to show status progression in your UI\n      createdAt:   getEventTime('created'),\n      receivedAt:  getEventTime('received'),\n      completedAt: getEventTime('completed'),\n      failedAt:    getEventTime('failed'),\n      canceledAt: getEventTime('cancelled'),\n    });\n  }}\n/>\n```\n\nThe `SwapCompleteData` type:\n\n```ts\ninterface SwapCompleteData {\n  quoteId: string;        // VT quote ID (same value as onSwapSubmitted)\n  aoriOrderHash: string;  // Aori order hash, parsed from explorerUrl\n  explorerUrl: string;    // https://aoriscan.io/order/0x...\n  details: AoriOrderDetails;\n}\n\ninterface AoriOrderDetails {\n  orderHash: string;\n  offerer: string;\n  recipient: string;\n  inputToken: string;\n  inputAmount: string;\n  inputChain: string;\n  inputTokenValueUsd: string;\n  outputToken: string;\n  outputAmount: string;\n  outputChain: string;\n  outputTokenValueUsd: string;\n  startTime: number;\n  endTime: number;\n  timestamp: number;\n  srcTx: string | null;\n  dstTx: string | null;\n  events: Array<{\n    event: string;   // 'created' | 'received' | 'completed' | 'failed' | 'cancelled'\n    timestamp: number;\n  }>;\n}\n```\n\n### What You Can Build With These Hooks\n\nThe data from `onSwapComplete` is generic — you decide what to do with it. Some examples:\n\n- **Tx history component** — render a live list of swaps with status, amounts, and links\n- **Confirmation page** — redirect to a dedicated page after settlement with order details\n- **Custom notification** — show a toast, modal, or banner with the swap result\n- **Analytics** — send swap events to your own backend or analytics pipeline\n- **Order detail page** — use `aoriOrderHash` to link to or render a full order breakdown\n- **Just the data** — store it in state, context, or your DB and use it however your app needs\n\nThe hooks don't dictate any UI. They hand you the data at the right moment — you wire it into whatever component or flow makes sense for your app.\n\n### Building a Live Tx History\n\nOne common pattern — use both hooks together to maintain a live list. `onSwapSubmitted` adds a pending entry immediately, `onSwapComplete` updates it in-place once settled:\n\n```tsx\nconst [history, setHistory] = useState([]);\n\nconst addOrUpdate = (quoteId, patch) =>\n  setHistory(prev => {\n    const exists = prev.find(e => e.quoteId === quoteId);\n    if (exists) return prev.map(e => e.quoteId === quoteId ? { ...e, ...patch } : e);\n    return [...prev, { quoteId, status: 'pending', orderHash: null, ...patch }];\n  });\n\n<SwapWidget\n  config={aoriConfig}\n  onSwapSubmitted={(quoteId) => {\n    addOrUpdate(quoteId, { status: 'pending' });\n  }}\n  onSwapComplete={({ quoteId, aoriOrderHash, explorerUrl, details }) => {\n    const getEventTime = (type) =>\n      details.events.find(e => e.event === type)?.timestamp ?? null;\n\n    addOrUpdate(quoteId, {\n      status: getEventTime('failed') ? 'failed' : 'completed',\n      orderHash: aoriOrderHash,\n      explorerUrl,\n      inputAmount: details.inputAmount,\n      inputChain: details.inputChain,\n      outputAmount: details.outputAmount,\n      outputChain: details.outputChain,\n      srcTx: details.srcTx,\n      dstTx: details.dstTx,\n      createdAt:   getEventTime('created'),\n      receivedAt:  getEventTime('received'),\n      completedAt: getEventTime('completed'),\n      failedAt:    getEventTime('failed'),\n    });\n  }}\n/>\n\n// Render history however you like\n{history.map(tx => <TxRow key={tx.quoteId} tx={tx} />)}\n```\n\nThis gives you a real-time list that:\n- Shows \"pending\" the instant the user submits\n- Updates to \"completed\" or \"failed\" once on-chain settlement confirms\n- Has all the data needed to render amounts, chains, tx links, and a status timeline\n\n### Fetching Order History Outside the Hook\n\nThe `onSwapComplete` hook only captures swaps from the current session. To load a wallet's full order history — on mount, for a tx history page, etc. — use the Aori API directly with the connected wallet address.\n\n**Query all orders for a wallet** ([`/data/query`](https://docs.aori.io/reference/query)):\n\n```ts\nconst res = await fetch(\n  `https://api.aori.io/data/query?offerer=[connected_wallet_address]&page=0&limit=100&sortBy=createdAt_desc`\n);\nconst { orders, pagination } = await res.json();\n// orders is an array of summarised order objects with srcTx, dstTx, amounts, chains, status\n```\n\n**Get full details for a specific order** ([`/data/details`](https://docs.aori.io/reference/details)):\n\n```ts\nconst res = await fetch(`https://api.aori.io/data/details/${orderHash}`);\nconst details = await res.json();\n// Full event history, tx hashes, block numbers, timestamps\n```\n\nThe recommended pattern for a tx history feature:\n\n- **On swap completion** — write to your own state/DB via `onSwapComplete`\n- **On page load** — fetch historical orders from `/data/query?offerer=${address}` to backfill swaps from past sessions\n- **On detail view** — fetch `/data/details/${orderHash}` for the full event timeline of a specific order\n\n## Configuration\n\nSee [`AoriSwapWidgetConfig`](./src/config/types.ts) for the full type. Only non-default values need to be specified.\n\n| Section | Type | Description |\n| --- | --- | --- |\n| `theme` | `{ mode, light?, dark? }` | Active color mode and optional light/dark theme overrides. Each theme controls colors, border radius, fonts, and shadows. |\n| `tokens` | `{ defaultBase?, defaultQuote?, lockBase?, lockQuote?, enabledChains?, disableInverting?, supportedInputTokens?, supportedOutputTokens?, unsupportedInputTokens?, unsupportedOutputTokens? }` | Default token pair, enabled chains, lock/invert settings, per-side token whitelists, and per-side token blocklists. All fields are optional — when omitted, all supported tokens and chains are available. `unsupportedInputTokens`/`unsupportedOutputTokens` hide specific tokens from the asset selection menu (applied after the whitelist; flips with the whitelist on invert). |\n| `appearance` | `{ widgetType?, tokenDisplay?, assetMenuVariant?, swapButtonVariant?, ... }` | Layout variant (`default`, `compact`, `horizontal`, `split`), token display style, asset menu variant, quote loader, and other UI options. |\n| `settings` | `{ defaultSlippage? }` | Default slippage tolerance. |\n| `integrator` | `{ id?, feeRecipient?, feeAmount? }` | Integrator ID, fee recipient address, and fee amount for revenue attribution. |\n| `vtApiBaseUrl` | `string` | Base URL for the Aori transfer API. Use a relative path (e.g. `'/api/vt'`) to proxy through your server and keep the API key off the client. |\n| `rpcOverrides` | `Record<number, string \\| string[]>` | Override RPCs for the widget's internal viem clients. Accepts direct URLs or relative paths to your own proxy routes. |\n| `walletScreening` | `{ enabled?, useChainalysisOracle?, screeningUrl?, blacklist? }` | Wallet screening / sanctions compliance. See [Wallet Screening](#wallet-screening). |\n\n### Wallet Screening\n\nThe widget includes built-in wallet screening to check connecting addresses against sanctions lists. Screening runs automatically when a wallet connects. If the address is flagged, the widget disables all inputs, stops quoting, and replaces the swap button with a blocked banner.\n\nThere are two layers:\n\n| Layer | What it does | Config | Default |\n| --- | --- | --- | --- |\n| **Layer 1** — Chainalysis Oracle | Calls the [Chainalysis Sanctions Oracle](https://go.chainalysis.com/chainalysis-oracle-docs.html) smart contract on Ethereum mainnet. Checks the address against the OFAC SDN list. Free, no API key, no backend required. | `useChainalysisOracle` | `true` |\n| **Layer 2** — Custom screening endpoint | Calls an integrator-provided server route with `GET ?address=0x...`, expects `{ allowed: boolean }`. Use this to add TRM Labs, Chainalysis Screening API, or your own compliance backend. | `screeningUrl` | `undefined` (off) |\n\nBoth layers run in sequence when configured. If either flags the address, the widget locks down.\n\n#### Config Reference\n\n| Field | Type | Default | Description |\n| --- | --- | --- | --- |\n| `enabled` | `boolean` | `true` | Master toggle for all screening. Set `false` to disable everything. |\n| `blacklist` | `string[] \\| (address: string) => boolean \\| Promise<boolean>` | `undefined` | Blacklist. Static array of addresses or async function to grab addresses from external/internal datasource. Checked before Layer 1/2 — if matched, skips all other checks. |\n| `useChainalysisOracle` | `boolean` | `true` | Layer 1. Calls the on-chain Chainalysis oracle. |\n| `screeningUrl` | `string` | `undefined` | Layer 2. URL to your server-side screening endpoint. |\n\n#### Blacklist\n\nThe `blacklist` field lets you block specific addresses without relying on Layer 1/2. It runs first — if the address is blacklisted, Layer 1 and Layer 2 are never called.\n\n**Static list** — hardcode addresses directly in the config:\n\n```ts\nwalletScreening: {\n  blacklist: [\n    '0x26da3963613301798251427fB5b93d6fC7cB75D8',\n    '0x607aE55107457f6645149cd66ED5D220fBEB2F96',\n  ],\n},\n```\n\n**Async function** — check against your own database or any external data source:\n\nThe function receives the wallet address and must return `true` (blocked) or `false` (allowed). How you determine that is entirely up to you — query a database, call an API, read a file, whatever. The widget only cares about the boolean you return.\n\n```ts\nwalletScreening: {\n  blacklist: async (address) => {\n    // Call your own backend route — the response shape is yours to define\n    const res = await fetch(`/api/blacklist?address=${address}`);\n    const data = await res.json();\n\n    // Map whatever field your API returns to a boolean:\n    //   data.blocked, data.flagged, data.is_sanctioned, data.status === 'denied', etc.\n    return Boolean(data.blocked);\n  },\n},\n```\n\nThe widget doesn't know or care what backs your route. Here are three real-world patterns for the server side — each returns a JSON response with whatever field name you choose, and the config function maps it to a boolean:\n\n**PostgreSQL**\n\n```ts\n// pages/api/blacklist.ts (or any backend route)\nimport { pool } from '@/lib/db';\n\nexport default async function handler(req, res) {\n  const { address } = req.query;\n  const { rows } = await pool.query(\n    'SELECT is_blocked FROM accounts WHERE LOWER(address) = LOWER($1)',\n    [address],\n  );\n  // Your table might use \"is_blocked\", \"flagged\", \"sanctioned\", etc.\n  return res.json({ blocked: rows[0]?.is_blocked ?? false });\n}\n```\n\n**REST / internal compliance API**\n\n```ts\nexport default async function handler(req, res) {\n  const { address } = req.query;\n  const upstream = await fetch(\n    `https://internal-api.example.com/compliance/check?address=${address}`,\n    { headers: { Authorization: `Bearer ${process.env.COMPLIANCE_KEY}` } },\n  );\n  const data = await upstream.json();\n  // The upstream API might return { flagged: true } or { status: \"denied\" }\n  // — just map it to your response shape\n  return res.json({ blocked: data.flagged });\n}\n```\n\n**JSON file (lightweight / testing)**\n\n```ts\nimport fs from 'fs';\nimport path from 'path';\n\nexport default function handler(req, res) {\n  const { address } = req.query;\n  const db = JSON.parse(\n    fs.readFileSync(path.join(process.cwd(), 'data', 'blacklist.json'), 'utf-8'),\n  );\n  const entry = db.find((e) => e.address.toLowerCase() === address.toLowerCase());\n  return res.json({ blocked: entry?.blocked ?? false });\n}\n```\n\nThe key point: your server route normalizes whatever your datasource returns into a consistent response, and your config function reads that response and returns a boolean. The field names, table schemas, and API shapes are all yours.\n\n**Combined** — mix static addresses with a dynamic source in one function:\n\n```ts\nconst hardcoded = ['0x26da...', '0x607a...'];\n\nwalletScreening: {\n  blacklist: async (address) => {\n    if (hardcoded.some((a) => a.toLowerCase() === address.toLowerCase())) return true;\n    const res = await fetch(`/api/blacklist?address=${address}`);\n    const data = await res.json();\n    return data.blocked;\n  },\n},\n```\n\n#### Screening Examples\n\n**Most integrators — Layer 1 runs automatically, nothing to set:**\n\n```ts\nexport const aoriConfig: AoriSwapWidgetConfig = {\n  vtApiBaseUrl: '/api/vt',\n  rpcOverrides: { 1: '/api/rpc/1', /* ... */ },\n  theme: { mode: 'dark' },\n  // walletScreening is not set — Layer 1 (Chainalysis oracle) is on by default.\n  // No config needed. The oracle check runs automatically when a wallet connects.\n};\n```\n\n**Explicitly enabling Layer 1 (same behavior as above, just explicit):**\n\n```ts\nexport const aoriConfig: AoriSwapWidgetConfig = {\n  vtApiBaseUrl: '/api/vt',\n  rpcOverrides: { 1: '/api/rpc/1', /* ... */ },\n  theme: { mode: 'dark' },\n  walletScreening: {\n    enabled: true,\n    useChainalysisOracle: true,\n  },\n};\n```\n\n**Layer 1 + Layer 2 (oracle + your own screening server):**\n\n```ts\nexport const aoriConfig: AoriSwapWidgetConfig = {\n  vtApiBaseUrl: '/api/vt',\n  rpcOverrides: { 1: '/api/rpc/1', /* ... */ },\n  theme: { mode: 'dark' },\n  walletScreening: {\n    // Layer 1 still runs (default true)\n    screeningUrl: '/api/screen-wallet', // Layer 2 — your server route\n  },\n};\n```\n\n**Layer 2 only (disable the oracle, use only your own screening):**\n\n```ts\nexport const aoriConfig: AoriSwapWidgetConfig = {\n  vtApiBaseUrl: '/api/vt',\n  rpcOverrides: { 1: '/api/rpc/1', /* ... */ },\n  theme: { mode: 'dark' },\n  walletScreening: {\n    useChainalysisOracle: false,       // Layer 1 off\n    screeningUrl: '/api/screen-wallet', // Layer 2 only\n  },\n};\n```\n\n**Disable all screening:**\n\n```ts\nexport const aoriConfig: AoriSwapWidgetConfig = {\n  vtApiBaseUrl: '/api/vt',\n  rpcOverrides: { 1: '/api/rpc/1', /* ... */ },\n  theme: { mode: 'dark' },\n  walletScreening: {\n    enabled: false, // No screening at all\n  },\n};\n```\n\n#### Layer 2 Server Route\n\nWhen `screeningUrl` is set, the widget sends `GET <screeningUrl>?address=0x...` when a wallet connects. Your server must return JSON:\n\n```json\n{ \"allowed\": true }\n```\n\nor:\n\n```json\n{ \"allowed\": false }\n```\n\nYour server route handles the actual compliance logic — TRM Labs, Chainalysis Screening API, a database lookup, a static blocklist, whatever. The widget doesn't know or care what's behind the URL. This follows the same pattern as `vtApiBaseUrl` and `rpcOverrides` — set a relative path in the config, build a server route that handles it.\n\n**Example Next.js API route using the free Chainalysis Sanctions Screening API** (`pages/api/screen-wallet.ts`):\n\n```ts\nimport type { NextApiRequest, NextApiResponse } from 'next';\n\nexport default async function handler(req: NextApiRequest, res: NextApiResponse) {\n  if (req.method !== 'GET') {\n    return res.status(405).json({ error: 'Method not allowed' });\n  }\n\n  const address = req.query.address as string | undefined;\n  if (!address) {\n    return res.status(400).json({ error: 'Missing address query param' });\n  }\n\n  const apiKey = process.env.CHAINALYSIS_API_KEY;\n  if (!apiKey) {\n    console.error('CHAINALYSIS_API_KEY not set');\n    return res.status(200).json({ allowed: true }); // fail open\n  }\n\n  try {\n    const response = await fetch(\n      `https://public.chainalysis.com/api/v1/address/${address}`,\n      { headers: { 'X-API-Key': apiKey, Accept: 'application/json' } },\n    );\n\n    if (!response.ok) {\n      console.error(`Chainalysis API error: ${response.status}`);\n      return res.status(200).json({ allowed: true }); // fail open\n    }\n\n    const data: { identifications: unknown[] } = await response.json();\n    return res.status(200).json({ allowed: data.identifications.length === 0 });\n  } catch (error) {\n    console.error('Chainalysis API request failed:', error);\n    return res.status(200).json({ allowed: true }); // fail open\n  }\n}\n```\n\nYou can replace the Chainalysis call with any provider/internal service you use fro wallet screening (TRM Labs, Elliptic, a static blocklist, etc.) — the widget only cares that the route returns `{ allowed: boolean }`.\n\n#### How it works\n\n1. User connects wallet (wagmi `useAccount`).\n2. **Blacklist** (if `blacklist` is set): Checked first. If the address matches the static list or the async function returns `true`, the wallet is blocked immediately — Layer 1 and Layer 2 are skipped.\n3. **Layer 1** (if `useChainalysisOracle` is not `false`): Widget calls `isSanctioned(address)` on the Chainalysis oracle contract. The oracle covers all EVM addresses regardless of which chain the user is swapping on.\n4. **Layer 2** (if `screeningUrl` is set): Widget calls `GET <screeningUrl>?address=0x...` and reads the `allowed` field from the JSON response.\n5. If any check flags the address: all inputs are disabled, quoting stops, and the swap button is replaced with a blocked banner. The widget is fully inert.\n6. If a clean wallet connects (or the user switches accounts to a clean wallet), the widget returns to normal.\n\n#### `onBlockedWallet` Callback\n\nThe `onBlockedWallet` prop fires once after screening completes for a connected address. Use it for compliance logging, custom UI, audit trails, or to force-disconnect blocked wallets.\n\n```tsx\nimport { SwapWidget, type BlockedWalletEvent } from '@aori/swap-widget';\n\n<SwapWidget\n  config={aoriConfig}\n  onBlockedWallet={({ address, allowed, source }) => {\n    if (!allowed) {\n      // source is 'blacklist', 'chainalysis-oracle' (Layer 1), or 'screening-url' (Layer 2)\n      console.warn(`Blocked wallet: ${address} (flagged by ${source})`);\n      analytics.track('wallet_blocked', { address, source });\n    }\n  }}\n/>\n```\n\nResults are cached in-memory for 1 hour per address, so tab-switching, remounting `<SwapWidget>`, or rendering it multiple times won't re-trigger network calls.\n\n#### `useWalletScreening` Hook\n\nRead screening state anywhere inside the widget tree:\n\n```tsx\nimport { useWalletScreening } from '@aori/swap-widget';\n\nfunction Banner() {\n  const { status, isBlocked, address, source } = useWalletScreening();\n  if (status === 'checking') return <p>Verifying wallet…</p>;\n  if (isBlocked) return <p>{address} blocked by {source}.</p>;\n  return null;\n}\n```\n\nReturns `{ status, isBlocked, address, source }` — `source` is `'blacklist' | 'chainalysis-oracle' | 'screening-url' | null`.\n\n#### Hoisting `<WalletScreeningProvider>`\n\nIf you need `useWalletScreening` outside the widget tree (e.g. in a header or Tab or sibling component), wrap your app with the provider directly. When hoisted, the `walletScreening` config and `onBlockedWallet` props on `<SwapWidget>` are ignored — the outer provider owns both.\n\n```tsx\nimport { WalletScreeningProvider, SwapWidget } from '@aori/swap-widget';\n\n<WalletScreeningProvider config={aoriConfig.walletScreening} onBlockedWallet={log}>\n  <Header />\n  <Tabs>\n    <Tab id=\"bridge\"><SwapWidget config={aoriConfig} /></Tab>\n    <Tab id=\"other\"><OtherView /></Tab>\n  </Tabs>\n</WalletScreeningProvider>\n```\n\n#### Headless `screenWallet`\n\nExported for server-side use (API routes, middleware). Doesn't share the in-widget cache — add your own if needed.\n\n```ts\nimport { screenWallet } from '@aori/swap-widget';\n\nconst { allowed, source } = await screenWallet(address, { useChainalysisOracle: true });\n```\n\n### Invertible Token Lists\n\nWhen `disableInverting` is `false` (or omitted), users can flip the swap direction using the invert button. When they do, `supportedInputTokens` and `supportedOutputTokens` swap sides — meaning token list A becomes the output whitelist and token list B becomes the input whitelist.\n\nThis enables **bidirectional bridge** configurations with a single config. For example, a USDM stablecoin bridge:\n\n```ts\ntokens: {\n  supportedInputTokens: [\n    { chainId: 1, address: '0x...' },     // USDC Ethereum\n    { chainId: 8453, address: '0x...' },   // USDC Base\n    { chainId: 42161, address: '0x...' },  // USDC Arbitrum\n    // ... other stablecoins\n  ],\n  supportedOutputTokens: [\n    { chainId: 4326, address: '0x...' },   // USDM MegaETH\n  ],\n  supportedInputChains: [1, 8453, 42161],\n  supportedOutputChains: [4326],\n  disableInverting: false,\n  lockBase: false,\n  lockQuote: false,\n}\n```\n\nIn the default direction, the user picks a stablecoin as input and receives USDM. After inverting, the lists flip — USDM becomes the only input option and the stablecoins become the output options.\n\n**Dynamic locking:** When a side's effective token list contains exactly one token, that side's token selection is automatically disabled and the dropdown icon is hidden. No need to set `lockBase` or `lockQuote` — locking is inferred from the list length and updates dynamically on invert.\n\nSet `disableInverting: true` to prevent flipping and keep the lists fixed to their configured sides.\n\n### Token Blocklists\n\nUse `unsupportedInputTokens` and `unsupportedOutputTokens` to hide specific tokens from the asset selection menu without enumerating every supported token. Useful when you want the default registry behavior (all supported tokens listed) but need to exclude one or two for legal/compliance/business reasons.\n\n```ts\ntokens: {\n  unsupportedInputTokens: [\n    { chainId: 4326, address: '0x...' }, // hide MEGA from the input/base side\n  ],\n  unsupportedOutputTokens: [\n    { chainId: 4326, address: '0x...' }, // hide MEGA from the output/quote side\n  ],\n}\n```\n\n**Order of operations:** registry → `supportedInputTokens` / `supportedOutputTokens` whitelist → `unsupportedInputTokens` / `unsupportedOutputTokens` blocklist → asset menu. The blocklist applies on top of the whitelist (or on top of the full registry when no whitelist is set), so a blocked token is hidden whether or not you also use the whitelist.\n\n**Invert behavior:** When `disableInverting: false` and the user flips the swap, `unsupportedInputTokens` ↔ `unsupportedOutputTokens` swap together — same as `supportedInputTokens` ↔ `supportedOutputTokens`. A token blocked from the input side stays blocked when that side becomes the output after inversion only if you list it in both `unsupportedInputTokens` and `unsupportedOutputTokens`.\n\n## Display Patterns\n\nThe widget is a standard React component — place it anywhere in your layout.\n\n### Inline (default)\n\n```tsx\n<SwapWidget config={config} />\n```\n\n### Modal / Dialog\n\n```tsx\nconst [open, setOpen] = useState(false);\n\nreturn (\n  <>\n    <button onClick={() => setOpen(true)}>Swap</button>\n    {open && (\n      <div\n        className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n        onClick={() => setOpen(false)}\n      >\n        <div onClick={(e) => e.stopPropagation()}>\n          <SwapWidget config={config} />\n        </div>\n      </div>\n    )}\n  </>\n);\n```\n\n### Drawer / Slide-in\n\n```tsx\nconst [open, setOpen] = useState(false);\n\nreturn (\n  <>\n    <button onClick={() => setOpen(true)}>Swap</button>\n    <div\n      className={`fixed top-0 right-0 z-50 h-full w-[420px] bg-background shadow-xl\n        transition-transform duration-300\n        ${open ? 'translate-x-0' : 'translate-x-full'}`}\n    >\n      <button onClick={() => setOpen(false)}>Close</button>\n      <SwapWidget config={config} />\n    </div>\n    {open && (\n      <div\n        className=\"fixed inset-0 z-40 bg-black/30\"\n        onClick={() => setOpen(false)}\n      />\n    )}\n  </>\n);\n```\n\nThese are minimal examples. In production, use your app's existing modal/drawer components (Radix, shadcn, Headless UI, etc.) for accessibility and consistent behavior.\n\n## Resources\n\n- [Full Documentation](https://docs.aori.io)\n- [Widget API Reference](https://docs.aori.io/swap-widget)\n- [GitHub](https://github.com/aori-io)\n\n## License\n\n[MIT](./LICENSE)\n","readmeFilename":"README.md"}