Compare commits

..

No commits in common. "main" and "Thunnini/improve-search-input" have entirely different histories.

52 changed files with 470 additions and 1621 deletions

276
.pnp.cjs generated
View File

@ -34,9 +34,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@keplr-wallet/proto-types", "npm:0.11.25"],\
["@keplr-wallet/types", "npm:0.11.25"],\
["@next/eslint-plugin-next", "npm:13.0.5"],\
["@sentry/nextjs", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:7.29.0"],\
["@sentry/nextjs", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:7.27.0"],\
["@svgr/webpack", "npm:6.5.1"],\
["@types/cors", "npm:2.8.13"],\
["@types/eslint", "npm:8.4.10"],\
["@types/node", "npm:18.11.9"],\
["@types/react", "npm:18.0.25"],\
@ -48,7 +47,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@typescript-eslint/parser", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:5.45.0"],\
["axios", "npm:0.27.2"],\
["buffer", "npm:6.0.3"],\
["cors", "npm:2.8.5"],\
["crypto", "npm:1.0.1"],\
["eslint", "npm:8.28.0"],\
["eslint-config-next", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:13.0.5"],\
@ -64,7 +62,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["next", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:13.0.5"],\
["prettier", "npm:2.8.0"],\
["react", "npm:18.2.0"],\
["react-countup", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:6.4.0"],\
["react-dom", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:18.2.0"],\
["react-is", "npm:18.2.0"],\
["react-modal", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:3.16.1"],\
@ -3295,34 +3292,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["@rollup/plugin-babel", [\
["npm:6.0.3", {\
"packageLocation": "./.yarn/cache/@rollup-plugin-babel-npm-6.0.3-1259d28dd2-412c1c3bb5.zip/node_modules/@rollup/plugin-babel/",\
"packageDependencies": [\
["@rollup/plugin-babel", "npm:6.0.3"]\
],\
"linkType": "SOFT"\
}],\
["virtual:9555373101f58738ea803ff9e79b0d8b52a66e88c21dac99d127fd080df7e60c5efb4c82f30a042556261bfb95e0c5292626cc000800b004d622753bbf9e02e5#npm:6.0.3", {\
"packageLocation": "./.yarn/__virtual__/@rollup-plugin-babel-virtual-082525a879/0/cache/@rollup-plugin-babel-npm-6.0.3-1259d28dd2-412c1c3bb5.zip/node_modules/@rollup/plugin-babel/",\
"packageDependencies": [\
["@rollup/plugin-babel", "virtual:9555373101f58738ea803ff9e79b0d8b52a66e88c21dac99d127fd080df7e60c5efb4c82f30a042556261bfb95e0c5292626cc000800b004d622753bbf9e02e5#npm:6.0.3"],\
["@babel/core", null],\
["@babel/helper-module-imports", "npm:7.18.6"],\
["@rollup/pluginutils", "virtual:082525a8792b89cbfd614faa6bcd1a9496584eedab2ae9d69d9f4375690e041544351047f44ef6dab868f44ac8fb8bbc2f5d9aa598e4e4521132888b2cfef8a9#npm:5.0.2"],\
["@types/babel__core", null],\
["@types/rollup", null],\
["rollup", null]\
],\
"packagePeers": [\
"@babel/core",\
"@types/babel__core",\
"@types/rollup",\
"rollup"\
],\
"linkType": "HARD"\
}]\
]],\
["@rollup/plugin-sucrase", [\
["npm:4.0.4", {\
"packageLocation": "./.yarn/cache/@rollup-plugin-sucrase-npm-4.0.4-11cf77c62a-ccb01d7eb3.zip/node_modules/@rollup/plugin-sucrase/",\
@ -3331,10 +3300,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "SOFT"\
}],\
["virtual:3a604504e8aeb5a25f89876693f61efac71df23354cdd05c30fd720452c63e2fd2009e86f2ccfed8beabdfc4c56217629b749f34209c39d40c7a340bdd27b375#npm:4.0.4", {\
"packageLocation": "./.yarn/__virtual__/@rollup-plugin-sucrase-virtual-c051ec3c0c/0/cache/@rollup-plugin-sucrase-npm-4.0.4-11cf77c62a-ccb01d7eb3.zip/node_modules/@rollup/plugin-sucrase/",\
["virtual:e9c3f4450835355c1308c5ec6b0a06961dea09cc1cbf5a2c356d2c2179b00f6666bd54ef0244e47c45a539436800a0d785ea018febc600fdf27dce27b78ada2e#npm:4.0.4", {\
"packageLocation": "./.yarn/__virtual__/@rollup-plugin-sucrase-virtual-a5fe52f236/0/cache/@rollup-plugin-sucrase-npm-4.0.4-11cf77c62a-ccb01d7eb3.zip/node_modules/@rollup/plugin-sucrase/",\
"packageDependencies": [\
["@rollup/plugin-sucrase", "virtual:3a604504e8aeb5a25f89876693f61efac71df23354cdd05c30fd720452c63e2fd2009e86f2ccfed8beabdfc4c56217629b749f34209c39d40c7a340bdd27b375#npm:4.0.4"],\
["@rollup/plugin-sucrase", "virtual:e9c3f4450835355c1308c5ec6b0a06961dea09cc1cbf5a2c356d2c2179b00f6666bd54ef0244e47c45a539436800a0d785ea018febc600fdf27dce27b78ada2e#npm:4.0.4"],\
["@rollup/pluginutils", "npm:4.2.1"],\
["@types/rollup", null],\
["rollup", "npm:2.78.0"],\
@ -3355,10 +3324,10 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
],\
"linkType": "SOFT"\
}],\
["virtual:3a604504e8aeb5a25f89876693f61efac71df23354cdd05c30fd720452c63e2fd2009e86f2ccfed8beabdfc4c56217629b749f34209c39d40c7a340bdd27b375#npm:3.0.0", {\
"packageLocation": "./.yarn/__virtual__/@rollup-plugin-virtual-virtual-c251801d05/0/cache/@rollup-plugin-virtual-npm-3.0.0-678cdc8578-2335cabee2.zip/node_modules/@rollup/plugin-virtual/",\
["virtual:e9c3f4450835355c1308c5ec6b0a06961dea09cc1cbf5a2c356d2c2179b00f6666bd54ef0244e47c45a539436800a0d785ea018febc600fdf27dce27b78ada2e#npm:3.0.0", {\
"packageLocation": "./.yarn/__virtual__/@rollup-plugin-virtual-virtual-683e923f4b/0/cache/@rollup-plugin-virtual-npm-3.0.0-678cdc8578-2335cabee2.zip/node_modules/@rollup/plugin-virtual/",\
"packageDependencies": [\
["@rollup/plugin-virtual", "virtual:3a604504e8aeb5a25f89876693f61efac71df23354cdd05c30fd720452c63e2fd2009e86f2ccfed8beabdfc4c56217629b749f34209c39d40c7a340bdd27b375#npm:3.0.0"],\
["@rollup/plugin-virtual", "virtual:e9c3f4450835355c1308c5ec6b0a06961dea09cc1cbf5a2c356d2c2179b00f6666bd54ef0244e47c45a539436800a0d785ea018febc600fdf27dce27b78ada2e#npm:3.0.0"],\
["@types/rollup", null],\
["rollup", "npm:2.78.0"]\
],\
@ -3378,29 +3347,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["picomatch", "npm:2.3.1"]\
],\
"linkType": "HARD"\
}],\
["npm:5.0.2", {\
"packageLocation": "./.yarn/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip/node_modules/@rollup/pluginutils/",\
"packageDependencies": [\
["@rollup/pluginutils", "npm:5.0.2"]\
],\
"linkType": "SOFT"\
}],\
["virtual:082525a8792b89cbfd614faa6bcd1a9496584eedab2ae9d69d9f4375690e041544351047f44ef6dab868f44ac8fb8bbc2f5d9aa598e4e4521132888b2cfef8a9#npm:5.0.2", {\
"packageLocation": "./.yarn/__virtual__/@rollup-pluginutils-virtual-7805b1dbc6/0/cache/@rollup-pluginutils-npm-5.0.2-6aa9d0ddd4-edea15e543.zip/node_modules/@rollup/pluginutils/",\
"packageDependencies": [\
["@rollup/pluginutils", "virtual:082525a8792b89cbfd614faa6bcd1a9496584eedab2ae9d69d9f4375690e041544351047f44ef6dab868f44ac8fb8bbc2f5d9aa598e4e4521132888b2cfef8a9#npm:5.0.2"],\
["@types/estree", "npm:1.0.0"],\
["@types/rollup", null],\
["estree-walker", "npm:2.0.2"],\
["picomatch", "npm:2.3.1"],\
["rollup", null]\
],\
"packagePeers": [\
"@types/rollup",\
"rollup"\
],\
"linkType": "HARD"\
}]\
]],\
["@rushstack/eslint-patch", [\
@ -3413,14 +3359,14 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@sentry/browser", [\
["npm:7.29.0", {\
"packageLocation": "./.yarn/cache/@sentry-browser-npm-7.29.0-93fbe26bf6-136b9d03a9.zip/node_modules/@sentry/browser/",\
["npm:7.27.0", {\
"packageLocation": "./.yarn/cache/@sentry-browser-npm-7.27.0-21601bd9f9-da5e50bd57.zip/node_modules/@sentry/browser/",\
"packageDependencies": [\
["@sentry/browser", "npm:7.29.0"],\
["@sentry/core", "npm:7.29.0"],\
["@sentry/replay", "virtual:93fbe26bf62b342ef21729e6d406a0883ac6b2fc17e249df9fefb2776d07612931a56ff4fa8e79c5a58b9f975dd0395c18b7b90d36df66d3c8e541f31098bb2c#npm:7.29.0"],\
["@sentry/types", "npm:7.29.0"],\
["@sentry/utils", "npm:7.29.0"],\
["@sentry/browser", "npm:7.27.0"],\
["@sentry/core", "npm:7.27.0"],\
["@sentry/replay", "virtual:21601bd9f91dad7312f712f5400c693cac4ca00856456090469b4d7eeb106b080cca0a5e44daaf28693eb0205ad0dbe83cb5230d76d15cf004c44ddb74f24ecf#npm:7.27.0"],\
["@sentry/types", "npm:7.27.0"],\
["@sentry/utils", "npm:7.27.0"],\
["tslib", "npm:1.14.1"]\
],\
"linkType": "HARD"\
@ -3443,24 +3389,24 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@sentry/core", [\
["npm:7.29.0", {\
"packageLocation": "./.yarn/cache/@sentry-core-npm-7.29.0-acfa631d1a-d9330ed352.zip/node_modules/@sentry/core/",\
["npm:7.27.0", {\
"packageLocation": "./.yarn/cache/@sentry-core-npm-7.27.0-72a2ae90aa-36138a8f43.zip/node_modules/@sentry/core/",\
"packageDependencies": [\
["@sentry/core", "npm:7.29.0"],\
["@sentry/types", "npm:7.29.0"],\
["@sentry/utils", "npm:7.29.0"],\
["@sentry/core", "npm:7.27.0"],\
["@sentry/types", "npm:7.27.0"],\
["@sentry/utils", "npm:7.27.0"],\
["tslib", "npm:1.14.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["@sentry/integrations", [\
["npm:7.29.0", {\
"packageLocation": "./.yarn/cache/@sentry-integrations-npm-7.29.0-1e78ee183b-fec2b9b790.zip/node_modules/@sentry/integrations/",\
["npm:7.27.0", {\
"packageLocation": "./.yarn/cache/@sentry-integrations-npm-7.27.0-b9d35a9a46-26cc2a10a4.zip/node_modules/@sentry/integrations/",\
"packageDependencies": [\
["@sentry/integrations", "npm:7.29.0"],\
["@sentry/types", "npm:7.29.0"],\
["@sentry/utils", "npm:7.29.0"],\
["@sentry/integrations", "npm:7.27.0"],\
["@sentry/types", "npm:7.27.0"],\
["@sentry/utils", "npm:7.27.0"],\
["localforage", "npm:1.10.0"],\
["tslib", "npm:1.14.1"]\
],\
@ -3468,26 +3414,26 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@sentry/nextjs", [\
["npm:7.29.0", {\
"packageLocation": "./.yarn/cache/@sentry-nextjs-npm-7.29.0-32ea7a99ed-53864f15c1.zip/node_modules/@sentry/nextjs/",\
["npm:7.27.0", {\
"packageLocation": "./.yarn/cache/@sentry-nextjs-npm-7.27.0-1e548cf282-fdc0ba40b4.zip/node_modules/@sentry/nextjs/",\
"packageDependencies": [\
["@sentry/nextjs", "npm:7.29.0"]\
["@sentry/nextjs", "npm:7.27.0"]\
],\
"linkType": "SOFT"\
}],\
["virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:7.29.0", {\
"packageLocation": "./.yarn/__virtual__/@sentry-nextjs-virtual-3a604504e8/0/cache/@sentry-nextjs-npm-7.29.0-32ea7a99ed-53864f15c1.zip/node_modules/@sentry/nextjs/",\
["virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:7.27.0", {\
"packageLocation": "./.yarn/__virtual__/@sentry-nextjs-virtual-e9c3f44508/0/cache/@sentry-nextjs-npm-7.27.0-1e548cf282-fdc0ba40b4.zip/node_modules/@sentry/nextjs/",\
"packageDependencies": [\
["@sentry/nextjs", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:7.29.0"],\
["@rollup/plugin-sucrase", "virtual:3a604504e8aeb5a25f89876693f61efac71df23354cdd05c30fd720452c63e2fd2009e86f2ccfed8beabdfc4c56217629b749f34209c39d40c7a340bdd27b375#npm:4.0.4"],\
["@rollup/plugin-virtual", "virtual:3a604504e8aeb5a25f89876693f61efac71df23354cdd05c30fd720452c63e2fd2009e86f2ccfed8beabdfc4c56217629b749f34209c39d40c7a340bdd27b375#npm:3.0.0"],\
["@sentry/core", "npm:7.29.0"],\
["@sentry/integrations", "npm:7.29.0"],\
["@sentry/node", "npm:7.29.0"],\
["@sentry/react", "virtual:3a604504e8aeb5a25f89876693f61efac71df23354cdd05c30fd720452c63e2fd2009e86f2ccfed8beabdfc4c56217629b749f34209c39d40c7a340bdd27b375#npm:7.29.0"],\
["@sentry/tracing", "npm:7.29.0"],\
["@sentry/types", "npm:7.29.0"],\
["@sentry/utils", "npm:7.29.0"],\
["@sentry/nextjs", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:7.27.0"],\
["@rollup/plugin-sucrase", "virtual:e9c3f4450835355c1308c5ec6b0a06961dea09cc1cbf5a2c356d2c2179b00f6666bd54ef0244e47c45a539436800a0d785ea018febc600fdf27dce27b78ada2e#npm:4.0.4"],\
["@rollup/plugin-virtual", "virtual:e9c3f4450835355c1308c5ec6b0a06961dea09cc1cbf5a2c356d2c2179b00f6666bd54ef0244e47c45a539436800a0d785ea018febc600fdf27dce27b78ada2e#npm:3.0.0"],\
["@sentry/core", "npm:7.27.0"],\
["@sentry/integrations", "npm:7.27.0"],\
["@sentry/node", "npm:7.27.0"],\
["@sentry/react", "virtual:e9c3f4450835355c1308c5ec6b0a06961dea09cc1cbf5a2c356d2c2179b00f6666bd54ef0244e47c45a539436800a0d785ea018febc600fdf27dce27b78ada2e#npm:7.27.0"],\
["@sentry/tracing", "npm:7.27.0"],\
["@sentry/types", "npm:7.27.0"],\
["@sentry/utils", "npm:7.27.0"],\
["@sentry/webpack-plugin", "npm:1.20.0"],\
["@types/next", null],\
["@types/react", "npm:18.0.25"],\
@ -3511,13 +3457,13 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@sentry/node", [\
["npm:7.29.0", {\
"packageLocation": "./.yarn/cache/@sentry-node-npm-7.29.0-4b46c521c4-1669d47dfa.zip/node_modules/@sentry/node/",\
["npm:7.27.0", {\
"packageLocation": "./.yarn/cache/@sentry-node-npm-7.27.0-f1028265b5-a42cb398ed.zip/node_modules/@sentry/node/",\
"packageDependencies": [\
["@sentry/node", "npm:7.29.0"],\
["@sentry/core", "npm:7.29.0"],\
["@sentry/types", "npm:7.29.0"],\
["@sentry/utils", "npm:7.29.0"],\
["@sentry/node", "npm:7.27.0"],\
["@sentry/core", "npm:7.27.0"],\
["@sentry/types", "npm:7.27.0"],\
["@sentry/utils", "npm:7.27.0"],\
["cookie", "npm:0.4.2"],\
["https-proxy-agent", "npm:5.0.1"],\
["lru_map", "npm:0.3.3"],\
@ -3527,20 +3473,20 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@sentry/react", [\
["npm:7.29.0", {\
"packageLocation": "./.yarn/cache/@sentry-react-npm-7.29.0-8919016525-022bf398f2.zip/node_modules/@sentry/react/",\
["npm:7.27.0", {\
"packageLocation": "./.yarn/cache/@sentry-react-npm-7.27.0-17a03112ea-164cefe9ef.zip/node_modules/@sentry/react/",\
"packageDependencies": [\
["@sentry/react", "npm:7.29.0"]\
["@sentry/react", "npm:7.27.0"]\
],\
"linkType": "SOFT"\
}],\
["virtual:3a604504e8aeb5a25f89876693f61efac71df23354cdd05c30fd720452c63e2fd2009e86f2ccfed8beabdfc4c56217629b749f34209c39d40c7a340bdd27b375#npm:7.29.0", {\
"packageLocation": "./.yarn/__virtual__/@sentry-react-virtual-9acab97880/0/cache/@sentry-react-npm-7.29.0-8919016525-022bf398f2.zip/node_modules/@sentry/react/",\
["virtual:e9c3f4450835355c1308c5ec6b0a06961dea09cc1cbf5a2c356d2c2179b00f6666bd54ef0244e47c45a539436800a0d785ea018febc600fdf27dce27b78ada2e#npm:7.27.0", {\
"packageLocation": "./.yarn/__virtual__/@sentry-react-virtual-b11fda8097/0/cache/@sentry-react-npm-7.27.0-17a03112ea-164cefe9ef.zip/node_modules/@sentry/react/",\
"packageDependencies": [\
["@sentry/react", "virtual:3a604504e8aeb5a25f89876693f61efac71df23354cdd05c30fd720452c63e2fd2009e86f2ccfed8beabdfc4c56217629b749f34209c39d40c7a340bdd27b375#npm:7.29.0"],\
["@sentry/browser", "npm:7.29.0"],\
["@sentry/types", "npm:7.29.0"],\
["@sentry/utils", "npm:7.29.0"],\
["@sentry/react", "virtual:e9c3f4450835355c1308c5ec6b0a06961dea09cc1cbf5a2c356d2c2179b00f6666bd54ef0244e47c45a539436800a0d785ea018febc600fdf27dce27b78ada2e#npm:7.27.0"],\
["@sentry/browser", "npm:7.27.0"],\
["@sentry/types", "npm:7.27.0"],\
["@sentry/utils", "npm:7.27.0"],\
["@types/react", "npm:18.0.25"],\
["hoist-non-react-statics", "npm:3.3.2"],\
["react", "npm:18.2.0"],\
@ -3554,21 +3500,21 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@sentry/replay", [\
["npm:7.29.0", {\
"packageLocation": "./.yarn/cache/@sentry-replay-npm-7.29.0-e553e78caf-539e18c128.zip/node_modules/@sentry/replay/",\
["npm:7.27.0", {\
"packageLocation": "./.yarn/cache/@sentry-replay-npm-7.27.0-18656992dc-440ac09c9a.zip/node_modules/@sentry/replay/",\
"packageDependencies": [\
["@sentry/replay", "npm:7.29.0"]\
["@sentry/replay", "npm:7.27.0"]\
],\
"linkType": "SOFT"\
}],\
["virtual:93fbe26bf62b342ef21729e6d406a0883ac6b2fc17e249df9fefb2776d07612931a56ff4fa8e79c5a58b9f975dd0395c18b7b90d36df66d3c8e541f31098bb2c#npm:7.29.0", {\
"packageLocation": "./.yarn/__virtual__/@sentry-replay-virtual-b637ba30d9/0/cache/@sentry-replay-npm-7.29.0-e553e78caf-539e18c128.zip/node_modules/@sentry/replay/",\
["virtual:21601bd9f91dad7312f712f5400c693cac4ca00856456090469b4d7eeb106b080cca0a5e44daaf28693eb0205ad0dbe83cb5230d76d15cf004c44ddb74f24ecf#npm:7.27.0", {\
"packageLocation": "./.yarn/__virtual__/@sentry-replay-virtual-8f5e4cea4f/0/cache/@sentry-replay-npm-7.27.0-18656992dc-440ac09c9a.zip/node_modules/@sentry/replay/",\
"packageDependencies": [\
["@sentry/replay", "virtual:93fbe26bf62b342ef21729e6d406a0883ac6b2fc17e249df9fefb2776d07612931a56ff4fa8e79c5a58b9f975dd0395c18b7b90d36df66d3c8e541f31098bb2c#npm:7.29.0"],\
["@sentry/browser", "npm:7.29.0"],\
["@sentry/core", "npm:7.29.0"],\
["@sentry/types", "npm:7.29.0"],\
["@sentry/utils", "npm:7.29.0"],\
["@sentry/replay", "virtual:21601bd9f91dad7312f712f5400c693cac4ca00856456090469b4d7eeb106b080cca0a5e44daaf28693eb0205ad0dbe83cb5230d76d15cf004c44ddb74f24ecf#npm:7.27.0"],\
["@sentry/browser", "npm:7.27.0"],\
["@sentry/core", "npm:7.27.0"],\
["@sentry/types", "npm:7.27.0"],\
["@sentry/utils", "npm:7.27.0"],\
["@types/sentry__browser", null]\
],\
"packagePeers": [\
@ -3579,33 +3525,33 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
}]\
]],\
["@sentry/tracing", [\
["npm:7.29.0", {\
"packageLocation": "./.yarn/cache/@sentry-tracing-npm-7.29.0-16e145a1cc-7ad9040664.zip/node_modules/@sentry/tracing/",\
["npm:7.27.0", {\
"packageLocation": "./.yarn/cache/@sentry-tracing-npm-7.27.0-7d217c54fa-203a3a6b46.zip/node_modules/@sentry/tracing/",\
"packageDependencies": [\
["@sentry/tracing", "npm:7.29.0"],\
["@sentry/core", "npm:7.29.0"],\
["@sentry/types", "npm:7.29.0"],\
["@sentry/utils", "npm:7.29.0"],\
["@sentry/tracing", "npm:7.27.0"],\
["@sentry/core", "npm:7.27.0"],\
["@sentry/types", "npm:7.27.0"],\
["@sentry/utils", "npm:7.27.0"],\
["tslib", "npm:1.14.1"]\
],\
"linkType": "HARD"\
}]\
]],\
["@sentry/types", [\
["npm:7.29.0", {\
"packageLocation": "./.yarn/cache/@sentry-types-npm-7.29.0-d6d116c884-53815b6666.zip/node_modules/@sentry/types/",\
["npm:7.27.0", {\
"packageLocation": "./.yarn/cache/@sentry-types-npm-7.27.0-67702fc3e1-a22056aa58.zip/node_modules/@sentry/types/",\
"packageDependencies": [\
["@sentry/types", "npm:7.29.0"]\
["@sentry/types", "npm:7.27.0"]\
],\
"linkType": "HARD"\
}]\
]],\
["@sentry/utils", [\
["npm:7.29.0", {\
"packageLocation": "./.yarn/cache/@sentry-utils-npm-7.29.0-5dbf6566da-9914a21296.zip/node_modules/@sentry/utils/",\
["npm:7.27.0", {\
"packageLocation": "./.yarn/cache/@sentry-utils-npm-7.27.0-1935a93244-d01f2d1999.zip/node_modules/@sentry/utils/",\
"packageDependencies": [\
["@sentry/utils", "npm:7.29.0"],\
["@sentry/types", "npm:7.29.0"],\
["@sentry/utils", "npm:7.27.0"],\
["@sentry/types", "npm:7.27.0"],\
["tslib", "npm:1.14.1"]\
],\
"linkType": "HARD"\
@ -4011,16 +3957,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["@types/cors", [\
["npm:2.8.13", {\
"packageLocation": "./.yarn/cache/@types-cors-npm-2.8.13-4b8ac1068f-7ef197ea19.zip/node_modules/@types/cors/",\
"packageDependencies": [\
["@types/cors", "npm:2.8.13"],\
["@types/node", "npm:18.11.9"]\
],\
"linkType": "HARD"\
}]\
]],\
["@types/eslint", [\
["npm:8.4.10", {\
"packageLocation": "./.yarn/cache/@types-eslint-npm-8.4.10-9df5f4bc78-21e009ed9e.zip/node_modules/@types/eslint/",\
@ -5530,17 +5466,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["cors", [\
["npm:2.8.5", {\
"packageLocation": "./.yarn/cache/cors-npm-2.8.5-c9935a2d12-ced838404c.zip/node_modules/cors/",\
"packageDependencies": [\
["cors", "npm:2.8.5"],\
["object-assign", "npm:4.1.1"],\
["vary", "npm:1.1.2"]\
],\
"linkType": "HARD"\
}]\
]],\
["cosmiconfig", [\
["npm:7.1.0", {\
"packageLocation": "./.yarn/cache/cosmiconfig-npm-7.1.0-13a5090bcd-c53bf7befc.zip/node_modules/cosmiconfig/",\
@ -5555,15 +5480,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["countup.js", [\
["npm:2.3.2", {\
"packageLocation": "./.yarn/cache/countup.js-npm-2.3.2-fce559ea32-77bb509cd1.zip/node_modules/countup.js/",\
"packageDependencies": [\
["countup.js", "npm:2.3.2"]\
],\
"linkType": "HARD"\
}]\
]],\
["create-hash", [\
["npm:1.2.0", {\
"packageLocation": "./.yarn/cache/create-hash-npm-1.2.0-afd048e1ce-02a6ae3bb9.zip/node_modules/create-hash/",\
@ -7373,9 +7289,8 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@keplr-wallet/proto-types", "npm:0.11.25"],\
["@keplr-wallet/types", "npm:0.11.25"],\
["@next/eslint-plugin-next", "npm:13.0.5"],\
["@sentry/nextjs", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:7.29.0"],\
["@sentry/nextjs", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:7.27.0"],\
["@svgr/webpack", "npm:6.5.1"],\
["@types/cors", "npm:2.8.13"],\
["@types/eslint", "npm:8.4.10"],\
["@types/node", "npm:18.11.9"],\
["@types/react", "npm:18.0.25"],\
@ -7387,7 +7302,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["@typescript-eslint/parser", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:5.45.0"],\
["axios", "npm:0.27.2"],\
["buffer", "npm:6.0.3"],\
["cors", "npm:2.8.5"],\
["crypto", "npm:1.0.1"],\
["eslint", "npm:8.28.0"],\
["eslint-config-next", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:13.0.5"],\
@ -7403,7 +7317,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
["next", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:13.0.5"],\
["prettier", "npm:2.8.0"],\
["react", "npm:18.2.0"],\
["react-countup", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:6.4.0"],\
["react-dom", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:18.2.0"],\
["react-is", "npm:18.2.0"],\
["react-modal", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:3.16.1"],\
@ -9242,30 +9155,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["react-countup", [\
["npm:6.4.0", {\
"packageLocation": "./.yarn/cache/react-countup-npm-6.4.0-d1c6fe7973-259277fa70.zip/node_modules/react-countup/",\
"packageDependencies": [\
["react-countup", "npm:6.4.0"]\
],\
"linkType": "SOFT"\
}],\
["virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:6.4.0", {\
"packageLocation": "./.yarn/__virtual__/react-countup-virtual-9555373101/0/cache/react-countup-npm-6.4.0-d1c6fe7973-259277fa70.zip/node_modules/react-countup/",\
"packageDependencies": [\
["react-countup", "virtual:4b77e00d446246df1ed27001550885fbf1b51be18c660c1b5c357d3d763078ecef2a676194291a120f149b87573081e5af0621dc83cf1f83383639f39ac133c7#npm:6.4.0"],\
["@rollup/plugin-babel", "virtual:9555373101f58738ea803ff9e79b0d8b52a66e88c21dac99d127fd080df7e60c5efb4c82f30a042556261bfb95e0c5292626cc000800b004d622753bbf9e02e5#npm:6.0.3"],\
["@types/react", "npm:18.0.25"],\
["countup.js", "npm:2.3.2"],\
["react", "npm:18.2.0"]\
],\
"packagePeers": [\
"@types/react",\
"react"\
],\
"linkType": "HARD"\
}]\
]],\
["react-dom", [\
["npm:18.2.0", {\
"packageLocation": "./.yarn/cache/react-dom-npm-18.2.0-dd675bca1c-7d323310be.zip/node_modules/react-dom/",\
@ -10661,15 +10550,6 @@ function $$SETUP_STATE(hydrateRuntimeState, basePath) {
"linkType": "HARD"\
}]\
]],\
["vary", [\
["npm:1.1.2", {\
"packageLocation": "./.yarn/cache/vary-npm-1.1.2-b49f70ae63-ae0123222c.zip/node_modules/vary/",\
"packageDependencies": [\
["vary", "npm:1.1.2"]\
],\
"linkType": "HARD"\
}]\
]],\
["warning", [\
["npm:4.0.3", {\
"packageLocation": "./.yarn/cache/warning-npm-4.0.3-291e921d6d-4f2cb6a957.zip/node_modules/warning/",\

View File

@ -1,218 +0,0 @@
import { FunctionComponent } from "react";
import ReactModal from "react-modal";
import Image from "next/image";
import styled from "styled-components";
import { WalletType } from "../../constants/wallet";
import { loginWithTwitter } from "../../queries";
import color from "../../styles/color";
interface Props {
isModalOpen: boolean;
onCloseModal: () => void;
currentReferal?: string;
walletKeyName: string;
selectedWalletItem?: WalletType;
}
export const BeforeYouStartModal: FunctionComponent<Props> = (props) => {
const {
isModalOpen,
onCloseModal,
currentReferal,
walletKeyName,
selectedWalletItem,
} = props;
const handleClickButton = async () => {
await loginWithTwitter();
};
return (
<ReactModal
isOpen={isModalOpen}
onRequestClose={onCloseModal}
ariaHideApp={false}
style={{
overlay: { background: "#121212cc" },
content: {
top: "50%",
left: "50%",
right: "auto",
bottom: "auto",
padding: 0,
marginRight: "-50%",
transform: "translate(-50%, -50%)",
background: color.grey["800"],
border: 0,
},
}}
>
<ModalContainer>
<ModalTitle>Before you start</ModalTitle>
{currentReferal && (
<ModalDescription>
{"You're invited by"}
<Image
style={{ marginLeft: "4px" }}
src="/images/icons/twitter-small.png"
alt="twitter icon"
width={18}
height={18}
/>
<ModalDescriptionBold>{currentReferal}</ModalDescriptionBold>
</ModalDescription>
)}
<SubTextsContainer>
<SubTextList>
<SubTextListItem>
ICNS requires you to verify ownership of your Twitter account.
</SubTextListItem>
<br />
<SubTextListItem>
ICNS name stays the same even if your Twitter handle changes in
the future.
</SubTextListItem>
<br />
<SubTextListItem>
ICNS names could permanently link your Twitter identity to your
crypto wallet, recorded on the blockchain.
</SubTextListItem>
</SubTextList>
</SubTextsContainer>
<WalletAccountContainer>
<WalletAccountLabel>{"Claim ICNS name for"}</WalletAccountLabel>
<WalletAccountValue>
{selectedWalletItem && (
<selectedWalletItem.IconComponent width={16} height={16} />
)}
<WalletAccountName>{walletKeyName}</WalletAccountName>
</WalletAccountValue>
</WalletAccountContainer>
<ClaimWithTwitterButton onClick={handleClickButton}>
<Image
src="/images/icons/twitter-small.png"
alt="twitter icon"
width={28}
height={28}
/>
CLAIM WITH TWITTER
</ClaimWithTwitterButton>
</ModalContainer>
</ReactModal>
);
};
const ModalContainer = styled.div`
display: flex;
flex-direction: column;
gap: 1.75rem;
padding: 2.25rem;
max-width: 28.5rem;
`;
const ModalTitle = styled.div`
font-family: "Inter", serif;
font-style: normal;
font-weight: 600;
font-size: 1.5rem;
line-height: 1.8rem;
color: ${color.white};
`;
const ModalDescription = styled.div`
display: flex;
align-items: center;
gap: 0.25rem;
font-family: "Inter", serif;
font-style: normal;
font-weight: 500;
font-size: 0.925rem;
line-height: 1.1rem;
color: ${color.grey["500"]};
`;
const ModalDescriptionBold = styled.span`
color: ${color.grey["100"]};
`;
const SubTextsContainer = styled.div`
padding: 1rem 1.75rem;
background-color: ${color.grey["700"]};
`;
const SubTextList = styled.ul`
margin: 0 0 1rem;
padding: 0 0.75rem;
`;
const SubTextListItem = styled.li`
font-weight: 400;
font-size: 0.825rem;
line-height: 1.5rem;
color: ${color.grey["300"]};
`;
const WalletAccountContainer = styled.div`
display: flex;
justify-content: center;
align-items: center;
gap: 0.5rem;
`;
const WalletAccountLabel = styled.div`
font-weight: 500;
font-size: 0.925rem;
line-height: 1.125rem;
color: ${color.grey["200"]};
`;
const WalletAccountValue = styled.div`
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.725rem;
background: ${color.grey["700"]};
font-weight: 600;
font-size: 0.925rem;
line-height: 1.125rem;
color: ${color.grey["100"]};
`;
const WalletAccountName = styled.div`
max-width: 11rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
`;
const ClaimWithTwitterButton = styled.button`
display: flex;
align-items: center;
justify-content: center;
gap: 0.625rem;
padding: 1.875rem;
background-color: ${color.grey["700"]};
border: none;
font-weight: 600;
font-size: 1.25rem;
line-height: 102.5%;
letter-spacing: 0.07em;
text-transform: uppercase;
color: #03a9f4;
&:hover {
cursor: pointer;
opacity: 0.5;
}
`;

View File

@ -2,26 +2,19 @@ import { FunctionComponent, useState } from "react";
import ReactModal from "react-modal";
import styled from "styled-components";
import color from "../../styles/color";
import { WalletList, WalletType } from "../../constants/wallet";
import { WalletList } from "../../constants/wallet";
import { WalletItem } from "./wallet-item";
import { ErrorMessage } from "../../types";
import { ErrorModal } from "../error-modal";
import { BeforeYouStartModal } from "../before-you-start-modal";
interface Props {
isModalOpen: boolean;
onCloseModal: () => void;
currentReferal?: string;
}
export const ConnectWalletModal: FunctionComponent<Props> = (props) => {
const { isModalOpen, onCloseModal, currentReferal } = props;
const { isModalOpen, onCloseModal } = props;
const [isErrorModalOpen, setErrorModalOpen] = useState(false);
const [isBeforeYouStartModalOpen, setBeforeYouStartModalOpen] =
useState(false);
const [selectedWalletItem, setSelectedWalletItem] = useState<WalletType>();
const [walletKeyName, setWalletKeyName] = useState("");
const [errorMessage, setErrorMessage] = useState<ErrorMessage>();
return (
@ -47,8 +40,8 @@ export const ConnectWalletModal: FunctionComponent<Props> = (props) => {
<ModalContainer>
<ModalTitle>Connect Wallet</ModalTitle>
<ModalDescription>
Make sure you have selected the correct account to link to your ICNS
name.
Make sure you have the correst account to cliam your ICNS name is
slelected on your wallet
</ModalDescription>
{WalletList.map((walletItem) => {
@ -58,21 +51,11 @@ export const ConnectWalletModal: FunctionComponent<Props> = (props) => {
key={walletItem.name}
setErrorModalOpen={setErrorModalOpen}
setErrorMessage={setErrorMessage}
setBeforeYouStartModalOpen={setBeforeYouStartModalOpen}
setWalletKeyName={setWalletKeyName}
setSelectedWalletItem={setSelectedWalletItem}
/>
);
})}
</ModalContainer>
<BeforeYouStartModal
isModalOpen={isBeforeYouStartModalOpen}
onCloseModal={() => setBeforeYouStartModalOpen(false)}
currentReferal={currentReferal}
walletKeyName={walletKeyName}
selectedWalletItem={selectedWalletItem}
/>
<ErrorModal
isModalOpen={isErrorModalOpen}
onCloseModal={() => setErrorModalOpen(false)}
@ -106,7 +89,7 @@ const ModalDescription = styled.div`
font-family: "Inter", serif;
font-style: normal;
font-weight: 500;
font-size: 0.875rem;
font-size: 0.8rem;
line-height: 1.1rem;
color: ${color.grey["400"]};

View File

@ -16,6 +16,7 @@ import {
WalletType,
} from "../../constants/wallet";
import { getKeplrFromWindow, KeplrWallet } from "../../wallets";
import { loginWithTwitter } from "../../queries";
import {
KEPLR_NO_ACCOUNT_ERROR,
KEPLR_NO_ACCOUNT_MESSAGE,
@ -24,26 +25,15 @@ import {
} from "../../constants/error-message";
import semver from "semver/preload";
import { ErrorMessage } from "../../types";
import { MAIN_CHAIN_ID } from "../../constants/icns";
interface Props {
wallet: WalletType;
setErrorMessage: Dispatch<SetStateAction<ErrorMessage | undefined>>;
setErrorModalOpen: Dispatch<SetStateAction<boolean>>;
setBeforeYouStartModalOpen: Dispatch<SetStateAction<boolean>>;
setWalletKeyName: Dispatch<SetStateAction<string>>;
setSelectedWalletItem: Dispatch<SetStateAction<WalletType | undefined>>;
}
export const WalletItem: FunctionComponent<Props> = (props: Props) => {
const {
wallet,
setErrorModalOpen,
setErrorMessage,
setBeforeYouStartModalOpen,
setWalletKeyName,
setSelectedWalletItem,
} = props;
const { wallet, setErrorModalOpen, setErrorMessage } = props;
const [isInstalled, setIsInstalled] = useState<boolean>();
useEffect(() => {
@ -51,14 +41,13 @@ export const WalletItem: FunctionComponent<Props> = (props: Props) => {
}, []);
const onClickWalletItem = async () => {
setSelectedWalletItem(wallet);
try {
if (wallet.name === "Keplr") {
await connectKeplr();
localStorage.setItem(SELECTED_WALLET_KEY, wallet.name);
}
setBeforeYouStartModalOpen(true);
await loginWithTwitter();
} catch (error) {
if (error instanceof Error) {
console.log(error.message);
@ -89,22 +78,11 @@ export const WalletItem: FunctionComponent<Props> = (props: Props) => {
if (keplr) {
const wallet = new KeplrWallet(keplr);
const chainIds = (await wallet.getChainInfosWithoutEndpoints()).map(
(c) => c.chainId,
);
await wallet.init(chainIds);
const walletKey = await wallet.getKey(MAIN_CHAIN_ID);
setWalletKeyName(walletKey.name);
// FIXME: Probably able to make memory leak.
// setWalletKeyName should be persistent, so it is fine for now.
// We should remove event listener well.
window.addEventListener("keplr_keystorechange", async () => {
const walletKey = await wallet.getKey(MAIN_CHAIN_ID);
setWalletKeyName(walletKey.name);
});
}
};

View File

@ -23,8 +23,7 @@ class ErrorBoundary extends Component<Props, State> {
public componentDidCatch(error: Error, errorInfo: ErrorInfo) {
console.error("Uncaught error:", error, errorInfo);
const errorMessage = error.message || error;
captureException(errorMessage);
captureException(error);
}
public render() {

View File

@ -69,7 +69,7 @@ export const FinalCheckModal: FunctionComponent<Props> = (props) => {
/>
}
title="Your Twitter Handle"
content={`@${twitterUserName}`}
content={`${twitterUserName}`}
/>
<div
style={{
@ -108,8 +108,8 @@ export const FinalCheckModal: FunctionComponent<Props> = (props) => {
}}
/>
}
title="Keplr Account"
content={walletInfo?.name || "Keplr Account"}
title="Keplr account"
content={walletInfo?.name || "Keplr account"}
contentTooltip={{
id: "address-tooltip",
content: walletInfo?.bech32Address || "",
@ -128,9 +128,6 @@ export const FinalCheckModal: FunctionComponent<Props> = (props) => {
<SubTextListItem>
Please make sure youve selected the right account on your wallet.
</SubTextListItem>
<SubTextListItem>
This is an irreversible onchain trasaction.
</SubTextListItem>
</SubTextList>
<SubText>
{MINIMUM_OSMO_FEE} will be spent as a spam-prevention fee.

View File

@ -75,7 +75,7 @@ const StyledPrimaryButton = styled.button`
}
`;
export const SpinnerWrapper = styled.div`
const SpinnerWrapper = styled.div`
display: flex;
position: relative;
@ -92,7 +92,7 @@ const spinAnimation = keyframes`
}
`;
export const Spinner = styled.div<{ animationDelay?: string }>`
const Spinner = styled.div<{ animationDelay?: string }>`
display: block;
position: absolute;
top: 0;

View File

@ -1,80 +1,18 @@
import color from "../../styles/color";
import styled from "styled-components";
import { TwitterAuthInfoResponse } from "../../types";
import { FunctionComponent, useEffect, useState } from "react";
import { FunctionComponent } from "react";
import Image from "next/image";
import ICNSIcon from "../../public/images/svg/icns-logo.svg";
interface Props {
isOwner?: boolean;
registeredTwitterName?: string;
twitterProfileInformation?: TwitterAuthInfoResponse | null;
}
export const TwitterProfile: FunctionComponent<Props> = (props) => {
const { isOwner, registeredTwitterName, twitterProfileInformation } = props;
const [isCopied, setIsCopied] = useState<boolean>(false);
const onClickInviteLink = async () => {
await navigator.clipboard.writeText(
`https://app.icns.xyz?referral=${registeredTwitterName}`,
);
setIsCopied(true);
setTimeout(() => {
setIsCopied(false);
}, 1000);
};
const { twitterProfileInformation } = props;
return (
<ProfileContainer color={color.grey["900"]}>
{registeredTwitterName ? (
isCopied ? (
<InviteLinkContainer>
copied
<CopiedIcon
width="14"
height="12"
viewBox="0 0 14 12"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M2 4.92614L6.08333 9.9375L12.5 2.0625"
stroke="current"
strokeWidth="2"
strokeLinecap="square"
/>
</CopiedIcon>
</InviteLinkContainer>
) : (
<InviteLinkContainer onClick={onClickInviteLink}>
copy invite link
<CopyIcon
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
fill="none"
viewBox="0 0 16 16"
>
<path
stroke="current"
strokeLinecap="square"
strokeWidth="1.5"
d="M10.667 2.667h-8v8"
/>
<path
stroke="current"
strokeLinecap="square"
strokeWidth="1.5"
d="M5.417 5.417H13.25V13.25H5.417z"
/>
</CopyIcon>
</InviteLinkContainer>
)
) : null}
<ProfileImageContainer>
<Image
src={twitterProfileInformation?.profile_image_url ?? ""}
@ -86,13 +24,7 @@ export const TwitterProfile: FunctionComponent<Props> = (props) => {
<ProfileContentContainer>
<ProfileNameContainer>
<ProfileName>{twitterProfileInformation?.name}</ProfileName>
{isOwner ? (
<IsOwnerIcon>
<ICNSIcon />
</IsOwnerIcon>
) : null}
{twitterProfileInformation?.name}
</ProfileNameContainer>
<ProfileUserNameContainer>
@{twitterProfileInformation?.username}
@ -126,8 +58,6 @@ export const ProfileContainer = styled.div`
display: flex;
flex-direction: row;
position: relative;
width: 100%;
padding: 1.5rem 2rem;
@ -135,45 +65,6 @@ export const ProfileContainer = styled.div`
background-color: ${(props) => props.color};
`;
const CopyIcon = styled.svg`
stroke: ${color.grey["100"]};
`;
const CopiedIcon = styled.svg`
stroke: ${color.grey["100"]};
`;
export const InviteLinkContainer = styled.div`
display: flex;
flex-direction: row;
align-items: center;
gap: 0.2rem;
position: absolute;
top: 1.75rem;
right: 1.5rem;
font-family: "Inter", serif;
font-style: normal;
font-weight: 600;
font-size: 0.875rem;
line-height: 0.875rem;
text-transform: uppercase;
color: ${color.grey["100"]};
cursor: pointer;
&:hover {
color: ${color.grey["200"]};
${CopyIcon} {
stroke: ${color.grey["200"]};
}
}
`;
export const ProfileContentContainer = styled.div`
display: flex;
flex-direction: column;
@ -196,12 +87,6 @@ export const ProfileImageContainer = styled.div`
`;
export const ProfileNameContainer = styled.div`
display: flex;
flex-direction: row;
align-items: center;
`;
export const ProfileName = styled.div`
font-weight: 600;
font-size: 1.2rem;
line-height: 1.5rem;
@ -209,15 +94,6 @@ export const ProfileName = styled.div`
color: ${color.white};
`;
export const IsOwnerIcon = styled.div`
height: 1px;
background-color: red;
margin-top: 0.1rem;
display: flex;
align-items: center;
`;
export const ProfileUserNameContainer = styled.div`
font-weight: 500;
font-size: 0.8rem;

View File

@ -1,36 +1,9 @@
export const TWITTER_LOGIN_ERROR = "Twitter login access denied";
export const TWITTER_PROFILE_ERROR = "Twitter auth code is not valid";
export const KEPLR_NOT_FOUND_ERROR = "Can't found window.keplr";
export const KEPLR_NOT_FOUND_ERROR = "Can't fount window.keplr";
export const KEPLR_VERSION_ERROR = "You should update keplr";
export const KEPLR_NO_ACCOUNT_ERROR = "key doesn't exist";
export const KEPLR_NO_ACCOUNT_MESSAGE =
"Create a wallet account to get started with ICNS!";
export const INSUFFICIENT_GAS_ERROR = "insufficient funds: invalid request";
export const INSUFFICIENT_GAS_MESSAGE =
"Not enough OSMO in your account. Please add more OSMO to your account";
export const ACCOUNT_NOT_EXIST_ERROR = "does not exist: unknown address";
export const ACCOUNT_NOT_EXIST_MESSAGE =
"Account has not been registered on chain. Please add some OSMO to your account and try again.";
export const VERIFICATION_THRESHOLD_ERROR = "verfication is below threshold:";
export const VERIFICATION_THRESHOLD_MESSAGE =
"Verifier consensus failed. Verifiers may be offline. Please try again later.";
export const INVALID_REFERRAL_ERROR = "Invalid referral:";
export const INVALID_REFERRAL_MESSAGE =
"Make sure that the referrer ICNS name has been registered.";
export const TOO_MANY_CHAINS_IN_LEDGER_ERROR = "Output buffer too small";
export const TOO_MANY_CHAINS_IN_LEDGER_MESSAGE =
"Due to hardware constraints, limited number of chains can be linked at a time(1-2 on Ledger Nano S / 25 on Ledger Nano S+/X). Please select less chains and try again.";
export const EVM_CHAIN_IN_LEDGER_ERROR = "Ledger is unsupported for this chain";
export const EVM_CHAIN_IN_LEDGER_MESSAGE =
"ICNS for Cosmos chains using Ethereum/EVM keys are not supported. Remove EVM-based Cosmos SDK chains and try again.";
export const LEDGER_MAX_REGISTER_ERROR =
"Data is invalid : JSON. Too many tokens";
"Create an account first and connect it with your wallet";

View File

@ -20,9 +20,6 @@ export const RESOLVER_ADDRESS =
process.env.NEXT_PUBLIC_ICNS_RESOLVER_CONTRACT_ADDRESS ??
"osmo1002awr7frr9wk44lc3vfzt0d2w6vz5z03ql6fszjsjy8vdcvk0sskruz3c";
export const CLAIM_URL =
"https://lcd-osmosis.keplr.app/cosmwasm/wasm/v1/contract/osmo1mypljhatv0prfr9cjzzvamxdf2ctg34xkt50sudxads9zhqnyneqjuvy26/smart/eyJudW1fdG9rZW5zIjp7fX0=";
export const CHAIN_ALLOWLIST =
process.env.NEXT_PUBLIC_CHAIN_ALLOWLIST ||
[
@ -84,6 +81,4 @@ export const CHAIN_ALLOWLIST =
"tgrade-mainnet-1",
"umee-1",
"vidulum-1",
"evmos_9001-2",
"injective-1",
].join(",");

View File

@ -1,26 +0,0 @@
import { useEffect, useRef } from "react";
import useIsomorphicLayoutEffect from "./use-isomorphic-layout-effect";
function useInterval(callback: () => void, delay: number | null) {
const savedCallback = useRef(callback);
// Remember the latest callback if it changes.
useIsomorphicLayoutEffect(() => {
savedCallback.current = callback;
}, [callback]);
// Set up the interval.
useEffect(() => {
// Don't schedule if no delay is specified.
// Note: 0 is a valid value for delay.
if (!delay && delay !== 0) {
return;
}
const id = setInterval(() => savedCallback.current(), delay);
return () => clearInterval(id);
}, [delay]);
}
export default useInterval;

View File

@ -1,6 +0,0 @@
import { useEffect, useLayoutEffect } from "react";
const useIsomorphicLayoutEffect =
typeof window !== "undefined" ? useLayoutEffect : useEffect;
export default useIsomorphicLayoutEffect;

View File

@ -2,11 +2,9 @@
const { withSentryConfig } = require("@sentry/nextjs");
const nextConfig = {
...(!!process.env.NEXT_PUBLIC_SENTRY_DSN && {
sentry: {
hideSourceMaps: true,
},
}),
reactStrictMode: false,
swcMinify: true,
compiler: {
@ -43,6 +41,7 @@ const sentryWebpackPluginOptions = {
silent: true,
};
module.exports = !!process.env.NEXT_PUBLIC_SENTRY_DSN
module.exports =
process.env.NEXT_IS_ENABLE_USER_TRACKING === "true"
? withSentryConfig(nextConfig, sentryWebpackPluginOptions)
: nextConfig;

View File

@ -15,15 +15,13 @@
"@keplr-wallet/cosmos": "^0.11.25",
"@keplr-wallet/proto-types": "^0.11.25",
"@keplr-wallet/types": "^0.11.25",
"@sentry/nextjs": "^7.29.0",
"@sentry/nextjs": "^7.27.0",
"axios": "^0.27.2",
"buffer": "^6.0.3",
"cors": "^2.8.5",
"crypto": "^1.0.1",
"iron-session": "^6.3.1",
"next": "13.0.5",
"react": "18.2.0",
"react-countup": "^6.4.0",
"react-dom": "18.2.0",
"react-is": "^18.2.0",
"react-modal": "^3.16.1",
@ -35,7 +33,6 @@
"devDependencies": {
"@next/eslint-plugin-next": "^13.0.5",
"@svgr/webpack": "^6.5.1",
"@types/cors": "^2",
"@types/eslint": "^8.4.10",
"@types/node": "18.11.9",
"@types/react": "18.0.25",

View File

@ -58,6 +58,102 @@ export default function App({ Component, pageProps }: AppProps) {
<ThemeProvider theme={pageTheme}>
<Head>
<title>Interchain Name Service</title>
<meta content="Interchain Name Service" property="og:title" />
<meta content="Interchain Name Service" property="twitter:title" />
<meta
content="Your identity for the Interchain. Claim yours today."
property="og:description"
/>
<meta
content="Your identity for the Interchain. Claim yours today."
property="twitter:description"
/>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
<meta
content={`${origin}/images/og-image.webp`}
property="twitter:image"
/>
<meta content={`${origin}/images/og-image.webp`} property="og:image" />
<meta content="summary_large_image" name="twitter:card" />
<meta property="og:type" content="website" />
{/* generated favicons */}
<link
rel="apple-touch-icon"
sizes="57x57"
href="/images/favicon/apple-icon-57x57.png"
/>
<link
rel="apple-touch-icon"
sizes="60x60"
href="/images/favicon/apple-icon-60x60.png"
/>
<link
rel="apple-touch-icon"
sizes="72x72"
href="/images/favicon/apple-icon-72x72.png"
/>
<link
rel="apple-touch-icon"
sizes="76x76"
href="/images/favicon/apple-icon-76x76.png"
/>
<link
rel="apple-touch-icon"
sizes="114x114"
href="/images/favicon/apple-icon-114x114.png"
/>
<link
rel="apple-touch-icon"
sizes="120x120"
href="/images/favicon/apple-icon-120x120.png"
/>
<link
rel="apple-touch-icon"
sizes="144x144"
href="/images/favicon/apple-icon-144x144.png"
/>
<link
rel="apple-touch-icon"
sizes="152x152"
href="/images/favicon/apple-icon-152x152.png"
/>
<link
rel="apple-touch-icon"
sizes="180x180"
href="/images/favicon/apple-icon-180x180.png"
/>
<link
rel="icon"
type="image/png"
sizes="192x192"
href="/images/favicon/android-icon-192x192.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/images/favicon/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="96x96"
href="/images/favicon/favicon-96x96.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="/images/favicon/favicon-16x16.png"
/>
<link rel="manifest" href="/images/favicon/manifest.json" />
<meta name="msapplication-TileColor" content="#ffffff" />
<meta
name="msapplication-TileImage"
content="/images/favicon/ms-icon-144x144.png"
/>
<meta name="theme-color" content="#ffffff" />
</Head>
<React.Fragment>
<GlobalStyle />

View File

@ -54,109 +54,6 @@ class MyDocument extends Document {
href="https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap"
rel="stylesheet"
/>
<meta content="Interchain Name Service" property="og:title" />
<meta content="Interchain Name Service" name="twitter:title" />
<meta
content="Your identity for the Interchain. Claim yours today."
property="og:description"
/>
<meta
content="Your identity for the Interchain. Claim yours today."
property="twitter:description"
/>
<meta
name="viewport"
content="initial-scale=1.0, width=device-width"
/>
<meta
content={`https://app.icns.xyz/images/og-image.jpg`}
name="twitter:image"
/>
<meta content={`ICNS image`} name="twitter:image:alt" />
<meta
content={`https://app.icns.xyz/images/og-image.jpg`}
property="og:image"
/>
<meta content="summary_large_image" name="twitter:card" />
<meta property="og:type" content="website" />
{/* generated favicons */}
<link
rel="apple-touch-icon"
sizes="57x57"
href="/images/favicon/apple-icon-57x57.png"
/>
<link
rel="apple-touch-icon"
sizes="60x60"
href="/images/favicon/apple-icon-60x60.png"
/>
<link
rel="apple-touch-icon"
sizes="72x72"
href="/images/favicon/apple-icon-72x72.png"
/>
<link
rel="apple-touch-icon"
sizes="76x76"
href="/images/favicon/apple-icon-76x76.png"
/>
<link
rel="apple-touch-icon"
sizes="114x114"
href="/images/favicon/apple-icon-114x114.png"
/>
<link
rel="apple-touch-icon"
sizes="120x120"
href="/images/favicon/apple-icon-120x120.png"
/>
<link
rel="apple-touch-icon"
sizes="144x144"
href="/images/favicon/apple-icon-144x144.png"
/>
<link
rel="apple-touch-icon"
sizes="152x152"
href="/images/favicon/apple-icon-152x152.png"
/>
<link
rel="apple-touch-icon"
sizes="180x180"
href="/images/favicon/apple-icon-180x180.png"
/>
<link
rel="icon"
type="image/png"
sizes="192x192"
href="/images/favicon/android-icon-192x192.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/images/favicon/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="96x96"
href="/images/favicon/favicon-96x96.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="/images/favicon/favicon-16x16.png"
/>
<link rel="manifest" href="/images/favicon/manifest.json" />
<meta name="msapplication-TileColor" content="#ffffff" />
<meta
name="msapplication-TileImage"
content="/images/favicon/ms-icon-144x144.png"
/>
<meta name="theme-color" content="#ffffff" />
</Head>
<body>
<Main />

View File

@ -1,23 +0,0 @@
import type { NextApiRequest, NextApiResponse } from "next";
import { CHAIN_ALLOWLIST } from "../../constants/icns";
import Cors from "cors";
const cors = Cors({
methods: ["GET"],
});
export default async function (req: NextApiRequest, res: NextApiResponse) {
await new Promise((resolve, reject) => {
cors(req, res, (result: any) => {
if (result instanceof Error) {
return reject(result);
}
return resolve(result);
});
});
res.status(200).json({
chains: CHAIN_ALLOWLIST,
});
}

View File

@ -1,7 +1,8 @@
import { captureException } from "@sentry/nextjs";
import { withIronSessionApiRoute } from "iron-session/next";
import type { NextApiRequest, NextApiResponse } from "next";
import { ironOptions } from "../../iron.config";
import { IcnsVerificationResponse } from "../../types";
import { request } from "../../utils/url";
export default withIronSessionApiRoute(async function handler(
req: NextApiRequest,
@ -9,42 +10,30 @@ export default withIronSessionApiRoute(async function handler(
) {
try {
if (!process.env.ICNS_VERIFIER_ORIGIN_LIST) {
const errorMessage = ".env is not set";
console.error(errorMessage);
captureException(errorMessage);
console.log(".env is not set");
return res.status(500).json({ error: "Internal server error" });
}
const verifierOriginList = process.env.ICNS_VERIFIER_ORIGIN_LIST.split(",");
const verificationList = await Promise.allSettled(
verifierOriginList.map(async (verfierOrigin) =>
(
await fetch(`${verfierOrigin}/api/verify_twitter`, {
verifierOriginList.map((verfierOrigin) =>
request<IcnsVerificationResponse>(
`${verfierOrigin}/api/verify_twitter`,
{
method: "post",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(req.body),
})
).json(),
},
),
),
);
const errorTrimmedVerificationList = verificationList.map(
(verification) => ({
...verification,
...(verification.status === "rejected" && {
reason: verification.reason.message || verification.reason,
}),
}),
);
res.status(200).json({
verificationList: errorTrimmedVerificationList,
verificationList,
});
} catch (error) {
console.error(error);
captureException(error);
res.status(500).json({ error: "Internal server error" });
}
},

View File

@ -1,8 +1,8 @@
import { captureException } from "@sentry/nextjs";
import { withIronSessionApiRoute } from "iron-session/next";
import type { NextApiRequest, NextApiResponse } from "next";
import { twitterApiBaseUrl } from "../../constants/twitter";
import { withIronSessionApiRoute } from "iron-session/next";
import { request } from "../../utils/url";
import { ironOptions } from "../../iron.config";
import { twitterApiBaseUrl } from "../../constants/twitter";
export default withIronSessionApiRoute(async function handler(
req: NextApiRequest,
@ -45,13 +45,10 @@ export default withIronSessionApiRoute(async function handler(
params.append("code_verifier", req.session.code_verifier);
}
const {
access_token: accessToken,
refresh_token,
error: authTokenErrorTitle,
error_description: authTokenErrorDesc,
}: TwitterOAuth2TokenResponse = await (
await fetch(`${twitterApiBaseUrl}/oauth2/token`, {
const { access_token: accessToken, refresh_token } =
await request<TwitterOAuth2TokenResponse>(
`${twitterApiBaseUrl}/oauth2/token`,
{
method: "post",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
@ -60,59 +57,41 @@ export default withIronSessionApiRoute(async function handler(
).toString("base64")}`,
},
body: params,
})
).json();
if (authTokenErrorTitle) {
throw new Error(`${authTokenErrorTitle}: ${authTokenErrorDesc}`);
}
},
);
req.session.refresh_token = refresh_token;
await req.session.save();
const {
data,
title: usersMeErrorTitle,
detail: usersMeErrorDesc,
}: TwitterUsersMeResponse = await (
await fetch(
`${twitterApiBaseUrl}/users/me?user.fields=profile_image_url,public_metrics,description`,
{
headers: {
Authorization: `Bearer ${accessToken}`,
},
},
)
).json();
if (usersMeErrorTitle) {
throw new Error(`${usersMeErrorTitle}: ${usersMeErrorDesc}`);
}
const {
data: {
id,
username,
name,
profile_image_url,
description,
public_metrics,
} = data || {};
},
} = await request<TwitterUsersMeResponse>(
`${twitterApiBaseUrl}/users/me?user.fields=profile_image_url,public_metrics,description`,
{
headers: {
Authorization: `Bearer ${accessToken}`,
},
},
);
res.status(200).json({
accessToken,
id,
username,
name,
profile_image_url: profile_image_url?.replace(
"normal.jpg",
"400x400.jpg",
),
profile_image_url: profile_image_url.replace("normal.jpg", "400x400.jpg"),
description,
public_metrics,
});
} catch (error: any) {
} catch (error) {
console.error(error);
captureException(error);
res.status(500).json({ error: error.message });
res.status(500).json({ error: "Internal server error " });
}
},
ironOptions);
@ -123,12 +102,10 @@ interface TwitterOAuth2TokenResponse {
access_token: string;
scope: string;
refresh_token: string;
error?: string;
error_description?: string;
}
interface TwitterUsersMeResponse {
data?: {
data: {
id: string;
username: string;
name: string;
@ -136,11 +113,6 @@ interface TwitterUsersMeResponse {
description: string;
public_metrics: TwitterPublicMetrics;
};
// Error data
title?: string;
detail?: string;
type?: string;
status?: string;
}
export interface TwitterPublicMetrics {

View File

@ -1,14 +1,13 @@
import { captureException } from "@sentry/nextjs";
import type { NextApiRequest, NextApiResponse } from "next";
import crypto from "crypto";
import { withIronSessionApiRoute } from "iron-session/next";
import type { NextApiRequest, NextApiResponse } from "next";
import { base64URLEncode } from "../../utils/encoding";
import { buildQueryString } from "../../utils/url";
import { ironOptions } from "../../iron.config";
import {
twitterOAuthBaseUrl,
twitterOAuthScopes,
} from "../../constants/twitter";
import { ironOptions } from "../../iron.config";
import { base64URLEncode } from "../../utils/encoding";
import { buildQueryString } from "../../utils/url";
export default withIronSessionApiRoute(async function handler(
req: NextApiRequest,
@ -47,7 +46,6 @@ export default withIronSessionApiRoute(async function handler(
res.status(200).json({ authUrl });
} catch (error) {
console.error(error);
captureException(error);
res.status(500).json({ error: "Internal server error" });
}
},

View File

@ -8,13 +8,14 @@ import { Logo } from "../../components/logo";
import color from "../../styles/color";
import AlertCircleOutlineIcon from "../../public/images/svg/alert-circle-outline.svg";
import TwitterIcon from "../../public/images/svg/twitter-icon.svg";
import { useRouter } from "next/router";
import { useEffect, useState } from "react";
import { TendermintTxTracer } from "@keplr-wallet/cosmos";
import { queryAddressesFromTwitterName } from "../../queries";
import { RegisteredAddresses } from "../../types";
import { SHARE_URL } from "../../constants/twitter";
import { REST_URL, RPC_URL } from "../../constants/icns";
import { RPC_URL } from "../../constants/icns";
export default function CompletePage() {
const router = useRouter();
@ -34,33 +35,19 @@ export default function CompletePage() {
}, [router.query]);
const initialize = async (txHash: string, twitterUserName: string) => {
const txTracer = new TendermintTxTracer(RPC_URL, "/websocket");
try {
for (let i = 0; i < 20; i++) {
// Try to fetch tx response per 3sec, 20times.
await new Promise((resolve) => setTimeout(resolve, 3000));
const result: { code?: number } = await txTracer.traceTx(
Buffer.from(txHash, "hex"),
);
const res = await fetch(`${REST_URL}/cosmos/tx/v1beta1/txs/${txHash}`);
if (res.ok && res.status === 200) {
const txRes = await res.json();
if (txRes && txRes.tx_response) {
if (
txRes.tx_response.code == null ||
txRes.tx_response.code === 0
) {
if (!result.code || result.code === 0) {
amplitude.track("complete registration");
const addresses = await queryAddressesFromTwitterName(
twitterUserName,
);
const addresses = await queryAddressesFromTwitterName(twitterUserName);
setRegisteredAddressed(addresses.data.addresses);
setIsSuccess(true);
break;
}
}
}
}
} catch (e) {
console.log("error", e);
@ -77,7 +64,7 @@ export default function CompletePage() {
const width = 500;
const height = 700;
window.open(
`${SHARE_URL}?url=https://app.icns.xyz/?referral=${twitterUsername}&text=${shareMessage}`,
`${SHARE_URL}?url=https://app.icns.xyz?referral=${twitterUsername}/&text=${shareMessage}`,
"Share Twitter",
`top=${(window.screen.height - height) / 2}, left=${
(window.screen.width - width) / 2
@ -111,9 +98,9 @@ export default function CompletePage() {
strings={registeredAddressed.map(
(address) => address.bech32_prefix,
)}
typeSpeed={30}
backSpeed={30}
backDelay={500}
typeSpeed={150}
backSpeed={150}
backDelay={1000}
loop
smartBackspace
onStringTyped={(arrayPos: number) => {
@ -124,118 +111,22 @@ export default function CompletePage() {
</AddressContainer>
<AvailableAddressText>{availableAddress}</AvailableAddressText>
</RecipentContainer>
<SubLeaderboardIntroContainer>
<SubLeaderboardIntroTitle>
Make your way up the leaderboard
</SubLeaderboardIntroTitle>
<SubLeaderboardIntroDescription>
Tweet an invite link and both you and your friend will earn points
on the ICNS leaderboard.
</SubLeaderboardIntroDescription>
</SubLeaderboardIntroContainer>
</ContentContainer>
<ShareButtonContainer onClick={onClickShareButton}>
<Image
src="/images/icons/twitter-small.png"
alt="twitter icon"
width={28}
height={28}
/>
<ShareButtonText>TWEET INVITE LINK</ShareButtonText>
</ShareButtonContainer>
<CopyInviteLink
onClick={(e) => {
e.preventDefault();
<DescriptionContainer>
<AlertIcon>
<AlertCircleOutlineIcon />
</AlertIcon>
<DescriptionText>
ICNS name will stay the same even if your twitter handle changes in
the future.
</DescriptionText>
</DescriptionContainer>
const { twitterUsername } = router.query;
navigator.clipboard.writeText(
`https://app.icns.xyz?referral=${twitterUsername}`,
);
}}
>
copy invite link
<svg
style={{
marginLeft: "4px",
}}
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
fill="none"
viewBox="0 0 16 16"
>
<path
strokeLinecap="square"
strokeWidth="1.5"
d="M10.667 2.667h-8v8"
/>
<path
strokeLinecap="square"
strokeWidth="1.5"
d="M5.417 5.417H13.25V13.25H5.417z"
/>
</svg>
</CopyInviteLink>
<ComingSoonLeaderboardContainer>
<RotateSvg
xmlns="http://www.w3.org/2000/svg"
width="28"
height="26"
fill="none"
viewBox="0 0 28 26"
>
<path
fill="#424242"
d="M0.473 1.852H26.823999999999998V3.8790000000000004H0.473z"
/>
<path
fill="#6F6F6F"
d="M0.473 22.122H26.823999999999998V24.149H0.473z"
/>
<path
fill="#424242"
d="M13.986 12.662l11.703 9.629H2.283l11.703-9.629z"
/>
<path
fill="#6F6F6F"
d="M13.986 12.662L2.284 3.54H25.69l-11.703 9.122z"
/>
</RotateSvg>
<ComingSoonLeaderboardContent>
<ComingSoonLeaderboardContent1>
Coming soon
</ComingSoonLeaderboardContent1>
<ComingSoonLeaderboardContent2>
Leaderboard
</ComingSoonLeaderboardContent2>
</ComingSoonLeaderboardContent>
<RotateSvg
xmlns="http://www.w3.org/2000/svg"
width="28"
height="26"
fill="none"
viewBox="0 0 28 26"
>
<path
fill="#424242"
d="M0.473 1.852H26.823999999999998V3.8790000000000004H0.473z"
/>
<path
fill="#6F6F6F"
d="M0.473 22.122H26.823999999999998V24.149H0.473z"
/>
<path
fill="#424242"
d="M13.986 12.662l11.703 9.629H2.283l11.703-9.629z"
/>
<path
fill="#6F6F6F"
d="M13.986 12.662L2.284 3.54H25.69l-11.703 9.122z"
/>
</RotateSvg>
</ComingSoonLeaderboardContainer>
{/*<ShareButtonContainer onClick={onClickShareButton}>*/}
{/* <ShareButtonText>Tweet Invite Link</ShareButtonText>*/}
{/* <TwitterIcon /> */}
{/*</ShareButtonContainer>*/}
</MainContainer>
</Container>
);
@ -257,9 +148,9 @@ const MainContainer = styled.div`
`;
const ContentContainer = styled.div`
width: 31rem;
width: 30rem;
padding: 2.625rem 0;
padding: 2.625rem 4rem;
background-color: ${color.grey["900"]};
`;
@ -284,7 +175,6 @@ const TitleContainer = styled.div`
const RecipentContainer = styled.div`
display: flex;
flex-direction: column;
margin: 0 4rem;
gap: 0.5rem;
`;
@ -298,33 +188,6 @@ const RecipentTitle = styled.div`
color: ${color.grey["400"]};
`;
const SubLeaderboardIntroContainer = styled.div`
margin: 0 2.5rem;
margin-top: 2.5rem;
padding: 1.25rem 1.5rem;
background-color: ${color.grey["700"]};
`;
const SubLeaderboardIntroTitle = styled.div`
font-weight: 600;
font-size: 0.8125rem;
line-height: 123.5%;
margin-bottom: 0.75rem;
color: ${color.grey["100"]};
`;
const SubLeaderboardIntroDescription = styled.div`
font-weight: 400;
font-size: 0.8125rem;
line-height: 138%;
color: ${color.grey["300"]};
`;
const AddressContainer = styled.div`
font-family: "Inter", serif;
font-style: normal;
@ -351,12 +214,46 @@ const AvailableAddressText = styled.div`
color: ${color.blue};
`;
const DescriptionContainer = styled.div`
display: flex;
flex-direction: row;
align-items: center;
gap: 1rem;
width: 30rem;
margin-top: 1.5rem;
padding: 1.25rem 2rem;
background-color: ${color.grey["900"]};
`;
const AlertIcon = styled.div`
position: relative;
width: 1.5rem;
height: 1.5rem;
`;
const DescriptionText = styled.div`
width: 100%;
font-family: "Inter", serif;
font-style: normal;
font-weight: 400;
font-size: 0.8rem;
line-height: 140%;
color: ${color.grey["400"]};
`;
const SpinnerWrapper = styled.div`
display: flex;
position: relative;
width: 28px;
height: 28px;
width: 2rem;
height: 2rem;
`;
const spinAnimation = keyframes`
@ -377,13 +274,13 @@ const Spinner = styled.div<{ animationDelay?: string }>`
width: 100%;
height: 100%;
animation: ${spinAnimation} 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
animation: ${spinAnimation} 1s cubic-bezier(0.5, 0, 0.5, 1) infinite;
${({ animationDelay }) =>
animationDelay ? `animation-delay: ${animationDelay};` : ""}
border-radius: 100%;
border-style: solid;
border-width: 5px;
border-width: 3px;
border-color: white transparent transparent transparent;
`;
@ -397,8 +294,7 @@ const ShareButtonContainer = styled.div`
width: 20rem;
height: 5rem;
margin-top: 1.5rem;
margin-bottom: 1.125rem;
margin-top: 2.5rem;
cursor: pointer;
user-select: none;
@ -412,78 +308,6 @@ const ShareButtonText = styled.div`
font-weight: 700;
font-size: 1.25rem;
line-height: 1.25rem;
letter-spacing: 0.07em;
color: ${color.grey["100"]};
`;
const CopyInviteLink = styled.div`
display: flex;
align-items: center;
font-weight: 600;
font-size: 0.875rem;
line-height: 102.5%;
text-align: center;
letter-spacing: 0.07em;
text-transform: uppercase;
color: ${color.grey["200"]};
stroke: ${color.grey["200"]};
&:hover {
color: ${color.grey["300"]};
stroke: ${color.grey["300"]};
}
cursor: pointer;
`;
const ComingSoonLeaderboardContainer = styled.div`
margin-top: 4.5rem;
height: 5rem;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
`;
const ComingSoonLeaderboardContent = styled.div`
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 10rem;
`;
const ComingSoonLeaderboardContent1 = styled.div`
font-weight: 600;
font-size: 0.8125rem;
line-height: 102.5%;
letter-spacing: 0.19em;
text-transform: uppercase;
margin-bottom: 0.5rem;
color: ${color.grey["700"]};
`;
const ComingSoonLeaderboardContent2 = styled.div`
font-weight: 600;
font-size: 1rem;
line-height: 102.5%;
letter-spacing: 0.07em;
text-transform: uppercase;
color: ${color.grey["500"]};
`;
const RotateSvg = styled.svg`
animation: ${spinAnimation} 4s linear infinite;
`;

View File

@ -6,36 +6,25 @@ import color from "../styles/color";
// Components
import { ConnectWalletModal } from "../components/connect-wallet-modal";
import {
PrimaryButton,
Spinner,
SpinnerWrapper,
} from "../components/primary-button";
import { PrimaryButton } from "../components/primary-button";
// Image Assets
import { useEffect, useState } from "react";
import { Logo } from "../components/logo";
import { CLAIM_URL, REFERRAL_KEY } from "../constants/icns";
import { REFERRAL_KEY } from "../constants/icns";
import { SELECTED_WALLET_KEY } from "../constants/wallet";
import StarIcon from "../public/images/svg/bg-asset-3.svg";
import CheckIcon from "../public/images/svg/check-icon.svg";
import MainLogo from "../public/images/svg/main-logo.svg";
import MainTitle from "../public/images/svg/main-title.svg";
import CountUp from "react-countup";
import useInterval from "../hooks/use-interval";
export default function Home() {
const [currentReferral, setCurrentReferral] = useState("");
const [isConnectWalletModalOpen, setIsConnectWalletModalOpen] =
useState(false);
const [count, setCount] = useState<{ start: number; end: number }>();
const [isModalOpen, setModalOpen] = useState(false);
const onClickConnectWalletButton = async () => {
amplitude.track("click connect wallet button");
setIsConnectWalletModalOpen(true);
setModalOpen(true);
};
useEffect(() => {
@ -47,53 +36,16 @@ export default function Home() {
if (referral) {
localStorage.setItem(REFERRAL_KEY, referral);
setCurrentReferral(referral);
}
}
localStorage.removeItem(SELECTED_WALLET_KEY);
}, []);
useEffect(() => {
setTimeout(() => {
countUpCallback();
}, 1000);
}, []);
useInterval(async () => {
await countUpCallback();
}, 10000);
const countUpCallback = async () => {
const response: { data: { count: number } } = await (
await fetch(CLAIM_URL)
).json();
setCount({
start: (count?.end ?? 100) - 100,
end: response.data.count,
});
};
return (
<Container>
<Logo />
<CountUpContainer>
{count ? (
<CountUpText>
<CountUp start={count?.start} end={count?.end ?? 0} duration={1} />
</CountUpText>
) : (
<SpinnerWrapper>
<Spinner />
<Spinner />
<Spinner />
<Spinner />
</SpinnerWrapper>
)}
<CountUpDescription>ICNS names claimed so far</CountUpDescription>
</CountUpContainer>
<MainContainer>
<MainTitleContainer>
<MainTitleImageBackground>
@ -125,18 +77,11 @@ export default function Home() {
<SubContainer>
<CheckContainer>
<CheckIcon />
0.5+ Osmo is required for this transaction{" "}
<a
href="https://app.osmosis.zone"
target="_blank"
rel="noreferrer"
>
GET OSMO
</a>
Osmo is required for this transaction
</CheckContainer>
<CheckContainer>
<CheckIcon />
Make sure you have a Cosmos wallet installed
More wallet support coming soon
</CheckContainer>
</SubContainer>
</MainTitleContainer>
@ -147,9 +92,8 @@ export default function Home() {
</MainContainer>
<ConnectWalletModal
isModalOpen={isConnectWalletModalOpen}
onCloseModal={() => setIsConnectWalletModalOpen(false)}
currentReferal={currentReferral}
isModalOpen={isModalOpen}
onCloseModal={() => setModalOpen(false)}
/>
</Container>
);
@ -194,45 +138,6 @@ const MainContainer = styled.div`
}
`;
const CountUpContainer = styled.div`
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
gap: 1.25rem;
width: calc(25rem - 2px);
height: calc(5rem - 2px);
position: absolute;
margin-top: calc(10rem + 2px);
margin-left: calc(55rem + 2px);
background-color: ${color.black};
`;
const CountUpText = styled.div`
font-family: "Inter", serif;
font-style: normal;
font-weight: 600;
font-size: 1rem;
line-height: 1.2rem;
letter-spacing: 0.46rem;
color: ${color.white};
`;
const CountUpDescription = styled.div`
font-family: "Inter", serif;
font-style: normal;
font-weight: 500;
font-size: 0.875rem;
line-height: 1.1rem;
color: ${color.grey["400"]};
`;
const MainTitleContainer = styled.div`
display: flex;
flex-direction: column;
@ -336,8 +241,4 @@ const CheckContainer = styled.div`
padding-left: 0.75rem;
color: ${color.grey["400"]};
a {
color: ${color.grey["400"]};
}
`;

View File

@ -52,28 +52,14 @@ import {
verifyTwitterAccount,
} from "../../queries";
import {
ACCOUNT_NOT_EXIST_ERROR,
ACCOUNT_NOT_EXIST_MESSAGE,
EVM_CHAIN_IN_LEDGER_ERROR,
EVM_CHAIN_IN_LEDGER_MESSAGE,
INSUFFICIENT_GAS_ERROR,
INSUFFICIENT_GAS_MESSAGE,
INVALID_REFERRAL_ERROR,
INVALID_REFERRAL_MESSAGE,
KEPLR_NOT_FOUND_ERROR,
LEDGER_MAX_REGISTER_ERROR,
TOO_MANY_CHAINS_IN_LEDGER_ERROR,
TOO_MANY_CHAINS_IN_LEDGER_MESSAGE,
TWITTER_LOGIN_ERROR,
VERIFICATION_THRESHOLD_ERROR,
VERIFICATION_THRESHOLD_MESSAGE,
} from "../../constants/error-message";
import { makeClaimMessage, makeSetRecordMessage } from "../../messages";
import Axios from "axios";
import { BackButton } from "../../components/back-button";
import { FinalCheckModal } from "../../components/final-check-modal";
import { ErrorModal } from "../../components/error-modal";
import { captureException } from "@sentry/nextjs";
export default function VerificationPage() {
const router = useRouter();
@ -106,8 +92,6 @@ export default function VerificationPage() {
const [searchValue, setSearchValue] = useState("");
const [nftOwnerAddress, setNFTOwnerAddress] = useState("");
// Handle the token id which actually registered.
const [registeredTwitterName, setRegisteredTwitterName] = useState("");
const [isOwner, setIsOwner] = useState(false);
const [isModalOpen, setModalOpen] = useState(false);
@ -134,12 +118,6 @@ export default function VerificationPage() {
return true;
}
if (walletKey) {
if (walletKey.isLedgerNano && chain.isEthermintLike) {
return true;
}
}
for (const registeredChain of registeredChainList) {
if (
chain.prefix === registeredChain.bech32_prefix &&
@ -211,13 +189,6 @@ export default function VerificationPage() {
isRegistered: "data" in registeredQueryResponse,
});
if (
"data" in registeredQueryResponse &&
registeredQueryResponse.data?.name
) {
setRegisteredTwitterName(registeredQueryResponse.data.name);
}
if ("data" in registeredQueryResponse) {
const ownerOfQueryResponse = await queryOwnerOfTwitterName(
registeredQueryResponse.data.name,
@ -234,17 +205,16 @@ export default function VerificationPage() {
);
setRegisteredChainList(addressesQueryResponse.data.addresses);
} else {
setRegisteredChainList([]);
}
} catch (error) {
if (error instanceof Error) {
setErrorMessage({ message: error.message, path: "/" });
if (error.message === TWITTER_LOGIN_ERROR) {
setErrorMessage({ message: TWITTER_LOGIN_ERROR, path: "/" });
setErrorModalOpen(true);
}
}
console.error(error);
captureException(error);
} finally {
setIsLoadingInit(false);
}
@ -391,26 +361,6 @@ export default function VerificationPage() {
twitterInfo.accessToken,
);
console.log("icnsVerificationList", icnsVerificationList);
icnsVerificationList.forEach((verification) => {
if (verification.status === "fulfilled") {
if (verification.value.errors.length > 0) {
verification.value.errors.forEach((error) => {
const errorMessage = error.message || error;
captureException(errorMessage);
});
}
}
if (verification.status === "rejected") {
if (verification.reason) {
const errorMessage = verification.reason;
captureException(errorMessage);
}
}
});
const registerMsg = makeClaimMessage(
walletKey.bech32Address,
twitterInfo.username,
@ -472,67 +422,21 @@ export default function VerificationPage() {
pathname: "complete",
query: {
txHash: Buffer.from(txHash).toString("hex"),
twitterUsername: registeredTwitterName || twitterInfo.username,
twitterUsername: twitterInfo.username,
},
});
}
} catch (error) {
if (Axios.isAxiosError(error)) {
const message = (error?.response?.data as QueryError).message;
if (message.includes(INSUFFICIENT_GAS_ERROR)) {
setErrorMessage({ message: INSUFFICIENT_GAS_MESSAGE });
setErrorModalOpen(true);
return;
}
if (message.includes(ACCOUNT_NOT_EXIST_ERROR)) {
setErrorMessage({ message: ACCOUNT_NOT_EXIST_MESSAGE });
setErrorModalOpen(true);
return;
}
if (message.includes(VERIFICATION_THRESHOLD_ERROR)) {
setErrorMessage({ message: VERIFICATION_THRESHOLD_MESSAGE });
setErrorModalOpen(true);
return;
}
if (message.includes(INVALID_REFERRAL_ERROR)) {
setErrorMessage({ message: INVALID_REFERRAL_MESSAGE });
setErrorModalOpen(true);
return;
}
const errorMessage = (error?.response?.data as QueryError).message;
captureException(errorMessage);
setErrorMessage({
message: errorMessage,
message: (error?.response?.data as QueryError).message,
});
setErrorModalOpen(true);
return;
}
if (error instanceof Error) {
const errorMessage = error.message || error;
console.log(errorMessage);
captureException(errorMessage);
if (
error.message.includes(TOO_MANY_CHAINS_IN_LEDGER_ERROR) ||
error.message.includes(LEDGER_MAX_REGISTER_ERROR)
) {
setErrorMessage({ message: TOO_MANY_CHAINS_IN_LEDGER_MESSAGE });
setErrorModalOpen(true);
return;
}
if (error.message.includes(EVM_CHAIN_IN_LEDGER_ERROR)) {
setErrorMessage({ message: EVM_CHAIN_IN_LEDGER_MESSAGE });
setErrorModalOpen(true);
return;
}
console.log(error.message);
setErrorMessage({ message: error.message });
setErrorModalOpen(true);
}
@ -561,11 +465,7 @@ export default function VerificationPage() {
) : (
<ContentContainer>
<BackButton />
<TwitterProfile
isOwner={isOwner}
registeredTwitterName={registeredTwitterName}
twitterProfileInformation={twitterAuthInfo}
/>
<TwitterProfile twitterProfileInformation={twitterAuthInfo} />
<ChainListTitleContainer>
<ChainListTitle>Chain List</ChainListTitle>
<SearchInput
@ -601,10 +501,8 @@ export default function VerificationPage() {
<OwnerAlert>
You are not owner of this name.
<br />
Please select the account{" "}
<AddressBold>
({Bech32Address.shortenAddress(nftOwnerAddress, 28)})
</AddressBold>
Please select the account (
{Bech32Address.shortenAddress(nftOwnerAddress, 28)})
</OwnerAlert>
) : null}
@ -714,7 +612,3 @@ const OwnerAlert = styled.div`
padding-top: 1.25rem;
`;
const AddressBold = styled.span`
color: ${color.white};
`;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

View File

@ -1,13 +0,0 @@
<svg width="19" height="20" viewBox="0 0 19 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect y="0.5" width="19" height="19" rx="9.5" fill="#121212"/>
<path d="M3.95654 6.78418H6.28393V10.0425H3.95654V6.78418Z" fill="#FB5232"/>
<rect x="3.95654" y="4.45654" width="2.32738" height="2.32738" rx="1.16369" fill="#FFCDC4"/>
<rect x="7.21484" y="10.042" width="2.32738" height="5.58572" fill="#EBFFBF"/>
<path d="M3.95654 10.042V10.042C5.75607 10.042 7.21488 11.5008 7.21488 13.3003V15.6277H3.95654V10.042Z" fill="#00B86E"/>
<path d="M6.28394 7.2494C6.28394 5.70695 7.53434 4.45654 9.0768 4.45654H15.128V10.0423H9.0768C7.53434 10.0423 6.28394 8.79186 6.28394 7.2494V7.2494Z" fill="#F4CC3E"/>
<path d="M8.61133 7.24966C8.61133 6.99258 8.81973 6.78418 9.07681 6.78418H15.128V7.71513H9.07681C8.81973 7.71513 8.61133 7.50673 8.61133 7.24966V7.24966Z" fill="#121212"/>
<path d="M9.5421 12.8353C9.5421 12.4686 9.61434 12.1054 9.75469 11.7666C9.89505 11.4277 10.1008 11.1198 10.3601 10.8605C10.6195 10.6011 10.9273 10.3954 11.2662 10.2551C11.605 10.1147 11.9682 10.0425 12.335 10.0425L12.335 12.8353H9.5421Z" fill="#BED4FF"/>
<path d="M15.1278 12.835C15.1278 13.2017 15.0556 13.5649 14.9152 13.9037C14.7749 14.2426 14.5692 14.5505 14.3098 14.8098C14.0505 15.0692 13.7426 15.2749 13.4037 15.4152C13.0649 15.5556 12.7017 15.6278 12.335 15.6278L12.335 12.835H15.1278Z" fill="#5A4CFA"/>
<path d="M12.335 10.0425H15.1278L12.335 12.8353V10.0425Z" fill="#BED4FF"/>
<path d="M12.335 15.6279H9.5421L12.335 12.8351V15.6279Z" fill="#5A4CFA"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -1,21 +1,23 @@
<svg width="946" height="201" viewBox="0 0 946 201" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M516.01 0.916016C536.72 0.916016 553.509 17.7049 553.509 38.4151V38.9452H516.01V0.916016Z" fill="#00B86E"/>
<path d="M553.511 38.4151C553.511 17.7049 570.3 0.916016 591.01 0.916016V38.9452H553.511V38.4151Z" fill="#FF77F3"/>
<svg width="946" height="202" viewBox="0 0 946 202" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M691.953 69.1477H690.18C690.112 68.7689 689.985 68.4356 689.8 68.1477C689.614 67.8598 689.387 67.6155 689.118 67.4148C688.849 67.214 688.548 67.0625 688.214 66.9602C687.885 66.858 687.534 66.8068 687.163 66.8068C686.493 66.8068 685.892 66.9754 685.362 67.3125C684.836 67.6496 684.419 68.1439 684.112 68.7955C683.809 69.447 683.657 70.2424 683.657 71.1818C683.657 72.1288 683.809 72.928 684.112 73.5795C684.419 74.2311 684.837 74.7235 685.368 75.0568C685.898 75.3902 686.495 75.5568 687.157 75.5568C687.525 75.5568 687.873 75.5076 688.203 75.4091C688.536 75.3068 688.837 75.1572 689.106 74.9602C689.375 74.7633 689.603 74.5227 689.788 74.2386C689.978 73.9508 690.108 73.6212 690.18 73.25L691.953 73.2557C691.858 73.8277 691.675 74.3542 691.402 74.8352C691.133 75.3125 690.786 75.7254 690.362 76.0739C689.942 76.4186 689.461 76.6856 688.919 76.875C688.377 77.0644 687.786 77.1591 687.146 77.1591C686.139 77.1591 685.241 76.9205 684.453 76.4432C683.665 75.9621 683.044 75.2746 682.589 74.3807C682.139 73.4867 681.913 72.4205 681.913 71.1818C681.913 69.9394 682.14 68.8731 682.595 67.983C683.05 67.089 683.671 66.4034 684.459 65.9261C685.247 65.4451 686.142 65.2045 687.146 65.2045C687.764 65.2045 688.339 65.2936 688.873 65.4716C689.411 65.6458 689.894 65.9034 690.322 66.2443C690.75 66.5814 691.104 66.9943 691.385 67.483C691.665 67.9678 691.854 68.5227 691.953 69.1477ZM694.694 77V65.3636H696.449V75.4886H701.722V77H694.694ZM705.942 77H704.078L708.266 65.3636H710.294L714.482 77H712.618L709.328 67.4773H709.237L705.942 77ZM706.254 72.4432H712.3V73.9205H706.254V72.4432ZM718.558 65.3636V77H716.802V65.3636H718.558ZM721.754 65.3636H723.885L727.59 74.4091H727.726L731.431 65.3636H733.561V77H731.891V68.5795H731.783L728.351 76.983H726.965L723.533 68.5739H723.425V77H721.754V65.3636ZM743.907 77L740.679 65.3636H742.526L744.793 74.375H744.901L747.259 65.3636H749.088L751.446 74.3807H751.554L753.816 65.3636H755.668L752.435 77H750.668L748.219 68.2841H748.128L745.679 77H743.907ZM759.664 65.3636V77H757.909V65.3636H759.664ZM762.287 66.875V65.3636H771.293V66.875H767.662V77H765.912V66.875H762.287ZM773.923 77V65.3636H775.679V70.4205H781.48V65.3636H783.241V77H781.48V71.9261H775.679V77H773.923ZM790.739 66.875V65.3636H799.744V66.875H796.114V77H794.364V66.875H790.739ZM804.653 77L801.426 65.3636H803.272L805.539 74.375H805.647L808.005 65.3636H809.835L812.193 74.3807H812.301L814.562 65.3636H816.414L813.181 77H811.414L808.965 68.2841H808.874L806.426 77H804.653ZM820.411 65.3636V77H818.655V65.3636H820.411ZM823.034 66.875V65.3636H832.039V66.875H828.409V77H826.659V66.875H823.034ZM834.096 66.875V65.3636H843.101V66.875H839.471V77H837.721V66.875H834.096ZM845.731 77V65.3636H853.027V66.875H847.487V70.4205H852.646V71.9261H847.487V75.4886H853.095V77H845.731ZM856.012 77V65.3636H860.16C861.061 65.3636 861.809 65.5189 862.404 65.8295C863.002 66.1402 863.449 66.5701 863.745 67.1193C864.04 67.6648 864.188 68.2955 864.188 69.0114C864.188 69.7235 864.038 70.3504 863.739 70.892C863.444 71.4299 862.997 71.8485 862.398 72.1477C861.804 72.447 861.055 72.5966 860.154 72.5966H857.012V71.0852H859.995C860.563 71.0852 861.025 71.0038 861.381 70.8409C861.741 70.678 862.004 70.4413 862.171 70.1307C862.338 69.8201 862.421 69.447 862.421 69.0114C862.421 68.572 862.336 68.1913 862.165 67.8693C861.999 67.5473 861.735 67.3011 861.376 67.1307C861.02 66.9564 860.552 66.8693 859.972 66.8693H857.768V77H856.012ZM861.756 71.75L864.631 77H862.631L859.813 71.75H861.756Z" fill="#5B5B5B"/>
<path d="M897.544 65.2736C896.826 65.5767 896.054 65.779 895.24 65.8747C896.067 65.406 896.704 64.6586 897.003 63.7757C896.229 64.2086 895.37 64.5267 894.457 64.6943C893.728 63.9572 892.688 63.5 891.535 63.5C889.322 63.5 887.527 65.1955 887.527 67.2862C887.527 67.5821 887.564 67.8702 887.632 68.15C884.302 67.9907 881.348 66.4814 879.372 64.191C879.025 64.7507 878.83 65.406 878.83 66.0976C878.83 67.4119 879.535 68.569 880.612 69.2507C879.955 69.2316 879.336 69.0572 878.795 68.7779C878.795 68.7893 878.795 68.8064 878.795 68.8224C878.795 70.6591 880.177 72.1886 882.008 72.5367C881.674 72.6241 881.32 72.6728 880.955 72.6728C880.697 72.6728 880.444 72.6448 880.2 72.6029C880.71 74.104 882.19 75.201 883.943 75.2336C882.571 76.2474 880.844 76.8547 878.965 76.8547C878.641 76.8547 878.323 76.8371 878.01 76.8009C879.785 77.8721 881.892 78.5 884.154 78.5C891.525 78.5 895.557 72.7297 895.557 67.7238C895.557 67.5598 895.551 67.3964 895.543 67.235C896.33 66.7053 897.008 66.0371 897.544 65.2736Z" fill="#03A9F4"/>
<path d="M516.01 0.916016V0.916016C536.72 0.916016 553.509 17.7049 553.509 38.4151V38.9452H516.01V0.916016Z" fill="#00B86E"/>
<path d="M553.511 38.4151C553.511 17.7049 570.3 0.916016 591.01 0.916016V0.916016V38.9452H553.511V38.4151Z" fill="#FF77F3"/>
<rect x="516.01" y="38.9414" width="37.4991" height="38.0292" fill="#F4CC3E"/>
<rect x="553.511" y="38.9414" width="37.4991" height="38.0292" fill="#FB5232"/>
<path d="M155.51 41.5C155.51 18.5802 136.93 0 114.01 0V19.75C114.01 31.7622 123.748 41.5 135.76 41.5H155.51Z" fill="#5A4CFA"/>
<path d="M155.51 41.5C155.51 64.4198 136.93 83 114.01 83V63.25C114.01 51.2378 123.748 41.5 135.76 41.5H155.51Z" fill="#F4CC3E"/>
<path d="M72.5098 41.5C72.5098 18.5802 91.0899 0 114.01 0V19.75C114.01 31.7622 104.272 41.5 92.2598 41.5H72.5098Z" fill="#FF77F3"/>
<path d="M72.5098 41.5C72.5098 64.4198 91.0899 83 114.01 83V63.25C114.01 51.2378 104.272 41.5 92.2598 41.5H72.5098Z" fill="#00B86E"/>
<path d="M17.82 44.5498C19.8 49.1698 22.77 52.3598 26.07 54.3398V76.9998H42.13V54.2298C45.43 52.2498 48.29 49.0598 50.16 44.5498L68.2 2.9698H50.82L35.75 40.1498C35.09 41.4698 34.76 42.3498 34.1 42.3498C33.44 42.3498 33.11 41.5798 32.45 40.1498L17.27 2.9698H0L17.82 44.5498Z" fill="#DAECD5"/>
<path d="M199.842 78.2098C221.842 78.2098 232.072 65.4498 232.072 44.1098V2.9698H216.012V43.7798C216.012 56.6498 210.732 62.9198 199.842 62.9198C188.952 62.9198 183.672 56.6498 183.672 43.7798V2.9698H167.612V44.1098C167.612 65.4498 177.732 78.2098 199.842 78.2098Z" fill="#DAECD5"/>
<path d="M265.889 76.9998L265.999 53.3498H272.269C280.629 53.3498 283.819 56.9798 287.229 63.7998L293.829 76.9998H311.209L304.059 62.3698C300.209 54.6698 297.459 49.6098 292.729 46.9698C302.189 44.4398 308.129 36.6298 308.129 26.5098C308.129 10.7798 295.259 2.9698 278.539 2.9698H250.049V76.9998H265.889ZM278.759 17.8198C286.019 17.8198 291.629 20.8998 291.629 28.1598C291.629 35.0898 286.129 39.0498 278.539 39.0498H265.999L266.109 17.8198H278.759Z" fill="#DAECD5"/>
<path d="M371.668 76.9998V22.2198L400.928 72.7098C403.348 76.7798 407.418 78.4298 412.148 78.4298C417.978 78.4298 423.368 74.2498 423.368 66.8798V2.9698H408.188V57.4198L378.928 7.25981C376.508 3.18981 372.658 1.4298 367.818 1.4298C361.768 1.4298 356.378 5.71981 356.378 13.0898V76.9998H371.668Z" fill="#DAECD5"/>
<path d="M434.787 76.9998H451.177L455.467 61.9298L485.497 61.8198L489.787 76.9998H506.177L486.597 13.4198C484.067 5.3898 477.467 1.5398 470.427 1.5398C463.497 1.5398 456.897 5.3898 454.367 13.4198L434.787 76.9998ZM468.117 18.1498C468.557 16.6098 469.327 15.9498 470.537 15.9498C471.857 15.9498 472.517 16.6098 472.957 18.1498L481.317 47.5198H459.647L468.117 18.1498Z" fill="#DAECD5"/>
<path d="M658.406 76.9998V62.5898H620.456V47.1898H655.436V32.7798H620.456V17.3798H657.746V2.9698H618.586C608.356 2.9698 604.396 8.3598 604.396 16.8298V63.2498C604.396 71.7198 608.356 76.9998 618.586 76.9998H658.406Z" fill="#DAECD5"/>
<path d="M720.56 76.7797V51.6997H755.1V36.9597H720.56V17.5997H757.63V2.74969H718.69C708.57 2.74969 704.5 8.13969 704.5 16.6097V76.7797H720.56Z" fill="#DAECD5"/>
<path d="M803.032 78.2097C824.922 78.2097 841.643 61.7097 841.643 39.8197C841.643 18.0397 825.032 1.42969 803.032 1.42969C781.142 1.42969 764.532 18.0397 764.532 39.8197C764.532 61.7097 781.142 78.2097 803.032 78.2097ZM803.032 63.0297C790.712 63.0297 781.032 52.9097 781.032 39.8197C781.032 26.7297 790.712 16.6097 803.032 16.6097C815.462 16.6097 825.032 26.7297 825.032 39.8197C825.032 52.9097 815.352 63.0297 803.032 63.0297Z" fill="#DAECD5"/>
<path d="M868.071 76.7797L868.181 53.1297H874.451C882.811 53.1297 886.001 56.7597 889.411 63.5797L896.011 76.7797H913.391L906.241 62.1497C902.391 54.4497 899.641 49.3897 894.911 46.7497C904.371 44.2197 910.311 36.4097 910.311 26.2897C910.311 10.5597 897.441 2.74969 880.721 2.74969H852.231V76.7797H868.071ZM880.941 17.5997C888.201 17.5997 893.811 20.6797 893.811 27.9397C893.811 34.8697 888.311 38.8297 880.721 38.8297H868.181L868.291 17.5997H880.941Z" fill="#DAECD5"/>
<path d="M155.51 41.5C155.51 18.5802 136.93 0 114.01 0V0V19.75C114.01 31.7622 123.748 41.5 135.76 41.5H155.51V41.5Z" fill="#5A4CFA"/>
<path d="M155.51 41.5C155.51 64.4198 136.93 83 114.01 83V83V63.25C114.01 51.2378 123.748 41.5 135.76 41.5H155.51V41.5Z" fill="#F4CC3E"/>
<path d="M72.5098 41.5C72.5098 18.5802 91.0899 0 114.01 0V0V19.75C114.01 31.7622 104.272 41.5 92.2598 41.5H72.5098V41.5Z" fill="#FF77F3"/>
<path d="M72.5098 41.5C72.5098 64.4198 91.0899 83 114.01 83V83V63.25C114.01 51.2378 104.272 41.5 92.2598 41.5H72.5098V41.5Z" fill="#00B86E"/>
<path d="M17.82 44.5497C19.8 49.1697 22.77 52.3597 26.07 54.3397V76.9997H42.13V54.2297C45.43 52.2497 48.29 49.0597 50.16 44.5497L68.2 2.96969H50.82L35.75 40.1497C35.09 41.4697 34.76 42.3497 34.1 42.3497C33.44 42.3497 33.11 41.5797 32.45 40.1497L17.27 2.96969H0L17.82 44.5497Z" fill="#DAECD5"/>
<path d="M199.842 78.2097C221.842 78.2097 232.072 65.4497 232.072 44.1097V2.96969H216.012V43.7797C216.012 56.6497 210.732 62.9197 199.842 62.9197C188.952 62.9197 183.672 56.6497 183.672 43.7797V2.96969H167.612V44.1097C167.612 65.4497 177.732 78.2097 199.842 78.2097Z" fill="#DAECD5"/>
<path d="M265.889 76.9997L265.999 53.3497H272.269C280.629 53.3497 283.819 56.9797 287.229 63.7997L293.829 76.9997H311.209L304.059 62.3697C300.209 54.6697 297.459 49.6097 292.729 46.9697C302.189 44.4397 308.129 36.6297 308.129 26.5097C308.129 10.7797 295.259 2.96969 278.539 2.96969H250.049V76.9997H265.889ZM278.759 17.8197C286.019 17.8197 291.629 20.8997 291.629 28.1597C291.629 35.0897 286.129 39.0497 278.539 39.0497H265.999L266.109 17.8197H278.759Z" fill="#DAECD5"/>
<path d="M371.668 76.9997V22.2197L400.928 72.7097C403.348 76.7797 407.418 78.4297 412.148 78.4297C417.978 78.4297 423.368 74.2497 423.368 66.8797V2.96969H408.188V57.4197L378.928 7.25969C376.508 3.18969 372.658 1.42969 367.818 1.42969C361.768 1.42969 356.378 5.71969 356.378 13.0897V76.9997H371.668Z" fill="#DAECD5"/>
<path d="M434.787 76.9997H451.177L455.467 61.9297L485.497 61.8197L489.787 76.9997H506.177L486.597 13.4197C484.067 5.38969 477.467 1.53969 470.427 1.53969C463.497 1.53969 456.897 5.38969 454.367 13.4197L434.787 76.9997ZM468.117 18.1497C468.557 16.6097 469.327 15.9497 470.537 15.9497C471.857 15.9497 472.517 16.6097 472.957 18.1497L481.317 47.5197H459.647L468.117 18.1497Z" fill="#DAECD5"/>
<path d="M658.406 76.9997V62.5897H620.456V47.1897H655.436V32.7797H620.456V17.3797H657.746V2.96969H618.586C608.356 2.96969 604.396 8.35969 604.396 16.8297V63.2497C604.396 71.7197 608.356 76.9997 618.586 76.9997H658.406Z" fill="#DAECD5"/>
<path d="M24.2 200V174.92H58.74V160.18H24.2V140.82H61.27V125.97H22.33C12.21 125.97 8.14 131.36 8.14 139.83V200H24.2Z" fill="#DAECD5"/>
<path d="M106.673 201.43C128.563 201.43 145.283 184.93 145.283 163.04C145.283 141.26 128.673 124.65 106.673 124.65C84.7825 124.65 68.1725 141.26 68.1725 163.04C68.1725 184.93 84.7825 201.43 106.673 201.43ZM106.673 186.25C94.3525 186.25 84.6725 176.13 84.6725 163.04C84.6725 149.95 94.3525 139.83 106.673 139.83C119.103 139.83 128.673 149.95 128.673 163.04C128.673 176.13 118.992 186.25 106.673 186.25Z" fill="#DAECD5"/>
<path d="M171.711 200L171.821 176.35H178.091C186.451 176.35 189.641 179.98 193.051 186.8L199.651 200H217.031L209.881 185.37C206.031 177.67 203.281 172.61 198.551 169.97C208.011 167.44 213.951 159.63 213.951 149.51C213.951 133.78 201.081 125.97 184.361 125.97H155.871V200H171.711ZM184.581 140.82C191.841 140.82 197.451 143.9 197.451 151.16C197.451 158.09 191.951 162.05 184.361 162.05H171.821L171.931 140.82H184.581Z" fill="#DAECD5"/>
<path d="M324.979 199.395V144.742L354.171 195.115C356.585 199.176 360.646 200.822 365.365 200.822C371.182 200.822 376.559 196.651 376.559 189.299V125.536H361.414V179.86L332.222 129.817C329.808 125.756 325.966 124 321.138 124C315.102 124 309.724 128.28 309.724 135.633V199.395H324.979Z" fill="#DAECD5"/>
<path d="M445.739 125.536H386.257V140.352H407.987V199.395H424.009V140.352H445.739V125.536Z" fill="#DAECD5"/>
<path d="M510.082 199.395V185.018H472.219V169.654H507.118V155.277H472.219V139.913H509.423V125.536H470.354C460.147 125.536 456.197 130.914 456.197 139.364V185.677C456.197 194.127 460.147 199.395 470.354 199.395H510.082Z" fill="#DAECD5"/>
@ -25,7 +27,7 @@
<path d="M893.894 199.395V144.742L923.086 195.115C925.5 199.176 929.561 200.822 934.28 200.822C940.097 200.822 945.474 196.651 945.474 189.299V125.536H930.329V179.86L901.137 129.817C898.723 125.756 894.882 124 890.053 124C884.017 124 878.639 128.28 878.639 135.633V199.395H893.894Z" fill="#DAECD5"/>
<path d="M522.01 125.018H559.547V162.555H522.01V125.018Z" fill="#FB5232"/>
<path d="M522.01 162.554H559.547V200.091H522.01V162.554Z" fill="#F4CC3E"/>
<path d="M559.548 125.018H578.317C588.682 125.018 597.085 133.421 597.085 143.786C597.085 154.152 588.682 162.555 578.317 162.555H559.548V125.018Z" fill="#00B86E"/>
<path d="M559.548 125.018H578.317C588.682 125.018 597.085 133.421 597.085 143.786V143.786C597.085 154.152 588.682 162.555 578.317 162.555H559.548V125.018Z" fill="#00B86E"/>
<path d="M559.548 162.554L597.085 200.091H559.548V162.554Z" fill="#5A4CFA"/>
<path d="M796.354 124.018C817.169 124.018 834.044 140.892 834.044 161.707H815.199C804.791 161.707 796.354 153.27 796.354 142.862V124.018Z" fill="#FF77F3"/>
<path d="M796.354 180.551C796.354 170.143 804.791 161.706 815.199 161.706H834.044V199.396H796.354V180.551Z" fill="#00B86E"/>
@ -33,7 +35,4 @@
<path d="M758.664 161.706H777.508C787.916 161.706 796.353 170.143 796.353 180.551V199.396H758.664V161.706Z" fill="#5A4CFA"/>
<rect x="259.005" y="124.019" width="37.9915" height="37.9915" rx="18.9957" fill="#FB5232"/>
<rect x="259.005" y="162.01" width="37.9915" height="37.9915" fill="#F4CC3E"/>
<path d="M61.16 125.97H1.54004V140.82H23.32V200H39.38V140.82H61.16V125.97Z" fill="#DAECD5"/>
<path d="M88.8018 200V170.52H122.572V200H138.632V125.97H122.572V155.78H88.8018V125.97H72.7418V200H88.8018Z" fill="#DAECD5"/>
<path d="M211.374 200V185.59H173.424V170.19H208.404V155.78H173.424V140.38H210.714V125.97H171.554C161.324 125.97 157.364 131.36 157.364 139.83V186.25C157.364 194.72 161.324 200 171.554 200H211.374Z" fill="#DAECD5"/>
</svg>

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -29,7 +29,7 @@ export const queryRegisteredTwitterId = async (
Buffer.from(JSON.stringify(msg)).toString("base64"),
),
{},
{ isErrorIgnore: true },
true,
);
};
@ -61,6 +61,6 @@ export const queryOwnerOfTwitterName = async (
Buffer.from(JSON.stringify(msg)).toString("base64"),
),
{},
{ isErrorIgnore: true },
true,
);
};

View File

@ -1,5 +1,5 @@
import {
IcnsVerificationResponseOnFrontend,
IcnsVerificationResponse,
TwitterAuthInfoResponse,
TwitterAuthUrlResponse,
} from "../types";
@ -27,9 +27,7 @@ export const verifyTwitterAccount = async (
accessToken: string,
) => {
return (
await request<IcnsVerificationResponseOnFrontend>(
"/api/icns-verification",
{
await request<IcnsVerificationResponse>("/api/icns-verification", {
method: "post",
headers: {
"Content-Type": "application/json",
@ -38,7 +36,6 @@ export const verifyTwitterAccount = async (
claimer: claimer,
authToken: accessToken,
}),
},
)
})
).verificationList;
};

View File

@ -5,12 +5,15 @@
import * as Sentry from "@sentry/nextjs";
const SENTRY_DSN = process.env.NEXT_PUBLIC_SENTRY_DSN;
const IS_ENABLE_USER_TRACKING = process.env.NEXT_PUBLIC_IS_ENABLE_USER_TRACKING;
Sentry.init({
enabled: !!SENTRY_DSN,
dsn: SENTRY_DSN,
enabled: IS_ENABLE_USER_TRACKING === "true",
dsn:
SENTRY_DSN ||
"https://78c91641e90f4f7cad28f50aaec9fb95@o4504343701946368.ingest.sentry.io/4504343708827648",
// Adjust this value in production, or use tracesSampler for greater control
tracesSampleRate: 0.2,
tracesSampleRate: 1.0,
// ...
// Note: if you want to override the automatic release value, do not set a
// `release` value here - use the environment variable `SENTRY_RELEASE`, so

View File

@ -1,4 +1,3 @@
defaults.url=https://sentry.io/
defaults.org=interchain-name-service
defaults.project=icns-frontend
cli.executable=../../.npm/_npx/a8388072043b4cbc/node_modules/@sentry/cli/bin/sentry-cli

View File

@ -5,12 +5,17 @@
import * as Sentry from "@sentry/nextjs";
const SENTRY_DSN = process.env.SENTRY_DSN || process.env.NEXT_PUBLIC_SENTRY_DSN;
const IS_ENABLE_USER_TRACKING =
process.env.NEXT_PUBLIC_IS_ENABLE_USER_TRACKING ||
process.env.NEXT_IS_ENABLE_USER_TRACKING;
Sentry.init({
enabled: !!SENTRY_DSN,
dsn: SENTRY_DSN,
enabled: IS_ENABLE_USER_TRACKING === "true",
dsn:
SENTRY_DSN ||
"https://78c91641e90f4f7cad28f50aaec9fb95@o4504343701946368.ingest.sentry.io/4504343708827648",
// Adjust this value in production, or use tracesSampler for greater control
tracesSampleRate: 0.2,
tracesSampleRate: 1.0,
// ...
// Note: if you want to override the automatic release value, do not set a
// `release` value here - use the environment variable `SENTRY_RELEASE`, so

View File

@ -38,30 +38,6 @@ export interface IcnsVerificationResponse {
)[];
}
export interface IcnsVerificationResponseOnFrontend {
verificationList: (
| {
status: "fulfilled";
value: {
errors: Error[];
data: {
// JSON string
verifying_msg: string;
// Base64 encoded
public_key: string;
// Base64 encoded
signature: string;
algorithm: string;
};
};
}
| {
status: "rejected";
reason: string;
}
)[];
}
export interface NameByTwitterIdQueryResponse {
data: {
name: string;

View File

@ -2,28 +2,21 @@ import { TwitterLoginSuccess } from "../types";
import { TWITTER_LOGIN_ERROR } from "../constants/error-message";
import { WALLET_INSTALL_URL } from "../constants/wallet";
export async function request<TResponse>(
export function request<TResponse>(
url: string,
config: RequestInit = {},
customConfig?: {
isErrorIgnore?: boolean;
},
isIgnore?: boolean,
): Promise<TResponse> {
const response = await fetch(url, config);
const data = await response.json();
if (
(!response.ok || data.error || data.errors) &&
!customConfig?.isErrorIgnore
) {
const { error, errors } = data;
const errorMessage =
(error && error.toString()) || (errors && errors.toString());
throw new Error(errorMessage);
return fetch(url, config)
.then((response) => {
if (!response.ok && !isIgnore) {
throw new Error(
`This is an HTTP error: The status is ${response.status} ${response.statusText}`,
);
}
return data;
return response.json();
})
.then((data) => data as TResponse);
}
export function buildQueryString(query: Record<string, any>): string {

View File

@ -53,9 +53,7 @@ export class KeplrWallet implements Wallet {
return chainInfos.map((chainInfo) => {
return {
...chainInfo,
isEthermintLike:
chainInfo.features?.includes("eth-address-gen") ||
chainInfo.features?.includes("eth-key-sign"),
isEthermintLike: chainInfo.features?.includes("eth-address-gen"),
};
});
});

227
yarn.lock
View File

@ -2090,25 +2090,6 @@ __metadata:
languageName: node
linkType: hard
"@rollup/plugin-babel@npm:^6.0.2":
version: 6.0.3
resolution: "@rollup/plugin-babel@npm:6.0.3"
dependencies:
"@babel/helper-module-imports": ^7.18.6
"@rollup/pluginutils": ^5.0.1
peerDependencies:
"@babel/core": ^7.0.0
"@types/babel__core": ^7.1.9
rollup: ^1.20.0||^2.0.0||^3.0.0
peerDependenciesMeta:
"@types/babel__core":
optional: true
rollup:
optional: true
checksum: 412c1c3bb5dd029cbf0b37315ad54b51ef378b8d2fd91d1ec44d73cade723cec8718b5affa2ce8a8b06660710d11765056fac4068521f18737ce26142506a8b1
languageName: node
linkType: hard
"@rollup/plugin-sucrase@npm:4.0.4":
version: 4.0.4
resolution: "@rollup/plugin-sucrase@npm:4.0.4"
@ -2143,22 +2124,6 @@ __metadata:
languageName: node
linkType: hard
"@rollup/pluginutils@npm:^5.0.1":
version: 5.0.2
resolution: "@rollup/pluginutils@npm:5.0.2"
dependencies:
"@types/estree": ^1.0.0
estree-walker: ^2.0.2
picomatch: ^2.3.1
peerDependencies:
rollup: ^1.20.0||^2.0.0||^3.0.0
peerDependenciesMeta:
rollup:
optional: true
checksum: edea15e543bebc7dcac3b0ac8bc7b8e8e6dbd46e2864dbe5dd28072de1fbd5b0e10d545a610c0edaa178e8a7ac432e2a2a52e547ece1308471412caba47db8ce
languageName: node
linkType: hard
"@rushstack/eslint-patch@npm:^1.1.3":
version: 1.2.0
resolution: "@rushstack/eslint-patch@npm:1.2.0"
@ -2166,16 +2131,16 @@ __metadata:
languageName: node
linkType: hard
"@sentry/browser@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/browser@npm:7.29.0"
"@sentry/browser@npm:7.27.0":
version: 7.27.0
resolution: "@sentry/browser@npm:7.27.0"
dependencies:
"@sentry/core": 7.29.0
"@sentry/replay": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/core": 7.27.0
"@sentry/replay": 7.27.0
"@sentry/types": 7.27.0
"@sentry/utils": 7.27.0
tslib: ^1.9.3
checksum: 136b9d03a9ff38e72f4d8fd335f23469341d0095d1f075a36d85ef2cd6bd0763635a7e1cbc7abe14508291e88cffe549eda6016c858564b55c1d4e81ef67882f
checksum: da5e50bd576126cadf4d96aa9485d0108ad047bc94ac9aba982f51ab76f792be4c89dbcca5f9714332d99676d03f18d53a9f3918b380c1ca7e084f7d790b9f7f
languageName: node
linkType: hard
@ -2196,42 +2161,42 @@ __metadata:
languageName: node
linkType: hard
"@sentry/core@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/core@npm:7.29.0"
"@sentry/core@npm:7.27.0":
version: 7.27.0
resolution: "@sentry/core@npm:7.27.0"
dependencies:
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/types": 7.27.0
"@sentry/utils": 7.27.0
tslib: ^1.9.3
checksum: d9330ed3528f2328b524cb237e400368dcb6c36b8afb791d28141e98ab5c0b56dc306a65cfc7164108cb5616346dabe793a39a140257f723906dc25a03b7ebcd
checksum: 36138a8f43e3f959a1fe5ddc0f67a3b80248fd7b3fcd4465965b4a75a148d9afdf0f09393da4d61f5c978b24f4243952b9af8acd83bd79f5b669ef3d89ba96c6
languageName: node
linkType: hard
"@sentry/integrations@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/integrations@npm:7.29.0"
"@sentry/integrations@npm:7.27.0":
version: 7.27.0
resolution: "@sentry/integrations@npm:7.27.0"
dependencies:
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/types": 7.27.0
"@sentry/utils": 7.27.0
localforage: ^1.8.1
tslib: ^1.9.3
checksum: fec2b9b7902b9b097b5453ae4c797e4efa18ac05a3b539c58d037085e12846f443ebe2e8d916a273ee4df71a29891265db5723b7fd4b5e8287fe5864cb9b2e43
checksum: 26cc2a10a4bb89ff131274efd448709e76b500a78594e7ebddcb2d9dfa533e3534373953f660603c6b21bb2a702d10f6602809f795e891d63aa783a2d3f2188c
languageName: node
linkType: hard
"@sentry/nextjs@npm:^7.29.0":
version: 7.29.0
resolution: "@sentry/nextjs@npm:7.29.0"
"@sentry/nextjs@npm:^7.27.0":
version: 7.27.0
resolution: "@sentry/nextjs@npm:7.27.0"
dependencies:
"@rollup/plugin-sucrase": 4.0.4
"@rollup/plugin-virtual": 3.0.0
"@sentry/core": 7.29.0
"@sentry/integrations": 7.29.0
"@sentry/node": 7.29.0
"@sentry/react": 7.29.0
"@sentry/tracing": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/core": 7.27.0
"@sentry/integrations": 7.27.0
"@sentry/node": 7.27.0
"@sentry/react": 7.27.0
"@sentry/tracing": 7.27.0
"@sentry/types": 7.27.0
"@sentry/utils": 7.27.0
"@sentry/webpack-plugin": 1.20.0
chalk: 3.0.0
rollup: 2.78.0
@ -2243,79 +2208,79 @@ __metadata:
peerDependenciesMeta:
webpack:
optional: true
checksum: 53864f15c199c810b3efa21bcae88a075619d7328b6c70d65660a9e5a01170404a867ddb20a8e7ef7a8fbcfd8d8d23a2bb5399f0d7e9bddb30af7aebd4a8ec99
checksum: fdc0ba40b41280ce841e4d841ffe9dd57a6dac6446a47b5c634c9fe48c2a668c1ed6ba4533f37252ba37d034eb2971685b6b56a34f35df0b4edad56069701d56
languageName: node
linkType: hard
"@sentry/node@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/node@npm:7.29.0"
"@sentry/node@npm:7.27.0":
version: 7.27.0
resolution: "@sentry/node@npm:7.27.0"
dependencies:
"@sentry/core": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/core": 7.27.0
"@sentry/types": 7.27.0
"@sentry/utils": 7.27.0
cookie: ^0.4.1
https-proxy-agent: ^5.0.0
lru_map: ^0.3.3
tslib: ^1.9.3
checksum: 1669d47dfaede34080a63f385bbac9908d4de68d055e1b8414554a77b9e89aee9839ce081a01e3301365d327f457c040b685536dba10f6e9eb71bf866fa9d065
checksum: a42cb398ed1e8579229cff2fb1303c9809369046995da3c382e27e28d053360dd007828b94a1ff599f85eacc1e7c822b484fc2875995f7d6bb61ac8bcb464542
languageName: node
linkType: hard
"@sentry/react@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/react@npm:7.29.0"
"@sentry/react@npm:7.27.0":
version: 7.27.0
resolution: "@sentry/react@npm:7.27.0"
dependencies:
"@sentry/browser": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/browser": 7.27.0
"@sentry/types": 7.27.0
"@sentry/utils": 7.27.0
hoist-non-react-statics: ^3.3.2
tslib: ^1.9.3
peerDependencies:
react: 15.x || 16.x || 17.x || 18.x
checksum: 022bf398f2cf43bf5e1f7340cfc02ccfc4cdc026fb3d6805e760d182bcb2601d413cf412beaa37fecbbf0dc554ce38c4a01d9bf38d1591f80cd059ee5235205d
checksum: 164cefe9efee1dc41bd7244c2da5567f3a772717bc537d40b961db1bb9e67458be13b79e0f68be4cbc2970daa868a5d786de682f40c8fbe0d0d42015bef32b81
languageName: node
linkType: hard
"@sentry/replay@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/replay@npm:7.29.0"
"@sentry/replay@npm:7.27.0":
version: 7.27.0
resolution: "@sentry/replay@npm:7.27.0"
dependencies:
"@sentry/core": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/core": 7.27.0
"@sentry/types": 7.27.0
"@sentry/utils": 7.27.0
peerDependencies:
"@sentry/browser": ">=7.24.0"
checksum: 539e18c128bb7966c9d4ea91ebd9cde6d42f42f96fa648d7ead5bff699e643f3792f57a344376586fab26f659f5e1431176faf0e12e6ea53508fd48ba928dd12
checksum: 440ac09c9acb2ced340c61ae56289dabdd006fd48a85545d8459990c93745b5e5cdbfcd0ec8311092a495094c2679239278650d2af373011df29d435333dbc66
languageName: node
linkType: hard
"@sentry/tracing@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/tracing@npm:7.29.0"
"@sentry/tracing@npm:7.27.0":
version: 7.27.0
resolution: "@sentry/tracing@npm:7.27.0"
dependencies:
"@sentry/core": 7.29.0
"@sentry/types": 7.29.0
"@sentry/utils": 7.29.0
"@sentry/core": 7.27.0
"@sentry/types": 7.27.0
"@sentry/utils": 7.27.0
tslib: ^1.9.3
checksum: 7ad9040664a8c65693aba2bdd9cecc8334ce25a296c01727d38649c7141106b78c92142626ce8e44983b4272e0f411010a3df99843a1af6d4f89e4f67ce6f57e
checksum: 203a3a6b467d6ccb12913f3da38e7d224f1d074dc3b3ac2e108a8ae6feff8d60ecb379eedf1b2bd82b1cdd58c11801df5b426e4a15be0a70845c9e2eae05b6ed
languageName: node
linkType: hard
"@sentry/types@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/types@npm:7.29.0"
checksum: 53815b66662a193cfd7024b9fb2477afb8178a771aa59f3bef10578cc940a9d7207722f9f04e2ca65a8e118cef012ac42f4936aa921aacdfc00a914bec88b009
"@sentry/types@npm:7.27.0":
version: 7.27.0
resolution: "@sentry/types@npm:7.27.0"
checksum: a22056aa589da4b17f42548b1a218edbb839d97f865c9214d89dc4a831389ac71c647af087c6f363df28d7adadb0e623ad77a7f3243d411458aafc655714424e
languageName: node
linkType: hard
"@sentry/utils@npm:7.29.0":
version: 7.29.0
resolution: "@sentry/utils@npm:7.29.0"
"@sentry/utils@npm:7.27.0":
version: 7.27.0
resolution: "@sentry/utils@npm:7.27.0"
dependencies:
"@sentry/types": 7.29.0
"@sentry/types": 7.27.0
tslib: ^1.9.3
checksum: 9914a2129692a5713453437d75b957a18ad5a4ef8085776e5499208ad329dea8da27ee2e2b74fdc089a3831b4e2929f8e6c0f3bc75528f41023d85de5077f462
checksum: d01f2d1999b877904df04e521a05a6978a756eeb518b6ca5099edf7888023691ed3b812eb089bd77c92069764b8928d285dd33cf667ab2030a8e590d79ca55da
languageName: node
linkType: hard
@ -2562,15 +2527,6 @@ __metadata:
languageName: node
linkType: hard
"@types/cors@npm:^2":
version: 2.8.13
resolution: "@types/cors@npm:2.8.13"
dependencies:
"@types/node": "*"
checksum: 7ef197ea19d2e5bf1313b8416baa6f3fd6dd887fd70191da1f804f557395357dafd8bc8bed0ac60686923406489262a7c8a525b55748f7b2b8afa686700de907
languageName: node
linkType: hard
"@types/eslint@npm:^8.4.10":
version: 8.4.10
resolution: "@types/eslint@npm:8.4.10"
@ -2581,7 +2537,7 @@ __metadata:
languageName: node
linkType: hard
"@types/estree@npm:*, @types/estree@npm:^1.0.0":
"@types/estree@npm:*":
version: 1.0.0
resolution: "@types/estree@npm:1.0.0"
checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443
@ -3785,16 +3741,6 @@ __metadata:
languageName: node
linkType: hard
"cors@npm:^2.8.5":
version: 2.8.5
resolution: "cors@npm:2.8.5"
dependencies:
object-assign: ^4
vary: ^1
checksum: ced838404ccd184f61ab4fdc5847035b681c90db7ac17e428f3d81d69e2989d2b680cc254da0e2554f5ed4f8a341820a1ce3d1c16b499f6e2f47a1b9b07b5006
languageName: node
linkType: hard
"cosmiconfig@npm:^7.0.1":
version: 7.1.0
resolution: "cosmiconfig@npm:7.1.0"
@ -3808,13 +3754,6 @@ __metadata:
languageName: node
linkType: hard
"countup.js@npm:^2.3.2":
version: 2.3.2
resolution: "countup.js@npm:2.3.2"
checksum: 77bb509cd17619568c8d841f9dbba7d75c70948d7f9acd0a1acea80e3894c4b4173e27e8896268c1f53415ebee465229f1e623da5ad759083a618484ac4f9b60
languageName: node
linkType: hard
"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0":
version: 1.2.0
resolution: "create-hash@npm:1.2.0"
@ -4642,7 +4581,7 @@ __metadata:
languageName: node
linkType: hard
"estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2":
"estree-walker@npm:^2.0.1":
version: 2.0.2
resolution: "estree-walker@npm:2.0.2"
checksum: 6151e6f9828abe2259e57f5fd3761335bb0d2ebd76dc1a01048ccee22fabcfef3c0859300f6d83ff0d1927849368775ec5a6d265dde2f6de5a1be1721cd94efc
@ -5255,9 +5194,8 @@ __metadata:
"@keplr-wallet/proto-types": ^0.11.25
"@keplr-wallet/types": ^0.11.25
"@next/eslint-plugin-next": ^13.0.5
"@sentry/nextjs": ^7.29.0
"@sentry/nextjs": ^7.27.0
"@svgr/webpack": ^6.5.1
"@types/cors": ^2
"@types/eslint": ^8.4.10
"@types/node": 18.11.9
"@types/react": 18.0.25
@ -5269,7 +5207,6 @@ __metadata:
"@typescript-eslint/parser": ^5.45.0
axios: ^0.27.2
buffer: ^6.0.3
cors: ^2.8.5
crypto: ^1.0.1
eslint: 8.28.0
eslint-config-next: 13.0.5
@ -5285,7 +5222,6 @@ __metadata:
next: 13.0.5
prettier: ^2.8.0
react: 18.2.0
react-countup: ^6.4.0
react-dom: 18.2.0
react-is: ^18.2.0
react-modal: ^3.16.1
@ -6475,7 +6411,7 @@ __metadata:
languageName: node
linkType: hard
"object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1":
"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1":
version: 4.1.1
resolution: "object-assign@npm:4.1.1"
checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f
@ -6905,18 +6841,6 @@ __metadata:
languageName: node
linkType: hard
"react-countup@npm:^6.4.0":
version: 6.4.0
resolution: "react-countup@npm:6.4.0"
dependencies:
"@rollup/plugin-babel": ^6.0.2
countup.js: ^2.3.2
peerDependencies:
react: ">= 16.3.0"
checksum: 259277fa70fc778fa3d67b375f5c44fdc3c8e5c9cc73225605f456adff31406966ff00379cb23ec771cb624a70c91c46d8216583c9dfc3fedb69071d31cb3208
languageName: node
linkType: hard
"react-dom@npm:18.2.0":
version: 18.2.0
resolution: "react-dom@npm:18.2.0"
@ -8123,13 +8047,6 @@ __metadata:
languageName: node
linkType: hard
"vary@npm:^1":
version: 1.1.2
resolution: "vary@npm:1.1.2"
checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b
languageName: node
linkType: hard
"warning@npm:^4.0.3":
version: 4.0.3
resolution: "warning@npm:4.0.3"