diff --git a/package.json b/package.json index 6952fdac8..0d7aaea27 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "@cosmjs/tendermint-rpc": "^0.32.1", "@datadog/browser-logs": "^5.23.3", "@dydxprotocol/v4-client-js": "3.4.0", - "@dydxprotocol/v4-localization": "1.1.373", + "@dydxprotocol/v4-localization": "1.1.379", "@dydxprotocol/v4-proto": "^7.0.0-dev.0", "@emotion/is-prop-valid": "^1.3.0", "@hugocxl/react-to-image": "^0.0.9", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 20b82bfdf..c550618ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,8 +33,8 @@ dependencies: specifier: 3.4.0 version: 3.4.0 '@dydxprotocol/v4-localization': - specifier: 1.1.373 - version: 1.1.373 + specifier: 1.1.379 + version: 1.1.379 '@dydxprotocol/v4-proto': specifier: ^7.0.0-dev.0 version: 7.0.5 @@ -1732,8 +1732,8 @@ packages: - utf-8-validate dev: false - /@dydxprotocol/v4-localization@1.1.373: - resolution: {integrity: sha512-RIJGSm4DiqJS7oMyOUS5VeqVnu22fUzOZ0w5KIDEv6yIzLK2GXowfAxZjH3RBoy73mW9ox3Bjsz6stCRttExkA==} + /@dydxprotocol/v4-localization@1.1.379: + resolution: {integrity: sha512-/vtaPHxWcmeDjJSI9LNo2GCzdCz9yzmNsDppEivpao0NM0L36SVVzUApM8zqGcWjRI/K6ZWSLmtCBXZaOShkFg==} dev: false /@dydxprotocol/v4-proto@7.0.5: @@ -3583,6 +3583,7 @@ packages: /@jest/expect-utils@29.7.0: resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + requiresBuild: true dependencies: jest-get-type: 29.6.3 dev: true @@ -3597,6 +3598,7 @@ packages: /@jest/types@29.6.3: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + requiresBuild: true dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 @@ -11038,16 +11040,19 @@ packages: /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + requiresBuild: true dev: true /@types/istanbul-lib-report@3.0.3: resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + requiresBuild: true dependencies: '@types/istanbul-lib-coverage': 2.0.6 dev: true /@types/istanbul-reports@3.0.4: resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + requiresBuild: true dependencies: '@types/istanbul-lib-report': 3.0.3 dev: true @@ -11184,6 +11189,7 @@ packages: /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + requiresBuild: true dev: true /@types/statuses@2.0.6: @@ -11234,10 +11240,12 @@ packages: /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + requiresBuild: true dev: true /@types/yargs@17.0.35: resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} + requiresBuild: true dependencies: '@types/yargs-parser': 21.0.3 dev: true @@ -14120,6 +14128,7 @@ packages: /archiver-utils@5.0.2: resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} engines: {node: '>= 14'} + requiresBuild: true dependencies: glob: 10.5.0 graceful-fs: 4.2.11 @@ -14133,6 +14142,7 @@ packages: /archiver@7.0.1: resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} engines: {node: '>= 14'} + requiresBuild: true dependencies: archiver-utils: 5.0.2 async: 3.2.6 @@ -14425,6 +14435,7 @@ packages: /b4a@1.7.3: resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} + requiresBuild: true peerDependencies: react-native-b4a: '*' peerDependenciesMeta: @@ -14488,6 +14499,7 @@ packages: /bare-events@2.8.2: resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + requiresBuild: true peerDependencies: bare-abort-controller: '*' peerDependenciesMeta: @@ -14519,11 +14531,13 @@ packages: /bare-os@3.6.2: resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} engines: {bare: '>=1.14.0'} + requiresBuild: true dev: true optional: true /bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + requiresBuild: true dependencies: bare-os: 3.6.2 dev: true @@ -14531,6 +14545,7 @@ packages: /bare-stream@2.7.0(bare-events@2.8.2): resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} + requiresBuild: true peerDependencies: bare-buffer: '*' bare-events: '*' @@ -14550,6 +14565,7 @@ packages: /bare-url@2.3.2: resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} + requiresBuild: true dependencies: bare-path: 3.0.0 dev: true @@ -14886,6 +14902,7 @@ packages: /buffer-crc32@1.0.0: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} + requiresBuild: true dev: true /buffer-from@1.1.2: @@ -15173,6 +15190,7 @@ packages: /chromium-bidi@0.5.8(devtools-protocol@0.0.1232444): resolution: {integrity: sha512-blqh+1cEQbHBKmok3rVJkBlBxt9beKBgOsxbFgs7UJcoVbbeZ+K7+6liAsjgpc8l1Xd55cQUy14fXZdGSb4zIw==} + requiresBuild: true peerDependencies: devtools-protocol: '*' dependencies: @@ -15184,6 +15202,7 @@ packages: /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + requiresBuild: true dev: true /cipher-base@1.0.7: @@ -15253,6 +15272,7 @@ packages: /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + requiresBuild: true /clsx@1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} @@ -15365,6 +15385,7 @@ packages: /compress-commons@6.0.2: resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} engines: {node: '>= 14'} + requiresBuild: true dependencies: crc-32: 1.2.2 crc32-stream: 6.0.0 @@ -15548,6 +15569,7 @@ packages: /crc32-stream@6.0.0: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} + requiresBuild: true dependencies: crc-32: 1.2.2 readable-stream: 4.7.0 @@ -15592,6 +15614,7 @@ packages: /cross-fetch@4.0.0: resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + requiresBuild: true dependencies: node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: @@ -15656,6 +15679,7 @@ packages: /css-shorthand-properties@1.1.2: resolution: {integrity: sha512-C2AugXIpRGQTxaCW0N7n5jD/p5irUmCrwl03TrnMFBHDbdq44CFWR2zO7rK9xPN4Eo3pUxC4vQzQgbIpzrD1PQ==} + requiresBuild: true dev: true /css-to-react-native@3.2.0: @@ -15667,6 +15691,7 @@ packages: /css-value@0.0.1: resolution: {integrity: sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==} + requiresBuild: true dev: true /cssesc@3.0.0: @@ -16049,6 +16074,7 @@ packages: /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + requiresBuild: true dependencies: clone: 1.0.4 @@ -16175,10 +16201,12 @@ packages: /devtools-protocol@0.0.1232444: resolution: {integrity: sha512-pM27vqEfxSxRkTMnF+XCmxSEb6duO5R+t8A9DEEJgy4Wz2RVanje2mmj99B6A3zv2r/qGfYlOvYznUhuokizmg==} + requiresBuild: true dev: true /devtools-protocol@0.0.1400418: resolution: {integrity: sha512-U8j75zDOXF8IP3o0Cgb7K4tFA9uUHEOru2Wx64+EUqL4LNOh9dRe1i8WKR1k3mSpjcCe3aIkTDvEwq0YkI4hfw==} + requiresBuild: true dev: true /didyoumean@1.2.2: @@ -16822,6 +16850,7 @@ packages: /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} + requiresBuild: true dev: true /escape-string-regexp@4.0.0: @@ -17572,6 +17601,7 @@ packages: /events-universal@1.0.1: resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + requiresBuild: true dependencies: bare-events: 2.8.2 transitivePeerDependencies: @@ -17629,6 +17659,7 @@ packages: /expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + requiresBuild: true dependencies: '@jest/expect-utils': 29.7.0 jest-get-type: 29.6.3 @@ -17701,6 +17732,7 @@ packages: /fast-deep-equal@2.0.1: resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + requiresBuild: true dev: true /fast-deep-equal@3.1.3: @@ -18362,6 +18394,7 @@ packages: /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + requiresBuild: true dev: true /graphemer@1.4.0: @@ -18893,6 +18926,7 @@ packages: /immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + requiresBuild: true dev: true /immer@10.2.0: @@ -19594,6 +19628,7 @@ packages: /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + requiresBuild: true /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -19789,6 +19824,7 @@ packages: /jest-diff@29.7.0: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + requiresBuild: true dependencies: chalk: 4.1.2 diff-sequences: 29.6.3 @@ -19799,11 +19835,13 @@ packages: /jest-get-type@29.6.3: resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + requiresBuild: true dev: true /jest-matcher-utils@29.7.0: resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + requiresBuild: true dependencies: chalk: 4.1.2 jest-diff: 29.7.0 @@ -19814,6 +19852,7 @@ packages: /jest-message-util@29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + requiresBuild: true dependencies: '@babel/code-frame': 7.27.1 '@jest/types': 29.6.3 @@ -19829,6 +19868,7 @@ packages: /jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + requiresBuild: true dependencies: '@jest/types': 29.6.3 '@types/node': 22.19.3 @@ -20021,6 +20061,7 @@ packages: /jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + requiresBuild: true dependencies: lie: 3.3.0 pako: 1.0.11 @@ -20124,6 +20165,7 @@ packages: /ky@0.33.3: resolution: {integrity: sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==} engines: {node: '>=14.16'} + requiresBuild: true dev: true /language-subtag-registry@0.3.23: @@ -20140,6 +20182,7 @@ packages: /lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} + requiresBuild: true dependencies: readable-stream: 2.3.8 dev: true @@ -20196,6 +20239,7 @@ packages: /lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + requiresBuild: true dependencies: immediate: 3.0.6 dev: true @@ -20307,6 +20351,7 @@ packages: /lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + requiresBuild: true dev: true /lodash.debounce@4.0.8: @@ -20387,6 +20432,7 @@ packages: /lodash.zip@4.2.0: resolution: {integrity: sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==} + requiresBuild: true dev: true /lodash@4.17.21: @@ -21279,6 +21325,7 @@ packages: /mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + requiresBuild: true dev: true /mkdirp-classic@0.5.3: @@ -21363,6 +21410,7 @@ packages: /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + requiresBuild: true /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -22793,6 +22841,7 @@ packages: /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + requiresBuild: true /process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} @@ -22962,6 +23011,7 @@ packages: /puppeteer-core@21.11.0: resolution: {integrity: sha512-ArbnyA3U5SGHokEvkfWjW+O8hOxV1RSJxOgriX/3A4xZRqixt9ZFHD0yPgZQF05Qj0oAqi8H/7stDorjoHY90Q==} engines: {node: '>=16.13.2'} + requiresBuild: true dependencies: '@puppeteer/browsers': 1.9.1 chromium-bidi: 0.5.8(devtools-protocol@0.0.1232444) @@ -23026,6 +23076,7 @@ packages: /query-selector-shadow-dom@1.0.1: resolution: {integrity: sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==} + requiresBuild: true dev: true /query-string@5.1.1: @@ -23552,6 +23603,7 @@ packages: /readdir-glob@1.1.3: resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + requiresBuild: true dependencies: minimatch: 5.1.6 dev: true @@ -23855,6 +23907,7 @@ packages: /resq@1.11.0: resolution: {integrity: sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==} + requiresBuild: true dependencies: fast-deep-equal: 2.0.1 dev: true @@ -23889,6 +23942,7 @@ packages: /rgb2hex@0.2.5: resolution: {integrity: sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==} + requiresBuild: true dev: true /rimraf@2.5.4: @@ -24051,6 +24105,7 @@ packages: /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + requiresBuild: true /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -24144,6 +24199,7 @@ packages: /serialize-error@11.0.3: resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==} engines: {node: '>=14.16'} + requiresBuild: true dependencies: type-fest: 2.19.0 dev: true @@ -24519,6 +24575,7 @@ packages: /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + requiresBuild: true dependencies: escape-string-regexp: 2.0.0 dev: true @@ -24603,6 +24660,7 @@ packages: /streamx@2.23.0: resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} + requiresBuild: true dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 @@ -24716,6 +24774,7 @@ packages: /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + requiresBuild: true dependencies: safe-buffer: 5.1.2 @@ -25043,6 +25102,7 @@ packages: /text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + requiresBuild: true dependencies: b4a: 1.7.3 transitivePeerDependencies: @@ -25897,6 +25957,7 @@ packages: /urlpattern-polyfill@10.0.0: resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + requiresBuild: true dev: true /use-callback-ref@1.3.3(@types/react@18.3.27)(react@18.3.1): @@ -27173,6 +27234,7 @@ packages: /ws@8.16.0: resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} engines: {node: '>=10.0.0'} + requiresBuild: true peerDependencies: bufferutil: ^4.0.1 utf-8-validate: '>=5.0.2' @@ -27421,6 +27483,7 @@ packages: /zip-stream@6.0.1: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} + requiresBuild: true dependencies: archiver-utils: 5.0.2 compress-commons: 6.0.2 diff --git a/src/hooks/rewards/util.ts b/src/hooks/rewards/util.ts index a7045a63d..3483c9232 100644 --- a/src/hooks/rewards/util.ts +++ b/src/hooks/rewards/util.ts @@ -23,6 +23,17 @@ export function feesToEstimatedDollarRewards(totalFees?: number): number { return totalFees * CURRENT_SURGE_REWARDS_DETAILS.rebateFraction; } +export function positionToBonkRewards(position: number | undefined) { + if (!position) return 0; + if (position === 1) return 25000; + if (position === 2) return 15000; + if (position === 3) return 10000; + if (position === 4 || position === 5) return 5000; + if (position >= 6 || position <= 10) return 4000; + if (position >= 11 || position <= 20) return 2000; + return 0; +} + export const CURRENT_SURGE_REWARDS_DETAILS = { season: 10, rewardAmount: '', @@ -33,6 +44,10 @@ export const CURRENT_SURGE_REWARDS_DETAILS = { endTime: '2026-01-31T23:59:59.000Z', // end of jan 2026 }; +export const CURRENT_BONK_REWARDS_DETAILS = { + endTime: '2026-02-28T23:59:59.000Z', // end of february 2026 +}; + export const DEC_2025_COMPETITION_DETAILS = { rewardAmount: '$1M', rewardAmountUsd: 1_000_000, diff --git a/src/hooks/useEnableBonkPnlLeaderboard.ts b/src/hooks/useEnableBonkPnlLeaderboard.ts index 22619555d..83aa82b5d 100644 --- a/src/hooks/useEnableBonkPnlLeaderboard.ts +++ b/src/hooks/useEnableBonkPnlLeaderboard.ts @@ -1,9 +1,9 @@ -// import { isDev } from '@/constants/networks'; +import { isDev } from '@/constants/networks'; import { StatsigFlags } from '@/constants/statsig'; import { useStatsigGateValue } from './useStatsig'; export const useEnableBonkPnlLeaderboard = () => { const bonkPnlLeaderboardFF = useStatsigGateValue(StatsigFlags.ffBonkPnlLeaderboard); - return bonkPnlLeaderboardFF; + return isDev || bonkPnlLeaderboardFF; }; diff --git a/src/pages/token/BonkIncentivesPanel.tsx b/src/pages/token/BonkIncentivesPanel.tsx new file mode 100644 index 000000000..0b52c5032 --- /dev/null +++ b/src/pages/token/BonkIncentivesPanel.tsx @@ -0,0 +1,187 @@ +import { useEffect, useMemo, useState } from 'react'; + +import { BonsaiCore } from '@/bonsai/ontology'; +import { Duration } from 'luxon'; +import styled from 'styled-components'; +import tw from 'twin.macro'; + +import { STRING_KEYS } from '@/constants/localization'; + +import { + addRewardsToLeaderboardEntry, + useBonkPnlDistribution, + useFeeLeaderboard, +} from '@/hooks/rewards/hooks'; +import { CURRENT_BONK_REWARDS_DETAILS, positionToBonkRewards } from '@/hooks/rewards/util'; +import { useAccounts } from '@/hooks/useAccounts'; +import { useNow } from '@/hooks/useNow'; +import { useStringGetter } from '@/hooks/useStringGetter'; + +import { layoutMixins } from '@/styles/layoutMixins'; + +import { Icon, IconName } from '@/components/Icon'; +import { Output, OutputType } from '@/components/Output'; +import { Panel } from '@/components/Panel'; +import { SuccessTag, TagSize } from '@/components/Tag'; +import { WithTooltip } from '@/components/WithTooltip'; + +import { useAppDispatch, useAppSelector } from '@/state/appTypes'; +import { markLaunchIncentivesSeen } from '@/state/appUiConfigs'; + +export const BonkIncentivesPanel = () => { + const dispatch = useAppDispatch(); + + useEffect(() => { + dispatch(markLaunchIncentivesSeen()); + }, [dispatch]); + + return ; +}; + +const BonkIncentivesRewardsPanel = () => { + const stringGetter = useStringGetter(); + + return ( + <$Panel> +
+
+
+
+
+ + {stringGetter({ key: STRING_KEYS.BONK_REWARDS_HEADLINE })} + +
+ + {stringGetter({ key: STRING_KEYS.ACTIVE })} + +
+ + + {stringGetter({ key: STRING_KEYS.BONK_REWARDS_BODY })} + + + +
+

{stringGetter({ key: STRING_KEYS.BONK_REWARDS_RULES })}

+
    +
  • {stringGetter({ key: STRING_KEYS.BONK_REWARDS_RULE_1 })}
  • +
  • {stringGetter({ key: STRING_KEYS.BONK_REWARDS_RULE_2 })}
  • +
  • {stringGetter({ key: STRING_KEYS.BONK_REWARDS_RULE_3 })}
  • +
+
+ + + {stringGetter({ key: STRING_KEYS.BONK_REWARDS_BODY_2 })} + +
+ +
+ +
+ +
+
+
+ +
+ + ); +}; + +const EstimatedMonthlyRewards = () => { + const stringGetter = useStringGetter(); + const { dydxAddress } = useAccounts(); + const dydxPrice = useAppSelector(BonsaiCore.rewardParams.data).tokenPrice; + + const { data, isLoading: feeRewardsLoading } = useFeeLeaderboard({ + address: dydxAddress, + }); + const addressEntry = useMemo( + () => + data?.addressEntry ? addRewardsToLeaderboardEntry(data.addressEntry, dydxPrice) : undefined, + [data?.addressEntry, dydxPrice] + ); + + const { data: bonkPnls, isLoading: bonkPnlLoading } = useBonkPnlDistribution(); + + const userPosition = bonkPnls?.find( + (item: { address: string | undefined }) => item.address === dydxAddress + )?.position; + + const userBonkRewards = positionToBonkRewards(userPosition); + const userEstimatedRewards = (addressEntry?.estimatedDollarRewards ?? 0) + userBonkRewards; + + const isLoading = bonkPnlLoading || feeRewardsLoading || !dydxPrice; + + return ( +
+
+
+ + {stringGetter({ key: STRING_KEYS.ESTIMATED_MONTHLY_REWARD })} + +
+ } + /> + <$Points> + + +
+ reward-stars +
+ + ); +}; + +const MinutesCountdown = ({ endTime }: { endTime: string }) => { + const targetMs = Date.parse(endTime); + const now = useNow(); + const [msLeft, setMsLeft] = useState(Math.max(0, Math.floor(targetMs - Date.now()))); + + useEffect(() => { + if (now > targetMs) { + return; + } + + const newMsLeft = Math.max(0, Math.floor(targetMs - now)); + setMsLeft(newMsLeft); + }, [now, targetMs]); + + const formattedMsLeft = useMemo(() => { + return Duration.fromMillis(msLeft) + .shiftTo('days', 'hours', 'minutes', 'seconds') + .toFormat("d'd' h'h' m'm' s's'", { floor: true }); + }, [msLeft]); + + return
{formattedMsLeft}
; +}; + +const $Panel = tw(Panel)`bg-color-layer-3 w-full`; + +const $Points = styled.span` + ${layoutMixins.inlineRow} + gap: 0.25rem; + font: var(--font-large-book); + color: var(--color-text-0); + + output { + color: var(--color-text-2); + } +`; diff --git a/src/pages/token/BonkPnlPanel.tsx b/src/pages/token/BonkPnlPanel.tsx index 4c5ae75ae..c37a936c3 100644 --- a/src/pages/token/BonkPnlPanel.tsx +++ b/src/pages/token/BonkPnlPanel.tsx @@ -5,6 +5,7 @@ import styled from 'styled-components'; import { STRING_KEYS, StringGetterFunction } from '@/constants/localization'; import { BonkPnlItem, useBonkPnlDistribution } from '@/hooks/rewards/hooks'; +import { positionToBonkRewards } from '@/hooks/rewards/util'; import { useAccounts } from '@/hooks/useAccounts'; import { useStringGetter } from '@/hooks/useStringGetter'; @@ -24,6 +25,7 @@ export enum BonkPnlTableColumns { Rank = 'Rank', Trader = 'Trader', PNL = 'PNL', + Rewards = 'Estimated Rewards', } export const BonkPnlPanel = () => { @@ -76,7 +78,9 @@ export const BonkPnlPanel = () => { <$Panel>
-
Bonk PNL Leaderboard
+
+ {stringGetter({ key: STRING_KEYS.COMPETITION_LEADERBOARD_TITLE })} +