From a5a41ee5ce9ca3ebbeb64c2f252ca2587d05e382 Mon Sep 17 00:00:00 2001 From: Brian Stafford Date: Tue, 3 Feb 2026 12:32:20 -0600 Subject: [PATCH 1/5] start new user interface Lays out the structure for the new React-based user interface. Implements wallet initialization sequence. Implements basic header and sidebar interface used for most views. Implements functionality related to forms and context management. --- client/core/core.go | 44 +- client/core/core_test.go | 67 +- client/core/exchangeratefetcher.go | 4 +- client/core/notification.go | 8 +- client/core/types.go | 1 + client/webserver/api.go | 26 +- client/webserver/live_test.go | 8 +- client/webserver/middleware.go | 15 - client/webserver/newui.go | 27 + client/webserver/newui/package-lock.json | 5549 +++++++++++++++++ client/webserver/newui/package.json | 31 + client/webserver/newui/src/App.tsx | 39 + .../webserver/newui/src/components/Header.tsx | 67 + .../newui/src/components/InitWizard.tsx | 162 + .../newui/src/components/Loading.tsx | 7 + .../webserver/newui/src/components/Login.tsx | 5 + .../newui/src/components/MainFrame.tsx | 41 + .../webserver/newui/src/components/Modals.tsx | 35 + .../newui/src/components/PasswordInput.tsx | 30 + .../newui/src/components/Portfolio.tsx | 5 + .../newui/src/components/Receive.tsx | 7 + .../webserver/newui/src/components/Send.tsx | 7 + .../newui/src/components/Settings.tsx | 5 + .../newui/src/components/Sidebar.tsx | 30 + .../webserver/newui/src/components/Swap.tsx | 7 + .../webserver/newui/src/components/Trade.tsx | 122 + .../newui/src/components/UnlockForm.tsx | 43 + .../newui/src/font/Inter-variable.woff2 | Bin 0 -> 349424 bytes .../newui/src/font/icons-svg/add.svg | 4 + .../newui/src/font/icons-svg/arrowdown.svg | 3 + .../newui/src/font/icons-svg/arrowleft.svg | 3 + .../newui/src/font/icons-svg/arrowright.svg | 3 + .../newui/src/font/icons-svg/arrowup.svg | 3 + .../newui/src/font/icons-svg/barchart.svg | 3 + .../newui/src/font/icons-svg/bell.svg | 3 + .../newui/src/font/icons-svg/eyeclosed.svg | 3 + .../newui/src/font/icons-svg/eyeopen.svg | 3 + .../newui/src/font/icons-svg/gear.svg | 3 + .../newui/src/font/icons-svg/key.svg | 3 + .../newui/src/font/icons-svg/knobs.svg | 3 + .../newui/src/font/icons-svg/lock-closed.svg | 3 + .../newui/src/font/icons-svg/portfolio.svg | 3 + .../newui/src/font/icons-svg/qrcode.svg | 3 + .../newui/src/font/icons-svg/send.svg | 3 + .../newui/src/font/icons-svg/star-filled.svg | 3 + .../newui/src/font/icons-svg/star.svg | 3 + .../newui/src/font/icons-svg/swap.svg | 4 + client/webserver/newui/src/font/icons.woff2 | Bin 0 -> 3068 bytes .../font/inconsolata-v15-latin-regular.woff2 | Bin 0 -> 15620 bytes .../newui/src/img/bison-full_97x50.png | Bin 0 -> 3860 bytes client/webserver/newui/src/img/coins/a.png | Bin 0 -> 2332 bytes .../webserver/newui/src/img/coins/across.png | Bin 0 -> 9820 bytes client/webserver/newui/src/img/coins/b.png | Bin 0 -> 2187 bytes client/webserver/newui/src/img/coins/base.png | Bin 0 -> 3698 bytes client/webserver/newui/src/img/coins/bch.png | Bin 0 -> 4103 bytes client/webserver/newui/src/img/coins/btc.png | Bin 0 -> 3636 bytes client/webserver/newui/src/img/coins/c.png | Bin 0 -> 2227 bytes client/webserver/newui/src/img/coins/d.png | Bin 0 -> 2213 bytes client/webserver/newui/src/img/coins/dash.png | Bin 0 -> 2538 bytes client/webserver/newui/src/img/coins/dash.svg | 1 + client/webserver/newui/src/img/coins/dcr.png | Bin 0 -> 2909 bytes .../webserver/newui/src/img/coins/dextt.png | Bin 0 -> 7041 bytes client/webserver/newui/src/img/coins/dgb.png | Bin 0 -> 3959 bytes client/webserver/newui/src/img/coins/dgb.svg | 11 + client/webserver/newui/src/img/coins/doge.png | Bin 0 -> 3075 bytes client/webserver/newui/src/img/coins/e.png | Bin 0 -> 1779 bytes client/webserver/newui/src/img/coins/eth.png | Bin 0 -> 2593 bytes client/webserver/newui/src/img/coins/f.png | Bin 0 -> 1758 bytes client/webserver/newui/src/img/coins/firo.png | Bin 0 -> 4521 bytes client/webserver/newui/src/img/coins/firo.svg | 1 + client/webserver/newui/src/img/coins/g.png | Bin 0 -> 2373 bytes client/webserver/newui/src/img/coins/h.png | Bin 0 -> 1771 bytes client/webserver/newui/src/img/coins/i.png | Bin 0 -> 1937 bytes client/webserver/newui/src/img/coins/j.png | Bin 0 -> 1997 bytes client/webserver/newui/src/img/coins/k.png | Bin 0 -> 2273 bytes client/webserver/newui/src/img/coins/l.png | Bin 0 -> 1738 bytes client/webserver/newui/src/img/coins/ltc.png | Bin 0 -> 2181 bytes client/webserver/newui/src/img/coins/m.png | Bin 0 -> 2402 bytes .../webserver/newui/src/img/coins/matic.png | Bin 0 -> 13465 bytes client/webserver/newui/src/img/coins/mona.png | Bin 0 -> 2599 bytes client/webserver/newui/src/img/coins/n.png | Bin 0 -> 2228 bytes client/webserver/newui/src/img/coins/o.png | Bin 0 -> 2405 bytes client/webserver/newui/src/img/coins/p.png | Bin 0 -> 2066 bytes .../webserver/newui/src/img/coins/polygon.png | Bin 0 -> 13465 bytes client/webserver/newui/src/img/coins/q.png | Bin 0 -> 2554 bytes client/webserver/newui/src/img/coins/r.png | Bin 0 -> 2190 bytes client/webserver/newui/src/img/coins/s.png | Bin 0 -> 2314 bytes client/webserver/newui/src/img/coins/t.png | Bin 0 -> 1694 bytes client/webserver/newui/src/img/coins/u.png | Bin 0 -> 2128 bytes client/webserver/newui/src/img/coins/usdc.png | Bin 0 -> 4537 bytes client/webserver/newui/src/img/coins/usdt.png | Bin 0 -> 8820 bytes client/webserver/newui/src/img/coins/v.png | Bin 0 -> 2341 bytes client/webserver/newui/src/img/coins/vtc.png | Bin 0 -> 3188 bytes client/webserver/newui/src/img/coins/w.png | Bin 0 -> 2785 bytes client/webserver/newui/src/img/coins/wbtc.png | Bin 0 -> 7543 bytes client/webserver/newui/src/img/coins/wbtc.svg | 1 + client/webserver/newui/src/img/coins/weth.png | Bin 0 -> 6302 bytes client/webserver/newui/src/img/coins/weth.svg | 1 + client/webserver/newui/src/img/coins/x.png | Bin 0 -> 2381 bytes client/webserver/newui/src/img/coins/xmr.png | Bin 0 -> 7504 bytes client/webserver/newui/src/img/coins/xmr.svg | 1 + client/webserver/newui/src/img/coins/y.png | Bin 0 -> 2194 bytes client/webserver/newui/src/img/coins/z.png | Bin 0 -> 2037 bytes client/webserver/newui/src/img/coins/zcl.png | Bin 0 -> 4902 bytes client/webserver/newui/src/img/coins/zec.png | Bin 0 -> 4061 bytes client/webserver/newui/src/img/favicon.png | Bin 0 -> 3170 bytes client/webserver/newui/src/index.html | 17 + client/webserver/newui/src/index.tsx | 7 + client/webserver/newui/src/js/application.ts | 596 ++ client/webserver/newui/src/js/assets.ts | 149 + client/webserver/newui/src/js/doc.ts | 149 + client/webserver/newui/src/js/http.ts | 37 + client/webserver/newui/src/js/intl.ts | 17 + client/webserver/newui/src/js/registry.ts | 1369 ++++ client/webserver/newui/src/js/state.ts | 90 + client/webserver/newui/src/js/ws.ts | 151 + .../webserver/newui/src/scss/application.scss | 11 + client/webserver/newui/src/scss/icons.scss | 128 + client/webserver/newui/src/scss/main.scss | 273 + client/webserver/newui/src/scss/mixins.scss | 19 + .../webserver/newui/src/scss/typography.scss | 97 + .../webserver/newui/src/scss/utilities.scss | 256 + client/webserver/newui/src/scss/vars.scss | 33 + client/webserver/newui/tsconfig.json | 13 + client/webserver/newui/webpack.config.js | 58 + client/webserver/oldui.go | 27 + client/webserver/types.go | 9 +- client/webserver/webserver.go | 152 +- client/webserver/webserver_test.go | 32 +- dex/fiatrates/fiatrates.go | 1 + 130 files changed, 9962 insertions(+), 196 deletions(-) create mode 100644 client/webserver/newui.go create mode 100644 client/webserver/newui/package-lock.json create mode 100644 client/webserver/newui/package.json create mode 100644 client/webserver/newui/src/App.tsx create mode 100644 client/webserver/newui/src/components/Header.tsx create mode 100644 client/webserver/newui/src/components/InitWizard.tsx create mode 100644 client/webserver/newui/src/components/Loading.tsx create mode 100644 client/webserver/newui/src/components/Login.tsx create mode 100644 client/webserver/newui/src/components/MainFrame.tsx create mode 100644 client/webserver/newui/src/components/Modals.tsx create mode 100644 client/webserver/newui/src/components/PasswordInput.tsx create mode 100644 client/webserver/newui/src/components/Portfolio.tsx create mode 100644 client/webserver/newui/src/components/Receive.tsx create mode 100644 client/webserver/newui/src/components/Send.tsx create mode 100644 client/webserver/newui/src/components/Settings.tsx create mode 100644 client/webserver/newui/src/components/Sidebar.tsx create mode 100644 client/webserver/newui/src/components/Swap.tsx create mode 100644 client/webserver/newui/src/components/Trade.tsx create mode 100644 client/webserver/newui/src/components/UnlockForm.tsx create mode 100644 client/webserver/newui/src/font/Inter-variable.woff2 create mode 100644 client/webserver/newui/src/font/icons-svg/add.svg create mode 100644 client/webserver/newui/src/font/icons-svg/arrowdown.svg create mode 100644 client/webserver/newui/src/font/icons-svg/arrowleft.svg create mode 100644 client/webserver/newui/src/font/icons-svg/arrowright.svg create mode 100644 client/webserver/newui/src/font/icons-svg/arrowup.svg create mode 100644 client/webserver/newui/src/font/icons-svg/barchart.svg create mode 100644 client/webserver/newui/src/font/icons-svg/bell.svg create mode 100644 client/webserver/newui/src/font/icons-svg/eyeclosed.svg create mode 100644 client/webserver/newui/src/font/icons-svg/eyeopen.svg create mode 100644 client/webserver/newui/src/font/icons-svg/gear.svg create mode 100644 client/webserver/newui/src/font/icons-svg/key.svg create mode 100644 client/webserver/newui/src/font/icons-svg/knobs.svg create mode 100644 client/webserver/newui/src/font/icons-svg/lock-closed.svg create mode 100644 client/webserver/newui/src/font/icons-svg/portfolio.svg create mode 100644 client/webserver/newui/src/font/icons-svg/qrcode.svg create mode 100644 client/webserver/newui/src/font/icons-svg/send.svg create mode 100644 client/webserver/newui/src/font/icons-svg/star-filled.svg create mode 100644 client/webserver/newui/src/font/icons-svg/star.svg create mode 100644 client/webserver/newui/src/font/icons-svg/swap.svg create mode 100644 client/webserver/newui/src/font/icons.woff2 create mode 100644 client/webserver/newui/src/font/inconsolata-v15-latin-regular.woff2 create mode 100644 client/webserver/newui/src/img/bison-full_97x50.png create mode 100644 client/webserver/newui/src/img/coins/a.png create mode 100644 client/webserver/newui/src/img/coins/across.png create mode 100644 client/webserver/newui/src/img/coins/b.png create mode 100644 client/webserver/newui/src/img/coins/base.png create mode 100644 client/webserver/newui/src/img/coins/bch.png create mode 100644 client/webserver/newui/src/img/coins/btc.png create mode 100644 client/webserver/newui/src/img/coins/c.png create mode 100644 client/webserver/newui/src/img/coins/d.png create mode 100644 client/webserver/newui/src/img/coins/dash.png create mode 100644 client/webserver/newui/src/img/coins/dash.svg create mode 100644 client/webserver/newui/src/img/coins/dcr.png create mode 100644 client/webserver/newui/src/img/coins/dextt.png create mode 100644 client/webserver/newui/src/img/coins/dgb.png create mode 100644 client/webserver/newui/src/img/coins/dgb.svg create mode 100644 client/webserver/newui/src/img/coins/doge.png create mode 100644 client/webserver/newui/src/img/coins/e.png create mode 100644 client/webserver/newui/src/img/coins/eth.png create mode 100644 client/webserver/newui/src/img/coins/f.png create mode 100644 client/webserver/newui/src/img/coins/firo.png create mode 100644 client/webserver/newui/src/img/coins/firo.svg create mode 100644 client/webserver/newui/src/img/coins/g.png create mode 100644 client/webserver/newui/src/img/coins/h.png create mode 100644 client/webserver/newui/src/img/coins/i.png create mode 100644 client/webserver/newui/src/img/coins/j.png create mode 100644 client/webserver/newui/src/img/coins/k.png create mode 100644 client/webserver/newui/src/img/coins/l.png create mode 100644 client/webserver/newui/src/img/coins/ltc.png create mode 100644 client/webserver/newui/src/img/coins/m.png create mode 100644 client/webserver/newui/src/img/coins/matic.png create mode 100644 client/webserver/newui/src/img/coins/mona.png create mode 100644 client/webserver/newui/src/img/coins/n.png create mode 100644 client/webserver/newui/src/img/coins/o.png create mode 100644 client/webserver/newui/src/img/coins/p.png create mode 100644 client/webserver/newui/src/img/coins/polygon.png create mode 100644 client/webserver/newui/src/img/coins/q.png create mode 100644 client/webserver/newui/src/img/coins/r.png create mode 100644 client/webserver/newui/src/img/coins/s.png create mode 100644 client/webserver/newui/src/img/coins/t.png create mode 100644 client/webserver/newui/src/img/coins/u.png create mode 100644 client/webserver/newui/src/img/coins/usdc.png create mode 100644 client/webserver/newui/src/img/coins/usdt.png create mode 100644 client/webserver/newui/src/img/coins/v.png create mode 100644 client/webserver/newui/src/img/coins/vtc.png create mode 100644 client/webserver/newui/src/img/coins/w.png create mode 100644 client/webserver/newui/src/img/coins/wbtc.png create mode 100644 client/webserver/newui/src/img/coins/wbtc.svg create mode 100644 client/webserver/newui/src/img/coins/weth.png create mode 100644 client/webserver/newui/src/img/coins/weth.svg create mode 100644 client/webserver/newui/src/img/coins/x.png create mode 100644 client/webserver/newui/src/img/coins/xmr.png create mode 100644 client/webserver/newui/src/img/coins/xmr.svg create mode 100644 client/webserver/newui/src/img/coins/y.png create mode 100644 client/webserver/newui/src/img/coins/z.png create mode 100644 client/webserver/newui/src/img/coins/zcl.png create mode 100644 client/webserver/newui/src/img/coins/zec.png create mode 100644 client/webserver/newui/src/img/favicon.png create mode 100644 client/webserver/newui/src/index.html create mode 100644 client/webserver/newui/src/index.tsx create mode 100644 client/webserver/newui/src/js/application.ts create mode 100644 client/webserver/newui/src/js/assets.ts create mode 100644 client/webserver/newui/src/js/doc.ts create mode 100644 client/webserver/newui/src/js/http.ts create mode 100644 client/webserver/newui/src/js/intl.ts create mode 100644 client/webserver/newui/src/js/registry.ts create mode 100644 client/webserver/newui/src/js/state.ts create mode 100644 client/webserver/newui/src/js/ws.ts create mode 100644 client/webserver/newui/src/scss/application.scss create mode 100644 client/webserver/newui/src/scss/icons.scss create mode 100644 client/webserver/newui/src/scss/main.scss create mode 100644 client/webserver/newui/src/scss/mixins.scss create mode 100644 client/webserver/newui/src/scss/typography.scss create mode 100644 client/webserver/newui/src/scss/utilities.scss create mode 100644 client/webserver/newui/src/scss/vars.scss create mode 100644 client/webserver/newui/tsconfig.json create mode 100644 client/webserver/newui/webpack.config.js create mode 100644 client/webserver/oldui.go diff --git a/client/core/core.go b/client/core/core.go index 4dc74519d0..12cbe944a7 100644 --- a/client/core/core.go +++ b/client/core/core.go @@ -1896,13 +1896,13 @@ func (c *Core) Run(ctx context.Context) { // Construct enabled fiat rate sources. fetchers: - for token, rateFetcher := range fiatRateFetchers { + for src, f := range fiatRateFetchers { for _, v := range disabledSources { - if token == v { + if src == v { continue fetchers } } - c.fiatRateSources[token] = newCommonRateSource(rateFetcher) + c.fiatRateSources[src] = newCommonRateSource(src, f) } c.fetchFiatExchangeRates(ctx) @@ -2712,12 +2712,14 @@ func (c *Core) assetMap() map[uint32]*SupportedAsset { // User is a thread-safe getter for the User. func (c *Core) User() *User { m := c.coreMesh() + idRates, tickerRates := c.fiatConversions() return &User{ Assets: c.assetMap(), Exchanges: c.Exchanges(), Initialized: c.IsInitialized(), SeedGenerationTime: c.seedGenerationTime, - FiatRates: c.fiatConversions(), + FiatRates: idRates, + TickerRates: tickerRates, Net: c.net, ExtensionConfig: c.extensionModeConfig, Actions: c.requestedActionsList(), @@ -11925,9 +11927,9 @@ func (c *Core) refreshFiatRates(ctx context.Context) { // Remove expired rate source if any. c.removeExpiredRateSources() - fiatRatesMap := c.fiatConversions() - if len(fiatRatesMap) != 0 { - c.notify(newFiatRatesUpdate(fiatRatesMap)) + idRates, tickerRates := c.fiatConversions() + if len(idRates) != 0 { + c.notify(newFiatRatesUpdate(idRates, tickerRates)) } } @@ -11946,12 +11948,13 @@ func (c *Core) FiatRateSources() map[string]bool { // FiatConversionRates are the currently cached fiat conversion rates. Must have // 1 or more fiat rate sources enabled. func (c *Core) FiatConversionRates() map[uint32]float64 { - return c.fiatConversions() + idRates, _ := c.fiatConversions() + return idRates } // fiatConversions returns fiat rate for all supported assets that have a // wallet. -func (c *Core) fiatConversions() map[uint32]float64 { +func (c *Core) fiatConversions() (map[uint32]float64, map[string]float64) { assetIDs := make(map[uint32]struct{}) supportedAssets := asset.Assets() for assetID, asset := range supportedAssets { @@ -11962,6 +11965,7 @@ func (c *Core) fiatConversions() map[uint32]float64 { } fiatRatesMap := make(map[uint32]float64, len(supportedAssets)) + tickerRatesMap := make(map[string]float64) for assetID := range assetIDs { var rateSum float64 var sources int @@ -11980,19 +11984,22 @@ func (c *Core) fiatConversions() map[uint32]float64 { } } if rateSum != 0 { - fiatRatesMap[assetID] = rateSum / float64(sources) // get average rate. + r := rateSum / float64(sources) // get average rate. + fiatRatesMap[assetID] = r + ui, _ := asset.UnitInfo(assetID) + tickerRatesMap[ui.Conventional.Unit] = r } } - return fiatRatesMap + return fiatRatesMap, tickerRatesMap } // ToggleRateSourceStatus toggles a fiat rate source status. If disable is true, // the fiat rate source is disabled, otherwise the rate source is enabled. -func (c *Core) ToggleRateSourceStatus(source string, disable bool) error { - if disable { - return c.disableRateSource(source) +func (c *Core) ToggleRateSourceStatus(source string, enable bool) error { + if enable { + return c.enableRateSource(source) } - return c.enableRateSource(source) + return c.disableRateSource(source) } // enableRateSource enables a fiat rate source. @@ -12010,7 +12017,7 @@ func (c *Core) enableRateSource(source string) error { } // Build fiat rate source. - rateSource := newCommonRateSource(rateFetcher) + rateSource := newCommonRateSource(source, rateFetcher) c.fiatRateSources[source] = rateSource select { @@ -12521,6 +12528,11 @@ func (c *Core) ExtensionModeConfig() *ExtensionModeConfig { return c.extensionModeConfig } +func (c *Core) ValidateSeed(seed string) (bool, error) { + _, _, err := decodeSeedString(seed) + return err == nil, nil +} + // calcParcelLimit computes the users score-scaled user parcel limit. func calcParcelLimit(tier int64, score, maxScore int32) uint32 { // Users limit starts at 2 parcels per tier. diff --git a/client/core/core_test.go b/client/core/core_test.go index 7aec6bcae2..d4902fefdc 100644 --- a/client/core/core_test.go +++ b/client/core/core_test.go @@ -10895,7 +10895,7 @@ func TestToggleRateSourceStatus(t *testing.T) { // Test disabling fiat rate source. for _, test := range tests { - err := tCore.ToggleRateSourceStatus(test.source, true) + err := tCore.ToggleRateSourceStatus(test.source, false) if test.wantErr != (err != nil) { t.Fatalf("%s: wantErr = %t, err = %v", test.name, test.wantErr, err) } @@ -10904,76 +10904,15 @@ func TestToggleRateSourceStatus(t *testing.T) { // Test enabling fiat rate source. for _, test := range tests { if test.init { - tCore.fiatRateSources[test.source] = newCommonRateSource(tFetcher) + tCore.fiatRateSources[test.source] = newCommonRateSource(test.source, tFetcher) } - err := tCore.ToggleRateSourceStatus(test.source, false) + err := tCore.ToggleRateSourceStatus(test.source, true) if test.wantErr != (err != nil) { t.Fatalf("%s: wantErr = %t, err = %v", test.name, test.wantErr, err) } } } -func TestFiatRateSources(t *testing.T) { - rig := newTestRig() - defer rig.shutdown() - tCore := rig.core - supportedFetchers := len(fiatRateFetchers) - rateSources := tCore.FiatRateSources() - if len(rateSources) != supportedFetchers { - t.Fatalf("Expected %d number of fiat rate source/fetchers", supportedFetchers) - } -} - -func TestFiatConversions(t *testing.T) { - rig := newTestRig() - defer rig.shutdown() - tCore := rig.core - - // No fiat rate source initialized - fiatRates := tCore.fiatConversions() - if len(fiatRates) != 0 { - t.Fatal("Unexpected asset rate values.") - } - - // Initialize fiat rate sources. - for token := range fiatRateFetchers { - tCore.fiatRateSources[token] = newCommonRateSource(tFetcher) - } - - // Fetch fiat rates. - tCore.wg.Add(1) - go func() { - defer tCore.wg.Done() - tCore.refreshFiatRates(tCtx) - }() - tCore.wg.Wait() - - // Expects assets fiat rate values. - fiatRates = tCore.fiatConversions() - if len(fiatRates) != 2 { - t.Fatal("Expected assets fiat rate for two assets") - } - - // fiat rates for assets can expire, and fiat rate fetchers can be - // removed if expired. - for token, source := range tCore.fiatRateSources { - source.fiatRates[tUTXOAssetA.ID].lastUpdate = time.Now().Add(-time.Minute) - source.fiatRates[tUTXOAssetB.ID].lastUpdate = time.Now().Add(-time.Minute) - if source.isExpired(55 * time.Second) { - delete(tCore.fiatRateSources, token) - } - } - - fiatRates = tCore.fiatConversions() - if len(fiatRates) != 0 { - t.Fatal("Unexpected assets fiat rate values, expected to ignore expired fiat rates.") - } - - if len(tCore.fiatRateSources) != 0 { - t.Fatal("Expected fiat conversion to be disabled, all rate source data has expired.") - } -} - func TestValidateAddress(t *testing.T) { rig := newTestRig() defer rig.shutdown() diff --git a/client/core/exchangeratefetcher.go b/client/core/exchangeratefetcher.go index 876a340623..9c44539636 100644 --- a/client/core/exchangeratefetcher.go +++ b/client/core/exchangeratefetcher.go @@ -25,7 +25,6 @@ const ( // Tokens. Used to identify fiat rate source, source name must not contain a // comma. - messari = "Messari" coinpaprika = "Coinpaprika" dcrdataDotOrg = "dcrdata" ) @@ -64,6 +63,7 @@ type fiatRateInfo struct { type rateFetcher func(context context.Context, logger dex.Logger, assets map[uint32]*SupportedAsset) map[uint32]float64 type commonRateSource struct { + source string fetchRates rateFetcher mtx sync.RWMutex @@ -114,7 +114,7 @@ func (source *commonRateSource) refreshRates(ctx context.Context, logger dex.Log } // Used to initialize a fiat rate source. -func newCommonRateSource(fetcher rateFetcher) *commonRateSource { +func newCommonRateSource(name string, fetcher rateFetcher) *commonRateSource { return &commonRateSource{ fetchRates: fetcher, fiatRates: make(map[uint32]*fiatRateInfo), diff --git a/client/core/notification.go b/client/core/notification.go index a1d0bd9b81..4baf3e2fa8 100644 --- a/client/core/notification.go +++ b/client/core/notification.go @@ -522,15 +522,17 @@ func newConnEventNote(topic Topic, subject, host string, status comms.Connection // FiatRatesNote is an update of fiat rate data for assets. type FiatRatesNote struct { db.Notification - FiatRates map[uint32]float64 `json:"fiatRates"` + FiatRates map[uint32]float64 `json:"fiatRates"` + TickerRates map[string]float64 `json:"tickerRates"` } const TopicFiatRatesUpdate Topic = "fiatrateupdate" -func newFiatRatesUpdate(rates map[uint32]float64) *FiatRatesNote { +func newFiatRatesUpdate(idRates map[uint32]float64, tickerRates map[string]float64) *FiatRatesNote { return &FiatRatesNote{ Notification: db.NewNotification(NoteTypeFiatRates, TopicFiatRatesUpdate, "", "", db.Data), - FiatRates: rates, + FiatRates: idRates, + TickerRates: tickerRates, } } diff --git a/client/core/types.go b/client/core/types.go index 7f1f5e5ad0..64106d2ea7 100644 --- a/client/core/types.go +++ b/client/core/types.go @@ -225,6 +225,7 @@ type User struct { SeedGenerationTime uint64 `json:"seedgentime"` Assets map[uint32]*SupportedAsset `json:"assets"` FiatRates map[uint32]float64 `json:"fiatRates"` + TickerRates map[string]float64 `json:"tickerRates"` Net dex.Network `json:"net"` ExtensionConfig *ExtensionModeConfig `json:"extensionModeConfig,omitempty"` Actions []*asset.ActionRequiredNote `json:"actions,omitempty"` diff --git a/client/webserver/api.go b/client/webserver/api.go index 6fa7cccffa..854a854f7e 100644 --- a/client/webserver/api.go +++ b/client/webserver/api.go @@ -965,6 +965,25 @@ func (s *WebServer) apiInit(w http.ResponseWriter, r *http.Request) { }) } +func (s *WebServer) apiValidateSeed(w http.ResponseWriter, r *http.Request) { + var seed string + if !readPost(w, r, &seed) { + return + } + + ok, err := s.core.ValidateSeed(seed) + if err != nil { + s.writeAPIError(w, fmt.Errorf("error validating seed: %w", err)) + return + } + + writeJSON(w, struct { + OK bool `json:"ok"` + }{ + OK: ok, + }) +} + // apiIsInitialized is the handler for the '/isinitialized' request. func (s *WebServer) apiIsInitialized(w http.ResponseWriter, r *http.Request) { writeJSON(w, &struct { @@ -1647,13 +1666,13 @@ func (s *WebServer) apiUser(w http.ResponseWriter, r *http.Request) { // apiToggleRateSource handles the /toggleratesource API request. func (s *WebServer) apiToggleRateSource(w http.ResponseWriter, r *http.Request) { form := &struct { - Disable bool `json:"disable"` - Source string `json:"source"` + Enable bool `json:"enable"` + Source string `json:"source"` }{} if !readPost(w, r, form) { return } - err := s.core.ToggleRateSourceStatus(form.Source, form.Disable) + err := s.core.ToggleRateSourceStatus(form.Source, form.Enable) if err != nil { s.writeAPIError(w, fmt.Errorf("error disabling/enabling rate source: %w", err)) return @@ -2306,6 +2325,7 @@ func (s *WebServer) writeAPIError(w http.ResponseWriter, err error) { innerErr := core.UnwrapErr(err) resp := &standardResponse{ OK: false, + Bad: true, Msg: innerErr.Error(), Code: code, } diff --git a/client/webserver/live_test.go b/client/webserver/live_test.go index 80a27b5251..2b70e8ad85 100644 --- a/client/webserver/live_test.go +++ b/client/webserver/live_test.go @@ -1891,8 +1891,8 @@ func (c *TCore) UpdateDEXHost(string, string, []byte, any) (*core.Exchange, erro func (c *TCore) WalletRestorationInfo(pw []byte, assetID uint32) ([]*asset.WalletRestoration, error) { return nil, nil } -func (c *TCore) ToggleRateSourceStatus(src string, disable bool) error { - c.fiatSources[src] = !disable +func (c *TCore) ToggleRateSourceStatus(src string, enable bool) error { + c.fiatSources[src] = enable return nil } func (c *TCore) FiatRateSources() map[string]bool { @@ -2061,6 +2061,10 @@ func (*TCore) PoliteiaDetails() (string, bool, int64) { return "", false, 0 } +func (*TCore) ValidateSeed(string) (bool, error) { + return true, nil +} + func newMarketDay() *libxc.MarketDay { avgPrice := tenToThe(7) return &libxc.MarketDay{ diff --git a/client/webserver/middleware.go b/client/webserver/middleware.go index 160c66df1d..f3695033a4 100644 --- a/client/webserver/middleware.go +++ b/client/webserver/middleware.go @@ -97,21 +97,6 @@ func (s *WebServer) tokenAuthMiddleware(next http.Handler) http.Handler { }) } -// extractBooleanCookie extracts the cookie value with key k from the Request, -// and interprets the value as true only if it's equal to the string "1". -func extractBooleanCookie(r *http.Request, k string, defaultVal bool) bool { - cookie, err := r.Cookie(k) - switch { - // Dark mode is the default - case err == nil: - return cookie.Value == "1" - case errors.Is(err, http.ErrNoCookie): - default: - log.Errorf("Cookie %q retrieval error: %v", k, err) - } - return defaultVal -} - // requireInit ensures that the core app is initialized before allowing the // incoming request to proceed. Redirects to the register page if the app is // not initialized. diff --git a/client/webserver/newui.go b/client/webserver/newui.go new file mode 100644 index 0000000000..10629cfe66 --- /dev/null +++ b/client/webserver/newui.go @@ -0,0 +1,27 @@ +//go:build newui + +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. + +package webserver + +import ( + "embed" + "io/fs" +) + +const ( + newUI = true + // site is the common prefix for the site resources with respect to this + // webserver package. + site = "newui" +) + +var ( + //go:embed newui/dist newui/src/img newui/src/font + staticSiteRes embed.FS + + // Unused for New UI + htmlTmplRes embed.FS + htmlTmplSub fs.FS +) diff --git a/client/webserver/newui/package-lock.json b/client/webserver/newui/package-lock.json new file mode 100644 index 0000000000..9dd37455d4 --- /dev/null +++ b/client/webserver/newui/package-lock.json @@ -0,0 +1,5549 @@ +{ + "name": "dcrdex-ui", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "dcrdex-ui", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "css-loader": "^6.8.1", + "html-webpack-plugin": "^5.5.3", + "sass": "^1.69.5", + "sass-loader": "^13.3.2", + "style-loader": "^3.3.3", + "ts-loader": "^9.5.1", + "typescript": "^5.3.3", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.2.3" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.56.10.tgz", + "integrity": "sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.56.10.tgz", + "integrity": "sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.56.10.tgz", + "integrity": "sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/fs-print": "4.56.10", + "@jsonjoy.com/fs-snapshot": "4.56.10", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.56.10.tgz", + "integrity": "sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.56.10.tgz", + "integrity": "sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.56.10.tgz", + "integrity": "sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.56.10" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.56.10.tgz", + "integrity": "sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.56.10", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.56.10.tgz", + "integrity": "sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz", + "integrity": "sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz", + "integrity": "sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz", + "integrity": "sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz", + "integrity": "sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-rsa": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz", + "integrity": "sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz", + "integrity": "sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pfx": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz", + "integrity": "sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", + "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz", + "integrity": "sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz", + "integrity": "sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.1.tgz", + "integrity": "sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", + "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", + "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.27", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", + "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.7", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", + "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^18.0.0" + } + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, + "node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1js": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", + "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.283", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", + "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", + "dev": true, + "license": "ISC" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.6", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.6.tgz", + "integrity": "sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/immutable": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-network-error": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", + "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz", + "integrity": "sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.56.10", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.56.10.tgz", + "integrity": "sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-core": "4.56.10", + "@jsonjoy.com/fs-fsa": "4.56.10", + "@jsonjoy.com/fs-node": "4.56.10", + "@jsonjoy.com/fs-node-builtins": "4.56.10", + "@jsonjoy.com/fs-node-to-fsa": "4.56.10", + "@jsonjoy.com/fs-node-utils": "4.56.10", + "@jsonjoy.com/fs-print": "4.56.10", + "@jsonjoy.com/fs-snapshot": "4.56.10", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkijs": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.3.3.tgz", + "integrity": "sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.97.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", + "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "13.3.3", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", + "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", + "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@peculiar/x509": "^1.14.2", + "pkijs": "^3.3.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy-transport/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/spdy/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/style-loader": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.4.tgz", + "integrity": "sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/thingies": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", + "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/ts-loader": { + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", + "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webpack": { + "version": "5.104.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", + "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.4", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.3.tgz", + "integrity": "sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.25", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.8.1", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.22.1", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^5.5.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/webpack-dev-server/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/client/webserver/newui/package.json b/client/webserver/newui/package.json new file mode 100644 index 0000000000..7e3c361fff --- /dev/null +++ b/client/webserver/newui/package.json @@ -0,0 +1,31 @@ +{ + "name": "dcrdex-ui", + "version": "1.0.0", + "description": "React UI for dcrdex", + "main": "index.js", + "scripts": { + "start": "webpack serve --mode development --open", + "watch": "webpack --watch --mode development", + "build": "webpack --mode production" + }, + "author": "", + "license": "ISC", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.0", + "@types/react-dom": "^18.2.0", + "css-loader": "^6.8.1", + "html-webpack-plugin": "^5.5.3", + "sass": "^1.69.5", + "sass-loader": "^13.3.2", + "style-loader": "^3.3.3", + "ts-loader": "^9.5.1", + "typescript": "^5.3.3", + "webpack": "^5.89.0", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.2.3" + } +} diff --git a/client/webserver/newui/src/App.tsx b/client/webserver/newui/src/App.tsx new file mode 100644 index 0000000000..097488922b --- /dev/null +++ b/client/webserver/newui/src/App.tsx @@ -0,0 +1,39 @@ +import { useEffect, useState } from 'react' +import app from './js/application' +import UnlockForm from './components/UnlockForm' +import MainFrame from './components/MainFrame' +import InitWizard from './components/InitWizard' +import Loading from './components/Loading' +import { + AppState, + PageData +} from './js/registry' + +// Disable form submissions (we handle them ourselves) at a global level. +document.addEventListener('submit', e => e.preventDefault()) + +export const App = () => { + const [appState, setAppState] = useState(null) + const [pageData, setPageData] = useState(null) + + const resetAppState = async () => { + setAppState(await app.fetchAppState()) + } + + const start = async () => { + await app.start(setPageData) + await resetAppState() + if (!app.user && !pageData) app.loadPage('') // reset URL + } + + useEffect(() => { start() }, []) + + if (appState === null) return + + + if (appState.user) { + return + } else if (appState.inited) { + return { resetAppState(); app.loadPage('portfolio') }} /> + } else return { resetAppState(); app.loadPage('portfolio') }} /> +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Header.tsx b/client/webserver/newui/src/components/Header.tsx new file mode 100644 index 0000000000..274150545b --- /dev/null +++ b/client/webserver/newui/src/components/Header.tsx @@ -0,0 +1,67 @@ +import { useEffect, useState } from 'react' +import t from '../js/intl' +import app from '../js/application' +import Doc from '../js/doc' +import { TotalUSDBalance } from '../js/registry' + + +export default function Header () { + const [usdBalance, setUSDBalance] = useState(app.totalBalanceUSD()) + + useEffect(() => { + const balK = app.registerBalanceUpdater(() => setUSDBalance(app.totalBalanceUSD())) + const noteK = app.registerFiatRateUpdater(() => setUSDBalance(app.totalBalanceUSD())) + return () => { + app.unregisterBalanceUpdater(balK) + app.unregisterFiatRateUpdater(noteK) + } + }, []) + + const usdBal = usdBalance + + return ( +
+
+ +
+
+ { + usdBal.ok ? ( + + ) : null + } + + + + + + + + + + +
+
+ ) +} diff --git a/client/webserver/newui/src/components/InitWizard.tsx b/client/webserver/newui/src/components/InitWizard.tsx new file mode 100644 index 0000000000..8a6bf521b1 --- /dev/null +++ b/client/webserver/newui/src/components/InitWizard.tsx @@ -0,0 +1,162 @@ +import { useState } from 'react' +import t from '../js/intl' +import PasswordInput from './PasswordInput' +import { postJSON } from '../js/http' + +/* + * SeedPromptFormParams is the interface for the SeedPromptForm component. + */ +interface SeedPromptFormParams { setUsingSeed: (y: boolean) => void } + +const SeedPromptForm = ({ setUsingSeed }: SeedPromptFormParams) => { + const onUsingSeedClicked = () => setUsingSeed(true) + const onNoSeedClicked = () => setUsingSeed(false) + + return ( +
+
+ + {t('Welcome to Bison Wallet!')} +
+
{t('prompt_for_seed')}
+
+ + +
+
+ ) +} + +interface PasswordFormParams { + setRegistered: (y: boolean) => void + setSeed: (s: string) => void + setUsingSeed: (y: boolean) => void + seed: string +} + +const PasswordForm = ({ setRegistered, setUsingSeed, setSeed, seed }: PasswordFormParams) => { + const [pw, setPW] = useState('') + const [pw2, setPW2] = useState('') + const [err, setErr] = useState(undefined) + + const onGoBackClicked = () => { + setPW('') + setPW2('') + setUsingSeed(undefined) + } + + const submitPW = async () => { + const r = await postJSON('/api/init', { pass: pw, seed }) + if (r.ok) { + setRegistered(true) + if (r.mnemonic) setSeed(r.mnemonic) + } + else setErr(r.errMsg) + } + + return ( +
+
{t('Set a password for your wallet')}
+
+
setPW(e.target.value)} value={pw} />
+
setPW2(e.target.value)} value={pw2} />
+
+
{err}
+
+ + +
+
+ ) +} + +interface SeedInputParams { + setSeed: (s: string) => void + setUsingSeed: (y: boolean) => void +} + +export const SeedInput = ({ setSeed, setUsingSeed }: SeedInputParams) => { + const [err, setErr] = useState(undefined) + const [workingSeed, setWorkingSeed] = useState('') + + const onChange = (e: React.ChangeEvent) => setWorkingSeed(e.target.value) + const onGoBackClicked = () => setUsingSeed(undefined) + const submitSeed = async () => { + const r = await postJSON('/api/validateSeed', { seed: workingSeed }) + if (r.ok) setSeed(workingSeed) + else setErr(r.errMsg) + } + + return ( +
+
{t('Input your recovery seed')}
+
+ +
+
{err}
+
+ + +
+
+ ) +} + +interface SeedDisplayParams { + acked: () => void + seed: string +} + +export const SeedDisplay = ({ acked, seed }: SeedDisplayParams) => { + return ( +
+
{t('seed_display_warning')}
+
{seed}
+
+ +
+
+ ) +} + +export interface InitWizardParams { + setInited: () => void +} + +export default function InitWizard ({ setInited }: InitWizardParams) { + const [usingSeed, setUsingSeed] = useState(undefined) + const [seed, setSeed] = useState(undefined) + const [registered, setRegistered] = useState(false) + + const done = () => { + setSeed('') + setInited() + } + + const registerFormFeedback = () => { + setRegistered(true) + if (usingSeed) done() + } + + return ( +
+ { + usingSeed === undefined ? : + usingSeed && !seed ? ( + ) : + !registered ? ( + + ) : { done() }} seed={seed} /> + } +
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Loading.tsx b/client/webserver/newui/src/components/Loading.tsx new file mode 100644 index 0000000000..79d7494769 --- /dev/null +++ b/client/webserver/newui/src/components/Loading.tsx @@ -0,0 +1,7 @@ +export default function Loading () { + return ( +
+ +
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Login.tsx b/client/webserver/newui/src/components/Login.tsx new file mode 100644 index 0000000000..cf6e8ee679 --- /dev/null +++ b/client/webserver/newui/src/components/Login.tsx @@ -0,0 +1,5 @@ +export const Login = () => { + return ( +
Login Div
+ ); +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/MainFrame.tsx b/client/webserver/newui/src/components/MainFrame.tsx new file mode 100644 index 0000000000..a3cf4a4e6a --- /dev/null +++ b/client/webserver/newui/src/components/MainFrame.tsx @@ -0,0 +1,41 @@ +import { useState, useEffect } from 'react' +import app from '../js/application' +import Header from './Header' +import Sidebar from './Sidebar' +import Portfolio from './Portfolio' +import Trade from './Trade' +import Settings from './Settings' +import Modals from './Modals' +import { PageData, FormData } from '../js/registry' + +interface MainFrameParams { + pd: PageData +} + +export default function MainFrame ({ pd }: MainFrameParams) { + const [formData, setFormData] = useState({ form: '', data: {} }) + + useEffect(() => { + app.registerFormSetter(setFormData) + return () => app.unregisterFormSetter() + }, []) + + const renderContent = () => { + switch (pd.pageRoot) { + case 'portfolio': return + case 'trade': return + case 'settings': return + default: return (
Unknown page: {pd.pageRoot}
) + } + } + return ( +
+
+
+ +
{renderContent()}
+
+ +
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Modals.tsx b/client/webserver/newui/src/components/Modals.tsx new file mode 100644 index 0000000000..184461ea03 --- /dev/null +++ b/client/webserver/newui/src/components/Modals.tsx @@ -0,0 +1,35 @@ +import { MouseEvent } from 'react' +import Receive from './Receive' +import Send from './Send' +import Swap from './Swap' +import { FormData } from '../js/registry' +import app from '../js/application' + +interface ModalsParams { + fd: FormData +} + +const onBackgroundClick = (e: MouseEvent) => { + if (e.target === e.currentTarget) { + app.setForm({ form: '', data: {} }) + } +} + +export default function Modals ({ fd }: ModalsParams) { + + const renderContent = () => { + switch (fd.form) { + case 'receive': return + case 'send': return + case 'swap': return + default: return (
Unknown form: {fd.form}
) + } + } + + return ( +
+ {fd.form && renderContent()} +
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/PasswordInput.tsx b/client/webserver/newui/src/components/PasswordInput.tsx new file mode 100644 index 0000000000..6db850eba1 --- /dev/null +++ b/client/webserver/newui/src/components/PasswordInput.tsx @@ -0,0 +1,30 @@ + +import { useState, ChangeEvent } from "react" + +interface PasswordInputParams { + onChange: (e: ChangeEvent) => void + value?: string + placeholder?: string +} + +export default function PasswordInput ({ onChange, placeholder, value }: PasswordInputParams) { + const [showPW, setShowPW] = useState(false) + + const pwChanged = (e: ChangeEvent) => { + onChange(e) + } + + const showPWClicked = () => setShowPW(!showPW) + + return ( +
+ + +
+
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Portfolio.tsx b/client/webserver/newui/src/components/Portfolio.tsx new file mode 100644 index 0000000000..84519fc4cc --- /dev/null +++ b/client/webserver/newui/src/components/Portfolio.tsx @@ -0,0 +1,5 @@ +export default function Portfolio () { + return ( +
Portfolio
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Receive.tsx b/client/webserver/newui/src/components/Receive.tsx new file mode 100644 index 0000000000..be9ff94f25 --- /dev/null +++ b/client/webserver/newui/src/components/Receive.tsx @@ -0,0 +1,7 @@ +export default function Receive () { + return ( +
+ Receive +
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Send.tsx b/client/webserver/newui/src/components/Send.tsx new file mode 100644 index 0000000000..f51c0fc428 --- /dev/null +++ b/client/webserver/newui/src/components/Send.tsx @@ -0,0 +1,7 @@ +export default function Send () { + return ( +
+ Send +
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Settings.tsx b/client/webserver/newui/src/components/Settings.tsx new file mode 100644 index 0000000000..aff3357b52 --- /dev/null +++ b/client/webserver/newui/src/components/Settings.tsx @@ -0,0 +1,5 @@ +export default function Settings () { + return ( +
Settings
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Sidebar.tsx b/client/webserver/newui/src/components/Sidebar.tsx new file mode 100644 index 0000000000..fddee4faf4 --- /dev/null +++ b/client/webserver/newui/src/components/Sidebar.tsx @@ -0,0 +1,30 @@ +import t from '../js/intl' +import app from '../js/application' + +function sidebarButtonClass (page: string, button: string) { + return `p-2 pe-3 d-flex align-items-center subtle mt-2 text-left fs18 ${page === button ? 'selected' : ''}` +} + +export default function Sidebar () { + const page = app.pageData.pageRoot + return ( +
+ {t('VIEWS')} + + + {t('FAVORITES')} + +
+ ) +} diff --git a/client/webserver/newui/src/components/Swap.tsx b/client/webserver/newui/src/components/Swap.tsx new file mode 100644 index 0000000000..f4b01de2c3 --- /dev/null +++ b/client/webserver/newui/src/components/Swap.tsx @@ -0,0 +1,7 @@ +export default function Swap () { + return ( +
+ Swap +
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Trade.tsx b/client/webserver/newui/src/components/Trade.tsx new file mode 100644 index 0000000000..e79edbc982 --- /dev/null +++ b/client/webserver/newui/src/components/Trade.tsx @@ -0,0 +1,122 @@ +import { useState, useEffect } from 'react' +import t from '../js/intl' +import app from '../js/application' +import State from '../js/state' +import { Market, PageData } from '../js/registry' +import { postJSON } from '../js/http' +import Loading from './Loading' +import Doc from '../js/doc' + +export default function Trade () { + const [market, setMarket] = useState<[string, string] | undefined>(extractMarket(app.pageData)) + + useEffect(() => { + if (!market && marketsAvailable()) { + loadBestMarket(setMarket) + } + }, []) + + if (!market) { + if (marketsAvailable()) { + return + } else { + return + } + } + + const [host, mktName] = market + + return ( +
Trade {mktName} @ {host}
+ ) +} + +interface NoMarketsParams { + setMarket: (market: [string, string]) => void +} + +function NoMarkets ({ setMarket }: NoMarketsParams) { + const [err, setErr] = useState(null) + + return ( +
+
+ + + {err &&
{err}
} +
+
+ ) +} + +// hostMarkets generates a mapping of host to markets using the shortened +// Doc.addrHost host name as the keys. +function hostMarkets (): Record> { + const d: Record> = {} + for (const xc of Object.values(app.user.exchanges)) { + if (Object.keys(xc.markets).length === 0) continue + d[Doc.addrHost(xc.host)] = xc.markets + } + return d +} + +function marketsAvailable () { + return Object.values(app.user.exchanges).some(xc => Object.values(xc.markets).length > 0) +} + +function extractMarket (pd: PageData): ([string, string] | undefined) { + if (pd.pageParts.length !== 3) return + const mkts = hostMarkets() + const [_, host, mktName] = pd.pageParts + if (mkts[host]?.[mktName]) return [host, mktName] +} + +function loadBestMarket (setMarket: (market: [string, string]) => void) { + const mkts = hostMarkets() + const lastMkt = State.getLastMarket() + if (lastMkt) { + const [host, mktName] = lastMkt + if (mkts[host]?.[mktName]) { + setMarket([host, mktName]) + app.loadPage(`trade/${host}/${mktName}`) + return + } + } + const [host, mktName] = bestMarketDCRFirst() + setMarket([host, mktName]) + app.loadPage(`trade/${host}/${mktName}`) +} + +function bestMarketDCRFirst (): [string, string] { + let best: [string, string, number] | null = null + // Find best DCR market by volume + for (const xc of Object.values(app.user.exchanges)) { + for (const mkt of Object.values(xc.markets)) { + if (mkt.baseid === 42 /* DCR */) { + if (!best) { + best = [Doc.addrHost(xc.host), mkt.name, mkt.spot.vol24] + } else if (mkt.spot.vol24 > best[2]) { + best = [Doc.addrHost(xc.host), mkt.name, mkt.spot.vol24] + } + } + } + } + if (best) return [best[0], best[1]] + // Fallback to first market + const first = Object.values(app.user.exchanges)[0] + return [Doc.addrHost(first.host), Object.values(first.markets)[0].name] +} + +function defaultDEXHost () { + switch (app.user.net) { + case 0: return 'dex.decred.org:7232' + case 1: return 'bison.exchange:17232' + default: return '127.0.0.1:17273' + } +} + +async function registerWithDecredDEX (setMarket: (market: [string, string]) => void, setErr: (err: string | null) => void) { + const r = await postJSON('/api/adddex', { addr: defaultDEXHost() }) + if (r.ok) setMarket([Doc.addrHost(defaultDEXHost()), 'dcr_btc']) + else setErr(r.errMsg) +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/UnlockForm.tsx b/client/webserver/newui/src/components/UnlockForm.tsx new file mode 100644 index 0000000000..95e0b3a598 --- /dev/null +++ b/client/webserver/newui/src/components/UnlockForm.tsx @@ -0,0 +1,43 @@ +import { useState, ChangeEvent } from 'react' +import t from '../js/intl' +import PasswordInput from './PasswordInput' +import { postJSON } from '../js/http' + +interface UnlockedFormParams { + setUnlocked: () => void +} + +export default function UnlockForm ({ setUnlocked }: UnlockedFormParams) { + const [pw, setPW] = useState('') + const [err, setErr] = useState('') + + const pwChanged = (e: ChangeEvent) => { + setPW(e.target.value) + } + + const submitPW = async () => { + const r = await postJSON('/api/login', { pass: pw }) + if (r.ok) setUnlocked() + else setErr(r.errMsg) + } + + return ( +
+
+
+ + {t('Welcome Back!')} +
+
+ +
+
+ +
+
{err}
+
+
+ ) +} \ No newline at end of file diff --git a/client/webserver/newui/src/font/Inter-variable.woff2 b/client/webserver/newui/src/font/Inter-variable.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b61bb0d0a50c8b260de87d89ba74463a5f28b961 GIT binary patch literal 349424 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�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 z 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%0ABUNuc&W+E>B!Vh3#lCea9+ZPOK;(Ak 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 + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/arrowdown.svg b/client/webserver/newui/src/font/icons-svg/arrowdown.svg new file mode 100644 index 0000000000..160dee879b --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/arrowdown.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/arrowleft.svg b/client/webserver/newui/src/font/icons-svg/arrowleft.svg new file mode 100644 index 0000000000..6f6c6391ef --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/arrowleft.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/arrowright.svg b/client/webserver/newui/src/font/icons-svg/arrowright.svg new file mode 100644 index 0000000000..5bb1ba16d5 --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/arrowright.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/arrowup.svg b/client/webserver/newui/src/font/icons-svg/arrowup.svg new file mode 100644 index 0000000000..4dc8e6323e --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/arrowup.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/barchart.svg b/client/webserver/newui/src/font/icons-svg/barchart.svg new file mode 100644 index 0000000000..a87b42b14d --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/barchart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/bell.svg b/client/webserver/newui/src/font/icons-svg/bell.svg new file mode 100644 index 0000000000..3a3fa16856 --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/bell.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/eyeclosed.svg b/client/webserver/newui/src/font/icons-svg/eyeclosed.svg new file mode 100644 index 0000000000..ba5e6dca71 --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/eyeclosed.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/eyeopen.svg b/client/webserver/newui/src/font/icons-svg/eyeopen.svg new file mode 100644 index 0000000000..e000672821 --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/eyeopen.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/gear.svg b/client/webserver/newui/src/font/icons-svg/gear.svg new file mode 100644 index 0000000000..ee772be9de --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/gear.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/key.svg b/client/webserver/newui/src/font/icons-svg/key.svg new file mode 100644 index 0000000000..75103cdd60 --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/key.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/knobs.svg b/client/webserver/newui/src/font/icons-svg/knobs.svg new file mode 100644 index 0000000000..1fda76419f --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/knobs.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/lock-closed.svg b/client/webserver/newui/src/font/icons-svg/lock-closed.svg new file mode 100644 index 0000000000..3fe40c42b5 --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/lock-closed.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/portfolio.svg b/client/webserver/newui/src/font/icons-svg/portfolio.svg new file mode 100644 index 0000000000..fac12136a9 --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/portfolio.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/qrcode.svg b/client/webserver/newui/src/font/icons-svg/qrcode.svg new file mode 100644 index 0000000000..6ffc715c79 --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/qrcode.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/send.svg b/client/webserver/newui/src/font/icons-svg/send.svg new file mode 100644 index 0000000000..98af5b053d --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/send.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/star-filled.svg b/client/webserver/newui/src/font/icons-svg/star-filled.svg new file mode 100644 index 0000000000..ff945a2b31 --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/star-filled.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/star.svg b/client/webserver/newui/src/font/icons-svg/star.svg new file mode 100644 index 0000000000..9795969be6 --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/star.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons-svg/swap.svg b/client/webserver/newui/src/font/icons-svg/swap.svg new file mode 100644 index 0000000000..2ec1afac9c --- /dev/null +++ b/client/webserver/newui/src/font/icons-svg/swap.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/client/webserver/newui/src/font/icons.woff2 b/client/webserver/newui/src/font/icons.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..430a445e37d45dc9ddc6efc219e48771ebf15f08 GIT binary patch literal 3068 zcmVpeUZ!r+W>Z?ibA#Z2-9SQy4k})7lObbp&lPr$3Va-&UWh z&w0Xpqekd)QHhI+%8A=n_1A`iDhe(XRZy@ubob}?Fw3^8sJKyTom@`!5MfZJSGU%H z9iFVsxBFGq6q57RlD4`2x%O$ZhnZ7AIWB#2`-Lp43R&X=2YES4a)f2xl)$2})$Gc< zzs!!vs0z(OolxrFf5{k-wx)OW-Qbap_xFX>ph_T z-O*!i2_rt(WDvQwCbhh$Pf1K>8tS00e!A$TCrye($tlmtE$ybZet(QIOg;X> zIvJq5Hu`o4B(-aXn_0)9S;S+Y@i`m_-b*-8#5>cUNE@Dt6#3He%D68TUmAVs{k8qq zO<%8lz5mtxR{y)>d+VRv|KWy=2;+`<&+W#{IAiet;eOUWSMRDv)Gg{FWu?+w$yS!i z+;);p`M6cJEU-w@Cn*o@8E~5iR-2=FZ(P6v2RsNM0s;vvUSyMl*k8PaV$nmYBW;o= z*m7;7vRpa)i<;Da01>DCa6NItv}-qSm%mAMv;fHp|H!KpVte{#cr7PKJ>NXz8aZtB zA2Y>>Ac#zR`R2s6X}aLVx6`KEBT22pA(6k-;l9^%_v51UtnC~lg%x8GOJqA;$l3x% ztw>H=77`!(%ohS;@i^IBuf8E~C~~#9(ud5O>B4rmnyV}JnC1$uVI7XaAl7_f!_ifC zF`euqw#HghZ7NwAEkFSoxcPUyjBa<8qbPB0w9~%y-0Anvtc_9ifceQIAbaA@>R}UY;a~!XV$F7#SNpnvMZd$CCnQyr96+@gi#{X6n%?n+o z9g8@Gl9(%jwX_uI=3*_|j zjsP`xiw!h%Wb%cjNXLriwlJ0|vcYS>mz+~P+C7u>)8%WI7XcEGxa9o*D<|h$e#lHU z#|v+&JK^i|yV3vZQg?nnHy^vT@9C3gH{MMb;u%QdnAX|WHY8E9{}|nG-UeY8zLCO} zqL4MXds66Ydoe^SbCTZlSy$B3Uvyall0ttp2uRZ%cD=g9@{DPrVz|8uwKRd|#y3l1 zm{1l*9mz05q62DD-EROGiXxf194S&-Z*`yEm1pJDZU*V!v{Pb2+vy9S_1?Oc4+<1R zR$+ruq;Y~UE$0uH;4<94K0Y|yFR!D;muG}gL{+w}6=57!zqHK(4shL`5IGvhGDPih zE{TI|R%7bm1Hf3sn%dP%?cm`>=AH{{!?4{9*+cEy9~nNAwszOv+W(Na5Ctb7gIm2y zSEx{nidie(&gPxvPS1ov-WF{dtngtPTc8D}DJgZirVoD`kJNRxe=L_P+uulk6&o9uA3ik6iW-CS@?RTQViT7AY%XdY#)n;&A2Iy!_<(GVEP5fBnVVuy zs#h&Cvy5I0R%XSB?4V0%XpjsZ^+8(F*i}yGpIc}haklhfcaM0`Ub%Sn(r^zC=n(qb zGJ&4aKD(kMQWtd6eld$Rb_(E5^irKxl=4j{1UrI2AMJ6ferc&nS2Go_0Zi2g zjqH|YDuV%G1RAExpZ@6YFA%*xdXxeEy?FKDtu(Aetwj{w^Z=sM=fE=z3FM$pOHQ0L zq1J9D($Fw5@Gt@ejhH0xiKC(AM%X-24>@y0$X1#x&6Q1ZSeQtECe)#knkE?7z-ymG z;F%(-X*u7g=q;&VrlP3yQxdKTEYJB*GwuJ)PXvhRUX8Ml2_}5becuaM=u+7jp}t9- zhbFA5NfyS^fRn+67(Xx6W- zZL6Lz>on~EGW~dO2SxMM*!nGN>=|l@z#e=11rIF{I!Y4_1=??>=yTpgV#B@X_g3hn zw{}~sn|`(Gn{|-@UHAsnZgsbq+*7taUdvt%tid+uW$F^IeC&XL1YyKw$3jYBS=X(Q zKm#!pmAKUFVE=8{@CQF;ZMWH}JBbPL3GQQ1BXn8eZPreX>P}E?x zR0@mt=?4n3`~x>+Ca8Zp^zi3b~;unx^SV{wj2iDN}nfM$>I%8De7LG`tM?6?9C(Lp=VF7dx-`?H8 z3)#B1>&l@V%?4Y&E#Ek!GaPoJ&Gre{}Hb`W!qDFX?MfRg69t0o-f>Z~FHw=Lz z8;Eoz?AR;eb`Ye||DV!Ggq>8QZXQuhdV2Q%-xFkvvF)SVLs+I7Lh0Gn%xv#g0%*3P zpw+PtQ|u#}TC)rC{Trnlpi{}*<(MqhVz?dNT8UydLC&w!i3 zJOa>>2-K9J0>NvKDEjp1xr_~`qw5!+LEj3k0vJ3(lG)b(pflg!jnAAmwUeWi15l-a zkqpo_15q|zD5YojOepfhS2u3NYHi|YTm>fcAkAk(cE$Wk-mQI72{wE&(7&Y&2G_Iwat?v2|0BY=NdnwCI#XNeO{+ue zL?eQ6z#+bg+7LaPQnx=8)j!iTf4b^zdfP69Xwx&ukCenI^RVDl9xGFQf61?%(oC_O zUwq5NDcTVe{Z;L-j1ZW%{Ph7o_yPc`GJT3l{>Qaubyu(bhz@l7vV@-gCw>$KmK;?e z>NU#%a7!j9F9_^#zN#&2C#jn{{Np%tF(T%+OTL3EFi^e z?{an*g&Vc1s$1RFf>yU>P}>%Hd~0byFf+yhfycOnEEv#A-hDHkBcg~fVu+$kL!$8B z1#x)recimBn`sK0LwFW`goB_3&LFuJ3oV}LZ^RFlAo$`W(nd%4gx%rQ@F=! zbto9qwFc_@CRwvK6r_(@I~~vIx~>8VAwVE6BqV(8z20{q5I_}Bn8D%*g%)nIZrJH6 z$y7y}S9js^rR$Ei;%1yY0x#Df{hkHN5$VUCs%O&bDaqjK7(Bg=i*60Y@d zhtRs8yQ>;iqthZ`2;%uH;d~C!d@hywJgQ%a_|&MMjnB+M;r3wXvg0#Q!PoFjd>h~0 zI~fWFaW3KW4A0|Pp0gn?AzcnD+<3Fz;9>76VhW=r?Ivw`@A1KVB z6lVXA6%2TEdw#A*ea ztoc@0smlS=ts%Eip9PLN;;1>!;83MTgO*fj$kOG=m4||gjz>U91OSp#fGDXA>9*We zi##V~VrEsq&BM#5SgA7QDugv?(yT>POs6j0di2}jvZYSgVV0ft+GU?B&U@wpnSD-L z>!KGfIj&iY$4)t?#}iG;?bo4Qr?~{UctrSwRH)N~M?jPPgBp|4eO{E%Ds?~|OEK!Fx?I!8fs1H}Y5vy#r#U=;UgOGZY zN)AxWt(*pw+3ytdDpLMQau-rgJ%VknHc5YmMh<92L^g#L-c6!BfS z&_MM+EK6pC5AK34x_3iRk$4v;#MgF0Z}fr&(1Ogu7&N(SX{upIjndkY6a^VXi^e#a zl|dq=)~PDT$95Wp4beF1z#E5%+5h9Lr(M4!OMBMus<7{@IPE}vU`bpxi&kyNktWz> z)`4;fb(F3M3J85>Ag!jP)^-TZQ^77!&-fun|5&K33iNC5(oNqyY^aB>I}L2jZOwPo zPnUypK%j%T_|`>c9&J=5#=J5R@>6HFc{GPa)ngKx;-@pr>t#^@$Qq&%ZcP4eIO%4q zm1uWc?kJ+J+Us&O1&z_&0?EocGc>==N5EYwkzC40~#{;EuZ zNb+%P9NNU1#$Dw%wDLu!OJ3p_uD;HxQl|WvAFUw1Sf4t8<8E{4%9h+J29}s;z8)59&ukJ~1*&)pH}lYfl1!LP4U!-H)nHWA zd-f-Nn9tNtn&xND7|~ddhze1ces#W#eUW)XMqNe$N-?0_ZR;%o!p4WT`cp)u7HiHIu7Vqqxrfj0Y+_J~M%K zsTSR}&rSBSls@1RvExjd)cRr}7Oa%F0xn?;(we!+dUJGI8k8Tn4Xm-FVO z4Shf7gU9Tl(ya>_Z*U1@EZIu*feERXkYwcz3My#VBEc`9ALgmoGegMTAH+asaSO0{ zx^*RsN^6HtJNnQ^-MD2uP(OZ&wNFbVwZhS0_{8aTZlgm#Ru+79r_+h~^vuul1oH6m zjG@nSUN>}KA7m>i(T}R+lJO>2UoY=h!WVfbk30$l7bLd;P+XYKhLZD)Wo+4C&2kt{0?kI0-=I7Od|+| zwrNmgo5qR(-9w4AN2LOxGJ#ZCS1W;Xn*=Is5~#FEph^O$S|C&-kXj41QmC^@q24Bi z2AdQbC4ia)Ld^m#*YfgKA&2o)6=Su$AaN5b{(4<-5kAnUDxEphf8eE$77f*D_0;Ki ztdIFmqOZV^L4d89>QjGScfxN#4-!@WjKhX*Xpk9Kewz@;t8d%{4l*8AR!cBJq+oPa z3g#_K?6x+LHvoOm{KMl{^a30M0hFv0)X@Y=S++MIfF}>Dk=t~ntz|NTD>jrST9qS1 zzQ`5;B%0{^pJY?psG>Ms2)%@&E6KtF)Uh6;6;d|qI@h=8TW*lEzY2t0Pm}pP3VZdv zI0YWS#3s3`L&4q3Fmwd1uq%C0z zR6jDC8c2^va3m-eib!WfDlntA06E=FUTCeagB=X4R?gK5$!kr^m^;eiPNJvpFcrbR zG(dHeN3t!jV#m0SzWkS3=e1_7Ap~(CM{N{GM?gnoai(GMk*kwUMULm_%tcZ!1#gz2 z7Yr-JC2;208T>g)j5EYgA~2-VIU68QpfGN`AhQ)4r2DmF?~d`PdIJnu@`8u#aONMz z!TKIogJiQ_!{E*OaMd+G>&~NSpsv%NQI_l>eaEIuLMvN0xF1|ZaUC3OajCj0@=k(^ zE04?9VKr6i0j5WwYVsl@bFDh~2)Z<5PwO4C*uV%RJM38 zLuOQy3c(;i=2Ls38S0VpBeMaT2)a$Wre!6lr4Bi|TWc(_%AaAoLk`c7C2x}nEno!g zPf2rocwq(723E3=$4h#7j;iS#T`69QAa})xD61eLXEeTKr#G~*zmY7Au|6Kt=tuOLI5TOGeh z1h{&19L%4|Ox_bYheiJj)X*AiQJ{`e>w!b!cBSPfQthCJ?ybdIXTy$pQtFJP-*}_U zBs=4R7J0uoE3a|J=~PqB5snVQn;RnQ2jTp@r`?*3m=YV~ToO3Lo zZ3wQi>UtY1&DStmNR)R=sXbyNooOMOk&!&j-Ayvo9U)ryM%k5=e(Xd9zAJ<>eMDyG z7@;t>g>-6u{49kxYZ`+!p>K(nvDX=$Pu793CnWjV5orF;F@17ZR7sibrefJ1fKGEO zrrQ^yw)vt7>O&xIF9Hk7$>$}w{ed{S`u0U-=$nd0sji70_~0TUBU{C*aa)qIYat?> z^BE#q;1t!o7xcKe_Ze%AVjVKI#2uw;!vsGt6WDa|>jZUulvtR*h*9lIj%iT8;GH|=A2?d)#(Mk^F9fLbXRFKRqMCSj0uR;h453ZXUnN~ zwRL8d#Jf?j$_n9-gVQBWfcy?PE0+DRSI-JTs&OfWOln@LsBt&8kw+N9Bp4neRdk3L zbt4JYG}Lp&+kS_IhpGb<9CgT{?PlgEM$FjQ;Y0I%KIE|)Lx0FJ5Rdy0m;`HumPRCH z0_Q8N*4&O!(i1g&LWK@A*>o61l7fg5>joAyw%hF6oY*dT_XP0q1>I%|iloMU73r3`!_n*lZ*5P2GBe@&VG#g`^5&|~f2V8l4^Cz}x59%y9 z=p}|s5DZs|DXwm(msO{_uh{8K<9Hl@;lAK>$yHI`jgeC$gVD}UgG(oo{6k4$NG?aq z#F)!SEJXeQ5$~Ri!POg2_p8k0PR@-M4MG))N?aV~N}YP4tG4rpDTe7BG}$|W>*dki zc@{Bg{N}u}5zjD$?cq5O=jMYM(_!%FNq?FMgT9^iKWcK7-|+ZQQY?B&ATMjS+(=ti z@-5e)s`le`++{3(rf~YG(kl_fo2?5nvAl^*0BrWMbl*&n9U3;)Nn>rC5VSkw{24|4 zvI?iSGKIQ*+PZbP;oc3#g~{!fS5s=bs}*L0-?CXD{4cCje1@5R(!lD_!Ke=9Te?sc zFRZkSEMt+-F0@(TpMmxa4Z|{ai4k0|GEc_&o9de4u-mqjLy9@p)uW1b>adsDpvU18 zejg!JCi1zWJRL(62(?fFW#Xk9StK~Q*yA?uAe@myk&qmcOEYu8&QKFw`7#GtNK6ss zVCH~&K8Br-@PS1u1@Xag%yY%|>~M!@r8~U?A2s+-4Wc#mEkD>&*gQ^jw&ph_!F|nn zEh8wdCc{rCVP)0Q&`o(sVMY1`8^?-j>7sDhKIH^#9a;ux8JGYS^Aen@0X?S=x6-|h z3o&G29$s@RO5}71gTRWto#!b$yoiwx2E!I)bj#+E@U;fl6W~Lz=sIz5`_t{j+`}JH zYKDeTcsq=~>yR;er@m-RsrjN>{7CvQk+5}1en>N4XsHC4q-`4MmDle1h`rls9#H^f z`Z(Tt72qxcEZ`UWh&bh${D+BQ~?_;if z`%^t*M2EPD7_3%vPd_VpeO35Yct@BVHafxaway54RCx^x$5TdN&Z2iJ$JA-_rGA)y z(dML?kJy`Lqdqpnn8C)U^oiF@CincP-WowlmHNLzjORHmser3CDs3)Nf3<**@>X{O z?$#84gi%T)CQ!5mMc}^e>9p3CkdRP?(sf|QgW*fU|ck*5&d57 z%AL+HBX2|;;qwJ?L zA2!i`qS7M_hMz(Ch-RME`tHF6I9wlr*oVXS5jjtjK23q-tFbKY-qGdystGIQ(AZsE%AX+w3tX|w>$HUb~} zLAALB(JyZ9FfD1;XpLdR{Ih7n%D-6dlKK5keviu_>O6>w+f_6FDbfTme#GxH0|};; zLuC3Ph4jsWasZ^KY$N9+7Stw8-ilgF_@>m_1JIU6nAiYRf{@oEfsaf5X($ z*>(2+nJyln1ja6^?%BP%+_e+V@!6*hK$SH!dM205sj!STDjR>5soJJ$)uRdegfAei z(A8G2pFaOt&O+`VA6Ixt>lG&CuE98oLXbToutGV{Fjycmy7J73Gc;Bja z&7_NS5$W%>ni?SL8x!Q?-u#NEGH?Os7mkhMRSo>rIZdkG34hN}avH=Dw4Ga3z!#J$ zkaiUIf1M-dnG0)rRoSY@O%Fu^|Kx?1a9ExY=N=0XnBf-;ZFXkHH{<`Q3dQ6ah`)+s zc?F6~+o|aLcyMfgNsPeD)XGkBPuJwn+A$EKObxWTMh=!Qi3k~cqgX=N*XqrF1 z290MmV>-};2&RL;xepxH9nzfwC~K1vyIR({`2U|$t49;GShYd_8hCX_Q+t^5E#^^& zZR?vg@0;#VqI5-~2IEkqJGG`)u}f7Q&1_oJvPQre(d+{3Gryhwt$DNPkk-B6_c^~a zU;jSc>siNNz%Mw|`#UWK`d^@%0Z87aYkm?OW8KUTKCG+l|Hb9R@l0|A5lE!5G%$70 zlLQB%MW|n``;)KXow8)ld8XjufM-iR8$w**xj+{yilu27%Zh2!7 z2nY}kk;POS?$L&iE?!}W31YGt$00L99TVizXQ zWt&FJth!E}0dm{4^ZiXrs#@)(CB^Q5jQWh_l1u5n|CqXw#FBw_yS$}B zq4L+YHjg8jF#cfBXnoiXnd%~$dVPTuw3)^tnj`tBBlR?4k(RjzTC>cwECNNCp^_pe zuON47ns(_sis(&R_+SH0^edXfXIiZs5px2GNWSK-GAkifrK_$ws#4NBzE5DW7tPts z;H6iyUFf3cq85%`S&*NiX2>eu6jyr=A-Vt&%pI zO!E$vYK=xZ=T&K%N2wmM%U-Qgf$kE+Kju*u&qU{XZ007jG8WM(nQe5$!L-`oPP;5x zri8#@mhJeh!A$x$bSL0Q8C2b-xgW#&N9Bv_r@s@0pyO0=J% z98(MSQ8kQwsaZ*}lylhvlg{rQu;^4ASQBh6)9?s$rT>alJ zq_PBEtaU0C?N+mm%a;VzK#SQXZ7EgAg$6bWM%t|AS4dgqNSE4PT;xZ>s_;l7`rWDw z`Y$Z2{1@99JKE240YckPOR7@vJ1{;JVq|*T&t?gr4SUKuofa01!b<}Sl0Btnlk~*B zqH<}W#;Xlb=`&Dn2c6Ar%}npJ5-VL@G~@vqKvBsL<7bKe_v0vd?wiCntY_RThMBr;CWB;@G*;edkUM|hk*v0kYXo0v?A zNvRYYm?PVpay7w8H6yFnM~2JGBg5-g%MZe`LEXY0!;D9`AE;CXMmJ}&vhmS`+#;j$ z^Ykh7-**InHi}j5@p?R-Qeg?8SuNsP87E3k#1WAnhB2G#YjR88gF`{aUjB6eQqYrAV6}Hcsbrx4AW0pb;(I~Rjht# z0nVL!DY1~tw+m%(`GR4wiw_42-9Desz?XV%h74sgk-%BVgQT;CMjBHh6vi>~gHza| z*Fu5Capj@X&J*f&a;a!ip;6G|Jk@%p23@je8w%xejDpx^VdLiPVv2o2K|l@(%e)eR zXPeiIX;n6eior9`4$?_WSZpDe2=g1v79eyp?Gz;>=~Fj_L+3E?NlxX12;?!$ls2{(b1CNw96mdPe|>bho_Cm@IzzS+ zYs9ihfw%&iRllE1SHCzgr zoJUSGq@_{Pb6!7Aq0;iGG#r(hLd$t72GYos5CRlnRkbYog9xuo{?LNcc0%IDv#%da zNJnR6E}^@cT9f-xhG|rYYp3DTS0ZYw&NQi@@Vu9{i!2Ug%mGJ#6`Doj1A=4*HVCGX zy$E{xolr0!Chx+HS}K~5sCObpJhF{=xJn%%ywl2$EpLR&#CM{EUH1vYr4^;bJrPHQ zbbRRtQQ}DK$de>oS{ja=7R9HffAkTcqUfJSKL05o&}S^;$D`vgjM-0UMPjoj?6*QJ z*pGV5;uw>zVq97p&%U@AsNd%Qa#fUdfq0jzQdH@PcL&qib^+G&jQZon>F4ZI3}3+Z zb88N2n9MEZ**tq3f{Ex335W`U@Sy^2IdDP;`O2Hnrf4A}kU1^R53fSR3c6IbMIlC3 z!Eyd+fy_ci6m4oM_d&W72hh%nheCpaC^)3UMB)&hy*%3?of-NgNBw5z2atJtC>Q!* z<{Nd6Rxxj2mT@=~GHmai>Spk(B%K#yZ9P|OBwTEJ`zoG#TkJ>lwDaAJm>AbXp)@hI zte1gJG=x8dbIhd;a0A(VLjyUM`%t}kPukiQ4ZU5{77emCfo)B2Y__@w#71d&cc!K7 zc|mK>Jyw7k!0wXVoGn(p;I@j8xPQ-kACFH*XJk#K`x+bfW?xgj$-p9XM^9gcoZaPw zu@_do`eXtbmvQX*3aH1Y#8Z3?!t^)MB>)7p97Oh~4h>3-QX&Hlr}GCIyLZ;NpQJQW zcuXs$Has4G58&D+G)j^?O{xAqpHbdet$UE%4ovJ^W8!$;LuKB*#w+nm+)^eC&gQ$o zS9FJHLbGT6@;AUYdQSr48}q@QK~S`)8|;1og173xx)w3Gx&D%;Sp7R)EEE)T^NR(x zuO~ENVe4K>3NGG0=CwP+Zk5Rk-AJNZk75)S&n!!n8;1cMHSOKY#aRxMn#nfX0g_H> z8u}&|DyB7%8tJsJt8Ti#Oq$j`p;dXCO;E{ii%Bgr8azG|8D2I0T9BtIcBMG~D1MWb z#k$*gc!F`KqL zw0B>=7=vSEu7o7G9h?3o^2`i7jY*md&DG6S%&kVM2Ni?5L1>V4*6LaoU(dR!YSt5o zvz8LE@7JF_tU0__w|B2*?^zx%U9(Y>GkMw6*^{TAoicOE?C%Cj@_Z;Rg89uG4tpX*}*KgxB+W%e)&lEw7Vns-x^`$sx<`HzMpE!N{MY zU2iNUhsv*F-`{Yqq)+~H-!IT@)YTgkW38ooQ^=CP5-@jpWWf~mD_rVT)vNU>40ZXY zX&4=R!JIa8Y>jB6$y;NxLwgk?b|8uRpou;4MtSKDvpDaSDBj3oF&{lxi?VA)t)0Lt z2K^0^HChZP6 z^(l+}N9tSSM@hXF+w!JH)6!P6S{wqUwbrlH%vL32FMtfSo=V~}rPZMUymH~BK&fhS zSR+@Ww&~e+Z(s; znUhQGqZd1L~1)nt45~otLMAf95!9^vw^&T&?B^VmCTs( zzH-Phq@tacmT;e|s|3rF|A~Z?skB6x;2{6Sr`&KDSvF?AzJSRGe1g6i;#6fZouSUl z+zxg2mU7KGv&a8IhH*_!rl^6>%lmTD0ojaHN>WU^8z?-Fk0Sa`lS$tdLkxx}V(2n8 zSqjXynx+y+S_MIps=pm%vJ%A(Dy1a+>sp!0$YGi}92Tr+Ql%zf11Lo=8U7cUvPHm) zvdBF{=iCMwy`snu?8M8)0Rg>2yP1{oa<^{s=k_5Bk5>SMT3@z5QZpFNM|ApQC!MZ- z%=rBPC2w19?xDQAgSm?5YiKY{^qg4>*BZ~4!lm{lg=y>F%Ete#F$Xeg#qSe|Z%D-V zr)7wn?~q8N=XNlOEjKQ8G?nx{iS!+b`Rm_%W4(VB_WR#i4XDR9{NLWXh%ArT9&OD? zi;vLh?Mxp7j>yPZNFXf4;rd_sew+fCUpzgBG_iu)JQ2U@biz|EgY?EZexrsa{7PDP zu+%Mxq%BBWq;t9aB`ZhNEYrFWR=BcpZAg8sVY`u3$9cc3jb2|b@)fAO+yuh@=hyk7fY>a=JLHU2tmQs57$;sLDtc??|C2l-a-=4-u| zZGM<+9D(_JP#+XQzgzeN=#7*w}fFMDFsSKp? z%|II83Z!Y*q{$md^>*GLck)IBz8ScHoD{8K{vWg(@;}$}@#4dH{C{(Ldg5nEFUZ@Y z4|mCKFH%>~rr#NEFT)HooZ%K`i~wVdG3Fi|zq=Sn`mt_)dNJ#=?4F9;4t;wG`42`U z28+yfJ|)7#W%%(B0Ko(fb=B^lCKUZ-4NiidV9;nL)eC#sVBpca1n=a>z@rBMJmM?X zOqun2Zf63M>48Qwfp8)N@aO?63kns0uKi_AAgrHEo+NCCwfqkXg!LXdST+HQZkBE! z>=xEfCeKRTYjpLa>vnCMMPbNfl z3LX-%N(1`4eJFBS*}SVqLcaion>^7_qLnE_Vh`Zn5s~|RQ0B5LARL>+!r8@v4fBqC z)B6}jd$6hwoTA!Q1m#+0ah1J~VeO-rMgTf(C$jcXm5e#u8sD`dKQ&h0J ziHv27G^dY_bx0O^rgG~UsT&lZ#}FjK8Iyb_Lzt3^qN?%=Iuek?g^Y(5aYB20XM3Z; zJKSKE3QEnpaST9fmG!JAQyip~#0A$vCUT{z9z0uA1;u@lHEFrWV3CF)?I3UZ+ICn( z0?1obKOrqkbsje~>cvX5#7#xbbY!q(!JaN$%j=B@a zMXVN!Vq@=*{cr!Z(}nPWm^LC7dZH4+87DT|$c^I@buIb}kzxu4A{|qz1uvNaMEBvO z%rfSKN?G<*ta}63O>5z_kpt#UFD^op`xcJFUd+9;t_v@cKIUrOvq3dpt=pk=sHy|s z2mIWh#~~ye0sVB?JoQUW*M2>akGGw^cRg0{n8nZojKrD!-28ayi!ywQr zoKqg6+ye$Dkj_+0Vbdz!)pa~IEg2j>AE$pm>y%$-w(`(xv`7uxM?q+Fsi>n&m5u=Q z8`3O|QZ0f22+E+y68MmdrfV{ktwGWTS~&VL+aa0xqRnA>Ho1>?wPi-pw?|i-dDb6E zbHLV!bkmjM&#fuUOfW1!Ee@)VZZ)Y85iwvh_}duTYIs z=oyKaQ%Vai@>oumPR^CE9imrYJz@u|V}K{RFRwal+qwqYOMBk$>dp8PuNqV+m2wJ| zyOth_rzmBR<J( z3#G{vVJiScyQhPVj;zat1VmLAMWv%Us`3mWW`U@_nJ@Y#Wc{<}3Y$;%B9{bH9|A(us^bKRFNj3dPAVbYA9PfG;#Sy+BgY#i;0*|jmH;rjotu))jxogz zoC&-P`B*qjA2YXH)Vx$1p1-+D6pHtB6Mr@MN-0sDmbwO)|036elUW!~_t|lBfyb4r ze;cQg*L0eGSJ(2j@R&!w2Med)8eWd_TZLze#4s(8_E5~i-9&I(1kW@=Wp7BS)2e7H zgIJvpQTWU?b#D;iL8BXWF^oB?ry);bmVY#ft@U}wV!P&PVa5?&8MFo+Rh=khJ-(~z zq>kH7lt+1%AjC|GyvWDe#8b8At~UY;_TkA386eQsZ*Qc@XAB`D%$y!nJvkeOB_b|G zrTApWIt#OKd)|qb$}BtPGV4%*ul7BY_(|7pzFTVUVpRF7NpoV6o^sG0I z>RA|C2M{J<5=YkO_`VRB;N;mUm!Yq-sm+-;YlsN>YjcsE$e6q}j$vNpg`?NHVs22A z3}&q-(^4Cy(?Da>nojVp)IdK0iVycSTNc-GW?_ktT_Eyc@1KC4H#@|<-safclpXYUZ z-3WamEuXTNLpl>(2E2O0X6sXPTiYzJL)%$OEuKfeJPp-wbPW2eeWFn?dT!ffe#8S^ z;+%TU62*r5Z*TikS$6V4=z$tZMNgF41n)5|3?FSJ${ql-}Og> z7BLl@9z#cpqXTWHR8ANQO%G?ru0?2HI`S*9Y|0{3?k$az;PBQRqy;%lM8_ z-_+a7W+?*!D?A&!cRfbTikzvfue(C)So&5bYVG%xzV=_;ZGq>{wh!Bf+x2oj9rrsd z(Wt^Js);rwo6r7K(BHLG{&gMW7U1nnv}B`ShY%jz6K^O6egiBLG^5Et^-_!!s0x}) z5wox1q7f~ZyNc>Hql!yOyXunt&sYUG_Zp}mPa;fia_9O*<|mG2w4Ks1haHPj0Fi%x(vi6evvzrr9BdB?%%{#WLy2neszUaW)bthKL% zV91AoflMkL9*%M}q_%2PPS=aEP5UiNG9Z3x0z&8@2ryzsw(gPqGnT&v?WV}3D@l(u zQNGn~5=hYPFS34T;1=Ze`LtxqEx;d6(iKW8h za%0m`u=E^RGcV>YC35H?ykI{9j--{$ae9Cq#U2OI`{Uv7XS)fpw|{~3Niy+_5rGqD zxSh6#x$al0M+?4`z)B7XK=6xW_O43h3LLODrMPy5_Yr)hPnqP4kwt%$%GZyh;LEwS zm%#|{Qpc%Q7`X@We}!u3^?gpP5&DBb#i63+%BJns0N(D!D_YRYoz8sOizv8rWZ-S@ z0FH8U*x*cyXwBSqd-)OG#3{mb;jT~vByd!lmWFYL zFd7kqI;>c%tMI1?fCT=)Ud#Z-M_K2`|A%xEaPS0??K`T#$CI^{5Uwm7b z)zA?=N|Lu|Z+c1J&(ovkH`{2P&Z^hV^DO<#dArQg+0?hPS*PH02#O&_yc7C=kChfy z2Ri@}p@U-oB{B{?e4cVc#mpD5msH3K-}(q)>;5l!t+mpRI;+T~|o_$;B(*bM1pV%#(&CtrMP^9dXKGyzpKD~# z?5(xzP?AdhO0}#%t+|6iFd(*e$X%Sp51;mC;#-K=@Yznh(~gv zDt%UqquDOoHcf@F4xoK#Z>K}LN!N9`Ko*?();XG$Perw(wnF?JF9RaKWYkl#JtO$6 zo;k#uyznZzEskp82E!}J)v2{A^9x=O>d0b_Up80 zQ?GJUEsJGF3!@rR?R|OoAK%izo zd?3>pVU%wKOa@$WDOEIEXy>v=R{ZYyv(=LIQd*-vGAFZiZ*jU z;~dCdWiM}+!){UWlqZ2)SDvs;JT~v&E8_KK5wEcHK!ziI#0V{r_My7Axlj>VW6I0n zb3WVRuKm1^`}VXwRfWpuS=?lGZ-zpf@S=GFcth>kU$0)VT(iZuY>+8pPYqE+!;Bafp1_!s~{a3>?3en;w*CoV^5haDg1 z8{tgH>xo^wltYq!Yd}Pd+?cV>SY@AJs|ND*fXJEYw)EIi2-m5=I6y*_OhoixZfb~rF>NiyYXUG1 zhu+cdeK2fHkAbFxgEsT}5QV-p98$8*de?7~q_qXin&mXyd`@H-iULB7f`v{TzTl@t z#%SeVD@B$i7oDD=69avDv6RzxP>OOlt?*2?&2q_{v|GxR!I!^s%WCD?Y#=i%(SD2V zwO1lE;Da<{L>Pl1CbbCA)TJ*B0`P^wphh8xKGbiY@ z*_x=Jqe17mXB#D9M~BF7W1}{!gMegT3xQZ$vYwEenM0hz8C7b4P$2K?4?qPBme_44 z#n~_30o?{*s=@M=!D`)d##uw;*}{%g~R-Pf7i0N&H}+grkbusm0~4ImHE~lkv3aE2NCIRZ}d)S|E7dXJmQl8 z`+UR3kIC9qP0S=)i(@GsEmS*jiI~GPMu;e3T6*KC+G-2Uh_Kok2OMKVzwY&pxIr+9(3W^3!~g5fVU7ybu)0C8>AQ zbVdFSRg!luYzTCT3g5CuJQhXZB7mF0JiNyXBe z46*QUNu@VP0R+qd`wN^}4cSc8xpRo_8B_GqX7H!BIg2e=4E;WG=TyN!Ynv539n1kc zdYF#FqN#oAhlGbXhrkkQq-Mb8je`6v93G0Pc_p;TW`2l73EaTAJ%Vb~*!$xHA?fPQ eurWI&g2C1`t2%U%vVqa@P|oDX+yovRW&i+%ZuF7> literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/bison-full_97x50.png b/client/webserver/newui/src/img/bison-full_97x50.png new file mode 100644 index 0000000000000000000000000000000000000000..7c6e4aa1345176712e5eeba1ab4ab3ae6cc4a9f6 GIT binary patch literal 3860 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 We5!EbmA2^s00007 z>LjA454Z+N4}>B(6Sgyh!37yX^oxWbjYjFQD%(cG5QvJAI1(L!Kn#uUcnm=bW!@CJ z7mz=J6&F|O>w6cA?cB1Z&)2t>L;`iQuWu)ndLNGmbt8?|N+NZ7dfxT+7L&=%1OnJ< zAd#Bz_;wg>AP@l1Orf;n@r_h!6AZTyiEUIWAe%@e0Jl;oZ7|$OBsNp2Eo5>dfzS-Y zVhRP2%_LF_mD&nK7;XXph0+2@;7p-3lgTY4QY(?z2z=xug(9tiCy@wzT0sk_!8|ha zCRqVmz?RfjMuJ8~>|G+J+LV)`F5a|_E2R@OGQ-)**c*n)O++Pclz1+(4N z?R%^{&co9SPawi%3YF&VL;rENpZ`w*Kkwbg_$4ri863i5b3((yfBo%1o@8|H*ej(bGN=h+}PCI(%RPE(fRkiuI~Gi-oE|^0}ls>9u5C9@_6*gzhlqFC!fEV zdiiSl^~{^M?`G%Tf0$qRxVV&Q+d7wS`vr7@w^(<9Eoe+HyJ49*&8 z&H9OC-oYO@faL#T+SyyNYtx(s{5QW_zxYv3sJ?1ls$--f-u^+ry$_2UVr$=QZ>hWW zYT?#+!Q4WkA46akd1qvoPxR>gJ5{E|(4CHTr?pjVyfi<}#~3a4W_;{oQ)#w=tgC z@202Mq`AICes4cUH&E7`GGJ8~JN{u?-Xpe(8QhVm@P1;L$fr&_oJIXN_i@wFR8HWi zMVot~PIOE@{@R8MqfU7r$XB?eP)NnY<1|bdmiUyTH~5CLgK% z`UpP{ou#;%jLw8<h6}?WQ(M1rgjeD!(baSl+!``>Re!@e? zEg{{Vv6;JyKAHF$U4-F|eWQo187XYXw3ZAy6LYN!5`+aC55Ldh?8QyM*J)Zkf*JMx zAEuNMTPB=zal6%Z`x!Rb8%?H)hoXs96*amR^nA^tJ~NSPGI!ci7mi4UV@*>Fc?_+F zPbHUqzAb8J8gj?p*68>68(@wP)BThL8SCwE?WLE8t;*nIh%N~k#ZCSlEnHV6@DAgp zXN>VxOViLo17*5ZTo22@|70CK#t8mFlV!fPgjH>+#%V&&IQ6jhTTt`~X2Wa#!FqTw za4!NULzAJUqSF{#Mzh9b6;u!|qu^qej^$o|;$X?;;ShRmTneHjfEQ7~0MG zVC2&nJ9$Ip`kr~iv~vHfonmvMxWY!=2envmO)S=$52eHjxgxjtA@)4X%iTLst`x4@ zdrdR^yre}XhAblQ-Dw(Cc4vMYad_fFt>Pa+k{=J}(MgJ9%y5k(dC0x90m1RFvgESgSJdzeGC z8ql-%92qFe+1aJl+jZPJwn|?Zda0rG234(RHs(xlhe&Ml=vqU8O)Ql8Px{c%-XL9q3kSxfhS{;^mcBM7X_j=2q`mdX1lCZ8|%ms>jZ(d+Mzo z`^ZITZlO-y95@u5ZvJgxwrNM=1t74L7yR>0)q^eWEN zZz0JcUu_k}?h3c~w0-G(PlS@8z|+waJ36?lWHO+5m2`Ui{ET%drB89>T*>0clv+f1 z2uJO=w0;7-Nv=VW>?6*c5mmTDa5jtrw^CsQC-GZf9=REYdJ7#-jH~28HqG<>9)1^` zedv2{O&ymVz0#1dXRi8?>ImsZ?BJ5<8}OGgNKYInJv1umTUOh;)Z=Qv&V0;2nqOb8jiLR3T3}@B>A}HjVESDo=Rt*27Q>Gt_Y@sM3`$L<%6J3^VrDBda5FS z?AM<1mFG6mY<6`sW&?eLuZ5RbWfb@-I7)bxZ3G@@QyK|W86`wp# zC-k0IOP(C*iGW5$q)U9@UV2)S{b6#J+vgFo)5wizptF;TP7NPaY1?iqLC;~x<7x`j z;?C80J2koco@;eF3wyJ(%4HlU$1yLWU{6sMRT^>hpq=da#;LjiE-cWLOLuujD(&qy zjk9LEPOIzG9Nak4oPETeUlN{?Cs}YrjH@3iXq$XVOINj0cF|lu1coI-xfDj~(|C>oU-FTO z50I;kB`R6=eDp~pOy5@rVY59vA7gXq10s~{jtc1LNHpPCffDbQaU${*#|{-Ym9!Us zCWzl8*DMw`xLp7a|b3KHF^pOKlmxZ@t}SGBu1^`P<0ZNtA$MK?e!ZL zS`%xq;sXhInI<1J9n$;J1<*DF=>0 zuT{tD3(r-wTW6-@CXEX63b*4D(=7oZcqbj~rH7iR99-d0YpbLZs@xxD0g7WKR)MgW z;x`bFjToLKiY9t&+=X*aY8zn!qxrA`YO0x-nx56BZ??Ca4}pP}P17D7m_)0()Vr*< zm-7C_<9Zf*Gpq}@QyvXI&EtwmGET5j zDaT6v=~z{;q~Kl|DoAV8;|AS?MWuc9jJte3_w1>@QGzQsM8@U*_+;3S4DLGoGkBBy z>77^P$$W)tu6Aqg>FlV%$F`}9!2@veim7;d&DiR2E}w&>5_ePFe( zjy@H@7gRim^Z}i0=qt^>~I9P9{7e)$t`=W8c@ipKt}qaLu_PtW^6NoaxnL4AnsiM;P|@ zkb+@`c zsTP~@4z$aCLsuP?r`l@%Xi_BMMImkR@^Fny1PaF+T{BM`e8UL({rVPW%BLOs;`Fn>6h?un&8I{L8^E4E?C=Z zD7?<=dG?UO=fZH?G^U2e;qXD@RuiJQPTPWy%n-s?H_r?B67o-*GQ8f-Q%hik2;aqk z&DIg^Ou)~=kDM4slis!3`(~&)6HHAx0dO$ZRt|X;2==4@Qc{>j#(ttcIPv+ zI6P@_5nBsmMb72B*gQHMdv~a#_3XRrXDdtJHDNXhI34lr}Ah*Y;gb! zcVHMhUdj2}vCBe#uhk5ACfU%0a5 zc|>nN@t$k5M3_jB1i6eti=7f$_B$3b3j~8XeO-cb6IzHR_8im7&eOG?u~x6tn@n%6 z|1go^={v|7YFKut7E5h%-77>hplH zpcv)DpCZ+Jg9JLy^wAk#2hv`!oO>#b?5P>B?UXUq1ic6 z3VNgod{8nP)DjC4U{D&kn~T`N${V;4UCZ8TzwWr;z1&=%ymJZIWn};0wR`>=_%l1z zg;XQf@!NGlA?ro3bYW-`Mj#7wOnj_N>i)V@B#r0yK~qq_7`LC=zrAzO$_^S4%EX>x zxHKGc3eiGJ1?K3|09tf3bkz3KQ*oeeNLiaoy<{Igc=D>PC8Vc9tNa7+uJ^i2frtF9 z40yQjqH7Ka3Z1QMHjT{Iu|jyG3gS`)%K z36SH5<)M|Jvgb}qqNA%rsHql5H3BkqxzA*u*s4KPR^3PshQyY#Yv9anc%o zpKF&eC3?9IXG`ODg-*qPta-=dyCMa~{^#S7c>&(Qcq-(;y`5p)NGKQ?cU`^OvLI-) zczyXN{$9)dwXw6mkym`#2cL{HYh#TLK>Hc%#&NMh^5v4dvr*oG|7TKSUXY*>hG{g( z`F!@0JFgGc8pk8&Wp?$eS>>q+DiRkijYz`*&k>E`rKXO2T5QN~{;rQCo-E4!#+nFn z88Li9PNNgy1TwWGV^y=#SgKvsqh@0+jHAyc#!V_jQLXmdToAPS7WtBB^ogmR>t zr2^WCnK!CU@5p>VGwXW(i)T;~O3dHIjZ9ym-?&2uT`nCsz;)rc_9csHz-O0rPq|Zt zyufhS(+(~^QGsstUY|LzZyJwO(N>ss?c$wS@!Z{49R{O|z+hTn$yC(wUx$dV31AwJ z&mi&ON9jfsfRC}iFzX)Q@rX+2b{@l@%}wwwB?d#!CTR^XWXbh^cZiP%A@WD+JUX*? zLVVxBwD6Ob--(fUvaaDqA9MC`j%mmj1RShnM!7MsSnsPuBcb5zyWVUZvs$#e^XID-J-=~{F0Mhb28yb>~-6KLkgs<$qT4{|oW&Ph6 zl!~-r_(_hR|Ak5Y*#y`BfA0DCzPa0}(q$whQB-JfOU(KklfQB8bcq<{Y(!QKrd0a@ z86$P3e~nW!KmE)G_I^+K#_57Q#k{0^+pM4F3dR5~eZw!~urbs9hximN z6Thx4yE-rcw!fG6v`JC_+E-d39ZqiS|DSXQ z|Jef-hZNh+9^<^Up3k|vs=?;BSCcSeIiK$&j1BAQCKka8i&r7$KBvEinvDC6TMcM0 zXNe=jH7hc+01yX0Cr89cS|J|V#F@5#;Yr9fchH>{?=?cdV6*7Kh%7U=VA5Wd^M^si{NuhKI*iAyAW6$K7OG&@OGTvw5lDX0!Q1aJY@DkqHI4lPrMup7xoyH#Khl5l)m&PtyGxiP? z-X@?xTlk%ht{KIZlCp27lJi%1*MFWayO_T8`0vdc6SZ_13zE3poa?m}Q2#;U zsKJKLrHhN)i?Zy&Tvw~M+Ap3v;?D{F-#jeKJFWZ6!dI!T3z-suc&5soOGC@<=4n|U z9DGpV{vbL-;z0E&0_t1>7;$if-p$EI6^aM&hS0C<*tE8GTl|5X3oBkZrS=Yf$ zLSF<5F()#)Ue~5VpaqkRMQ8U-x$1ROyVuQawA@8b=;xq;5ZLU~+h+x&3wstec&gy* zh=?~%`+2Q=?NB!&H9yn0Z^Bz#$t0vWr0Eg!a+7^yT;TI~5us-M>}5kzhqdqM#}KVG zwGPYuuRo;j9etj*JO~j>edIlLP03-*O^Jd(hqgKQ=14siqxrmG4~d{wLcp!jvYH~X z(NJ&(vBp#j8e9=X#{*D0l(Z9Z4tvHSF6DD7W(HKVS&N*Yz!?qOI04B6wl|rDwpMYr z$S4Hh!TKh*Fy<{{oOWh%6l7#>6!yI^Z4|XB%p#Ppg?LJ+%(V*`EX$%oG+9DyfM0{Q zH^bxxiqYacDQD(OL+}x#M z(fl9d(~3;cL*lJoDT7RV$U+<+;d~Ds&7h8j_RX_JaPmL1bw*Q=tf8U2WPymFqEIy zl@A(P_LdkVdU=$2QPY@Oy~9|P>r>rxczO6o_AaI8-DJM`e2(P;y+rkBsB3jeLcEMk ztFym5*~N+M1EZ8~;1r_XAI22?eT>MluK8FMX#MayQ0C&PeYbF$4Vyo^&io0{cYiaf zAF&_>DVW<~{=oG%22}x(j*KMw)(ErDYbGURKk%GIm+K&=b>)%TVD(itaMRfrjw8D_ zC>%)YIQ7hY6ja-(law3K)4drdMtbvjCSE)T7^4412pL0;NOqilWAUxN%1@IQ@Nl@t0A0!C+1T|pUP$tf#q&u18xs(*fk*7;o1xEt zICh5iGjFghi2S`72QPt0&fvW>uz$@IGKUH!grRX-+P`6Yv$=7srnP3L)_!|XhMh=L zJ;d*4v|j(!zT?%jYUOkkf36{LWYTyXX_Y5pA-Kof<_9)8NH%nDx6{>T=Rj zG{7%pr46&`H*U<#51MMFyYiZRj31acBCt;@J5<{P&R={T(8y}K^-aoEpWOAlaqNgMygTH8WlyColnji6M4v^E zSoe+!S$5zeHvJjl`Ga`9eM6yjYtw_qAm9eSt>T}rm$>yWv$~5-Ew;nxiJcPeG&9*&Cd^3WM4Qp@YSV`7!EeBW7y&(zAw(U`D-V(!Yi@K^~F z&!Qm-8XGJL22UuGfw>pHv55O?vGQw`I8`J(AK>Jj(8;*V!{_AlH-^DCHdVr4sl0vTW zsbH9{Egj#FV8RxRNw0LXM3`6X_6MSU8>vY={V+|TBQX1MY}smQpP8k{zZjCDM}oJ~e*~*?*#Lpwsair&zq{>r2=s+e!pf7d9Qpsp*URbz}3p6AyNNPWd?4ZTo{{4v& za^kg#KqEk$$^QcJ5C~ZC14pEm&~$>nxGJ(#{X=!m875FX8=e%G$ucoAk8k=L=W&bw zp8^i94GpB)7-@xUQ{+qc*=u}BdP74oP#5P*rby*3q9`6ERn5;Vlaz%=@|#8PFFt@e z`JGK&@WMRy)5i_+vsodwZN4r85*G_3LWFu19jLp0MhSuRV^78ii{LRzxiBB^$ z6@;L@)Zo&`ES|7BL5EhSn>9tZ2(g8oSZNEJYkbo5a{nMRdyGWDS)mm=9Y=Xi>8?DL zS7#rx#4(q*zqi$3GaE9E17O16JOLu<-WNbSFM$xoHJ^EJ4387UFSNIZw~E~Lvu21>j5@wgu*xyMx*wb8bWdjgZ5=CRq>#HvgdR^xY0iNCNK|HEUIF7(?R zY%Y;sY*p8`BZ}+S>{7cWpL}DE`O9}qq>kdAf)qNKb#_^H>l;TM_Tq|pzMA$;x72Mb z_D6-Y=Gel-{-+W{IWbJB2aHi{hx-O<%I+nbDZWabDVh>NexwKcYT!tdxR4a$C{l@^ zQ-&J%>Mmrxc~4I_#_>pdY5Z3 znxd*0tF3gNNx|WsE{ruv#kn@MY3BbHsRRO~)0>St83y}qrQ}=O zrd~@oQ~4V7=c1?P5()$G>dv#o1St67#XA10=NU;;_&lnpM4>SuEfzF24+8L)ejM!A7L|qp^Hd#- zW;hTg114|9VJ5lDFC(Mj9S*U1LVB=10T`Hh#pY0%R&kh(04AP7QW{4#-!7XMWcH%J z^NX8dpB*5z0ZbuCAxWX&f^FaDNVhkYV{5w$6PNNo{lsKp8q+ctTly2f=(1$2^Wplp z)X~T<3*R0Az_DmjkV>wrj4c~2i%(el;m^SkRA@Qut)CecZYEZSE5FAW3_T{q?O%hh zI=f*}6bh}XPyupg0+`vEYvf26*>g|B^L2p7WKO_3PjPHA zuT2dqR6pxYdaz>Hlo6q@;E-B^74)g*(W+9%llAbixBlX^wc%m-mV7 zGC9QZ%6Qd)47Nuhv@9#4nE{#QBDYs;FNi{+g0Y;6(eRiJ8hfvFkZ%&i6u_f6e9q`0 zcqz*;VO{2AN@4$j9MToL#5#GT6nz#B_fKn!dNqytdC}O&hjEb_f77i2AkDF+A zchPCuHcmgl!|h3H67pYnlxk&#Gm}k4h-;S1?9Uk6n@LQeP)- zYA*e4%c9?+lEEm9^V3_b8EYS-`v|;Y^U5ke3B!+3th z`Q><&|6O?$yLS_p_E$X$k3B-`%sYtd&1-4k`(|;9t|0g;j?JZysU&-cq!}|`lI9A zG-mkCuYh`!KV8T;8?Sb_yiw0}{dj{gB+>`{i69HjyoS9IuqX(4X;VaV4#<*i9RG5m z&>DXSou&iTg=5(eHKNIQvcRGkC_f>~Kq9Qg6l#tR*WSAySS}|}M8_6L z26(aGC*W?9sOXgb_Pq=9H8C+KHGfyYf91A> zVNrA7m2t-dT*mxufAuV=(XiO%$AAA5N!z1lyEbL^k|JKCV!KWRH{)l9P~SUeoOJ8c#h`0>EOiwvrgSj z&}$C`y^(GHm4`6KKnjd+PLa>Wx_8e6BFY)kcNJD|TuNsenqJQ#U*BQ}(-X^K%JBkh zmemEF7MZ;=PAGW@8Li^^ZWM+6sD+FNDC^w4@QcW_2m9|ss08`aLHvO0Hm0% z5M;{{ez)Bd8gQRk_Rg}n!UTG!fWS(z@&%WpYPkD32iDO`u&Q ze$BN+H7demFfkF}xES_A@RvJ2m@Tv*;c7+a7r#e8xrZ}f0@Wb56dJeT4(S96bP1LM z)3G7Y9Xo2c>I#ay3;PE)S~%Y0fwL=;w!?1X;j}|L{zIgJC?_?wyo1);({%>He>O|Z z+)2UhM`U?)353PL4q?AxpKWAQtUjY-*8u@*W;@I&(i`a6Ac3?!zezMsKlq@;nV4E*LLQ8J}Ig z0a62*0!;7KX{k!M${4t3XJ1cQ91u+PM#L3nq z8n}BS7fJ|xTj6|s!A&&C+Bp=0Ht~>4AWM6bA~1zQiDU;93iW2leh`8LLn-?lEPxF` zD>2XtgHZ;<9ACY5hIS8`TV7)Fow>$O{2*4vrz$OexYqy`GivBhzLPc?7c4|Ax- zEq3OO446YRZ3Ya3_=pB`?D0(u9FIn9*^h6c5L@hE4jtb_#c`?lCVSInx(SbN+6*3n z2~rdwU>=R|&>qL7!8|Gue4h&Q>0+Bu;2vTLL_?^m7n2@Jm*+NI3zN|G@Yf=|>pQ#@_<; z@Bt*q7ptpO{A$$?6FlPivmqFwR}TmV06`kk3_i#(pc!aT&YuJb1O^U`53G?0)3mz8 zKR%yX8(@v(7ydXhKfBt@_rZ^e?D8*-Y=InSbyH-EAI!h>|FS;`{)9g{{}*5Lt%Eeg z!Atk&37Q=p5)c#;UMI31B`UT-e3OKv)aEVHGO}{=3W`cwm48)HRa4)th0)%H)zQ`4 zqisNBFVzinryRgzdeOUcVHZFbarudJ9OCH%g6V(BYyq?fya&q1&4&5 zV1|XCjEIanbvpV?%-Ohe@vMZzq~r_#VW(weW?js_bU7zCFTbF$sJNu`>b2`P%5GLv z-mb2__eaD12b^YJOY4)TZSBur{Mpgj)!p;5_f_BPH~nviJ`8{SH1c_L?8{%{UneI2 zo|>MSots}+T>AF?pXEO;sboNqa2J_m=5X@$t(=v^84T%G2}Qq4nP#5v-7P7ir*+6u zqAJOydj(0Pw5o?iu}`Ue7#Syl3R2sSE)=)wduR9!I3cl#U5_2HA8T=ck#}JL`{Mrm zwCYIz^xM$0jfq#LW`|KKRZFo);N?_D19rel~j_y_(Sz`^;jAqtjjEG)vgr_BN-1)MjJuqVLm3R3g^`mx3YKJgLilc7*60 zKUb|g6m=awu0~avDA;`8&Z{vgsoUDOyUf%5dOA;2LNl)5xR8hVa<$LH->JKkQu5u?_|RIl4IHF30fCq zhDL9{_ZTHMq9LXC-)lky9w+< zhgamppgKum&@0vv#LaJcqe{qNwO1XDx9^-H{?bYmOecJDFM zZzPqAhhEddTJTeulHP&68!zZ6hp+DokoK%P#=QNt#P7qS9S^R&!ZxLi3s_lAB!(XH z9=oZvoc&8Y<<9rT4fz~5{Su=lHI4alpDTORBeO1hVdTxvy&0#)J1Xj>N-B!`UgMh?1QHnKa?r@T_Q^_Q^$$!0D`d%k*j9v!QFx2Y`Cb)^IDzxB~+WysB_;Na*NOxc`L kkYP?3VS3m+TuyF*U<{)KFJhh@K>je0E$m1YMEBVL0=kUjP5=M^ literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/base.png b/client/webserver/newui/src/img/coins/base.png new file mode 100644 index 0000000000000000000000000000000000000000..641623508e593eeaee7fbd1c4453d2094ef70d42 GIT binary patch literal 3698 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 Q=Kufz07*qoM6N<$f}8{PAOHXW literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/bch.png b/client/webserver/newui/src/img/coins/bch.png new file mode 100644 index 0000000000000000000000000000000000000000..86d6016d5c5fced5cae9240f37f420b2181e3be0 GIT binary patch literal 4103 zcmV+i5cuzjP)Tud}EF#3~&Z!&N)PW z&%+Hy&E{c9w!(+oIG5KgK5+Ul+)kF_cJewoq+q%Yr?EHFNgF}4K2QUKE;+(jc}Y!4C2 zgg|hYXYtzeoV7GJ2zrnM?jc}?#1n9u7`F34VOy7F?WwOVA%^lz69SCg&lp<) z;1-2Epa+TATPg~^-DO$Z`n4cLx99nEE*LB#;1K|^3RUG^0B;cJS+}{!c1;ozV=bP> zgI`U+j{(GBY`{+p@2EKL-?|pAuD&)1*;TC9#i*WPpdtV&j7@RC-mdZvB;D#w^5 zB(|dD4luj~AQjgJ8X4#*XMW)}Fh*mBkQi(6GzR{^7+}FQ2m*FfKzKMBOXi3Z5?fhv z7l^$EPy()PbP~}&y9;V1Di{=aSXUvJ=v~oZTh0hpj-=2Ei}$njb$S8zFjY$xQ^d6QJub4ghEd z=-V!H(b17!fE%%7RF;?t*fUN>A4~>VMNCCWo}?0@uiSDokzfU28s{J+9AM1i%3pIN z>Jp;ey)lbO*fmbZkcbD-PHolZ?5Ije+}`3z6yW!a8*tI6VM5?Gr)6DJjNV9r;w%dmC!`}g_DVN;UXAT7S7JiWpdW`EO;}(|>GS(M zQz}%9Lx2RO3rPaU_*c-AxG^#b(N}J{KiXU91Yk~lavw4-J^B4bva+*b!0!#b2D9QO zjg2)IVTsPV`3EB+Bys=Ncmg&`F;1&}VAy(sT8HcP6NYUE0A^GAm{|uiuq_E6KW7Y^ z5Rb?ItW?_~gHLqY06XFl0wLOsseoj%Pp$b?ScGV;&(8p3k4iPdPdYEaD-3V2JwgDV zItKb!^NlIca{QQKgcw$8cW=xRZPa-Lo&uO;cjyuVIM~&QJY(M{J1rWuYrNrKp;Y^--Sk>69*lQsOoG$mAwH1NN!G4yjt}n zdNOc^_Cs{m&1nqmEC7v^BYb-5eEeeStph$^c;pW_+I=PN^R2{bc<;vVjkuq)ZaYeB zpW@A?FXX1hF9d`c{p0eg5DYyjH5mXIT`>B!U>vCx=`JX0!W#wLxbpXoXi zUdmpIJ10!XBd2zvBjAyX5H+vj3IRMmsD#8-Zk;Gl;5-1G)T7fd9t{hA3O%outj|MT zP5937?QjPDa*^WZ{hG9^GxGZw^`PMYN2$r+z;JWiMEpz2--TR3MH9CelCddE)=VW` zQ0>2OP?go2_#Aayy-8>`r6EbJlWj(Rn0!56Z9Im!0VjnU`{hFH1-e^k6i04^gj9iB2%yq#!>;yP?Cv;^vu^vKZP%XTu`Ycco=l%7YKuCK*C0!0!j~?Ys@)j- z{v|><0MP9&Nr_e@@NicXx+AcP`9)0??*8I^y!_R%A;|y$uMotBx_x-IZl8Fy8e@=C zYv$^9m!w=Kgj3PtsChpmU|;8jQD4VAg1E;f+o!1Ybc!>rB(IyusaU~fLWsDiuKg

+X`~kJywRHX#`?#$nsM)qJAQ2Bu7y7Qe3~ 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 FV1n5npBexF literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/btc.png b/client/webserver/newui/src/img/coins/btc.png new file mode 100644 index 0000000000000000000000000000000000000000..7fb49c893cee361e6e2a5e1e888e88e6d5827967 GIT binary patch literal 3636 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 literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/d.png b/client/webserver/newui/src/img/coins/d.png new file mode 100644 index 0000000000000000000000000000000000000000..0365d8d0c0037db14992ae9eda5d3ff790328813 GIT binary patch literal 2213 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 A82|tP literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/dash.svg b/client/webserver/newui/src/img/coins/dash.svg new file mode 100644 index 0000000000..d1678ccc7b --- /dev/null +++ b/client/webserver/newui/src/img/coins/dash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/webserver/newui/src/img/coins/dcr.png b/client/webserver/newui/src/img/coins/dcr.png new file mode 100644 index 0000000000000000000000000000000000000000..00dc5cdad3ab804fcefce69234ae564eabb77986 GIT binary patch literal 2909 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 Hu0mjf-6dwi literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/dextt.png b/client/webserver/newui/src/img/coins/dextt.png new file mode 100644 index 0000000000000000000000000000000000000000..ce02b97370bbe17565280cfb63f4b25b8d1577d8 GIT binary patch literal 7041 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 literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/dgb.svg b/client/webserver/newui/src/img/coins/dgb.svg new file mode 100644 index 0000000000..d34c866f40 --- /dev/null +++ b/client/webserver/newui/src/img/coins/dgb.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/client/webserver/newui/src/img/coins/doge.png b/client/webserver/newui/src/img/coins/doge.png new file mode 100644 index 0000000000000000000000000000000000000000..8497495d4f7d9aedeebdc0e708ec6e29dfbfa960 GIT binary patch literal 3075 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 literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/e.png b/client/webserver/newui/src/img/coins/e.png new file mode 100644 index 0000000000000000000000000000000000000000..2ec90111a2952f20fd84ba0e43ea40da64b0ef26 GIT binary patch literal 1779 zcma)-dpJ~S9LG=DG)APGOj4PlR4PW3H&=lGSBaR*m}bWt`EY2P#K)9(JY&vV}Q{k`Aw`+m;%oadb9h&&k1de{Y6 z2!izJG{g(6EOcPB!0b#6VuM9z56yQU1nH~LF(qTAzA+HB_L1pK3KJ=R*B-t*z+P!WKY^pSzB;(tw0_b-_kP0?Qwr7iy z=Uf{IR|-fnHeC@yt>MCzEYRbuU{h4V}OHVN>KBSSfH) z@eny5R&bnD0;-IQ$b(@8&soW#)bJ5Gm#h#_l{~nbPgZad6(~4lIiG^oVCEr8K;u#r z0ssW3U?m?g5d{whx{{A51OP=*0w&<|DN0ZSCJ#m}z{`i_Jc@#kdQm11nXI{pf=iKu zEtmlW)nVY3qZ|~jK>;!#02*opx}5tDg^MOZjiC4!1hh?LK;cSY1U&$#flL6=nmZ9m zb7`~z1kmJ}s5N&n0Y@#9A`D!U98KoQC%Yb>c87i1&yJJry)!{ zhi{$#G5(+Jm-1za;MKYv?#1wircBlPZkqOVj1E?JhMxXRgITlZ%$;XA-w3zBc%jLn zC8l_S`O;;}SFE&LwR(+}wawb~wj1p>*%KW}WEi2)T(-EnxqEneF@1dfwr$_BbC-W0 zD~QeE34(X;*&DVmJR&kGI_AJ3VcaiAkBO3!Q_{r8Po!sLojUz%PHx_XiA`Verq7L&Kj&K97!l8D~U0YlDwyCmnHO?r)d0zalU_jc&hxnqQMSbkN%cpGz?h zX}@tLof^YSuvo=xN7C=-&MTZNo?GZwkQ_Z;xTCeUEb6Uv_-xPUXX54#yWts8P;PW% zibI&qpx+@+|E62bYvhP1}n0ac!zjMeKmJC=s#o5=<6&<3yi_xOmEXgqOnK93oC zCV*;mqvSYpy(iAt{6K-ktRs(0Kx8I6=|4niMHuI}({_ivI`Z+yOD&N$9&Sncgn{)q z%YA7Vi$~Vridd&xZ&e{|zJZi=tF&(W(0;c-SDjOh{w-GLnQ3thsYAANmHBe>3hOZ! znpccZ^3PE$+>6%Sc$T=*kC2fZVpif;v!OAYdI{6XYz^2PWG2-*C=PGamQ0f_@W0H7 z;g?ZuC3X0dx{utyIIQsOH%ss~>3k5=t*<8a9o=+wa9k1VkuX?}sGSbY?Dw_Jj@QY_ zbEsE~bVu%e(M>uRtM|$-Wxm+xx;>@%Kvc`s^7u6vynAxTaE?jISw}nZjg+>JD$#@C z>CpBd3fC0c+7~U(gA80N?`T2SYzT#2P}r$i3ECcw$*;ADZ#rn_hx$VoEuZ?Rm=ICz z9~n26wlu}!HwFHfV^bo*MYP1UtRWS_r!Mx5pFT#j#Eys`-syJE-6LKss`lN>3JrgX zq>;=9pT3`SEzyMcCeX2%8RL)jvX|tFd)=SzZw_H(iTb@?r+AiiFBs7@68ZedsRv2{@n=|-F$xG2({GiaJvae-qWXCUbaZeGTy z{~%2ZV${F1Ha%Ch=*ql-B`aeJb-CT7P^l%cNx04}!nfDQd@;SRBuon1dYvB_$!y;V zzr#vCXK#GGaZC3oZXhe)@WLl=_s^?a$_m0lPJTVXN&j@QD%RNKdeYtEzR?%iX3qt} ziq5PRHC#-DtY;?Os!w_2Z9!aQ3DrmV@=fCU#+OOzdj=NjDjcDHK3T8M)^*)B)6+q_ zuUO|=xAn*(bsN@*e@((j-#<5S>~Q{pf;Gs^2N@Kr z$F65;k30|P$7D4JI^B23@Xj7mXNuA?d(;lNVMn`zBbgf>pD1Nahr7n*gC}c?{AO=H cSb6lU^lJveaFu<(fgSp1qEi@15qVeaUubee00000 literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/eth.png b/client/webserver/newui/src/img/coins/eth.png new file mode 100644 index 0000000000000000000000000000000000000000..823c4c218c7131409ecd7060722ff12ad5d22016 GIT binary patch literal 2593 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 BWoiHb literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/firo.png b/client/webserver/newui/src/img/coins/firo.png new file mode 100644 index 0000000000000000000000000000000000000000..1d3cacac1bc911ae11a263b75e10c6797376eace GIT binary patch literal 4521 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 DalKJ@ literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/firo.svg b/client/webserver/newui/src/img/coins/firo.svg new file mode 100644 index 0000000000..d780d000a9 --- /dev/null +++ b/client/webserver/newui/src/img/coins/firo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/webserver/newui/src/img/coins/g.png b/client/webserver/newui/src/img/coins/g.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8d89be389686459426a703633956b7e9ef9118 GIT binary patch literal 2373 zcmbW3c|25mAIE3NWZ$Z5m$i&;lD(*A=FDQYGh>-6ZdAg9R1C#aDr*{LNrR$=88Kqa z%~BMNnUSK@TuZJZ>bZrev|aZp@tiYwp8ucM>nxw&_k4fv&*yty=a0i-f+Q_m3-6KxlWsC$eyZwh2^Jj>nPxRaI4=zhsOd5K8x% zG=BnAMj#eaQWjXO>llpKIpPtEH9#icg!C3xC!PL?NNmBd#GYUWnfw6Hx`SbgsZ<$> z)Cu^sV(4NrSqgxy7>bzWDiJWmfk_6it!8y07^+T86K42=u#q825|s-JB}tLGGq`3pta)|5&|fNHMN}x zN(gi*o+bmpc8E`)N%0I=6JReWj0`fugHnJlBhnz01fWX^3OF7TAOw^EP!do|pf72N z3~Ly;M8<o#` zJX8bpAx|gxf_@03lJW`_)Jjz~bq!4|Z5>@b{Z*^i7#JEEo0yuJueG$Ywy|Be-VSZQ z;pdGGn>IT+ySTc!du-Y2>9uY94h$9t;0Z*MH-$>0gG?V^Kh`e+I|GA$-4z_Nd(Ym` zePQ7dkx|k64;(xc8^?}MID8~A>7PfBB_BVTlA4yDk$EcXG$;FPPHtZQxq|cD!lL2} z7fVVnUA}U)tenTMxK>#uxL#8$tP|a+Z)j|~+1zsbPHWp;al1q+>*&1yp!?C|C-UEW z`}zl-4*oIp?D_D>i_x){|N8UwoAJrFQ`7I>f0+6B>GPMbf6e~=?{DAde#}>OYyW~k zsF;!QSpOuXP;%yE&SBG)Gf#$8oZlRDaE%U)p0Fx@bJL~qt&xz&tLzHz59+5xJ4E$t zPP-`hF&WE?qyPK7tCwQA{>4F;SM=? zUB{`znolK~CQ^C43BYz#DbMaobo941(<|6qWq7JP#w6`&qr7Kkdg8Q&E!Qb#L6gWd z7xB~{2k2(R81w|{r()Pq&pIQR**igv=@?|;y~d8Z%KV;k!d*^=&6%P=6gEgp=)CI0 z;TCU=Eh{B?f^C`;6W6Qx$7~y;`kL;~6c?HEdna$sxaLK_ZyWj;IhNaEQ2pD`sZLb0 zfE`cQPj6hz^iQ5Jtn4;6X(O=6`C${fvhzQS_TBRZyM}Jcb`8bHK zp4Ltmtal3zzx?p(Xx7$rQ|>j)tT|!To|%3%W8sGt2sH!2jG33!6Q6pOug?zbwJu(d zypbh%^)`EJ6nB`G5iraCW}iJ@5-s9AK1wN))O;p?i_b=yN;bwV_>4`f2PdFq{RT~) zKA&t`UxYTlzzWxJH8bmuxyrseM;H3Vu2Z@ldaB20W!VN>g1jlwF`17%TV=E6Hri#c zWy&l%wkhL1sboeuF^if|Ggj_nYof-D$#6I~KlBn>nCT6oJ+wp(Umj}fRQ7;4dxGgCy++Njub$RO*y3^s@#+#cQcn1R-2v}) zL?F8DhEznUu3y5T?xDg+L{hPSqEjn-5;m$A3S858Lcy(+?NGN}X>QQDaXSjO4Xy1K z3bp&t|1n&j&*N_v4DR#@g1h~fAs$4d*qsianglU(+6aXb#TNS zrSM{8n6ff^ZODAgf_C$@!{WG1akC)7Lp>*;L_aGXpLrVgk$pAxW1r6(mY&H zbfV4NX@_f>4hd^5g2$ePy5cSTgKQ)^_P*{etMV~{?#E9Kzto; HPuhO~PSiR% literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/h.png b/client/webserver/newui/src/img/coins/h.png new file mode 100644 index 0000000000000000000000000000000000000000..6adf3055aa907e9919c3e235a7a21e1afd516c87 GIT binary patch literal 1771 zcmb7_c{G%J7{@1+eTy5H(2RYrkRn}X-r3L)W6LcRY9z{p*{Z2)x`b@eRf*^#w3p?g zX%zg}ib z;WL21z+@&?00bQ?U_b&oaIhe=teH}W4)K{7Fdc4Ou2KO|QaCUH8~_EdvrGmiAG9;U zTlga$fG{viF~DEaAPfe<5cmZzARVz(;l-p&!eMC(%!g@kg*RLxOMAhFuqmzJ)XN8y z=B2)LhyU`+6PGyB&6glj=2HI0DqRB}w>(99mLCKEQ!B})q=D}d?}#7CAF)D4R&M1g zc||2<6;(BL4b9bB+B&-WYYhyIkSJplQ!{f5ODk&|TRZ#p8#X#PZgSqdWvkmS?q~>$ zBYJsnC;9sMlLLc-Lqd1$4hxUivp0GlCFVeE{Gr3tBZ*1L3?}O+`^3rLIHyw6GcwO) zW#^pDFF5x{;rXIV#U+q z-@SePFaH^OJv{PebnLC<-T1`h`>78fr)Os8KF@#oy72A$x0xql;9-d;LLOvVe{-KC z%zKBf{8X6MRWf;Xhie%^=MAXL;s{n{$bbXaa5_-0KqGc^vqi> z_V*IpLPY2PR-LWan$TUh35^5*L zyu&_?vLkjje8;h>V^bb|%Z_<`v#R|%IbD5t>UsR>s$#)c-RL2YRZQ_6A)%(u(A>so zlDhBcpnJa-6WJm>(f#rgZY16?Wpu`UR#PkCD_8SNk@Dq{xJdb1$e_lYAQl0iQAb_3 zEv06c@fj-WUXkp{^P4q2!S9-e^^-ni{uD|bf$*Ve23fEP&h}^tqCnHZPp%|Yzd^p_ zwEn!p;LpzJi1qhw8xwUg6R9B)NfT+_$F03HtW1p3$;j`eslD1pT0{}D<_(@?edF55 zx^p>gS!5NV#L6I5Iqc;0iF!_tTgI?8C(Vx&8)PRg3=HIrMB<|ni7!(3S@=H8bd>4s z$|TDMw`Xe0q`nQut&wrJwg2cG9I?Ynxj`M_sg5K^P)(MP6k14pC`#p6+akL)J zsL?xruP<%J)UZS?lR+d=ke$$BW-xr01Tm;Gs;WIo@Ta z9xu8{^OjwQZcO)Vvd^AtK6c^#D2vi)QWi{6%rWvX<77-JvJSyRS%XpRlmqnceu%!rCscgGP7|>Uh6iyuF{8Z;MO|sxL=$*w^Om= zpu%0Vg_3gWs9hH45;SnE()8D;yb@=@Y^4jO1CQqsys2KtEtQWO6lmy@rcV3M+)wd& zqkjq$xX0GKN}p-Oy*fHkP9t=6UojoMSj3T6O0X6C8#^sb8HHY62nb+G9>ae~L@Wuq Ijt)QhFMR7d5C8xG literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/i.png b/client/webserver/newui/src/img/coins/i.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d7bf8eb8970788d6b358f3a2d18b16b0e15a6c GIT binary patch literal 1937 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 literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/l.png b/client/webserver/newui/src/img/coins/l.png new file mode 100644 index 0000000000000000000000000000000000000000..cf488cb9af03e113bbb1461e9e7c50a9acb9a4b5 GIT binary patch literal 1738 zcma)+c~lcu7{w<9+6b~EqF}+KqQFs9L|H6>WL5|fBLShpK~`}=C0ONXDT|^eAPFw0 zAX=nYQWQn8sA$MS8UZbvRS<{^ZUqJ0P*m)jMB0CQ&b&9jx$oWYyEA8I_J(jVQ{(Bz z5CoYLILrg*cyiFFV8)gvB!bhVO?ZR=g3MIppd55Fvj-woz#>9vG}_(!%kDvt0UE*y zMS%Pn9GRI?K40eV-{RqMi_gDE5P;R*{FdP0ODGCh<;&F&gfb{djbZg{w#+|RK@g27 zs^dTfhN%!l&Em-X2|0>3vI1o|4nPS9HL?g*04|4vQ~{VA4pguK6ABilM9~H|4gkz@ z7OFr96^u8qF*zCtSowtkfDNb|ArvsK1gi+HfH5T-RicER6>LI@;NXzM7%2V)NCi`Z zMnDH$5KIAsQpA4@n(D;~(A6hJG9HX8*q9O_i{Fu>cfC8WLj`j`fOxhop-`Q#?Tkh!GsHhC$|CP z7eyacR|M!2tE88#Frn)%!E@Go|Ihr4xiJsCN%AxvcLhW-pc)!|^)+phvB_jpGfOLL zn<=(a?WRq)cbMVmG?UJl?cz3f-hzc5o{PPGe3yRb$Mg?i!3c`sfkB*L?y`{O{IHb~ zk*lJjW8&fy5|h>>uU)qxW#gvJse-gEKWyEWzI{hVW_HfbUAepW2t|4M`^1vM{Ra;f z9XVQDa;)@3*~yAizg9|rJ6&CK{zC1=OPA}fUX#fcD)k@No0?m0+-z-Y@3{5Xo$j7K z?Y#&6kDopp7<@4_Jo56@+tGLL$3A@gG%nd$c@2ClTmlXV-PT>(9UgAI+$Q(F`J&7i zW%d*sd)GaIRW!Ae>qVMyj;%$$L9EE=Y%Fqi>tL+AWip*-mH64i-DyGA_4uZ)p*LLv z5gvlnuo~ygzd0j^O0o<0KXE_ia<{1X$b6e@`;wKR9~zNyZ%2pVDbB$yvRAte`lW8A z39I&K>K@S_`E|#cT5f*yyqrGzJib@e*_6V&d;YaWRKbI_=E={HvbUcO+(xJGm!j)D z3Yp@4N0%hmCCxNSX%Byn*QyV1FZWF<^ih5kP42wP&R_l9Dejn=>Du)JGf(zTHjj1q zmeMQYEiw~}zj2KcOzt z+{!K05ZaVCHQfl>)-0;SAiFN5sMQq;i$%Fc%-{1Ee?p-GMljSTVA$lh$_8<|v$byx zMets7b)~AnA$ynO=9n4GR7%%J-1Fiv2Uooy&C=046kzEqQ zd$X3%O{wz)3?^mp3Hl9XWmEnEgFS=ss4cZ&MRd8F6*O3{iGvz;M8`8Br_Sp_)hPE+ zD!o)I>+q7CE^RB4TCU4o6=A&Ht=r@Ba!anX34czrIim!X;yK0X|Y)TbJc z`E>Lo9uN=Gy4UAyZ`qI|tf*fcyJ%jPl#?*F?C|V|KQ9*D?BMw%XOF4*&ldE}3i$qU zLF8U-dd`X3VTJQt_;#1wQy15vQ;}uoQ>|XxN>)_ouJKxGn|n0H{N^(G_f)Q5py>j-P7`qn%BkERuGeQ_?K;unrd$NYEZL|CDL T;CSHx_)S0r!iCSUVzU1M6BrKR literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/ltc.png b/client/webserver/newui/src/img/coins/ltc.png new file mode 100644 index 0000000000000000000000000000000000000000..3fdf186b1fa472a0bb297a2ab3cff2248872b6da GIT binary patch literal 2181 zcmZ9OdpuP68^@1JVPZs-My*>hNQSw{ZOt%p%Vo#R%9vXzrYW0{WQ!3Jm0Q@Dn_)vA}%b^-W2Q%=k8A2?b4^l9oPUAy%I&Zn9^Rb`~y#?bzMp-R@Y7ij{ z04_(<1z-{^0~~{(XplnVW9Xm}bb&3HhmT>%TG_xd4l+XXvUngJoP=;t3lf)F(EAMv zehXO`5C>%jYbY~#M?<;*3<=ecMMhsnL*lXyZiZrjpA{}tFAc0D1QlpTb|5k%*veS4 zv1QQGlBH}bwQLVahxRX1pp#jmLjhLM|5sMfQ05iO66>2wb{gN_{>%Gq=09SKn;Y~4 zAB-aT_ycnC3W}>%D=DkM)~Kq%)z@mQ)6!nQL1!aEchlzY^z;o3jkX$_n3|byv)GQZ zvPNUDIGY`|cJ>aA-#g(6&Mw5AZk}GdynTHAejxdiDL?KGq|)dN=AOO#Lf8j5hr)h3 z9DXDsGU{mbv6$nrKc6@m7tc*Nm6()#I^|4i+S&8z8JStx7jklcxtL$T;|oQF;vz{& z>7}yES-`w)xVe6yEPoB0*pLcY2z3A@k>wo!bU}$*c zkJqDPZ{Cehyq}!8$pBFciO5R3G)MmNO99pnt6CnhtT- zgj9EXJJ}^JB;Mv;_ukn`M4##JQz_F?kCDaI%+eP9ee_67icz! zrw58?mcT-qe93ksNoS~-2m|<%M&mNv1&1#mhQe|#DgeKjqTsNA55vbafgF;dE>QmV zeclF`uPS1$uys9f6&bE*{M_{VX1p8h2{$!Tt5;n=PhLfNhG@5c259c+J)koi7?($S zDA)X)AT8Ih5F=(kYjbue>!(FO4V_I+c!Rk4UXjbYLGI9QI!$`^BY-R}X+TwF$G(tj zG^G}(u5<0I)&Zj1Jtq}_p_8l2FO?n81Wve{rz8kJrgv2)nw>BBOQBJV+AHw)%(f&P zO)D4y^s_#3s4mi8U&jDx>&e6#IAIQlopfom>MM}zGT;xrSrLST!P^*=MWN zwVP8ut=~x5sVj1xTZJ7he6+q#XLa&~ItP(qe4jlTy9OyNE!DMRkJJ&pek-Ipdrutc zwx-4^lvg--T{=)|GZlL~Z~ciQYa{eRubn{RI-I|6jz;ywAnRV0)|O;O7HWnmX4=1yX#CxZXs-pd##qmt{o6&0)` zOg-RLdH$U8KS9@q2U^@?^lFMep--G0YOGG)GxO}UQFo}S*QyI%*teVl?1A)2~S zrgbDE>8LGtx}=$rZI{J&M#SwMqbO`w=+9z{+Dtq67DFvzx8)Dx3*kwR9dQ}*cM=yh z@}@T4?HKrcPBEzs?JyBQEpw{6ZDLsR@yfxt1zub3dnT^b!q8%>Rt1gj9viDzWDj&^ ez3LzSd&bg8v1PFiaK8opRq$~2AyzuGPW=y!e7_I? literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/m.png b/client/webserver/newui/src/img/coins/m.png new file mode 100644 index 0000000000000000000000000000000000000000..cb85f803a931f3a3a64a86180600dcd40b7646b6 GIT binary patch literal 2402 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 literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/o.png b/client/webserver/newui/src/img/coins/o.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0244471c600fb0fe2fff1aa2b0c3acd0149de3 GIT binary patch literal 2405 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 literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/polygon.png b/client/webserver/newui/src/img/coins/polygon.png new file mode 100644 index 0000000000000000000000000000000000000000..ca981846d5450b41e69ceab673df0421509fab38 GIT binary patch literal 13465 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

)=jZnE3C)^t-2KB-&P_W(zqzJ8OYp)M{ zJD^M`UTXpG;0p>J1ZziYEy6L@h7q3rqY*Ob0IqBO^Iu+D>3aRA;Qs?deY+mum;64` z!OjsP0)>fg5EGY>gl|MhN&m8G^OmhLvU1zx6}BrX?bxZjYxf=%RkgiHbq!6Fw$6TC zJ+!{TK|>>B6H_ycxdj%7CslzsEIT>gPD|k;o_x~%c*HsS?L*nW?s*_k)4y9 zm(MOJ{{(--q4h=th z{&M8i>(MuF-;Iq=OioSDy#MfVcJ9;s=Y_>DUzh$~UitQY^-zIK2n4dBkBBpOiV-R2 zF}zq&O5$^mcSIJ(tB9*-!cg~I_Keq}9W>HC#&+q$@9I`451 z_XZO5w_|(6@-%NLKn>Xd_Md<1oD=S+jK29hY@P z{|>*C7rGhiV7T+VR8#vV=f?@key8?FD(L8s;A3wrgeuq|ZWX?NF+s#W!;1utoOYUy zZbM&1JfS{SSNC`#<@ug!+Gw775-OUlWq-xY2-@VX*+?Lcc?aT^I5~PNT9fz*vcrJf zp<5-N(Gcfh2s&%nt3Ca&WxTAscFJx ztK~Mh6>AQPVVCw#ha@r{`c8XXrsoTYf2{l^BEX&ss&8QT7zc3#y;`}8A#m#Gndz~X zFv{+zPIrs?&&YGY!E;*_WiPU-q(+(^8C3Vi=b#l=pPb^Tv6DpE8)cVho=M@D*1CDA5I7}iyH>pYvHG85J% znN|_2yb(?0EcuHl%LXn7JwoD&A{CKYFjZOt3euGCsl@7Lam51mZ73G`M&OQ+zc|(^ zbsmJ@kRA$ksL)^;cbdkfVLHA~V$3PXX2)8&&H~m&LM*%iYiKh}LKdiJQd4CX;w!0@ zXk-$r>%l>|m_-LiQ+R+ZHFs}G5t<43pd*iiWO(q#!f$( z`Yi0QEm1lRIV8rB!cTZFG17iXwc@?fk+H9oBv~ixUcnHLB4^Zz@w(U9GYVmmAs!J06 zWJ1!TH1fMtIOxTFK{VOEu5?jmuzEUrESVP)+Rs{{7WK|7z`hSjt1hc`A0wSYc$K@d z`g28e%GhSAv!;R6;<!F(Sbp5IKvw0o4+^Cq$qA7}Ep5nQSM((t zE3)bo7aqxqYj;%pLlLl5j#+NY(V_kB;q_985QDnF(mK`YsR_2MQAkPucdo_uQOb*wC!tIiFWp>v8itDV{y|;t0?8xR2&Yaw$_cOO>k$ z2Tu@>%SRsSb%cxRy{Pu5SWmvIvNOO{^j~Ka4VK&w3kXL3!_~-8UzLFaS39-DZH8R? zOZ)V(*ITf`^A-0)qJQl|v7>IAJ=G>=ufFSd^m_Qr(@H=P|CTxKALueX`fAdFp0`gn z~FN*cW#4L|&EGu5>UGd8*h{rFU q8&7Z3Fze|)c8z;>H6k44Jsg|NLfgX*D9nI=(1>_D+-(c*g#Q39L%an5 literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/r.png b/client/webserver/newui/src/img/coins/r.png new file mode 100644 index 0000000000000000000000000000000000000000..a1949d4195289038f4c816e5d3d9339a897b83f3 GIT binary patch literal 2190 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 A5&!@I literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/t.png b/client/webserver/newui/src/img/coins/t.png new file mode 100644 index 0000000000000000000000000000000000000000..90ed5d8409f4d6c1b665a5f1da481c64dddf0862 GIT binary patch literal 1694 zcma)-do)yg6vs~}qb@ReBvIF^!Yz*qU6p3enTHr*aFuRd&-79$O_D?*GjonJ5>qNM ziAf2m^qS^Dx(OxatyU7LL^mbm{?4#k_s_f5Ilr@idw=(5f6rRKb`; z2uMTY#tZ~hdFa_0c%57In;>rWDjK-~`rrn`q zG74JddR#)|OJQ8Wz$7pxr=(WWQ3;YNrSj!4CZ+OZYfuH1E2Hz}2v$kKWHg?f%DYcN zWiVes;Y$%r2J;j&o)kf4RQ`P$R|+6hRE_{97i8qLi5OIQG6a>wJSogq#(oe&cOpb?r0J>iXLq$+Js^iHhG=}ILr7XU#F{17N&^v_G_@F)L2 zrAhHmrIJ82D&J+&=VW!l(og392(AW@kAj0yve%pC15Hs;Rhv3Zouo1S7cK3Xx_bHs zhDLLZP3D`LnOj&cva(*h#Ma(n*>a~9zq_njy@moa+}65#usqj!dHb+^{rvw}AGq<) zO`Ai)!nZ_h-M%w&&)$9eIR|3m4#yukdMqh9C6&v=a6$SB;psDHb43^OFBTMvFI_G! zEi1oqv*On6JNNEOWmVM=YaZ9u)jxUK@T~Fqi>8*=_Kwb%uU>b(dE49f{=>)qfq%XX zef>84ePnd(2UWLs2pskxCcK8tX(?|RS)J}RSN&665{U^j9G|xr_%X}9H8wsmztwZy z{<1ZmTOgWISdZ*{6L;p&xIE5w+v)JuDCf?);)AsvOIo9%(YgcB)PM-vQ>d=~+3MzU z3kx;btg~KQBaJPwn%K*iYWTCJ^;|!B_mp{WY{fxaHwfR-dp=$$ZZ{A!Ne>V8iC*?f z#6O~DJnAzQ3a?v;N32<6mQ#g=sQ=E{9k`6QK{w9P&QE=j=SZ|g((ZV6WrSw>O1so< z#*P+2m*MWmqF)aWRoe+9>G@8zYL3gb@#lfsVIe3!)TG+^D4@aIGhSIo}-?NHr{F$tS)CGjXSwD|7gA_UU=%MaEe!iIorG% z=%q7XZKku#giW|L<2AjgNs2XB8-9+veDkC{D;kJx@P^JToDTj|I# zT~+G)6b;TJRHV|_R_$JpFqXGoG{aTjaggMy&~*S`%wi!P0xf)t#Hm8jgQj2ge1a9iVp1vJG~r>?p4o_;hTJ1denY}}wCt>0w9u_tEkjCD?8akeD+|N~7JJyszYVcyq7)mflmeH9^a$%%*$Iu3!$I zZKvPpq4L^g{zi$RrJAYZXhv+l^Iui7?si%Y-1JF%LN>{{dM(9nMUcw#+)Q|Oe{kZ7 z;^7ua=Ed>;85D>D-0EY-l?>glvw7BEvieq{I7_>2{KmU?uEBHD`+lWZIv)owR@FN&zo zUS@D=bn((!)+H}(yMU8k1Enwa8_wQQrV*REeIR|ULngbewDDO>e_)wzNReRm;JmM~ V`J-(6!uP~ago&`=E0oO%{{o*oF3$h} literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/u.png b/client/webserver/newui/src/img/coins/u.png new file mode 100644 index 0000000000000000000000000000000000000000..5fcc08d36f555a346cb4b6b8ceaed7063a5f8a85 GIT binary patch literal 2128 zcmb7_c{o)2AIAr&v1U)UtX*+a)^ZW%%nZZKF_v-3GGv)DKBNDs`+Xu7^VB+@7j_Y~5Gqz(e12a9bsBhidN77o{mCbgImY1YhB<+SwWa|e!vfF5Shb@;I*P!+S~DRCKxjkZ8CV-81Of1EC=Lw^(lG=E8qWm4 zHVBKsGtf4$#t`TL$V3rXFrUE0LNpNS&Hy0up1?!FAQWU{U$A31}Q8Q#ub?Kcnn$Vmd5;dt=)-$H21|3ElZ zdx1Gl&S7%i!bkW2%l}#bcOp|_;turn4F}tS_6RO+o_)Og44KksK;Xs8SAs&q!XvImMnzw{9upgPBmU;Cgv8{O)U@=> z+jp|Eb8>&an^#m^Qd(AizoPQj2M?=j>gt~~G&VK2wEp(2jm~O+-uZi1cW>X|(D2CU zi?Q*S6R)PGXV|mz3vb>ozFT_#VR>csl>S2w!Z$gy^|#7n1ev96NK6&l8bxl{8bEkx!W05?bi2>AH!X+V;|R0 zz9)MpPDEM)b+}P0+e-wwGW0AN+G$3GPS(WbGN``p@7H3EJz?=o+NAFSkoZc z-xw2IUR`NAG|Lc4+YMgYZV0pDamv*TjmXs8y=hVvm>bjS*A!p2b9q9Ht*m-+Q#9nw zMs?#|Y}rHtvBI@C>~2ePBX%GrP;WYrT03`0ukzhG+AGlz)Vp^?O4>6!qvTkGOfVUL zMK{lJ!9O~cs*nl*DW6aBCunOC96EfncTz5Qk!4eAedT7yz^g?OeF-`vXzkqeQaMrG zr)_FUu{$y|6Y}OiDaFtS`|+%6jpU3@vZtC;O-`> zdH-1yUUAmaLUEv4ik&x+qT6~wsR@bbB5HeUB9@3khI|NeSAX3MzMZpqUd$7Bi%Dw;7Y|A2$4 zL#}g+`7f$JoNvr;z9^Cz_qLP5MhjOB%LF{@>6vBoPq4$2CnoiJTSVUqsn$1AO1_l- zajIL=v&`kylNDq7Lkdgqgwe-v8@Vn@ju<09P<-Be=V$h+{P%j@#|7nubFIeZ#9EwW z^b}O3E?L^UMRC9G6$)s5zbG*Bb-C(Cl#6q~xsK+6L2<_T%ay>8t?i6M-ZxKm=Zd`x zb3VUPe0sw!wIlNAYQm=grz`7Z#%t;5)~s+I^ZAq?{YwW}Rl(XNak#mSa73|NQH5 zI2O~AAa^M#(!prqU|Gofk-*4#tNZ{0VY?!FN_r+qc}H;4Sly;3<%LxaS;mVNK5FEx zolg9&;>howRPeq*Qhc7n1@L&p9Azp2t^YY)tlRT>GN5Zt{u|CDwMHda~n zjk55p##&Lq=gjnBKY`5#&oiv*$VRHD7WeW7AtP3`Jli1DJ-xNWw13$-hwDyAH&e1< o`P#tHi>W$47dMja{hiypJhf<*8Qa@lyYOEhhXK)#P#$rA0|KVdrvLx| literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/usdc.png b/client/webserver/newui/src/img/coins/usdc.png new file mode 100644 index 0000000000000000000000000000000000000000..dd63a58a2153241c714d0ea9378129da76e1ce64 GIT binary patch literal 4537 zcmV;q5k~HbP)EX>4Tx04R}tkv&MmKpe$i(@LdOMC>5qkfAzR5EXIMDionYs1;guFuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfbaGO3krMxx6k5c1aNLh~_a1le0HIN3niU!YG~G5c zsic_8uZZDSL=Z$6eF(|SGG-+y4d3x~j{slq5;;BvB z;Ji;9V`W(-J|`YE>4LKlt6PRh$_2lA=kV>&06}?{H=(}=qZr1_%5sbosLiQUNO->8W)>?7eSqcE? zy7d6VGhr!XpRKi`=UfEMG4Uein*s;Py-yLz7Rix}Mx~P&B!{uI|~=L}GJL78oVPI?kSLNpp)6iOoS*_iSmw09jw#oRH;BovpQQ0bw@ku-9ZZ z>b8J6TWggB3f^B|+ngu}AdZfyK^b7!Ee6~???BJFioAf3sYdb{%WTx4=UfGDo_D}* zF-QT$(J?hB6_DzV88@Zy$dHPW&z-O6aTX1X2BiU_WvseNGe$mlN|6>y;i>MJap&{9 zIk%{zbGDq))c*i5icG4vr2_5Eb{O>e31uvv#J~UUPZ;yb%io1#n~24eaJ}~zdCkM1 zSJ33N;N2qz;dxMke|Y=UKYtaTyb%@hvK$@L6O_^qMGW`Qc?TTFOnLo&D6)YsM}rvm zMdW%tFU{$+(}Ii5_Pia5=|Bt@y!VCXLkU8td;Te&B`DYWs%<7zzGH;_hyf+VdW2(}n#XvS zpqL88Fz$=uZ+}_}Gb0wUnu~DCaad%|#$+OOEd2XlkK`>Oj?UR~n%sOKGa`PO#(hzA z-3kav#r9N4hD1{>CB-`QoU7bQ-LPzmNCtuEiYl^YhO@gGsm*TQFS>l@cup{eCYOZ` zWVOxo3K#&;bFKo_HWT-_tLsTz@ZQJJadW%X3Qzr*zmY2K2O4`J*{DNrj*X~AN_I*}D$&NP zs#tbo+!vLiruK@i+Y35d4FY{b^DG|m62+O#IA{*$s6_6G$oUOH@x21yl zofn(!@SG}>lN{Vqw*iDA8(chKi^)!&lNV9>j5|eB!&=8{Z?-c7s@5BROfANQm|?dV zaPj9hxNEd0`lbUhd^s8vo&x~XSD7*NO9wN+GB6rMES^*~@I2}I?Yvijbe)_hXLYgJ&YZYN;O9A2#w`_UjD5h03;I$&C*eAGpS}sLy--5?=B13jINK^jPpNU!`Qtj{Gm0h z#uF$p>fx}N(DbuXW)96=W5w;6u#hVC-d%>L;b_+N+boArZ8KpZw5Dmy=NQcCpZ~v6 zrtP>b7;jwsxs3_Ll{=5JGIY!r!N6z`^;PM#h8i%J&m4#Qs!wQ+w`ant&Wz_&89Kk# zoC<8*Qdv9&sM8F;duZ~Bu)bHbORd*)du>yTF|=OytLl2kF_TcfE7uxNbHpSW43v!S z(yFf14DGltDr7tAtIW)(Ip48Y*OSa(l=VINj;|IhnvFUxz@3+8T}m>Qa>0Uq*CQt|L}tZ%5VKJ))w6Q<-$T#2${p_R z?U}GCvzf|g;cZ6?h-J5%2%1g)+oF&&6y&Eq-v zY*eG>6I6DKLDhc9*mZu!7@mfs@>)G5k=mNgMjcl!O`(7$8)83lNb}^hP%!dL^)s90 z5Qb!R6c!keT)fI2vBRa;8lkg{E{mC378r_bs0N*mVY7^f&-CwHU+H zVr;8x{evnq>MKjQkHEQWtoYN@4XI~O-Y7t}OU&?0ct<-?eU%w@ivf0v0UuPE^F9pZ zIaRi&4c@x~NJ+77*B6*}J7dqiv-HoJoECUal`+9F8`IJz+AAhIbD$8Ahq6)|4#66O zEE@Ag@ac6w+P&X%2f2AW3yd-R8eMGy@=yW6k|wngPZV^4vVj>G4Hb00tT9-;QbA-% z56~q5A8Jz(g$1PjrA7e}T|b;h)L$q-v}Z2pk{%#SfVP7tYPqKR$`auP_O?{KQo{YD z)`|<>`&`j>q0=X7Yvv1T$&x}qG~dUe#u%IBkWePJzRH}no^G=o;%-7KB-t$nRo8ne zu&NynkU51aI?aHvN|#MPE9G8b@TvN)I_@M_Je>t^!J`zO1A-}FQ}KoIMEgxR$S2D zY|{jIZ%c)0EE0<+h3fy+Hj`>L+W%O4>OX^l0sus(jL2l1h`t}539I%~0qHY@*E}bf zpf@=!xOv{eY(@3nT^4S2<>8I0ggnRKd8DpP0NN%ub}y>h?&+?v;>-UHap~yQ^(4B! zet-ebUoz}Tx;Pb!CtnG^9E_f^?K@bcna^%9Fu@+X$CC(ECblHR-+OWi1oK+e7AphG zY6s27X&Ct~_bxLVb*QT}@A#Jsj95GkxQKMH);8{oYTt+i^O+;kTj_TNWKiqGyo_Du zuCWT)lFqLm^%ZRA{g!-(CvQaGZuso)0F-N0U22|>-C{s2 zp2Ym4KXWr6@IxHl$z=p18z3O4d?)`~qGItRemDOV7rftNcqYt!eaCh~-tyP)sD9pc z>j8oqHxD7?TmQe+Y+XjPGySe8gGeSn`7BO>zt{R*=~M<`b_rU|Mfip5CzuMvxNd;UFn;on zEBJ-$CtEj+X3ii6euxWsQ#a37qvCC24iz2Z4qO#Ny6*jJ&4h~NsMAk7rsjArPtI2P zQ(M@6>5s~FP002jvy)R*fnffRef2K&sGUK2eNmf8>LZ_gRC}{+&--rctJ0Sy7aWW{ zc*<1dKis|Xvu${(zQFtexNDb~@mIzP7(VRwmJN5kb zk~dQ^1DbTQ|}n}MWr9uyyiKf35bkqD|FmD{gy~x z>OZgUci)wha|%eC2qVUP5xB4Vn89N>=p$p$0OwhrU4id?%z(}5UTZ}@S+dtXYoWBMh8dd+H{>o|hZq<71D{%C43hEEs$ zsJ593a%ovUuB`X&vfM+V1oK9d-p%)?oRoe&LEf8G+w(}Lofb4b?^NW@7pbI0E}uD$ z)%7ICe38PuQ9>|ZY$|HxeTG&1>D7*@K^e~>y$+PN8QRs9R6u?NMIIQ^0096;=XY&1 znf%W;5)7U0A73uT?l~Yp`bM=H$#TKdtd@on0WLKz001CRhCy}irOls?gLQw0 zuVm=m3!uHMx-0-tn~ZmDiFyAFwub4b0{{VR001Ha0Jyq0A+`VjAASH}#{vKl%LV`_ z;m8(kiF=2it&y^wx;o&|y^aF_qLBhH?lrXg3xGxq_>=8k14yCK{99Lyb_4+bW!Jcu ze;Vw*|B3rsVichLCrbhPzoTsmF#eJ%9e3_xWR9 zcTamh0Z~y=K7I%v1j2J4!Qu)-VKgq<5 zb!@%dU3~tOB_#}z_>1BHGybQ(zX3-78{nVD{|0D!I@;d9lD`-P{zdRl+dty})G4Or z=x6I<1a)+^b@TdD)nk5s3BLc;^WR8$cNce0UAU#St<*iyUyy&8{yX|F9^?O$=O3Pb zAtm_!%-cWa@$W_Qm-T*?Na0HG{d>hp;rf_VG6Def{mM{TJwLRcW*{W_RL))b6*B)f zAW9dF5yz=@u+SJ&c;=?hCQXnR${fu?@|^55UloLEzS5ddK}+~+ui0l-!j-uGYb&AW z1{N4p%#SRGlU`0U7-qLiQkBq_4~vZ;Cs!;vfnzd%^y{Z?W(y0#1b~?99>IH zzOCBZ+E%V^jF}S9$#M_B{C)5ob@DTFB$#nw;krCfF}_y{XYE;JAOkS0EY2}Ab~N0? zw+fhzH3ER9;arU>oODA)b zQY)A+mLYT~mi@!hOnoX`njNnr7^eStFybL?m=?ZB#L{Wk*d`+T2O=g1m(eojCc>7> zGBT*Mgcu8Xl7-WzJqrG6j5f;KxuVkxQcPOi_u2v{4~MP4&}Ze)_GL)GC-wnMbdpAV zOBf-^5jWh8(SLv!x>-Vcm`{XWV|Xm3K#~E8@nZjK4{sReU0$KH%#On-d!sLb$Uf*E?^F;AKkbJyvLt!)^Sq%WA zMr3iXE`FXeS*c(Hk=7#Xugs3O1)BTb#!ec(AUVvf>EnvbAc~d?0n}-7x&=;K;_+-4 zmgIx9aY2tQ%If)A1JyK-S3!=(%-o7QN}jp~Yp!QFD<_$P8RoIT4x)QLYp52gR z?w0k_FhXn+P8zF+1a)f096E;Of3|P64ouU9z;ZkWa|OXz$Ts`^c6s!CC01J7 zbp60j_!oJxD7kderE_JDV4U?) z#)}r<$}T0Y-&3lt&! ze#leF_G;Zy^B2XX^0dDLPV;O@pSzP(J98tYIN%ABC7h*0_*oYgiL(8txYO`JKXQ4< z*M?cA2H7&dWf>=FRt2wS_b@nZ4@k87>6Hoa$F0UG0Bd0!U8^^GpDdP91KT>mY&%^g zAK|B#)lf2L_uvs^S;k6BG$fJRv|T6z=CNqx0i7z33tR>UWILig7fpn#-Z_HY0k$({av3Mi31NDRg|;j zq7KV2?#53?hcYE;Y@r&pv~@bQHt#gSuU9=TIBt*Nv>nlQBRw@WZ}c?PcZ}cZ>TM75 z)YwTBvOP3HH||MkJxTkOYFXbJi}q-N8PIcS0mwgmCnEvyolPOdnl`{of~*FFoU6<2 zrW;U}Xb`=#50mhz*oY{P!{sO&CVo8x(>v92kFxpst|9cJriVg<El+uKm@dq^yIm*P9uy^CTt4bD7v*Q_OgXE$oBd2^Ru=v$u4siR+N#IVJs%*qMzlX>k%OTX&g=EmO<}bLc3x!xl$En21qHbcdTUG-Q(5z7}H6S>6y? z5!DFPdOIFp+WWWSEvPcjyqhd~tT|uoXW&siWOYI*Z*A3=7~kfia`ayg??-3(%4|1E zu@`ePO*lPwNQu-|e(3Lhf-BpH!4;cT`rjW8imoW_i^RV7&Of>3+6A(*y3}Xce<4;s zuh~1Fc$ep!TE#d2m`#*aQLohXy-NYQw#U`Cs5vm#0aZnFZy1SfS<-^$a9ll}XlH7T z8zN^o3w(~Oyb-UU4pr+=O5ST(J|a|Px=6sWvEz0`C)N?hm_{qi zWqok4?6MTXO_G(049d}yc*F`b5{e~}3vPTrp#6&Mp+z3lbVJo0Buzvnc)Q&=m4ivCj+lMQ zl|gCFcYZ@q8Z^_p`+fjI1p0UY%|qTv4?`tBI=tSAag-a~i)tpZkO#kOOY*WZ#0Sa)C@PGcpOypQpU$Lg>U=l$bv8gQ5j=q2g=~_9mRRT_+{q1zRYV$y8~{0E4&2RVj3sThmTGCra`KCs)PM}ykE3XQb+7Z zef2FF-qND4y-e&4G{Bzhz=bi^LJn)@KxrBQUuF?qVPeje;jHAftl>+4 zTZmwXT0bzZn7c_v<=Q_Lduqe?Q^_=uDk%1w?lTnX@jHj~J!HMyEPvQoL<#+AA)Dyz zEDN>?jg695+coB9M+8kV?<8(m=<_Y+E~b;EZ2aay^#;;#<=*Xz{q+2a(N$8Z6xFrb zAHk6GqZpI-QwHuPS=(|PHvGmrfMF6C4UrS;<&^COE_uMTULE^s0Y)=1$1>V;y%k*GG0hT=O!sX z49XUWEP=SL0fDu_Lo-DjF`;Bhk-6&*UPXIOl^H(?u-64?J48HSXTaT;7{KF=Asaa7 z&r#+r8QOjyF&a19%o+n#PTv%e4$_Mk*Z=!```iem^xc$tIVdM%@$|hiG1@^WMlKWk zQrOk{gzYA(v8W6+a*XnHQ}z#Z-wY&JHkeuTgPJ?OO=%lQ9^7SjS{vn2DiNE*85-My z{(5zelB66>%K^hwLU6<=rYv2DJ#ua;+yU<*bIIB+JrxR|b{om*@o|d75i6de)iw=k z^a2KU31UjOBo(#F!?_z+Gd?FTUCQTqoSha@cm~dwt2nK%wVI4PgK_Nq?qcN9Mq@0K zXxL`@O5ebVBVw0HhjT4- zUq3k)L<%XlkK@ke4%pkvn#`F)M0}TQNoY#By_iadRj9$3 zEK)sSa7iex{e%oGKc8r4npDs#2d^UPJq_^W&r(iq^#~Ykho@Egxu;c5w-L^zvwsgS zs(yVK^3n795>i;BRz)SPPKTFd&bqjG73goZ=)9C^Ma7JqMaCAe_fJ-cu(BORZxHv; zVwUVjMk<)vj4+yW%o0C%@`a}A5<(40^nr0@#<%LUso#2SDqi}`i|^3)P?345Fy^U? zCSlR_e4Vy;-|Z087^nk5wcl#pJrTJ+7)Zz?*|&P2EJA1$^0Y}eB*2gBESMv;`t@Vo z4Yiw>rZ_i`>FVw1fB#VMJTh6eJ<80oLC>5%u>bT}1k@-xwd`N5A~5mL=C z@6acGas4urdjt$wSye{GF|wi^>#)YTyMDg)%|`d44+u4M5}bg?I5m_Mi6tT1xB~E#CcTUjAZkf-SnX`%R8<5D|yyV1*{e96BrL;az)_4p%ecj24=_xWHLYWmq0|~2fbmPZ&SsSMjYjIZG z40Mr+0m$N;;$IFobX;beUVS%^Ld>w5Hu7(iXUcD z7PYIfu*Z)7Dy(aaHlgj^{X};MN}j-U1QH90m5yjSSL3X>Di+|wyoSdOJGjo<&r%}_ z<+JS)B^lm4DTX$-q})pTy{nw(UONGQW&~BpOy!4I{&cT-o>3yHME=c?XO`am@7d_)(y5 z1PXX*@f%)z%CCq92h<&2dJF6Uw}jsk@fONSh38$Xqr=e|?2W!54imjKw%KbjIP82rHb)$ymrt1kwL%%BRK#CaK58po{G5SAcRLBSF%sPwfjmxD=h#%X&@umX zso-Bx0Oh6kPf`mNMOk-6*4x}21tmr>}WiyX`Oq@hwW(mRaVajgSDY%j5)(g zF=E21Cxys+YAFO5Q|>1ANEBQeo4<$Y0i%LY8!8;;o^O-)Gm-}T(XXXL(qF|xJY~-e z=91-XK9GJ*znL_XAQRxmF_prl4OYL!`PfWV3f~sVc`ByZ{~%pCiKb>|`;zX}8qKFW z&HhW=b(z;!qy81cIc+i|KxfFRz}bUhebo+-<)wSJMkzyrQ+G6^wymf z&0+RZ(<)@!S}I3~2yBYVErqO*!VyPk_%;(ul-eb%X^sUOKB;7~4#tZ7&{xx#vHG?C zE3Q8W+9`(ybJJ1Hi%qng^(7JMkjF3m@MGL$j7c58MQrGJWjANFq>RR6Sa}C&pdtIw zAA$zFgWPJ#F^@|)*fnvNi&G2CCZxP$%9`G144FCGMpVlrg(ZE+8549~>>%LY=KqTD zTfsT|m0RenJ6n73{P&RTj?kOU2en^i`dg*-QR|^D z&TfTgiv*6C-Us8v~Mo`(*b^6m-uEKDdlMK(Q~*W!9H{Yig+x(&^jwn0s?+9d;xQOJcwMi@kIf9 zYx_~@Z#+3=iEF8>n7;2Cniel@FEfbBRV+zCF%gUsNje8rB2vj=6S-h|PAO-S(E#i# z*WKFix>C!I$;L?s0Z>{nl3laaT(`Wd@FeFdnv;eay#TkaTj#)S0w{pLPn0pWHYxui zT!}Z}Mr3-&v_U?y<=s02Awj+Py$JKp$BF@bcy%-0+G|Q=qntF&p zoq;+#b<-Px_sR;JvbC87T`XEO+^@;DeB3*C0x$&F1np8>PREYr{1o1(*STCZ)}8cx zmmMhJ2P2o|l?roXrW~&h3F(v)RKllU5glaCbi5!hbw&eXpl38!BdnDW=3fo+l!i#! zLEx~?qg;c|-Yv9`mI$)*O>_xG3~XFM*%d`Pp%|OC$ykj1X%ErERs36Gv`JChtqgN; zq)Mg~@Yhkni&UaFF5!)925e05AE+zKs-#}}&ue4PZo*JOpcUN#StFs;QNOXaiS}sL z#Ae-By=Z>LDxO2j2Yc-4Riee2w&F|`6g5wl(d=4^Zj5u^Pm>**(ZC|2;c21JTc0ep zw|R<}y^2Dha8>Nf`L>Bmdg3IFmsL#rXvi-L=bMyV7HRyZy;e_@(lL{lu5etSQpI$_ zE~$zg1RRLxy=hou{<+l6YhtA*3*!g)BQIp+EMVjl(|uxUgFL!b!N{s(da8Ai8M9=~ zXxSk4Gp4yHV)WlLpN>CbzZF6RsYz-pu#WKX zkIQTA>7Dd6OqG#5=P1S)oui%P=VwcZn5S3EslVT-M-uIa-Ck78#syB3LYr1jE~@n~ zD8kWi6s_7O*!th|G~RC-!)i4WX~%JBK5Tn0lTvB2wT{D1L_P?;&@T+6_%O8>@qFT< zF~3>R^n9v>g|2kGfs9G_GPF&r^^sqT@`kh)#x^jkeB68lMO4P$cp=QVq?^bY_GBhn zAdAC6^XSEvQQS;omcIOnB7u-B72(R6>|CdI!ZUD4sDu+=rRBG+38?AUIYHuK5Tl5_ zQHLIEW5DI57?eW#u7^DNMi{b!{!09~ub%Tal~%kD{~LFddyT8;%JuZY_XWnc;b5B%^s=FCx5Xt5IYEPC5zw9;nHfL=a8R9!rOKXp@@g(kpW0*g92Zj{1oh>gk>yoyM zh>05{_b;Yj4u=#yg)avGr0WO=2d!|N_b>e-HuaqtkS0jE5QLeGr6dg`=c-BOr_IU+ zMKv{UhGeRy!ZVjyzlB~bfui2HuY59)Hi+a7sUv%SxPSsKo86%CVX)1p)O^R{_9;@0 z&5Hg)v^ALsNXQ=@7By}=c-FmP<2d^;en{f0-MR#T%YzU1Ysj0V21A-2`UOSDZ{<)BK{yPrKv_ zDY_=ytne`-hGn(>?j_(q-ROAHP57CsreutCi`*|^dNl}#CHtvK(!(sD?2rI}Zoo?R zc#q8wp80%~WJt0mp;hi9`%L(;kglPdt}yltAP3$~8dL$wDDkfA>OF>6t8F6;*D7-rq%Ut2xO zF<^1NQvS^@aCy{`q*UoF+4~&|AnDqoB*=ZtB`Ov^&W0VY^t9+%8YU4BS>uF5Nj~y5 zmg4v-ahb)y@zr$^Hkh}%H>m38g$u0#g^fLHrtaq&X=kg$)jlJYgtwObSNaP0tg{pB zSU+Apj26lE6j@h#aA~A@2x+}Ec3OTr3wm|t@Y*0>cbqdo5f;I~y@5pq`UvVZdVjKq zq-@URDC$2?21A*7a0X`HJ-w2L4^i&X)t<&JFyhqXOZZHghEqYwr2z))pw$3k>+nRp zorHuK+2-Gx#F;A>9IaL5%>*SMK!82-NtFJ1roS@L|DPd_=Oubpt?dhyha91PUx@oUu0mfG8-}vAsc0Oy z_HDn8?QODIkbh>FlUf2DH_0)zO9pHFB!pjA1w6R`NPH8Y(t<}gZ=_R9wkM>$Xns9K z`zQfZfQ91F+PUcP2i3#{q@7dQgu~UYZboj2@MUrEC+ zM?n^Po=o>gA@u#KeS2rwoSjW>o3l(}rs4UsdqFPxL#H_~3Yz!|m6s(N-m~FA4^> zqXc1`AN9laSj#Q%f}8~Gey}UZcHFVNiq3Zn?G1n$;iH|9=5D$7b)Bvul~F$!V^78M?+AY|-55|vHP^SX zB$=rV=yb>~#hi)#j4x!2!N4Rr@5U>gH52!zz!G(IvUx-t_%KF*Y=#d2Vh;x}Gp-zF zSd4sLnr&SmjV*dFcILLfUdLeXvT5BK%cCJ|ZRArCbR^CHyGx@ojVo1D8xHV^&^6QC zEM$d2^wx5HvI83Eh3SU5FE6RL@@nvY%mnlo*jr1_^x{Zt*qO`?QhsXd9w>}?T+0Y$ z3SCCqqg(0DWUTc|^sDSS{-~71Mp;%xN76zSH~SX&ogkQ63aH#4xq|$-M0Bjr(+rl<*;R;ZPRmajq%Ac#*Cy*?^UML3E%#aMZpE+(SAj2W{U zO?+giH1@R8w2+79Oje3xmc4Yw?j>^?o0xIZW}0)Ly6gUX*E)yuWwZD9v%kN^VsRiQ zDhzFfvqB&cXeNWohMt-5jhqL)h6QJFp~r%JM$%3M0;7d*vr12lBUGHXlfsNgB9V{A zqsI^k^Gh)i@ieH6K)e@;-g7t#5n0Jy*U#Y$3z%2a$jZ+HdbyGPLV5>CR&EQ@3YdLd zYG*!K$!BRY!g_OnE-qOqV5)iao=l(%>fup(1!N^iS8=J@97+$5q0FVL_*4y-(gTJm zvuUavK*JB!a_LHts>%k`IiXq}U71T&@d0&qm)e5#rUXh3KX0#VhFCy%CqKp>#zLjq9o z05wR1Y$0K^fI>mL#S+XHjq3yuIc{}%xlO%xNtv^HEZW-%6_IM5Un$7li{g>ed^L&0GUrGOI| z>rhOSfNhOu1-&(%hLHvt|EGRd9Plx)@Pmn`V9er!66$rkwYl}HH^UwXGKItMaRUl<2i}{NJ>sg-MnRM zTKcw(%q(s;j}PYL3i7spzGJ8Gi-KLd_Z0qf@0a`jB`VrqEH06hmK`{F=(&e@*SKB+TcXr*lsq9v%HQJuu?{4?s zxqEM5Q1`>|{gH>Gj~+jH`fP0c$BF0q7n3iiUi~ut`qwvx-+rI@N(Pp6-!%I(5_GF>E(aAhx1wWyJDG*SNCP zUcPY}cH9uf^Js%!*VTY>KPuW_m;dzrX_x*P)#{*i&!%1lW2X)=7+b2|j;6TSEzP?d z5q(|h>16k|?`)W7-XQDt8MlDN>TxOI;WK|7^~)Em8CTv#ev@DFoR1quWuNq;9F6Xj zxW;5)`EAS~l2wuYzEk@G_PV^Yt^7$|TV-{6{6s({icE8zI^>lpx>~A{tCT)z&*!DF zKLsBEjg`O>**PDH7o=;*B%B!Nxff!T`kAVU~{PMwL zL73Krp~qH?62oiv#v0NLDcQNc<0q-jiwt-1Ko04eHR5{wP%6tw+*erOk5VsBZZ}6@ z2fwe7-rTmLay8PT%@;|wYn>`?J6JO%GR$xFvbb(^BFl@~Ea@DPEiym*r;F-0;LAo$%-edfbO7==LCbm*zLo`GI0rVyhNMtfb6V zQsUO@QxlsFPP&#KmRJ*N)vJ&h&Bym!#8+d}aV1X3^ReEGuyKMlV!g*?Z|EO2pxZzx zcxBPTsEd&Td*QrhIZeX>uJ9M`c<}GFV!!w~M{>aM)6%sv!4^?|6?g_w5ce~P6sBLv ztwd}-Z>P9njW6~;TrzFJOz5afp*ph7P)+C*e5Q0F4>_L?1S1k{hgVbVBfhq-KcqN4 zx~FZFQe#^&`y*&L#e}agm2g z&!sG0TwfjGSU^4z;iw~=$`1o(JOn3En@3*82U!tbIwEc3&!S4C(SEy7LbuCxtUB~V z=`4x;^8$V9wa{xaaQGtcS`AoRSFuC!ya9O6B@WZOZ$H6RP8O;(7)4~siRbZ;tfFsh zXSX1?l*hgRp`R#Ocp@-X-&r00X3V?saCpX8`o_wr>jU34a}^URU;zgwQQrzwq>@Xg zaf(JwVqdHxw?B6V!wFAo%yxGc`dCVO*Xw-z+|ssj*E#D*7IK{)uvoHcl6^=MT@+BYJJmcd%8UmCDms9K9P&1a|Yt(GIM1+ z`>ejnvt>FZH#FqWm!46l?vikV(pbYqqUy zkf*wvHhWl-_*qulW@#_F#_} SzJ&kcAegi$>N!f<{=Wf9iWrpu literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/vtc.png b/client/webserver/newui/src/img/coins/vtc.png new file mode 100644 index 0000000000000000000000000000000000000000..3890a85f2c9f08e3d0c0771a11a3de804cda0b34 GIT binary patch literal 3188 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 \ No newline at end of file diff --git a/client/webserver/newui/src/img/coins/weth.png b/client/webserver/newui/src/img/coins/weth.png new file mode 100644 index 0000000000000000000000000000000000000000..1824b081237839c6a559b7fd06ecb12922b82d57 GIT binary patch literal 6302 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 literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/weth.svg b/client/webserver/newui/src/img/coins/weth.svg new file mode 100644 index 0000000000..2f2b3c084d --- /dev/null +++ b/client/webserver/newui/src/img/coins/weth.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/client/webserver/newui/src/img/coins/x.png b/client/webserver/newui/src/img/coins/x.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2f54b12b759c6c7d7fe14b74294655f731aa0f GIT binary patch literal 2381 zcmZ{ldpK148pl^*8n;OoQ>c(gLnZggr7>%+F)lMMB|kP;h3p^}Q|!er~7>@~ybInO!I`D6XoyT0pvKi~H|&w8FY?&(g|RMS-h z06>#YBQcSCsQf}JAt%)_jE&q>572fV0su_2{8~_8hS5Vrr9(uzHyVu|9QJq$01K~r zx_Ofkc@~(RO->g1h?)pZcdgF#`iN@jc};}UR=nsg<6J$3-$W2KJDhK$!`DejPpQ;Z z&`K3GfV?I`xrAQQLg6=n<%lk!Le1ogRwAOqVoF6biQhyk6;t?9lAwiH)Snf!I5K}1`afHN( z1<03@A;et_%K3;cozv$FgpZ6P7DzMFFpr(%Bf0`U?~4Ex@OdCYMrNf*k36OVjzHw@ z|EtTFLEIHP&p9F}c@{+|c@PC0Sx-Sw0DojbT;|@&GtLE+?~JUf0M12|@21E;eaAM6#=vl`(K=%j z(+xN?^NpJmgFId5|zf+RA9N~3Rgbz``DczQ8e-afv5J9hf-3JBaC z6dbZQG>rWdCp=Yp@lws@D_3i;)zx3W(I}Qkn_F6MwcWncez&9ZukN0E zy?qZJ_74m`elqm**^80Umt*6vUcY%eF)4dD_4oAq4jQ(5Wx#31^+wpt$Qok0o$XqQ;<4KuTXoPvZKHnLM4G;B`@=@|5DL#fF|U>bkgkixv|6?H3v9jKmt;PJGJ6~N_I}m<^wGMNMJX81nAvF58@ILjCoTqS z;nowy(+3TsWff+O)!f1olfIo!_{7M=9LIwsHT`?i5G z-_2v_ncUi~+L$E$9(J6}s)xa?zg1RnX{ho!EjK3rdqlP)PWXIJ!Y6-{lhttaiNqAX2s)jq>IFX?hUt%IM>Nd||XW7u!k4IBdWmtv)>USL)--i`7v%BDDk^VX`R_)1I)r3M$Eg2zBv zAXKo}fWbafuNB|deWybUI2JxWF{8DrDfh*DG&<Q=Z&*r!D{HpZaCe=>ww z495(w4r{dkHf#0Gg5rwY?KXZ}`30Z7tyNf+9Mz+TzZ7P%LonKpCouZ^gb@p{ET1(E z?}g=}f*lN>!^dTL9%1!6$YJf>YioYJ<1BXY_R-G9<~|UbFS=YAv7w=Z|A#ru>fW|Q zhMh9=>1bBQ#jkE`W%jnObh9xwcVaPf|^6F3Z5RJ(-fT<~b& zfqb<9C4+xe<)mt{=-Ms7RAsPwT18s`&9!omUb4;=-!s6l!<4&58YYP)b_8y4qHNL@ zJzh7IneVPL13Xo1Bz_=fiQuL^noQITKJ%srcBa9S=1+CnkI6#?2}%XBinqKfOeTT) z!1apPPV*SeN?ue%rj)Q^&^rqF|gY>yt?C$D?lJ_0BRUEKIMS z;RVZ#QNvRfrsECS3(Q_&d~^| zA04>$%Fhvwkt<3ZaZz6$wYZKlJoMflNDzM2-~TXlke6rchx~N_bh10Cni!n&4?QMx AcK`qY literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/xmr.png b/client/webserver/newui/src/img/coins/xmr.png new file mode 100644 index 0000000000000000000000000000000000000000..2bd9c671b3878e0569f1e67bb09024b0f9fd6c68 GIT binary patch literal 7504 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 \ No newline at end of file diff --git a/client/webserver/newui/src/img/coins/y.png b/client/webserver/newui/src/img/coins/y.png new file mode 100644 index 0000000000000000000000000000000000000000..055a7da014f12a3504821c7fecd65d82e9c848a6 GIT binary patch literal 2194 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 Y2f{7(W8gHf5&!@I07*qoM6N<$f;xm7g8%>k literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/coins/zec.png b/client/webserver/newui/src/img/coins/zec.png new file mode 100644 index 0000000000000000000000000000000000000000..34b150f5e735c75f7cb82de45d6b40c8a0985b1d GIT binary patch literal 4061 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 P00000NkvXXu0mjfsjZoU literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/img/favicon.png b/client/webserver/newui/src/img/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..05f22d353aa627df3581604e258431b9d90ef3a5 GIT binary patch literal 3170 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 IM6N<$f;;639RL6T literal 0 HcmV?d00001 diff --git a/client/webserver/newui/src/index.html b/client/webserver/newui/src/index.html new file mode 100644 index 0000000000..242f9045a5 --- /dev/null +++ b/client/webserver/newui/src/index.html @@ -0,0 +1,17 @@ + + + + + + + + + Bison Wallet + + + +

+ + + + \ No newline at end of file diff --git a/client/webserver/newui/src/index.tsx b/client/webserver/newui/src/index.tsx new file mode 100644 index 0000000000..d30027196d --- /dev/null +++ b/client/webserver/newui/src/index.tsx @@ -0,0 +1,7 @@ +import "./scss/application.scss"; +import * as ReactDOM from "react-dom/client"; + +import { App } from "./App"; + +const root = ReactDOM.createRoot(document.getElementById("root") as HTMLElement); +root.render(); diff --git a/client/webserver/newui/src/js/application.ts b/client/webserver/newui/src/js/application.ts new file mode 100644 index 0000000000..94762e774a --- /dev/null +++ b/client/webserver/newui/src/js/application.ts @@ -0,0 +1,596 @@ +import { getJSON } from "./http" +import { + AppState, + User, + PageData, + UnitInfo, + TotalUSDBalance, + FormData, + CoreNote, + LogMessage, + OrderNote, + InFlightOrder, + Market, + Order, + BalanceNote, + BondNote, + MatchNote, + ConnEventNote, + SpotPriceNote, + WalletNote, + TransactionNote, + ReputationNote, + WalletConfigNote, + WalletSyncNote, + ActionRequiredNote, + Match, + RateNote, + TipChangeNote, + BookUpdate, +} from "./registry" +import { TickerAsset, normalizedTicker } from "./assets" +import Doc from "./doc" +import State from "./state" +import ws from "./ws" + +export class Application { + user: User | null + commitHash: string + pageLoaded: (d: PageData) => void + pageData: PageData + tickerList: TickerAsset[] + tickerMap: Record + balanceUpdaters: Record void)> + fiatRateUpdaters: Record void)> + setForm: (form: FormData) => void + noteReceivers: Record void> + loggers: Record + recorders: Record + + constructor () { + this.user = null + this.pageData = { pageParts: [''], pageRoot: '', data: {}, query: new URLSearchParams() } + this.balanceUpdaters = {} + this.fiatRateUpdaters = {} + this.noteReceivers = {} + this.setForm = () => { } + + // Loggers can be enabled by setting a truthy value to the loggerID using + // enableLogger. Settings are stored across sessions. See docstring for the + // log method for more info. + this.loggers = State.fetchLocal(State.loggersLK) || {} + window.enableLogger = (loggerID, state) => { + if (state) this.loggers[loggerID] = true + else delete this.loggers[loggerID] + State.storeLocal(State.loggersLK, this.loggers) + return `${loggerID} logger ${state ? 'enabled' : 'disabled'}` + } + // Enable logging from anywhere. + window.log = (loggerID, ...a) => { this.log(loggerID, ...a) } + // window.mmStatus = () => this.mmStatus + + // Recorders can record log messages, and then save them to file on request. + const recorderKeys = State.fetchLocal(State.recordersLK) || [] + this.recorders = {} + for (const loggerID of recorderKeys) { + console.log('recording', loggerID) + this.recorders[loggerID] = [] + } + window.recordLogger = (loggerID, on) => { + if (on) this.recorders[loggerID] = [] + else delete this.recorders[loggerID] + State.storeLocal(State.recordersLK, Object.keys(this.recorders)) + return `${loggerID} recorder ${on ? 'enabled' : 'disabled'}` + } + window.dumpLogger = loggerID => { + const record = this.recorders[loggerID] + if (!record) return `no recorder for logger ${loggerID}` + const a = document.createElement('a') + a.href = `data:application/octet-stream;base64,${window.btoa(JSON.stringify(record, null, 4))}` + a.download = `${loggerID}.json` + document.body.appendChild(a) + a.click() + setTimeout(() => { + document.body.removeChild(a) + }, 0) + } + + window.user = () => this.user + } + + async start (pageLoaded: (d: PageData) => void) { + this.pageLoaded = pageLoaded + await this.fetchBuildInfo() + console.log('Bison Wallet, Build', this.commitHash.substring(0, 8)) + + ws.connect(getSocketURI(), () => window.location.reload()) + ws.registerRoute('notify', (note: CoreNote) => this.notify(note)) + // Dealing with some baggage from the old codebase. + ws.registerRoute('book', (d: BookUpdate) => { this.notify(convertBookNote(d)) }) + ws.registerRoute('book_order', (d: BookUpdate) => { this.notify(convertBookNote(d)) }) + ws.registerRoute('unbook_order', (d: BookUpdate) => { this.notify(convertBookNote(d)) }) + ws.registerRoute('update_remaining', (d: BookUpdate) => { this.notify(convertBookNote(d)) }) + ws.registerRoute('epoch_order', (d: BookUpdate) => { this.notify(convertBookNote(d)) }) + ws.registerRoute('epoch_order', (d: BookUpdate) => { this.notify(convertBookNote(d)) }) + ws.registerRoute('candles', (d: BookUpdate) => { this.notify(convertBookNote(d)) }) + ws.registerRoute('candle_update', (d: BookUpdate) => { this.notify(convertBookNote(d)) }) + ws.registerRoute('epoch_match_summary', (d: BookUpdate) => { this.notify(convertBookNote(d)) }) + + // Handle back navigation from the browser. + Doc.bind(window, 'popstate', (e: PopStateEvent) => { + const page = e.state?.page + if (!page && page !== '') return + this.loadPage(page, e.state.data, true) + }) + + const page = pageFromURL() + const lastState = window.history.state + if (lastState?.page === page) { // probably a refresh + this.loadPage(page, lastState.data, true) + } else this.loadPage(page) + } + + async loadPage (page: string, data?: any, skipPush?: boolean) { + const url = new URL(`/${page}`, window.location.origin) + if (!skipPush) { + window.history.pushState({ page: page, data: data }, '', url.toString()) + } + document.title = data?.title || 'Bison Wallet' + this.storePageData({ pageParts: page.split('/'), pageRoot: pageRoot(page), data: data, query: url.searchParams }) + } + + storePageData (pd: PageData) { + this.pageData = pd + this.pageLoaded(pd) + } + + async fetchBuildInfo () { + const resp = await getJSON('/api/buildinfo') + if (!resp.ok) return + this.commitHash = resp.revision + } + + async fetchAppState (): Promise { + const r = await getJSON('/api/user') + const needsTickers = r.user && !this.user + this.user = r.user + if (needsTickers) this.prepareTickerAssets() + return r + } + + async fetchUser (): Promise { + const r = await this.fetchAppState() + return r.user + } + + registerNoteFeed (receivers: (n: CoreNote) => void): string { + const k = randomKey() + this.noteReceivers[k] = receivers + return k + } + + unregisterNoteFeed (k: string) { + delete this.noteReceivers[k] + } + + prepareTickerAssets () { + const tickerList: TickerAsset[] = [] + const tickerMap: Record = {} + for (const a of Object.values(this.user.assets)) { + const normedTicker = normalizedTicker(a) + let ta = tickerMap[normedTicker] + if (ta) { + ta.addNetworkAsset(a) + continue + } + ta = new TickerAsset(a) + tickerList.push(ta) + tickerMap[normedTicker] = ta + } + this.tickerList = tickerList + this.tickerMap = tickerMap + } + + totalBalanceUSD (): TotalUSDBalance { + if (!this.user) return { ok: false, total: 0, numContribs: 0 } + if (Object.keys(this.user.tickerRates).length === 0) return { ok: false, total: 0, numContribs: 0 } + let numContribs = 0 + const total = this.tickerList.reduce((acc: number, { ticker, total, xcRate, cFactor }: TickerAsset) => { + if (!xcRate) { + console.warn('no exchange rate info for', ticker) + return acc + } + if (total === 0) return acc + numContribs++ + return acc + (total / cFactor * acc) + }, 0) + return { ok: true, total, numContribs } + } + + asset (assetID: number) { + return this.user.assets[assetID] + } + + unitInfo (assetID: number): UnitInfo { + return this.user.assets[assetID].unitInfo + } + + idRate (assetID: number) { + return this.user.fiatRates[assetID] + } + + wallet (assetID: number) { + return this.user.assets[assetID].wallet + } + + registerBalanceUpdater (updater: () => void): string { + const key = randomKey() + this.balanceUpdaters[key] = updater + return key + } + + unregisterBalanceUpdater (key: string) { + delete this.balanceUpdaters[key] + } + + registerFiatRateUpdater (updater: () => void): string { + const key = randomKey() + this.fiatRateUpdaters[key] = updater + return key + } + + unregisterFiatRateUpdater (key: string) { + delete this.fiatRateUpdaters[key] + } + + registerFormSetter (setForm: (form: FormData) => void) { + this.setForm = setForm + } + + unregisterFormSetter () { + this.setForm = () => { } + } + + /* + * log prints to the console if a logger has been enabled. Loggers are created + * implicitly by passing a loggerID to log. i.e. you don't create a logger, + * you just log to it. Loggers are enabled by invoking a global function, + * enableLogger(loggerID, onOffBoolean), from the browser's js console. Your + * choices are stored across sessions. Some common and useful loggers are + * listed below, but this list is not meant to be comprehensive. + * + * LoggerID Description + * -------- ----------- + * notes Notifications of all levels. + * book Order book feed. + * ws.........Websocket connection status changes. + */ + log (loggerID: string, ...msg: any) { + if (this.loggers[loggerID]) console.log(`${nowString()}[${loggerID}]:`, ...msg) + if (this.recorders[loggerID]) { + this.recorders[loggerID].push({ + time: nowString(), + msg: msg + }) + } + } + + /* + * notify is the top-level handler for notifications received from the client. + * Notifications are propagated to the loadedPage. + */ + notify (note: CoreNote) { + // Handle type-specific updates. + this.log('notes', 'notify', note) + if (this.user) this.updateUser(note) + // Inform the view. + for (const f of Object.values(this.noteReceivers)) { + try { + f(note) + } catch (error) { + console.error('note feeder error:', error.message ? error.message : error) + console.log(note) + console.log(error.stack) + } + } + // TODO: Popup notifications + } + + updateUser (note: CoreNote) { + const { user } = this + switch (note.type) { + case 'order': { + const orderNote = note as OrderNote + const order = orderNote.order + const mkt = user.exchanges[order.host].markets[order.market] + const tempID = orderNote.tempID + + // Ensure market's inflight orders list is updated. + if (note.topic === 'AsyncOrderSubmitted') { + const inFlight = order as InFlightOrder + inFlight.tempID = tempID + if (!mkt.inflight) mkt.inflight = [inFlight] + else mkt.inflight.push(inFlight) + break + } else if (note.topic === 'AsyncOrderFailure') { + mkt.inflight = mkt.inflight.filter(ord => ord.tempID !== tempID) + break + } else { + for (const i in mkt.inflight || []) { + if (!(mkt.inflight[i].tempID === tempID)) continue + mkt.inflight = mkt.inflight.filter(ord => ord.tempID !== tempID) + break + } + } + + // Updates given order in market's orders list if it finds it. + // Returns a bool which indicates if order was found. + mkt.orders = mkt.orders || [] + const updateOrder = (mkt: Market, ord: Order) => { + const i = mkt.orders.findIndex((o: Order) => o.id === ord.id) + if (i === -1) return false + if (note.topic === 'OrderRetired') mkt.orders.splice(i, 1) + else mkt.orders[i] = ord + return true + } + // If the notification order already exists we update it. + // In case market's orders list is empty or the notification order isn't + // part of it we add it manually as this means the order was + // just placed. + if (!updateOrder(mkt, order)) mkt.orders.push(order) + break + } + case 'balance': { + const n: BalanceNote = note as BalanceNote + user.assets[n.assetID].wallet.balance = n.balance + Object.values(this.balanceUpdaters).forEach(u => u()) + break + } + case 'bondpost': + this.handleBondNote(note as BondNote) + break + case 'reputation': { + const n = note as ReputationNote + user.exchanges[n.host].auth.rep = n.rep + break + } + case 'walletstate': + case 'walletconfig': { + // assets can be null if failed to connect to dex server. + const wallet = (note as WalletConfigNote)?.wallet + if (!wallet) return + const asset = user.assets[wallet.assetID] + asset.wallet = wallet + break + } + case 'walletsync': { + const n = note as WalletSyncNote + const w = this.wallet(n.assetID) + if (w) { + w.syncStatus = n.syncStatus + w.synced = w.syncStatus.synced + w.syncProgress = n.syncProgress + } + break + } + case 'match': { + const n = note as MatchNote + const ord = this.order(n.orderID) + if (ord) updateMatch(ord, n.match) + break + } + case 'conn': { + const n = note as ConnEventNote + const xc = user.exchanges[n.host] + if (xc) xc.connectionStatus = n.connectionStatus + break + } + case 'spots': { + const n = note as SpotPriceNote + const xc = user.exchanges[n.host] + // Spots can come before the user is fetched after login and before/while the + // markets page reload when it receives a dex conn note. + if (!xc || !xc.markets) break + for (const [mktName, spot] of Object.entries(n.spots)) xc.markets[mktName].spot = spot + break + } + case 'fiatrateupdate': { + this.user.fiatRates = (note as RateNote).fiatRates + Object.values(this.fiatRateUpdaters).forEach(u => u()) + break + } + // TODO: implement required actions + // case 'actionrequired': { + // const n = note as CoreActionRequiredNote + // this.addAction(n.payload) + // break + // } + case 'walletnote': { + const n = note as WalletNote + switch (n.payload.route) { + case 'transaction': { + const txNote = n.payload as TransactionNote + this.handleTransactionNote(n.payload.assetID, txNote) + break + } + case 'actionRequired': { + const req = n.payload as ActionRequiredNote + // TODO: implement required actions + // this.addAction(req) + /// this.blinkAction() + break + } + case 'actionResolved': { + // TODO: implement + // this.resolveAction(n.payload as ActionResolvedNote) + break + } + case 'tipChange': { + const note = n.payload as TipChangeNote + const w = user.assets[note.assetID].wallet + if (w) w.syncStatus.blocks = note.tip + } + } + break + } + // TODO: implement market maker stuff + // case 'runstats': { + // this.log('mm', { runstats: note }) + // const n = note as RunStatsNote + // const bot = this.botStatus(n.host, n.baseID, n.quoteID) + // if (bot) { + // bot.runStats = n.stats + // bot.running = Boolean(n.stats) + // if (!n.stats) { + // bot.latestEpoch = undefined + // bot.cexProblems = undefined + // } + // } + // break + // } + // case 'cexnote': { + // const n = note as CEXNotification + // switch (n.topic) { + // case 'BalanceUpdate': { + // const u = n.note as CEXBalanceUpdate + // this.mmStatus.cexes[n.cexName].balances[u.assetID] = u.balance + // } + // } + // break + // } + // case 'epochreport': { + // const n = note as EpochReportNote + // const bot = this.botStatus(n.host, n.baseID, n.quoteID) + // if (bot) bot.latestEpoch = n.report + // break + // } + // case 'cexproblems': { + // const n = note as CEXProblemsNote + // const bot = this.botStatus(n.host, n.baseID, n.quoteID) + // if (bot) bot.cexProblems = n.problems + // break + // } + } + } + + /* + * updateBondConfs updates the information for a pending bond. + */ + updateBondConfs (dexAddr: string, coinID: string, confs: number) { + const dex = this.user.exchanges[dexAddr] + for (const bond of dex.auth.pendingBonds) if (bond.coinID === coinID) bond.confs = confs + } + + updateTier (host: string, bondedTier: number) { + this.user.exchanges[host].auth.rep.bondedTier = bondedTier + } + + /* + * handleBondNote is the handler for the 'bondpost'-type notification, which + * is used to update the dex tier and registration status. + */ + handleBondNote (note: BondNote) { + if (note.auth) this.user.exchanges[note.dex].auth = note.auth + switch (note.topic) { + case 'RegUpdate': + if (note.coinID !== null) { // should never be null for RegUpdate + this.updateBondConfs(note.dex, note.coinID, note.confirmations) + } + break + case 'BondConfirmed': + if (note.tier !== null) { // should never be null for BondConfirmed + this.updateTier(note.dex, note.tier) + } + break + default: + break + } + } + + /* order attempts to locate an order by order ID. */ + order (oid: string): Order | null { + for (const xc of Object.values(this.user.exchanges)) { + if (!xc || !xc.markets) continue + for (const market of Object.values(xc.markets)) { + if (!market.orders) continue + for (const ord of market.orders) { + if (ord.id === oid) return ord + } + } + } + return null + } + + handleTransactionNote (assetID: number, note: TransactionNote) { + const w = this.wallet(assetID) + if (!w) return + const tx = note.transaction + if (tx.confirmed) delete w.pendingTxs[tx.id] + else w.pendingTxs[tx.id] = tx + } +} + +function randomKey (): string { + return Math.random().toString(36).substring(2, 18) +} + +function pageFromURL (): string { + // Remove leading and trailing slashes + return window.location.pathname.replace(/^\/|\/$/g, '') +} + +function pageRoot (page: string): string { + return page.split('/')[0] +} + +/* nowString creates a string formatted like HH:MM:SS.xxx */ +function nowString (): string { + const stamp = new Date() + const h = stamp.getHours().toString().padStart(2, '0') + const m = stamp.getMinutes().toString().padStart(2, '0') + const s = stamp.getSeconds().toString().padStart(2, '0') + const ms = stamp.getMilliseconds().toString().padStart(3, '0') + return `${h}:${m}:${s}.${ms}` +} + +/* getSocketURI returns the websocket URI for the client. */ +function getSocketURI (): string { + const protocol = (window.location.protocol === 'https:') ? 'wss' : 'ws' + return `${protocol}://${window.location.host}/ws` +} + +/* updateMatch updates the match in or adds the match to the order. */ +function updateMatch (order: Order, match: Match) { + for (const i in order.matches) { + const m = order.matches[i] + if (m.matchID === match.matchID) { + order.matches[i] = match + return + } + } + order.matches = order.matches || [] + order.matches.push(match) +} + +function convertBookNote (note: BookUpdate): CoreNote { + return { + type: 'bookupdate', + topic: note.action, + subject: '', + details: '', + severity: 0, + stamp: 0, + acked: false, + id: '', + data: { + host: note.host, + marketID: note.marketID, + matchesSummary: note.matchesSummary, + payload: note.payload + } + } +} + +const app = new Application() + +export default app \ No newline at end of file diff --git a/client/webserver/newui/src/js/assets.ts b/client/webserver/newui/src/js/assets.ts new file mode 100644 index 0000000000..59535f30d0 --- /dev/null +++ b/client/webserver/newui/src/js/assets.ts @@ -0,0 +1,149 @@ +import Doc from './doc' +import { + UnitInfo, + SupportedAsset, + WalletInfo +} from './registry' +import app from './application' + +export class NetworkAsset { + assetID: number + symbol: string + ui: UnitInfo + chainName: string + chainLogo: string + ticker: string + token?: { + parentMade: boolean + parentID: number + feeUI: UnitInfo + } + + constructor (a: SupportedAsset) { + const { id: assetID, symbol, name, token, unitInfo: ui, unitInfo: { conventional: { unit: ticker } } } = a + this.assetID = assetID + this.ticker = ticker + this.symbol = symbol + this.ui = ui + this.chainName = token ? app.user.assets[token.parentID].name : name + this.chainLogo = token ? Doc.logoPath(app.user.assets[token.parentID].symbol) : Doc.logoPath(symbol) + if (token) this.token = { parentID: token.parentID, feeUI: app.unitInfo(token.parentID), parentMade: Boolean(app.user.assets[token.parentID].wallet) } + } + + get bal () { + const w = app.user.assets[this.assetID].wallet + return w?.balance ?? { available: 0, locked: 0, immature: 0 } + } + + updateTokenParentMade () { + if (!this.token) return false + this.token.parentMade = Boolean(app.user.assets[this.token.parentID].wallet) + } +} + +export class TickerAsset { + ticker: string // normalized e.g. WETH -> ETH + hasWallets: boolean + cFactor: number + bestID: number + logoSymbol: string + name: string + networkAssets: NetworkAsset[] + networkAssetLookup: Record + haveAllFiatRates: boolean + isMultiNet: boolean + hasTokens: boolean + ui: UnitInfo + + constructor (a: SupportedAsset) { + const { id: assetID, name, symbol, unitInfo: ui, unitInfo: { conventional: { conversionFactor: cFactor } } } = a + this.ticker = normalizedTicker(a) + this.cFactor = cFactor + this.networkAssets = [] + this.networkAssetLookup = {} + this.bestID = assetID + this.name = name + this.logoSymbol = symbol + this.ui = ui + this.addNetworkAsset(a) + } + + addNetworkAsset (a: SupportedAsset) { + const { id: assetID, symbol, name, wallet: w, token, unitInfo: ui } = a + const xcRate = app.idRate(assetID) + if (!xcRate) this.haveAllFiatRates = false + this.hasTokens = this.hasTokens || Boolean(token) + if (!token) { // prefer the native asset data, e.g. weth.polygon -> eth} + this.bestID = assetID + this.logoSymbol = symbol + this.name = name + this.ui = ui + } + const ca = new NetworkAsset(a) + this.hasWallets = this.hasWallets || Boolean(w) || Boolean(ca.token?.parentMade) + this.networkAssets.push(ca) + this.networkAssetLookup[a.id] = ca + this.networkAssets.sort((a: NetworkAsset, b: NetworkAsset) => { + if (a.token && !b.token) return 1 + if (!a.token && b.token) return -1 + return a.ticker.localeCompare(b.ticker) + }) + this.isMultiNet = this.networkAssets.length > 1 + } + + walletInfo (): WalletInfo | undefined { + for (const { assetID } of this.networkAssets) { + const { info } = app.asset(assetID) + if (info) return info + } + } + + updateHasWallets () { + for (const ta of this.networkAssets) { + ta.updateTokenParentMade() + const { assetID, token } = ta + if (app.wallet(assetID) || token?.parentMade) { + this.hasWallets = true + return + } + } + } + + /* + * blockchainWallet returns the assetID and wallet for the blockchain for + * which this ticker is a native asset, if it exists. + */ + blockchainWallet () { + for (const { assetID } of this.networkAssets) { + const { wallet, token } = app.asset(assetID) + if (!token) return { assetID, wallet } + } + } + + get avail () { + return this.networkAssets.reduce((sum: number, ca: NetworkAsset) => sum + ca.bal.available, 0) + } + + get immature () { + return this.networkAssets.reduce((sum: number, ca: NetworkAsset) => sum + ca.bal.immature, 0) + } + + get locked () { + return this.networkAssets.reduce((sum: number, ca: NetworkAsset) => sum + ca.bal.locked, 0) + } + + get total () { + return this.networkAssets.reduce((sum: number, { bal: { available, locked, immature } }: NetworkAsset) => { + return sum + available + locked + immature + }, 0) + } + + get xcRate () { + return app.idRate(this.bestID) + } +} + +export function normalizedTicker (a: SupportedAsset): string { + const ticker = a.unitInfo.conventional.unit + return ticker === 'WETH' ? 'ETH' : ticker === 'WBTC' ? 'BTC' : ticker +} diff --git a/client/webserver/newui/src/js/doc.ts b/client/webserver/newui/src/js/doc.ts new file mode 100644 index 0000000000..f43d48bc77 --- /dev/null +++ b/client/webserver/newui/src/js/doc.ts @@ -0,0 +1,149 @@ +import { SupportedAsset, UnitInfo } from './registry' + +interface BipInfo { + assetID: number + logo: string +} + +const languages = navigator.languages.filter((locale: string) => locale !== 'c') + +const RateEncodingFactor = 1e8 // same as value defined in ./orderutil + +const log10RateEncodingFactor = Math.round(Math.log10(RateEncodingFactor)) + +const intFormatter = new Intl.NumberFormat(languages, { maximumFractionDigits: 0 }) + +const fourSigFigs = new Intl.NumberFormat(languages, { + minimumSignificantDigits: 4, + maximumSignificantDigits: 4 +}) + +/* A cache for formatters used for Doc.formatCoinValue. */ +const decimalFormatters: Record = {} + +/* + * decimalFormatter gets the formatCoinValue formatter for the specified decimal + * precision. + */ +function decimalFormatter (prec: number) { + return formatter(decimalFormatters, 2, prec) +} + +/* A cache for formatters used for Doc.formatFullPrecision. */ +const fullPrecisionFormatters: Record = {} + +/* + * fullPrecisionFormatter gets the formatFullPrecision formatter for the + * specified decimal precision. + */ +function fullPrecisionFormatter (prec: number, locales?: string | string[]) { + return formatter(fullPrecisionFormatters, prec, prec, locales) +} + +/* + * formatter gets the formatter from the supplied cache if it already exists, + * else creates it. + */ +function formatter (formatters: Record, min: number, max: number, locales?: string | string[]): Intl.NumberFormat { + const k = `${min}-${max}` + let fmt = formatters[k] + if (!fmt) { + fmt = new Intl.NumberFormat(locales ?? languages, { + minimumFractionDigits: min, + maximumFractionDigits: max + }) + formatters[k] = fmt + } + return fmt +} + +/* + * convertToConventional converts the value in atomic units to conventional + * units. + */ +function convertToConventional (v: number, unitInfo: UnitInfo) { + const f = unitInfo.conventional.conversionFactor + v /= f + const prec = Math.round(Math.log10(f)) + return [v, prec] +} + +export default class Doc { + static bipMap: Record = {} + + static registerAssets (assets: SupportedAsset[]) { + for (const { id: assetID, symbol } of assets) { + const logoSymbol = symbol.split('.')[0] // e.g. usdc.eth => usdc + this.bipMap[symbol] = { assetID, logo: `/img/coins/${logoSymbol}.png` } + } + } + + /* bind binds the function to the event for the element. */ + static bind (el: EventTarget, ev: string | string[], f: EventListenerOrEventListenerObject, opts?: any /* EventListenerOptions */): void { + for (const e of (Array.isArray(ev) ? ev : [ev])) el.addEventListener(e, f, opts) + } + + /* unbind removes the handler for the event from the element. */ + static unbind (el: EventTarget, ev: string, f: (e: Event) => void): void { + el.removeEventListener(ev, f) + } + + /* + * logoPath creates a path to a png logo for the specified ticker symbol. If + * the symbol is not a supported asset, the generic letter logo will be + * requested instead. + */ + static logoPath (symbol: string): string { + const bipInfo = this.bipMap[symbol] + if (bipInfo) return bipInfo.logo + return `/img/coins/${symbol.substring(0, 1)}.png` + } + + /* + * formatCoinValue formats the value in atomic units into a string + * representation in conventional units. If the value happens to be an + * integer, no decimals are displayed. Trailing zeros may be truncated. + */ + static formatCoinValue (vAtomic: number, unitInfo?: UnitInfo): string { + const [v, prec] = convertToConventional(vAtomic, unitInfo) + if (Number.isInteger(v)) return intFormatter.format(v) + return decimalFormatter(prec).format(v) + } + + static conventionalCoinValue (vAtomic: number, unitInfo?: UnitInfo): number { + const [v] = convertToConventional(vAtomic, unitInfo) + return v + } + + /* + * formatRateFullPrecision formats rate to represent it exactly at rate step + * precision, trimming non-effectual zeros if there are any. + */ + static formatRateFullPrecision (encRate: number, bui: UnitInfo, qui: UnitInfo, rateStepEnc: number) { + const r = bui.conventional.conversionFactor / qui.conventional.conversionFactor + const convRate = encRate * r / RateEncodingFactor + const rateStepDigits = log10RateEncodingFactor - Math.floor(Math.log10(rateStepEnc)) - + Math.floor(Math.log10(bui.conventional.conversionFactor) - Math.log10(qui.conventional.conversionFactor)) + if (rateStepDigits <= 0) return intFormatter.format(convRate) + return fullPrecisionFormatter(rateStepDigits).format(convRate) + } + + static formatFourSigFigs (n: number, maxDecimals?: number): string { + return formatSigFigsWithFormatters(intFormatter, fourSigFigs, n, maxDecimals) + } + + static addrHost (addr: string) { + // Handle IPv6 cases like "[::1]:7232" + if (addr.startsWith("[")) return addr.substring(1, addr.lastIndexOf("]")); + return addr.split(":")[0]; + } +} + +function formatSigFigsWithFormatters (intFormatter: Intl.NumberFormat, sigFigFormatter: Intl.NumberFormat, n: number, maxDecimals?: number, locales?: string | string[]): string { + if (n >= 1000) return intFormatter.format(n) + const s = sigFigFormatter.format(n) + if (typeof maxDecimals !== 'number') return s + const fractional = sigFigFormatter.formatToParts(n).filter((part: Intl.NumberFormatPart) => part.type === 'fraction')[0]?.value ?? '' + if (fractional.length <= maxDecimals) return s + return fullPrecisionFormatter(maxDecimals, locales).format(n) +} \ No newline at end of file diff --git a/client/webserver/newui/src/js/http.ts b/client/webserver/newui/src/js/http.ts new file mode 100644 index 0000000000..9151cd4296 --- /dev/null +++ b/client/webserver/newui/src/js/http.ts @@ -0,0 +1,37 @@ + +/* + * requestJSON encodes the object and sends the JSON to the specified address. + */ +export async function requestJSON (method: string, addr: string, reqBody?: any): Promise { + try { + const response = await window.fetch(addr, { + method: method, + headers: new window.Headers({ 'content-type': 'application/json' }), + // credentials: "same-origin", + body: reqBody + }) + if (response.status !== 200) { throw response } + const obj = await response.json() + if (obj.bad) throw { ok: false, text: () => obj.msg, code: obj.code } + obj.ok = true + return obj + } catch (response: any) { + response.errMsg = await response.text() + return response + } +} + +/* + * postJSON sends a POST request with JSON-formatted data and returns the + * response. + */ +export async function postJSON (addr: string, data?: any) { + return requestJSON('POST', addr, JSON.stringify(data)) +} + +/* + * getJSON sends a GET request and returns the response. + */ +export async function getJSON (addr: string): Promise { + return requestJSON('GET', addr) +} diff --git a/client/webserver/newui/src/js/intl.ts b/client/webserver/newui/src/js/intl.ts new file mode 100644 index 0000000000..14185a0e68 --- /dev/null +++ b/client/webserver/newui/src/js/intl.ts @@ -0,0 +1,17 @@ +const defaultTranslations = { + 'Initialize Wallet': 'Initialize Wallet', + 'prompt_for_seed': 'Are you restoring Bison Wallet from a seed?', + 'Unlock': 'Unlock', + 'seed_display_warning': 'Your seed is shown below. Write it down and keep it safe. You will need it to restore your wallet if you lose your device.' +} + +let translations: Record = Object.assign({}, defaultTranslations) + +export const setTranslations = (ts: Record) => { + translations = Object.assign({}, defaultTranslations, ts) +} + +// translate +export default function t (slug: string): string { + return translations[slug] || slug +} diff --git a/client/webserver/newui/src/js/registry.ts b/client/webserver/newui/src/js/registry.ts new file mode 100644 index 0000000000..5cfcc6f848 --- /dev/null +++ b/client/webserver/newui/src/js/registry.ts @@ -0,0 +1,1369 @@ + +declare global { + interface Window { + log: (...args: any) => void + enableLogger: (loggerID: string, enable: boolean) => void + recordLogger: (loggerID: string, enable: boolean) => void + dumpLogger: (loggerID: string) => void + mmstatus: () => Promise + testFormatFourSigFigs: () => void + testFormatRateFullPrecision: () => void + user: () => User + cexBook: () => Promise + mmStatus: () => MarketMakingStatus + isWebview?: () => boolean + webkit: any | undefined + electron: any | undefined + openUrl: (url: string) => void + open: (url?: string | URL, target?: string, features?: string) => WindowProxy | null + sendOSNotification (title: string, body?: string): void + clearLocale (): void + } +} + +export enum ConnectionStatus { + Disconnected = 0, + Connected = 1, + InvalidCert = 2, +} + +export interface BondOptions { + bondAssetID: number + targetTier: number + maxBondedAmt: number +} + +export interface Reputation { + bondedTier: number + penalties: number + legacyTier: boolean + score: number +} + +export interface ExchangeAuth { + rep: Reputation + bondAssetID: number + pendingStrength: number + weakStrength: number + liveStrength: number + targetTier: number + effectiveTier: number + maxBondedAmt: number + penaltyComps: number + pendingBonds: PendingBondState[] + expiredBonds: any[] + compensation: number +} + +export interface Exchange { + host: string + acctID: string + auth: ExchangeAuth + markets: Record + assets: Record + connectionStatus: ConnectionStatus + viewOnly: boolean + bondAssets: Record + candleDurs: string[] + maxScore: number + penaltyThreshold: number + disabled: boolean +} + +export interface Candle { + startStamp: number + endStamp: number + matchVolume: number + quoteVolume: number + highRate: number + lowRate: number + startRate: number + endRate: number +} + +export interface CandlesPayload { + dur: string + ms: number + candles: Candle[] +} + +export interface Market { + name: string + baseid: number + basesymbol: string + quoteid: number + quotesymbol: string + lotsize: number + parcelsize: number + ratestep: number + epochlen: number + startepoch: number + buybuffer: number + orders: Order[] + spot: Spot | undefined + atomToConv: number + inflight: InFlightOrder[] + minimumRate: number +} + +export interface InFlightOrder extends Order { + tempID: number +} + +export interface Order { + host: string + baseID: number + baseSymbol: string + quoteID: number + quoteSymbol: string + market: string + type: number + id: string + stamp: number + submitTime: number + sig: string + status: number + epoch: number + qty: number + sell: boolean + filled: number + matches: Match[] + cancelling: boolean + canceled: boolean + feesPaid: FeeBreakdown + fundingCoins: Coin[] + accelerationCoins: Coin[] + lockedamt: number + rate: number // limit only + tif: number // limit only + targetOrderID: string // cancel only + readyToTick: boolean +} + +export interface Match { + matchID: string + status: number + active: boolean + revoked: boolean + rate: number + qty: number + side: number + feeRate: number + swap: Coin + counterSwap: Coin + redeem: Coin + counterRedeem: Coin + refund: Coin + stamp: number + isCancel: boolean +} + +export interface Spot { + stamp: number + baseID: number + quoteID: number + rate: number + bookVolume: number // Unused? + change24: number + vol24: number + low24: number + high24: number +} + +export interface Asset { + id: number + symbol: string + version: number + maxFeeRate: number + swapSize: number + swapSizeBase: number + redeemSize: number + swapConf: number + unitInfo: UnitInfo +} + +export interface BondAsset { + ver: number + id: number + confs: number + amount: number +} + +export interface PendingBondState { + symbol: string + assetID: number + coinID: string + confs: number +} + +export interface FeeBreakdown { + swap: number + redemption: number +} + +export interface SupportedAsset { + id: number + symbol: string + name: string + wallet: WalletState + info?: WalletInfo + token?: Token + unitInfo: UnitInfo +} + +export interface Token { + parentID: number + name: string + unitInfo: UnitInfo + contractAddress: string + definition: WalletDefinition + supportedAssetVersions: number[] +} + +export enum ApprovalStatus { + Approved = 0, + Pending = 1, + NotApproved = 2 +} + +export interface FeeState { + rate: number + send: number + swap: number + redeem: number + refund: number + stampMS: number +} + +export interface SyncStatus { + synced: boolean + targetHeight: number + startingBlocks: number + blocks: number + txs: number | undefined +} + +export interface WalletState { + symbol: string + assetID: number + version: number + type: string + class: string + traits: number + open: boolean + running: boolean + disabled: boolean + balance: WalletBalance + address: string + encrypted: boolean + peerCount: number + synced: boolean + syncProgress: number + syncStatus: SyncStatus + approved: Record + bridgeApproved?: Record + feeState?: FeeState + pendingTxs: Record +} + +export interface WalletInfo { + name: string + version: number + availablewallets: WalletDefinition[] + versions: number[] + emptyidx: number + unitinfo: UnitInfo +} + +export interface WalletBalance { + available: number + immature: number + locked: number + stamp: string // time.Time + orderlocked: number + contractlocked: number + bondlocked: number + bondReserves: number + reservesDeficit: number + other: Record +} + +export interface CustomBalance { + amt: number + locked: boolean +} + +export interface WalletDefinition { + seeded: boolean + type: string + tab: string + description: string + configpath: string + configopts: ConfigOption[] + multifundingopts: OrderOption[] + noauth: boolean + guidelink: string +} + +export interface ConfigOption { + key: string + displayname: string + description: string + default: any + max: any + min: any + noecho: boolean + isboolean: boolean + isdate: boolean + disablewhenactive: boolean + isBirthdayConfig: boolean + repeatable?: string + repeatN?: number + regAsset?: number + required?: boolean + dependsOn?: string +} + +export interface Coin { + id: string + stringID: string + assetID: number + symbol: string + confs: Confirmations +} + +export interface Confirmations { + required: number + count: number +} + +export interface UnitInfo { + atomicUnit: string + conventional: Denomination + denominations: Denomination[] + feeRateDenom: string +} + +export interface Denomination { + unit: string + conversionFactor: number +} + +export interface ExtensionConfiguredWallet { + hiddenFields: string[] + disableWalletType: boolean + disablePassword: boolean + disableStaking: boolean + disablePrivacy: boolean +} + +export interface ExtensionModeConfig { + name: string + restrictedWallets: Record +} + +export interface MeshMarket { + baseID: number + quoteID: number +} + +export interface Mesh { + markets: Record + assetVersions: Record +} + +export interface User { + exchanges: Record + inited: boolean + seedgentime: number + assets: Record + fiatRates: Record + tickerRates: Record + bots: BotReport[] + net: number + extensionModeConfig: ExtensionModeConfig + actions: ActionRequiredNote[] + mesh: Mesh | undefined +} + +export interface CoreNote { + type: string + topic: string + subject: string + details: string + severity: number + stamp: number + acked: boolean + id: string + data: any +} + +export interface BridgeNote extends CoreNote { + sourceAssetID: number + destAssetID: number + txID: string + completionTxIDs: string[] + amount: number + complete: boolean +} + +export interface BondNote extends CoreNote { + asset: number + confirmations: number + dex: string + coinID: string | null + tier: number | null + auth: ExchangeAuth | null +} + +export interface ReputationNote extends CoreNote { + host: string + rep: Reputation +} + +export interface BalanceNote extends CoreNote { + assetID: number + balance: WalletBalance +} + +export interface RateNote extends CoreNote { + fiatRates: Record +} + +export interface WalletConfigNote extends CoreNote { + wallet: WalletState +} + +export interface WalletSyncNote extends CoreNote { + assetID: number + syncStatus: SyncStatus + syncProgress: number +} + +export type WalletStateNote = WalletConfigNote + +export interface WalletCreationNote extends CoreNote { + assetID: number +} + +export interface BaseWalletNote { + route: string + assetID: number +} + +export interface TipChangeNote extends BaseWalletNote { + tip: number + data: any +} + +export interface CustomWalletNote extends BaseWalletNote { + payload: any +} + +export interface TransactionNote extends BaseWalletNote { + transaction: WalletTransaction + new: boolean +} + +export interface ActionRequiredNote extends BaseWalletNote { + uniqueID: string + actionID: string + payload: any +} + +export interface ActionResolvedNote extends BaseWalletNote { + uniqueID: string +} + +export interface TransactionActionNote { + tx: WalletTransaction + nonce: number + newFees: number +} + +export interface WalletNote extends CoreNote { + payload: BaseWalletNote +} + +export interface CoreActionRequiredNote extends CoreNote { + payload: ActionRequiredNote +} + +export interface RejectedTxData { + assetID: number + orderID: string + coinID: string + coinFmt: string + txType: string +} + +export interface SpotPriceNote extends CoreNote { + host: string + spots: Record +} + +export interface RunStatsNote extends CoreNote { + host: string + baseID: number + quoteID: number + stats?: RunStats +} + +export interface RunEventNote extends CoreNote { + host: string + baseID: number + quoteID: number + startTime: number + event: MarketMakingEvent +} + +export interface MakerProgram { + host: string + baseID: number + quoteID: number + lots: number + oracleWeighting: number + oracleBias: number + driftTolerance: number + gapFactor: number + gapStrategy: string +} + +export interface BotOrder { + host: string + marketID: string + orderID: string +} + +export interface BotReport { + programID: number + program: MakerProgram + running: boolean + orders: BotOrder +} + +export interface LotFees { + swap: number + redeem: number + refund: number +} + +export interface LotFeeRange { + max: LotFees + estimated: LotFees +} + +export interface AssetBookingFees extends LotFeeRange { + bookingFeesPerLot: number + bookingFeesPerCounterLot: number + bookingFees: number + swapReservesFactor: number // (1 + orderReservesFactor) + redeemReservesFactor: number + tokenFeesPerSwap: number +} + +export interface BookingFees { + base: AssetBookingFees + quote: AssetBookingFees +} + +export interface MarketReport { + price: number + oracles: OracleReport[] + baseFiatRate: number + quoteFiatRate: number + baseFees: LotFeeRange + quoteFees: LotFeeRange +} + +export interface MatchNote extends CoreNote { + orderID: string + match: Match + host: string + marketID: string +} + +export interface ConnEventNote extends CoreNote { + host: string + connectionStatus: ConnectionStatus +} + +export interface OrderNote extends CoreNote { + order: Order + tempID: number +} + +export interface RecentMatch { + rate: number + qty: number + stamp: number + sell: boolean +} + +export interface EpochNote extends CoreNote { + host: string + marketID: string + epoch: number +} + +export interface APIResponse { + requestSuccessful: boolean + ok: boolean + msg: string + err?: string +} + +export interface LogMessage { + time: string + msg: string +} + +export interface NoteElement extends HTMLElement { + note: CoreNote +} + +export interface BalanceResponse extends APIResponse { + balance: WalletBalance +} + +export interface LayoutMetrics { + bodyTop: number + bodyLeft: number + width: number + height: number + centerX: number + centerY: number +} + +export interface PageElement extends HTMLElement { + value?: string + src?: string + files?: FileList + checked?: boolean + href?: string + htmlFor?: string + name?: string + options?: HTMLOptionElement[] + selectedIndex?: number + disabled?: boolean +} + +export interface BooleanConfig { + reason: string +} + +export interface XYRangePoint { + label: string + x: number + y: number +} + +export interface XYRange { + start: XYRangePoint + end: XYRangePoint + xUnit: string + yUnit: string + roundX?: boolean + roundY?: boolean +} + +export interface OrderOption extends ConfigOption { + boolean?: BooleanConfig + xyRange?: XYRange + showByDefault?: boolean + quoteAssetOnly?: boolean +} + +export interface SwapEstimate { + lots: number + value: number + maxFees: number + realisticWorstCase: number + realisticBestCase: number + feeReservesPerLot: number +} + +export interface RedeemEstimate { + realisticBestCase: number + realisticWorstCase: number +} + +export interface PreSwap { + estimate: SwapEstimate + options: OrderOption[] +} + +export interface PreRedeem { + estimate: RedeemEstimate + userOpRequired: boolean + options: OrderOption[] +} + +export interface OrderEstimate { + swap: PreSwap + redeem: PreRedeem +} + +export interface MaxOrderEstimate { + swap: SwapEstimate + redeem: RedeemEstimate +} + +export interface MaxSell { + maxSell: MaxOrderEstimate +} + +export interface MaxBuy { + maxBuy: MaxOrderEstimate +} + +export interface TradeForm { + host: string + isLimit: boolean + sell: boolean + base: number + quote: number + qty: number + rate: number + tifnow: boolean + options: Record +} + +export interface BookUpdate { + action: string + host: string + marketID: string + matchesSummary: RecentMatch[] + payload: any +} + +export interface MiniOrder { + qty: number + qtyAtomic: number + rate: number + msgRate: number + epoch: number + sell: boolean + token: string +} + +export interface CoreOrderBook { + sells: MiniOrder[] + buys: MiniOrder[] + epoch: MiniOrder[] + recentMatches: RecentMatch[] +} + +export interface MarketOrderBook { + base: number + quote: number + book: CoreOrderBook +} + +export interface RemainderUpdate { + token: string + qty: number + qtyAtomic: number +} + +export interface OrderFilterMarket { + baseID: number + quoteID: number +} + +export interface OrderFilter { + n?: number + offset?: string + hosts?: string[] + assets?: number[] + market?: OrderFilterMarket + statuses?: number[] +} + +export interface OrderPlacement { + lots: number + gapFactor: number +} + +export interface AutoRebalanceConfig { + minBaseTransfer: number + minQuoteTransfer: number + internalOnly: boolean +} + +export interface BasicMarketMakingConfig { + gapStrategy: string + sellPlacements: OrderPlacement[] + buyPlacements: OrderPlacement[] + driftTolerance: number +} + +export interface ArbMarketMakingPlacement { + lots: number + multiplier: number +} + +export interface MultiHopCfg { + baseAssetMarket: [number, number] + quoteAssetMarket: [number, number] + marketOrders: boolean + limitOrdersBuffer: number +} + +export interface ArbMarketMakingConfig { + buyPlacements: ArbMarketMakingPlacement[] + sellPlacements: ArbMarketMakingPlacement[] + profit: number + driftTolerance: number + orderPersistence: number + multiHop?: MultiHopCfg +} + +export interface SimpleArbConfig { + profitTrigger: number + maxActiveArbs: number + numEpochsLeaveOpen: number +} + +export interface BotCEXCfg { + name: string + autoRebalance?: AutoRebalanceConfig +} + +export interface BotBalanceAllocation { + dex: Record + cex: Record +} + +export interface QuickBalanceConfig { + buysBuffer: number + sellsBuffer: number + buyFeeReserve: number + sellFeeReserve: number + bridgeFeeReserve: number + slippageBuffer: number +} + +export interface UIConfig { + quickBalance: QuickBalanceConfig + usingQuickBalance: boolean + baseMinTransfer: number + quoteMinTransfer: number + cexRebalance: boolean + internalTransfers: boolean +} + +export interface BotConfig { + host: string + baseID: number + quoteID: number + cexBaseID: number + cexQuoteID: number + baseBridgeName: string + quoteBridgeName: string + baseWalletOptions?: Record + quoteWalletOptions?: Record + cexName: string + uiConfig: UIConfig + alloc?: BotBalanceAllocation + autoRebalance?: AutoRebalanceConfig + basicMarketMakingConfig?: BasicMarketMakingConfig + arbMarketMakingConfig?: ArbMarketMakingConfig + simpleArbConfig?: SimpleArbConfig +} + +export interface CEXConfig { + name: string + apiKey: string + apiSecret: string +} + +export interface MarketWithHost { + host: string + baseID: number + quoteID: number +} + +export interface MMCEXStatus { + config: CEXConfig + connected: boolean + connectErr: string + markets: Record + balances: Record +} + +export interface BotBalance { + available: number + locked: number + pending: number + reserved: number +} + +export interface BotBalances { + dex: BotBalance + cex: BotBalance +} + +export interface BotInventory { + avail: number + locked: number // includes BotBalance.reserved + total: number // avail + locked +} + +export interface RunningBotInventory { + avail: number + locked: number + dex: BotInventory + cex: BotInventory +} + +export interface CEXNotification extends CoreNote { + cexName: string + note: any +} + +export interface CEXBalanceUpdate { + assetID: number + balance: ExchangeBalance +} + +export interface EpochReportNote extends CoreNote { + host: string + baseID: number + quoteID: number + report?: EpochReport +} + +export interface CEXProblemsNote extends CoreNote { + host: string + baseID: number + quoteID: number + problems?: CEXProblems +} + +export interface FeeEstimates extends LotFeeRange { + bookingFeesPerLot: number + bookingFees: number + tokenFeesPerSwap: number +} + +export interface FeeGapStats { + basisPrice: number + feeGap: number + remoteGap: number + roundTripFees: number +} + +export interface RunStats { + initialBalances: Record + dexBalances: Record + cexBalances: Record + profitLoss: ProfitLoss + startTime: number + pendingDeposits: number + pendingWithdrawals: number + completedMatches: number + tradedUSD: number + feeGap: FeeGapStats +} + +export interface StampedError { + stamp: number + error: string +} + +export interface BotProblems { + walletNotSynced: Record + noWalletPeers: Record + accountSuspended: boolean + userLimitTooLow: boolean + noPriceSource: boolean + oracleFiatMismatch: boolean + cexOrderbookUnsynced: boolean + causesSelfMatch: boolean + unknownError: string +} + +export interface TradePlacement { + rate: number + lots: number + standingLots: number + orderedLots: number + counterTradeRate: number + multiHopRates: [number, number] + requiredDex: Record + requiredCex: number + usedDex: Record + usedCex: number + error?: BotProblems +} + +export interface OrderReport { + placements: TradePlacement[] + fees: LotFeeRange + availableDexBals: Record + requiredDexBals: Record + remainingDexBals: Record + usedDexBals: Record + availableCexBal: BotBalance + requiredCexBal: number + remainingCexBal: number + usedCexBal: number + error?: BotProblems +} + +export interface EpochReport { + epochNum: number + preOrderProblems?: BotProblems + buysReport?: OrderReport + sellsReport?: OrderReport +} + +export interface CEXProblems { + depositErr: Record + withdrawErr: Record + tradeErr: StampedError +} + +export interface MMBotStatus { + config: BotConfig + running: boolean + stopping?: boolean + runStats?: RunStats + latestEpoch?: EpochReport + cexProblems?: CEXProblems +} + +export interface MarketMakingStatus { + cexes: Record + bots: MMBotStatus[] +} + +export interface DEXOrderEvent { + id: string + rate: number + qty: number + sell: boolean + transactions: WalletTransaction[] +} + +export interface CEXOrderEvent { + id: string + rate: number + qty: number + sell: boolean + baseFilled: number + quoteFilled: number + baseID?: number + quoteID?: number + market?: boolean +} + +export interface DepositEvent { + assetID: number + cexAssetID: number + transaction?: WalletTransaction + bridgeTx?: WalletTransaction + cexCredit: number +} + +export interface WithdrawalEvent { + id: string + assetID: number + cexAssetID: number + transaction: WalletTransaction + bridgeTx?: WalletTransaction + cexDebit: number +} + +export interface BalanceEffects { + settled: Record + pending: Record + locked: Record + reserved: Record +} + +export interface MarketMakingEvent { + id: number + timestamp: number + balanceEffects: BalanceEffects + pending: boolean + dexOrderEvent?: DEXOrderEvent + cexOrderEvent?: CEXOrderEvent + depositEvent?: DepositEvent + withdrawalEvent?: WithdrawalEvent +} + +interface MarketDay { + vol: number + quoteVol: number + priceChange: number + priceChangePct: number + avgPrice: number + lastPrice: number + openPrice: number + highPrice: number + lowPrice: number +} + +export interface CEXMarket { + baseID: number + quoteID: number + baseMinWithdraw: number + quoteMinWithdraw: number + day: MarketDay +} + +export interface OracleReport { + host: string + usdVol: number + bestBuy: number + bestSell: number +} + +export interface ExchangeBalance { + available: number + locked: number +} + +// changing the order of the elements in this enum will affect +// the sorting of the peers table in wallets.ts. +export enum PeerSource { + WalletDefault, + UserAdded, + Discovered, +} + +export interface BalanceState { + fiatRates: Record + balances: Record + invMods: Record +} + +export interface Amount { + atoms: number + conventional: number + fmt: string + usd: number + fmtUSD: string +} + +export interface ProfitLoss { + initial: Record + initialUSD: number + mods: Record + modsUSD: number + final: Record + finalUSD: number + diffs: Record + profit: number + profitRatio: number +} + +export interface StampedBotConfig { + timestamp: number + cfg: BotConfig +} + +export interface MarketMakingRunOverview { + endTime: number + cfgs: StampedBotConfig[] + initialBalances: Record + profitLoss: ProfitLoss + finalState: BalanceState +} + +export interface WalletPeer { + addr: string + source: PeerSource + connected: boolean +} + +export interface TicketTransaction { + hash: string + ticketPrice: number + fees: number + stamp: number + blockHeight: number +} + +export interface Ticket { + tx: TicketTransaction + status: number + spender: string +} + +export interface TBChoice { + id: string + description: string +} + +export interface TBAgenda { + id: string + description: string + currentChoice: string + choices: TBChoice[] +} + +export interface TKeyPolicyResult { + key: string + policy: string + ticket?: string +} + +export interface TBTreasurySpend { + hash: string + value: number + currentPolicy: string +} + +export interface Stances { + agendas: TBAgenda[] + tspends: TBTreasurySpend[] + treasuryKeys: TKeyPolicyResult[] +} + +export interface TicketStats { + totalRewards: number + ticketCount: number + votes: number + revokes: number + mempool: number + queued: number +} + +export interface TicketStakingStatus { + ticketPrice: number + votingSubsidy: number + vsp: string + isRPC: boolean + tickets: Ticket[] + stances: Stances + stats: TicketStats +} + +// VotingServiceProvider is information about a voting service provider. +export interface VotingServiceProvider { + url: string + network: number + launched: number + lastUpdated: number + apiVersions: number[] + feePercentage: number + closed: boolean + voting: number + voted: number + revoked: number + vspdVersion: string + blockHeight: number + netShare: number +} + +export interface BondTxInfo { + bondID: string + lockTime: number + accountID: string +} + +export interface BridgeCounterpartTx { + assetID: number + ids: string[] + complete: boolean + amountReceived: number + fees: number +} + +export interface BridgeFeesAndLimits { + fees: Record + minLimit: number + maxLimit: number + hasLimits: boolean +} + +export interface BridgeResult { + ok: boolean + txID?: string + msg?: string +} + +export interface BridgeApprovalStatusResult { + ok: boolean + status: number // 0=Approved, 1=Pending, 2=NotApproved + msg?: string +} + +export interface BridgeApprovalResult { + ok: boolean + txID?: string + msg?: string +} + +// Bridge approval status constants +export const BridgeApprovalApproved = 0 +export const BridgeApprovalPending = 1 +export const BridgeApprovalNotApproved = 2 + +export interface WalletTransaction { + type: number + id: string + amount: number + fees: number + timestamp: number + blockNumber: number + tokenID?: number + recipient?: string + bondInfo?: BondTxInfo + additionalData: Record + isUserOp: boolean + userOpTxID: string + bridgeCounterpartTx?: BridgeCounterpartTx + bridgeName?: string + confirmed: boolean + confirms?: { + current: number + target: number + } + rejected: boolean +} + +export interface TxHistoryRequest { + n: number + refID?: string + past: boolean + ignoreTypes?: number[] +} + +export interface TxHistoryResult { + txs: WalletTransaction[] + moreAvailable: boolean +} + +export const PrepaidBondID = 2147483647 + +export interface AppState { + user: User + lang: string + langs: string[] + inited: boolean + ok: boolean + onionUrl: string + mmStatus: MarketMakingStatus +} + +export interface PageData { + pageParts: string[] + pageRoot: string + data: any + query: URLSearchParams +} + +export interface TotalUSDBalance { + ok: boolean + total: number + numContribs: number +} + +export interface FormData { + form: string + data: any +} \ No newline at end of file diff --git a/client/webserver/newui/src/js/state.ts b/client/webserver/newui/src/js/state.ts new file mode 100644 index 0000000000..9af64a4a30 --- /dev/null +++ b/client/webserver/newui/src/js/state.ts @@ -0,0 +1,90 @@ +// State is a set of static methods for working with the user state. It has +// utilities for setting and retrieving cookies and storing user configuration +// to localStorage. +export default class State { + // Cookie keys. + static darkModeLK = 'darkMode' + static authCK = 'dexauth' + static pwKeyCK = 'sessionkey' + // Local storage keys (for data that we don't need at the server). + // static popupsLK = 'popups' + static loggersLK = 'loggers' + static recordersLK = 'recorders' + static lastMarketLK = 'lastMarket' + // static depthZoomLK = 'depthZoom' + // static lastMMMarketLK = 'mmMarket' + // static optionsExpansionLK = 'mmOptsExpand' + // static leftMarketDockLK = 'leftmarketdock' + // static selectedAssetLK = 'selectedasset' + // static pendingTxsExpandedLK = 'pendingTxsExpanded' + // static notificationsLK = 'notifications' // DEPRECATED before v1 + // static orderDisclaimerAckedLK = 'ordAck' + // static lastCandleDurationLK = 'lastCandleDuration' + // static localeSpecsKey = 'localeSpecsLK' + // static localeKey = 'localeLK' + + static setCookie (cname: string, cvalue: string) { + const d = new Date() + // Set cookie to expire in ten years. + d.setTime(d.getTime() + (86400 * 365 * 10 * 1000)) + const expires = 'expires=' + d.toUTCString() + document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/' + } + + /* + * getCookie returns the value at the specified cookie name, otherwise null. + */ + static getCookie (cname: string) { + for (const cstr of document.cookie.split(';')) { + const [k, v] = cstr.split('=') + if (k.trim() === cname) return v + } + return null + } + + /* + * removeCookie tells the browser to stop using cookie. It's not enough to simply + * erase cookie value because browser will still send it to the server (with empty + * value), and that's not what server expects. + */ + static removeCookie (cKey: string) { + document.cookie = `${cKey}=;expires=Thu, 01 Jan 1970 00:00:01 GMT;` + } + + /* + * isDark returns true if the dark-mode cookie is currently set to '1' = true. + */ + static isDark (): boolean { + return State.fetchLocal(State.darkModeLK) === '1' + } + + /* storeLocal puts the key-value pair into Window.localStorage. */ + static storeLocal (k: string, v: any) { + window.localStorage.setItem(k, JSON.stringify(v)) + } + + /* + * fetchLocal the value associated with the key in Window.localStorage, or + * null if the no value exists for the key. + */ + static fetchLocal (k: string) { + const v = window.localStorage.getItem(k) + if (v !== null) { + return JSON.parse(v) + } + return null + } + + /* removeLocal removes the key-value pair from Window.localStorage. */ + static removeLocal (k: string) { + window.localStorage.removeItem(k) + } + + static getLastMarket (): [string, string] | null { + return State.fetchLocal(State.lastMarketLK) + } + + static setLastMarket (market: [string, string]) { + State.storeLocal(State.lastMarketLK, market) + } +} diff --git a/client/webserver/newui/src/js/ws.ts b/client/webserver/newui/src/js/ws.ts new file mode 100644 index 0000000000..2599fc0d82 --- /dev/null +++ b/client/webserver/newui/src/js/ws.ts @@ -0,0 +1,151 @@ +// MessageSocket is a WebSocket manager that uses the Decred DEX Message format +// for communications. +// +// Message request format: +// { +// route: 'name', +// id: int, +// payload: anything or nothing +// } +// +// Message response payload will be a result object with either a valid 'result' +// field or an 'error' field +// +// Functions for external use: +// registerRoute (route, handler) -- register a function to handle events +// of the given type +// request (route, payload) -- create a JSON message in the above format and +// send it +// +// Based on messagesocket_service.js by Jonathan Chappelow @ dcrdata, which is +// based on ws_events_dispatcher.js by Ismael Celis +const typeRequest = 1 + +function forward (route: string, payload: any, handlers: Record void)[]>) { + if (!route && payload.error) { + const err = payload.error + console.error(`websocket error (code ${err.code}): ${err.message}`) + return + } + if (typeof handlers[route] === 'undefined') { + // console.log(`unhandled message for ${route}: ${payload}`) + return + } + // call each handler + for (let i = 0; i < handlers[route].length; i++) { + handlers[route][i](payload) + } +} + +let id = 0 + +type NoteReceiver = (payload: any) => void + +class MessageSocket { + uri: string + connection: WebSocket | null + handlers: Record + queue: [string, any][] + maxQlength: number + reloader: () => void // appears unused + + constructor () { + this.handlers = {} + this.queue = [] + this.maxQlength = 5 + } + + registerRoute (route: string, handler: NoteReceiver) { + this.handlers[route] = this.handlers[route] || [] + this.handlers[route].push(handler) + } + + deregisterRoute (route: string) { + this.handlers[route] = [] + } + + // request sends a request-type message to the server + request (route: string, payload: any) { + if (!this.connection || this.connection.readyState !== window.WebSocket.OPEN) { + while (this.queue.length > this.maxQlength - 1) this.queue.shift() + this.queue.push([route, payload]) + return + } + id++ + const message = JSON.stringify({ + route: route, + type: typeRequest, + id: id, + payload: payload + }) + + window.log('ws', 'sending', message) + this.connection.send(message) + } + + close (reason: string) { + window.log('ws', 'close, reason:', reason, this.handlers) + this.handlers = {} + if (this.connection) this.connection.close() + } + + connect (uri: string, reloader: () => void) { + this.uri = uri + this.reloader = reloader + let retrys = 0 + const go = () => { + window.log('ws', `connecting to ${uri}`) + let conn: WebSocket | null = this.connection = new window.WebSocket(uri) + if (!conn) return + const timeout = setTimeout(() => { + // readyState is still WebSocket.CONNECTING. Cancel and trigger onclose. + if (conn) conn.close() + }, 2500) + + // unmarshal message, and forward the message to registered handlers + conn.onmessage = (evt: MessageEvent) => { + const message = JSON.parse(evt.data) + forward(message.route, message.payload, this.handlers) + } + + // Stub out standard functions + conn.onclose = (evt: CloseEvent) => { + window.log('ws', 'onclose') + clearTimeout(timeout) + conn = this.connection = null + forward('close', null, this.handlers) + retrys++ + // 1.2, 1.6, 2.0, 2.4, 3.1, 3.8, 4.8, 6.0, 7.5, 9.3, ... + const delay = Math.min(Math.pow(1.25, retrys), 10) + console.error(`websocket disconnected (${evt.code}), trying again in ${delay.toFixed(1)} seconds`) + setTimeout(() => { + go() + }, delay * 1000) + } + + conn.onopen = () => { + window.log('ws', 'onopen') + clearTimeout(timeout) + if (retrys > 0) { + retrys = 0 + reloader() + } + forward('open', null, this.handlers) + const queue = this.queue + this.queue = [] + for (const [route, message] of queue) { + this.request(route, message) + } + } + + conn.onerror = (evt: Event) => { + window.log('ws', 'onerror:', evt) + forward('error', evt, this.handlers) + } + } + go() + } +} + +const ws = new MessageSocket() +export default ws diff --git a/client/webserver/newui/src/scss/application.scss b/client/webserver/newui/src/scss/application.scss new file mode 100644 index 0000000000..c1026562fd --- /dev/null +++ b/client/webserver/newui/src/scss/application.scss @@ -0,0 +1,11 @@ +// variable customizations +@use "vars.scss"; + +// Utilities, reusable components +@use "typography.scss"; +@use "utilities.scss"; +@use "icons.scss"; +// @use "components.scss"; + +// UI views +@use "main.scss"; \ No newline at end of file diff --git a/client/webserver/newui/src/scss/icons.scss b/client/webserver/newui/src/scss/icons.scss new file mode 100644 index 0000000000..55cfdfb531 --- /dev/null +++ b/client/webserver/newui/src/scss/icons.scss @@ -0,0 +1,128 @@ +@font-face { + font-family: "icons"; + src: url("/font/icons.woff2") format("woff2"); + font-weight: normal; + font-style: normal; + font-display: block; +} + +[class^="ico-"], +[class*=" ico-"] { + /* Use !important to prevent extensions from overriding this font. */ + font-family: "icons" !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.micro-icon { + height: 15px; + width: 15px; +} + +.mini-icon { + height: 20px; + width: 20px; +} + +.small-icon { + height: 25px; + width: 25px; +} + +.medium-icon { + height: 30px; + width: 30px; +} + +.large-icon { + height: 40px; + width: 40px; +} + +.enourmous-icon { + height: 50px; + width: 50px; +} + +.ico-add:before { + content: "\f460"; +} + +.ico-star-filled:before { + content: "\f8db"; +} + +.ico-star:before { + content: "\f353"; +} + +.ico-swap:before { + content: "\f146"; +} + +.ico-portfolio:before { + content: "\f2dc"; +} + +.ico-key:before { + content: "\f12b"; +} + +.ico-arrowup:before { + content: "\f157"; +} + +.ico-knobs:before { + content: "\f170"; +} + +.ico-arrowleft:before { + content: "\f264"; +} + +.ico-arrowright:before { + content: "\f2ae"; +} + +.ico-eyeclosed:before { + content: "\f2d2"; +} + +.ico-arrowdown:before { + content: "\f603"; +} + +.ico-gear:before { + content: "\f67c"; +} + +.ico-qrcode:before { + content: "\f70b"; +} + +.ico-barchart:before { + content: "\f725"; +} + +.ico-eyeopen:before { + content: "\f7d9"; +} + +.ico-lock-closed:before { + content: "\f120"; +} + +.ico-send:before { + content: "\f2f8"; +} + +.ico-bell:before { + content: "\f417"; +} \ No newline at end of file diff --git a/client/webserver/newui/src/scss/main.scss b/client/webserver/newui/src/scss/main.scss new file mode 100644 index 0000000000..e0bdb2a117 --- /dev/null +++ b/client/webserver/newui/src/scss/main.scss @@ -0,0 +1,273 @@ +@use "mixins.scss" as *; + +body, +#root { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + margin: 0; + background-color: var(--body-bg); + color: var(--text-color); + font-family: var(--sans-serif); +} + +form { + @include flex-stretch-column; + + border-width: 1px; + border-radius: var(--border-radius); + border-style: solid; + box-sizing: content-box; + + &.form-width-250 { + width: 250px; + } + + &.form-width-300 { + width: 300px; + } +} + +form.modal { + border-color: var(--border-color); + border-radius: var(--border-radius); + box-sizing: content-box; + margin: auto; + position: relative; + background-color: var(--body-bg); +} + +form>header { + @include flex-center; + + padding: 1rem; + line-height: 1; + font-size: 1.3rem; + font-weight: var(--demi-bold); +} + +input[type=text], +input[type=date], +input[type=password], +input[type=number], +input[type=url], +textarea { + display: block; + padding: 0.375rem 0.75rem; + width: 100%; + // border: 1px solid var(--form-input-border); + border: none; + border-radius: 5px; + background-color: var(--form-input-bg); + color: var(--text-color); + font-size: 18px; + + &:focus { + border-style: solid; + border-width: 1px; + border-color: var(--form-input-border-focus); + outline: none; + } +} + +// hr { +// width: calc(100% - 0.5rem); +// border-width: 2px 0 0 0; +// border-color: var(--border-color); +// } + +button { + background-color: transparent; + border: 1px solid var(--btn-border-color); + border-radius: 5px; + outline: none; + padding: 0.375rem 0.75rem; + user-select: none; + font-size: 1rem; + color: var(--text-color); + white-space: nowrap; + + &:focus { + outline: none; + } + + &:hover, + &.selected { + text-decoration: none; + border-color: var(--btn-hover-border-color); + background-color: var(--btn-select-or-hover-bg) !important; + cursor: pointer; + } + + &[disabled] { + cursor: not-allowed; + opacity: .5; + } + + &.small { + padding: 0.25rem 0.5rem; + font-size: .9rem; + } + + &.micro { + padding: 0.1rem 0.25rem; + font-size: .8rem; + } + + &.large { + padding: 0.5rem 1rem; + font-size: 1.25rem; + } + + &.noborder { + border: none; + } + + &.subtle { + background-color: #7772; + border: none; + } + + &.feature { + background-color: var(--btn-feature-bg); + border-color: var(--btn-feature-border-color); + + &:hover { + background-color: var(--btn-feature-hover-bg); + border-color: var(--btn-feature-hover-border-color); + } + } + + &.danger { + border-color: var(--text-danger); + color: var(--text-danger); + + &:hover { + background-color: var(--text-danger); + color: var(--btn-danger-hover-color); + } + } + + &.warning { + border-color: var(--text-warning); + color: var(--text-warning); + + &:hover { + background-color: var(--text-warning); + color: var(--btn-danger-hover-color); + } + } + + // &.go { + // background-color: var(--btn-go-bg); + // color: var(--btn-go-color); + + // &:hover { + // background-color: var(--btn-go-hover-bg); + // } + // } +} + +.d-none { + display: none !important; +} + +.fill-abs { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +.position-relative { + position: relative; +} + +.forms { + @include fill-abs; + + display: flex; + justify-content: center; + align-items: center; + background-color: var(--modal-wrapper-bg); +} + +.flex-stretch-column { + @include flex-stretch-column; +} + +.flex-center { + @include flex-center; +} + +.flex-grow-1 { + flex-grow: 1; +} + +.errcolor { + color: rgb(202, 90, 90); +} + +.hoverbg:hover, +.hoverbg.active, +.hoverbg.selected { + background-color: var(--btn-select-or-hover-bg); +} + +.pointer { + cursor: pointer !important; +} + +.br5 { + border-radius: 5px; +} + +img.logo-full { + content: url("/img/bison-full_97x50.png"); + + &.small { + height: 25px; + width: 48.5px; + } + + &.medium { + height: 40px; + width: 77.6px; + } +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +.loading-bg { + background-color: #30343d77; + z-index: 201; +} + +.spinner { + animation: spin 2s infinite linear; + + &.fast { + animation: spin 1s infinite linear; + } +} + +.init-bg { + background-color: #464e5c; +} + +.modals { + z-index: 101; + background-color: #0007; + backdrop-filter: blur(5px); +} \ No newline at end of file diff --git a/client/webserver/newui/src/scss/mixins.scss b/client/webserver/newui/src/scss/mixins.scss new file mode 100644 index 0000000000..6644ff56d4 --- /dev/null +++ b/client/webserver/newui/src/scss/mixins.scss @@ -0,0 +1,19 @@ +@mixin fill-abs { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; +} + +@mixin flex-stretch-column { + display: flex; + flex-direction: column; + align-items: stretch; +} + +@mixin flex-center { + display: flex; + justify-content: center; + align-items: center; +} \ No newline at end of file diff --git a/client/webserver/newui/src/scss/typography.scss b/client/webserver/newui/src/scss/typography.scss new file mode 100644 index 0000000000..b396faef1f --- /dev/null +++ b/client/webserver/newui/src/scss/typography.scss @@ -0,0 +1,97 @@ +@font-face { + font-family: 'inter'; + src: + url('/font/Inter-variable.woff2') format('woff2-variations'), + url('/font/Inter-variable.woff2') format('woff2'); + font-weight: 400 600; + font-style: normal; +} + +@font-face { + font-family: "mono"; + src: + url("/font/inconsolata-v15-latin-regular.woff2") format("woff2-variations"), + url("/font/inconsolata-v15-latin-regular.woff2") format('woff2'); + font-weight: normal; + font-style: normal; +} + +.demi { + font-weight: var(--demi-bold); +} + +.mono { + font-family: var(--mono); +} + +.fs8 { + font-size: 8px; +} + +.fs10 { + font-size: 10px; +} + +.fs11 { + font-size: 11px; +} + +.fs12 { + font-size: 12px; +} + +.fs13 { + font-size: 13px; +} + +.fs14 { + font-size: 14px; +} + +.fs15 { + font-size: 15px; +} + +.fs16 { + font-size: 16px; +} + +.fs17 { + font-size: 17px; +} + +.fs18 { + font-size: 18px; +} + +.fs20 { + font-size: 20px; +} + +.fs22 { + font-size: 22px; +} + +.fs24 { + font-size: 24px; +} + +.fs26 { + font-size: 24px; +} + +.fs28 { + font-size: 28px; +} + +.fs32 { + font-size: 32px; +} + +.fs35 { + font-size: 35px; +} + +.fs50 { + font-size: 50px; +} \ No newline at end of file diff --git a/client/webserver/newui/src/scss/utilities.scss b/client/webserver/newui/src/scss/utilities.scss new file mode 100644 index 0000000000..d451ef3659 --- /dev/null +++ b/client/webserver/newui/src/scss/utilities.scss @@ -0,0 +1,256 @@ +@use "sass:map"; +@use "sass:meta"; +@use "sass:list"; + +// Minimal Bootstrap Utilities API Replication +// -------------------------------------------------------------------------- + +// 1. Variables & Dependencies +// -------------------------------------------------------------------------- +$spacer: 1rem !default; +$spacers: ( + 0: 0, + 1: $spacer * .25, + 2: $spacer * .5, + 3: $spacer, + 4: $spacer * 1.5, + 5: $spacer * 3, + ) !default; + +$grid-breakpoints: ( + xs: 0, + sm: 576px, + md: 768px, + lg: 992px, + xl: 1200px, + xxl: 1400px) !default; + + + +// 2. Functions & Mixins +// -------------------------------------------------------------------------- +@function breakpoint-min($name, $breakpoints: $grid-breakpoints) { + $min: map.get($breakpoints, $name + ); +@if $min !=0 { + @return $min; +} +@else { + @return null; +} +} + +@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) { + @if breakpoint-min($name, $breakpoints)==null { + @return ""; + } + @else { + @return "-#{$name}"; + } +} + +@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) { + $min: breakpoint-min($name, $breakpoints); + @if $min { + @media (min-width: $min) { + @content; + } + } + @else { + @content; + } +} + +@mixin generate-utility($utility, $infix) { + $values: map.get($utility, values); + + // If the values are a list or string, convert it into a map + @if meta.type-of($values)=="string" or meta.type-of(list.nth($values, 1)) !="list" { + $values: list.zip($values, $values); + } + + @each $key, $value in $values { + $properties: map.get($utility, property); + + // Multiple properties are possible + @if meta.type-of($properties)=="string" { + $properties: list.append((), $properties); + } + + // Use custom class if present + $property-class: null; + @if map.has-key($utility, class) { + $property-class: map.get($utility, class); + } + @else { + $property-class: list.nth($properties, 1); + } + + @if $property-class ==null { + $property-class: ""; + } + + // Don't prefix if value key is null + $property-class-modifier: ""; + @if $key { + $infix-part: "-"; + @if $property-class =="" and $infix =="" { + $infix-part: ""; + } + $property-class-modifier: $infix-part + $key; + } + + @if $value !=null { + .#{$property-class + $infix + $property-class-modifier} { + @each $property in $properties { + #{$property}: $value; + } + } + } + } +} + +// 3. Utilities Map Configuration +// -------------------------------------------------------------------------- +$utilities: ( + "display": (responsive: true, + print: true, + property: display, + class: d, + values: inline inline-block block grid inline-grid table table-row table-cell flex inline-flex none), + "flex": (responsive: true, + property: flex, + values: (fill: 1 1 auto)), + "flex-direction": ( // probably don't need all of these. + responsive: true, + property: flex-direction, + class: flex, + values: row column row-reverse column-reverse), + "align-items": (property: align-items, + values: (start: flex-start, + end: flex-end, + center: center, + baseline: baseline, + stretch: stretch, + )), + "justify-content": (property: justify-content, + values: (start: flex-start, + end: flex-end, + center: center, + between: space-between, + around: space-around, + evenly: space-evenly, + )), + "padding": (property: padding, + class: p, + values: $spacers ), + "padding-x": (property: padding-right padding-left, + class: px, + values: $spacers ), + "padding-y": (property: padding-top padding-bottom, + class: py, + values: $spacers ), + "padding-top": (property: padding-top, + class: pt, + values: $spacers ), + "padding-end": (property: padding-right, + class: pe, + values: $spacers ), + "padding-bottom": (property: padding-bottom, + class: pb, + values: $spacers ), + "padding-start": (property: padding-left, + class: ps, + values: $spacers ), + "margin": (property: margin, + class: m, + values: map.merge($spacers, (auto: auto))), + "margin-x": (property: margin-right margin-left, + class: mx, + values: map.merge($spacers, (auto: auto))), + "margin-y": (property: margin-top margin-bottom, + class: my, + values: map.merge($spacers, (auto: auto))), + "margin-top": (property: margin-top, + class: mt, + values: map.merge($spacers, (auto: auto))), + "margin-end": (property: margin-right, + class: me, + values: map.merge($spacers, (auto: auto))), + "margin-bottom": (property: margin-bottom, + class: mb, + values: map.merge($spacers, (auto: auto))), + "margin-start": (property: margin-left, + class: ms, + values: map.merge($spacers, (auto: auto))), + "border": (property: border, + values: (null: 1px solid var(--border-color), + 0: 0, + )), + "border-top": (property: border-top, + values: (null: 1px solid var(--border-color), + 0: 0, + )), + "border-right": (property: border-right, + class: border-right, + values: (null: 1px solid var(--border-color), + 0: 0, + )), + "border-bottom": (property: border-bottom, + values: (null: 1px solid var(--border-color), + 0: 0, + )), + "border-left": (property: border-left, + class: border-left, + values: (null: 1px solid var(--border-color), + 0: 0, + )), + "border-style": (property: border-style, + values: (dashed: dashed)), + "width": (property: width, + class: w, + values: (25: 25%, + 50: 50%, + 75: 75%, + 100: 100%, + auto: auto)), + "height": (property: height, + class: h, + values: (100: 100%)), + "text-align": (property: text-align, + class: text, + values: (left: left, + right: right, + center: center, + justify: justify, + )), +); + +// 4. Generation Loop +// -------------------------------------------------------------------------- + +// Loop over all breakpoints +@each $breakpoint in map.keys($grid-breakpoints) { + @include media-breakpoint-up($breakpoint) { + $infix: breakpoint-infix($breakpoint, $grid-breakpoints); + + @each $key, $utility in $utilities { + // The utility can be disabled with `false`, thus check if the utility is a map first + // Only proceed if responsive media queries are enabled or if it's the base media query + @if meta.type-of($utility)=="map" and (map.get($utility, responsive) or $infix =="") { + @include generate-utility($utility, $infix); + } + } + } +} + +// Print utilities +@media print { + @each $key, $utility in $utilities { + // The utility can be disabled with `false`, thus check if the utility is a map first + // Then check if the utility needs print styles + @if meta.type-of($utility)=="map" and map.get($utility, print)==true { + @include generate-utility($utility, "-print"); + } + } +} \ No newline at end of file diff --git a/client/webserver/newui/src/scss/vars.scss b/client/webserver/newui/src/scss/vars.scss new file mode 100644 index 0000000000..4ea3e30eaa --- /dev/null +++ b/client/webserver/newui/src/scss/vars.scss @@ -0,0 +1,33 @@ +body { + --body-bg: #30343d; + --modal-wrapper-bg: #464e5c; + --text-color: #dfe2e1; + --text-grey: #999; + --border-color: #383f4b; + --border-radius: 4px; + --form-input-bg: #3c424e; + --form-input-border-focus: #4271ce; + // --form-input-border: #555; + --sans-serif: "inter", sans-serif; + --mono: "mono", monospace; + --demi-bold: 600; + --text-danger: #ec6a6a; + --text-warning: #f82e; + // buttons + --btn-border-color: #7777; + --btn-hover-border-color: #777; + --btn-danger-hover-color: white; + --btn-feature-bg: #1d50b5; + --btn-feature-hover-bg: #176699; + --btn-feature-border-color: #1e618d; + --btn-feature-hover-border-color: #85a5ba; + --btn-select-or-hover-bg: #77a4; +} + +.form-input-bg { + background-color: var(--form-input-bg); +} + +.grey { + color: var(--text-grey); +} \ No newline at end of file diff --git a/client/webserver/newui/tsconfig.json b/client/webserver/newui/tsconfig.json new file mode 100644 index 0000000000..526a30c148 --- /dev/null +++ b/client/webserver/newui/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "outDir": "./dist/", + "sourceMap": true, + "noImplicitAny": true, + "module": "es6", + "target": "es5", + "jsx": "react-jsx", + "allowSyntheticDefaultImports": true, + "moduleResolution": "node", + "esModuleInterop": true + } +} \ No newline at end of file diff --git a/client/webserver/newui/webpack.config.js b/client/webserver/newui/webpack.config.js new file mode 100644 index 0000000000..cfb56b980b --- /dev/null +++ b/client/webserver/newui/webpack.config.js @@ -0,0 +1,58 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); + +module.exports = { + entry: './src/index.tsx', + devtool: 'inline-source-map', + module: { + rules: [ + { + test: /\.tsx?$/, + use: 'ts-loader', + exclude: /node_modules/, + }, + { + test: /\.s[ac]ss$/i, + use: [ + // Creates `style` nodes from JS strings + "style-loader", + // Translates CSS into CommonJS + { + loader: "css-loader", + options: { + url: false + } + }, + // Compiles Sass to CSS + { + loader: "sass-loader", + options: { + api: "modern", + implementation: require("sass"), + }, + }, + ], + }, + { + test: /\.(woff2?|png|svg|jpe?g|gif)$/i, + type: 'asset/resource', + generator: { + emit: false + } + }, + ], + }, + resolve: { + extensions: ['.tsx', '.ts', '.js'], + }, + output: { + filename: 'bundle.js', + path: path.resolve(__dirname, 'dist'), + publicPath: '/js/', + }, + plugins: [ + new HtmlWebpackPlugin({ + template: 'src/index.html', + }), + ], +}; diff --git a/client/webserver/oldui.go b/client/webserver/oldui.go new file mode 100644 index 0000000000..1ba194a7d2 --- /dev/null +++ b/client/webserver/oldui.go @@ -0,0 +1,27 @@ +//go:build !newui + +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. + +package webserver + +import ( + "embed" + "io/fs" +) + +const ( + newUI = false + // site is the common prefix for the site resources with respect to this + // webserver package. + site = "site" +) + +var ( + //go:embed site/dist site/src/img site/src/font + staticSiteRes embed.FS + + //go:embed site/src/html/*.tmpl + htmlTmplRes embed.FS + htmlTmplSub, _ = fs.Sub(htmlTmplRes, "site/src/html") // unrooted slash separated path as per io/fs.ValidPath +) diff --git a/client/webserver/types.go b/client/webserver/types.go index 76e6f2d032..e0256bc10d 100644 --- a/client/webserver/types.go +++ b/client/webserver/types.go @@ -13,7 +13,10 @@ import ( // standardResponse is a basic API response when no data needs to be returned. type standardResponse struct { + // OK is worthless, because 'ok' is a getter on the fetch response in + // Javascript, so unless we return a 200, OK will be overwritten by True. OK bool `json:"ok"` + Bad bool `json:"bad,omitempty"` Msg string `json:"msg,omitempty"` Code *int `json:"code,omitempty"` } @@ -63,12 +66,6 @@ type postBondForm struct { FeeBuffer *uint64 `json:"feeBuffer,omitempty"` } -type registrationTxFeeForm struct { - Addr string `json:"addr"` - Cert string `json:"cert"` - AssetID *uint32 `json:"asset,omitempty"` -} - type sendTxFeeForm struct { Addr string `json:"addr"` Value uint64 `json:"value"` diff --git a/client/webserver/webserver.go b/client/webserver/webserver.go index 7a66c3204c..3d190c28de 100644 --- a/client/webserver/webserver.go +++ b/client/webserver/webserver.go @@ -10,13 +10,11 @@ import ( "crypto/sha256" "crypto/subtle" "crypto/tls" - "embed" "encoding/hex" "encoding/json" "errors" "fmt" "io" - "io/fs" "mime" "net" "net/http" @@ -73,9 +71,6 @@ const ( // The basis for content-security-policy. connect-src must be the final // directive so that it can be reliably supplemented on startup. baseCSP = "default-src 'none'; script-src 'self'; img-src 'self' data:; style-src 'self'; font-src 'self'; connect-src 'self'" - // site is the common prefix for the site resources with respect to this - // webserver package. - site = "site" // companionTokenTTL is the time-to-live for an unclaimed companion // token. If the companion app does not scan the QR code within this // window the token is automatically revoked. @@ -92,13 +87,6 @@ var ( log dex.Logger unbip = dex.BipIDSymbol - //go:embed site/src/html/*.tmpl - htmlTmplRes embed.FS - htmlTmplSub, _ = fs.Sub(htmlTmplRes, "site/src/html") // unrooted slash separated path as per io/fs.ValidPath - - //go:embed site/dist site/src/img site/src/font - staticSiteRes embed.FS - latestVersionRegex = regexp.MustCompile(`\d+(\.\d+)+`) ) @@ -159,7 +147,7 @@ type clientCore interface { UpdateCert(host string, cert []byte) error UpdateDEXHost(oldHost, newHost string, appPW []byte, certI any) (*core.Exchange, error) WalletRestorationInfo(pw []byte, assetID uint32) ([]*asset.WalletRestoration, error) - ToggleRateSourceStatus(src string, disable bool) error + ToggleRateSourceStatus(src string, enable bool) error FiatRateSources() map[string]bool EstimateSendTxFee(address string, assetID uint32, value uint64, subtract, maxWithdraw bool) (fee uint64, isValidAddress bool, err error) ValidateAddress(address string, assetID uint32) (bool, error) @@ -200,6 +188,7 @@ type clientCore interface { Proposal(assetID uint32, token string) (*pi.Proposal, error) ProposalsInProgress() ([]*pi.MiniProposal, error) CastVote(assetID uint32, pw []byte, token, bit string) error + ValidateSeed(seed string) (bool, error) } type MMCore interface { @@ -348,12 +337,15 @@ func New(cfg *Config) (*WebServer, error) { execPath = filepath.Dir(execPath) // e.g. /opt/decred/dex absDir, _ := filepath.Abs(site) - for _, dir := range []string{ + + paths := []string{ cfg.CustomSiteDir, filepath.Join(execPath, site), + filepath.Clean(filepath.Join(execPath, "../../webserver/"+site)), absDir, - filepath.Clean(filepath.Join(execPath, "../../webserver/site")), - } { + } + + for _, dir := range paths { if dir == "" { continue } @@ -370,7 +362,6 @@ func New(cfg *Config) (*WebServer, error) { "or run bisonw from within the client/cmd/bisonw source workspace folder, or specify the"+ "'sitedir' configuration directive to bisonw.", execPath) } - log.Infof("Located \"site\" folder at %v", siteDir) } else { // Developer should remember to rebuild the Go binary if they modify any @@ -462,10 +453,6 @@ func New(cfg *Config) (*WebServer, error) { s.companionTokenClaimed = true } - if err := s.buildTemplates(lang); err != nil { - return nil, fmt.Errorf("error loading localized html templates: %v", err) - } - // Middleware mux.Use(middleware.RequestLogger(&middleware.DefaultLogFormatter{ Logger: &chiLogger{ // logs with Trace() @@ -502,63 +489,80 @@ func New(cfg *Config) (*WebServer, error) { // The WebSocket handler is mounted on /ws in Connect. // Webpages - mux.Group(func(web chi.Router) { - web.Use(s.tokenAuthMiddleware) - // Inject user info for handlers that use extractUserInfo, which - // includes most of the page handlers that use commonArgs to - // inject the User object for page template execution. - web.Use(s.authMiddleware) - web.Get(settingsRoute, s.handleSettings) - - web.Get("/generateqrcode", s.handleGenerateQRCode) - - web.Group(func(notInit chi.Router) { - notInit.Use(s.requireNotInit) - notInit.Get(initRoute, s.handleInit) - }) + if !newUI { + if err := s.buildTemplates(lang); err != nil { + return nil, fmt.Errorf("error loading localized html templates: %v", err) + } + mux.Group(func(web chi.Router) { + web.Use(s.tokenAuthMiddleware) + // Inject user info for handlers that use extractUserInfo, which + // includes most of the page handlers that use commonArgs to + // inject the User object for page template execution. + web.Use(s.authMiddleware) + web.Get(settingsRoute, s.handleSettings) + + web.Get("/generateqrcode", s.handleGenerateQRCode) + web.Get("/generatecompanionappqrcode", s.handleGenerateCompanionAppQRCode) + + web.Group(func(notInit chi.Router) { + notInit.Use(s.requireNotInit) + notInit.Get(initRoute, s.handleInit) + }) - // The rest of the web handlers require initialization. - web.Group(func(webInit chi.Router) { - webInit.Use(s.requireInit) + // The rest of the web handlers require initialization. + web.Group(func(webInit chi.Router) { + webInit.Use(s.requireInit) - webInit.Route(registerRoute, func(rr chi.Router) { - rr.Get("/", s.handleRegister) - rr.With(dexHostCtx).Get("/{host}", s.handleRegister) - }) + webInit.Route(registerRoute, func(rr chi.Router) { + rr.Get("/", s.handleRegister) + rr.With(dexHostCtx).Get("/{host}", s.handleRegister) + }) - webInit.Group(func(webNoAuth chi.Router) { - // The login handler requires init but not auth since - // it performs the auth. - webNoAuth.Get(loginRoute, s.handleLogin) - - // The rest of these handlers require both init and auth. - webNoAuth.Group(func(webAuth chi.Router) { - webAuth.Use(s.requireLogin) - webAuth.Get(homeRoute, s.handleHome) - webAuth.Get(walletsRoute, s.handleWallets) - webAuth.Get(walletLogRoute, s.handleWalletLogFile) - webAuth.With(proposalTokenCtx).Get("/proposal/{token}", s.handleProposal) - webAuth.Get(proposalsRoute, s.handleProposals) - webAuth.Get("/generatecompanionappqrcode", s.handleGenerateCompanionAppQRCode) + webInit.Group(func(webNoAuth chi.Router) { + // The login handler requires init but not auth since + // it performs the auth. + webNoAuth.Get(loginRoute, s.handleLogin) + + // The rest of these handlers require both init and auth. + webNoAuth.Group(func(webAuth chi.Router) { + webAuth.Use(s.requireLogin) + webAuth.Get(homeRoute, s.handleHome) + webAuth.Get(walletsRoute, s.handleWallets) + webAuth.Get(walletLogRoute, s.handleWalletLogFile) + webAuth.With(proposalTokenCtx).Get("/proposal/{token}", s.handleProposal) + webAuth.Get(proposalsRoute, s.handleProposals) + webAuth.Get("/generatecompanionappqrcode", s.handleGenerateCompanionAppQRCode) + }) }) - }) - // Handlers requiring a DEX connection. - webInit.Group(func(webDC chi.Router) { - webDC.Use(s.requireDEXConnection, s.requireLogin) - webDC.With(orderIDCtx).Get("/order/{oid}", s.handleOrder) - webDC.Get(ordersRoute, s.handleOrders) - webDC.Get(exportOrderRoute, s.handleExportOrders) - webDC.Get(marketsRoute, s.handleMarkets) - webDC.Get(mmSettingsRoute, s.handleMMSettings) - webDC.Get(mmArchivesRoute, s.handleMMArchives) - webDC.Get(mmLogsRoute, s.handleMMLogs) - webDC.Get(marketMakerRoute, s.handleMarketMaking) - webDC.With(dexHostCtx).Get("/dexsettings/{host}", s.handleDexSettings) - }) + // Handlers requiring a DEX connection. + webInit.Group(func(webDC chi.Router) { + webDC.Use(s.requireDEXConnection, s.requireLogin) + webDC.With(orderIDCtx).Get("/order/{oid}", s.handleOrder) + webDC.Get(ordersRoute, s.handleOrders) + webDC.Get(exportOrderRoute, s.handleExportOrders) + webDC.Get(marketsRoute, s.handleMarkets) + webDC.Get(mmSettingsRoute, s.handleMMSettings) + webDC.Get(mmArchivesRoute, s.handleMMArchives) + webDC.Get(mmLogsRoute, s.handleMMLogs) + webDC.Get(marketMakerRoute, s.handleMarketMaking) + webDC.With(dexHostCtx).Get("/dexsettings/{host}", s.handleDexSettings) + }) + }) }) - }) + } else { // new UI. Only serve index.html. + mux.Group(func(r chi.Router) { + r.Get("/*", func(w http.ResponseWriter, r *http.Request) { + upath := r.URL.Path + if strings.Contains(upath, "..") { + http.Error(w, "Invalid path", http.StatusBadRequest) + return + } + http.ServeFile(w, r, filepath.Join(siteDir, "dist", "index.html")) + }) + }) + } // api endpoints mux.Route("/api", func(r chi.Router) { @@ -570,6 +574,7 @@ func New(cfg *Config) (*WebServer, error) { r.Post("/locale", s.apiLocale) r.Post("/setlocale", s.apiSetLocale) r.Get("/buildinfo", s.apiBuildInfo) + r.Get("/validateseed", s.apiValidateSeed) r.Group(func(apiInit chi.Router) { apiInit.Use(s.rejectUninited) @@ -680,6 +685,11 @@ func New(cfg *Config) (*WebServer, error) { fileServer(mux, "/img", siteDir, "src/img", "") fileServer(mux, "/font", siteDir, "src/font", "") + // New UI has Coinpaprika enabled by default + if newUI { + s.core.ToggleRateSourceStatus("Coinpaprika", true) + } + return s, nil } diff --git a/client/webserver/webserver_test.go b/client/webserver/webserver_test.go index b3aaeb4f31..434c2ca485 100644 --- a/client/webserver/webserver_test.go +++ b/client/webserver/webserver_test.go @@ -120,7 +120,7 @@ func (c *TCore) UpdateBondOptions(form *core.BondOptionsForm) error { func (c *TCore) BondsFeeBuffer(assetID uint32) (uint64, error) { return 222, nil } -func (c *TCore) ToggleRateSourceStatus(src string, disable bool) error { +func (c *TCore) ToggleRateSourceStatus(src string, enable bool) error { return c.rateSourceErr } func (c *TCore) FiatRateSources() map[string]bool { @@ -374,6 +374,10 @@ func (*TCore) PoliteiaDetails() (string, bool, int64) { return "", false, 0 } +func (*TCore) ValidateSeed(string) (bool, error) { + return true, nil +} + type TWriter struct { b []byte } @@ -568,7 +572,7 @@ func TestAPILogin(t *testing.T) { // Login error tCore.loginErr = tErr - ensure(fmt.Sprintf(`{"ok":false,"msg":"%s"}`, tErr)) + ensure(fmt.Sprintf(`{"ok":false,"bad":true,"msg":"%s"}`, tErr)) tCore.loginErr = nil } @@ -649,7 +653,7 @@ func TestAPIInit(t *testing.T) { // Initialization error tCore.initErr = tErr - ensure(s.apiInit, fmt.Sprintf(`{"ok":false,"msg":"%s"}`, tErr)) + ensure(s.apiInit, fmt.Sprintf(`{"ok":false,"bad":true,"msg":"%s"}`, tErr)) tCore.initErr = nil } @@ -674,11 +678,11 @@ func TestAPINewWallet(t *testing.T) { ensure(`{"ok":true}`) tCore.notHas = false - ensure(`{"ok":false,"msg":"already have a wallet for btc"}`) + ensure(`{"ok":false,"bad":true,"msg":"already have a wallet for btc"}`) tCore.notHas = true tCore.createWalletErr = tErr - ensure(fmt.Sprintf(`{"ok":false,"msg":"%s"}`, tErr)) + ensure(fmt.Sprintf(`{"ok":false,"bad":true,"msg":"%s"}`, tErr)) tCore.createWalletErr = nil tCore.notHas = false @@ -697,7 +701,7 @@ func TestAPILogout(t *testing.T) { // Logout error tCore.logoutErr = tErr - ensure(fmt.Sprintf(`{"ok":false,"msg":"%s"}`, tErr)) + ensure(fmt.Sprintf(`{"ok":false,"bad":true,"msg":"%s"}`, tErr)) tCore.logoutErr = nil } @@ -714,7 +718,7 @@ func TestApiGetBalance(t *testing.T) { // Logout error tCore.balanceErr = tErr - ensure(fmt.Sprintf(`{"ok":false,"msg":"%s"}`, tErr)) + ensure(fmt.Sprintf(`{"ok":false,"bad":true,"msg":"%s"}`, tErr)) tCore.balanceErr = nil } @@ -826,7 +830,7 @@ func TestPasswordCache(t *testing.T) { body := &newWalletForm{ Pass: encode.PassBytes(""), } - want := `{"ok":false,"msg":"app pass cannot be empty"}` + want := `{"ok":false,"bad":true,"msg":"app pass cannot be empty"}` tCore.notHas = true ensureResponse(t, s.apiNewWallet, want, reader, writer, body, nil) @@ -863,7 +867,7 @@ func TestAPI_ToggleRatesource(t *testing.T) { name: "Invalid rate source", source: "binance", wantErr: errors.New("cannot enable unknown fiat rate source"), - want: `{"ok":false,"msg":"cannot enable unknown fiat rate source"}`, + want: `{"ok":false,"bad":true,"msg":"cannot enable unknown fiat rate source"}`, }, { name: "ok valid source", source: "dcrdata", @@ -891,7 +895,7 @@ func TestAPI_ToggleRatesource(t *testing.T) { name: "Invalid rate source", source: "Messari", wantErr: errors.New("cannot disable unknown fiat rate source"), - want: `{"ok":false,"msg":"cannot disable unknown fiat rate source"}`, + want: `{"ok":false,"bad":true,"msg":"cannot disable unknown fiat rate source"}`, }, { name: "ok valid source", source: "Coinpaprika", @@ -956,7 +960,7 @@ func TestAPIEstimateSendTxFee(t *testing.T) { tCore.estFee = 10000 ensureResponse(t, s.apiEstimateSendTxFee, want, reader, writer, body, nil) - want = fmt.Sprintf(`{"ok":false,"msg":"%s"}`, tErr) + want = fmt.Sprintf(`{"ok":false,"bad":true,"msg":"%s"}`, tErr) tCore.estFeeErr = tErr ensureResponse(t, s.apiEstimateSendTxFee, want, reader, writer, body, nil) } @@ -983,7 +987,7 @@ func TestAPIToggleWalletStatus(t *testing.T) { } tCore.walletStatusErr = errors.New("wallet not found") - ensure(`{"ok":false,"msg":"wallet not found"}`) + ensure(`{"ok":false,"bad":true,"msg":"wallet not found"}`) tCore.walletDisabled = false body.Disable = false @@ -1013,7 +1017,7 @@ func TestAPIDeleteArchivedRecords(t *testing.T) { ensure(`{"ok":true,"archivedRecordsDeleted":23,"archivedRecordsPath":"/path/to/records"}`) tCore.deleteRecordsErr = tErr - ensure(`{"ok":false,"msg":"expected dummy error"}`) + ensure(`{"ok":false,"bad":true,"msg":"expected dummy error"}`) } func TestAPITrade(t *testing.T) { @@ -1044,7 +1048,7 @@ func testTrade(t *testing.T, async bool) { } tCore.tradeErr = tErr - ensure(`{"ok":false,"msg":"expected dummy error"}`) + ensure(`{"ok":false,"bad":true,"msg":"expected dummy error"}`) } func Test_prepareAddr(t *testing.T) { diff --git a/dex/fiatrates/fiatrates.go b/dex/fiatrates/fiatrates.go index a3362a841a..b48ff4b5f1 100644 --- a/dex/fiatrates/fiatrates.go +++ b/dex/fiatrates/fiatrates.go @@ -26,6 +26,7 @@ type CoinpaprikaAsset struct { AssetID uint32 Name string Symbol string + Ticker string } func parseCoinpapNameSymbol(name, symbol string) (string, string) { From 1d9776b5b651cb36398d63e96c65dd7058f6cf15 Mon Sep 17 00:00:00 2001 From: Brian Stafford Date: Wed, 25 Feb 2026 10:15:50 -0600 Subject: [PATCH 2/5] implement internationalization We don't have the convenience of Go templates with React, so this updates the internationalization scheme to do everything with Javascript. New translations are separated from old translations by the newui build tag, but a utility is added to import translations from the old set if there is a matching key-value pair in the new set. --- .gitignore | 1 + client/webserver/api.go | 37 +++--- client/webserver/jsintl_newui.go | 26 +++++ .../webserver/{jsintl.go => jsintl_oldui.go} | 5 + client/webserver/locales/locales.go | 20 ++-- client/webserver/newui/locales/ar.go | 14 +++ .../newui/locales/cmd/importlocales/main.go | 109 ++++++++++++++++++ client/webserver/newui/locales/de-de.go | 14 +++ client/webserver/newui/locales/en-us.go | 23 ++++ client/webserver/newui/locales/locales.go | 14 +++ client/webserver/newui/locales/pl-pl.go | 14 +++ client/webserver/newui/locales/pt-br.go | 12 ++ client/webserver/newui/locales/zh-cn.go | 14 +++ client/webserver/newui/src/App.tsx | 5 +- .../newui/src/components/InitWizard.tsx | 28 ++--- .../newui/src/components/LocaleSelector.tsx | 62 ++++++++++ .../webserver/newui/src/components/Login.tsx | 5 - .../newui/src/components/PasswordInput.tsx | 3 +- .../newui/src/components/UnlockForm.tsx | 5 + client/webserver/newui/src/index.html | 6 +- client/webserver/newui/src/js/application.ts | 27 ++++- client/webserver/newui/src/js/intl.ts | 98 ++++++++++++++-- client/webserver/newui/src/js/registry.ts | 4 +- client/webserver/newui/src/js/state.ts | 5 +- client/webserver/newui/src/scss/main.scss | 23 ++++ client/webserver/newui/webpack.config.js | 9 +- client/webserver/template.go | 48 ++++++++ client/webserver/webserver.go | 8 +- 28 files changed, 563 insertions(+), 76 deletions(-) create mode 100644 client/webserver/jsintl_newui.go rename client/webserver/{jsintl.go => jsintl_oldui.go} (99%) create mode 100644 client/webserver/newui/locales/ar.go create mode 100644 client/webserver/newui/locales/cmd/importlocales/main.go create mode 100644 client/webserver/newui/locales/de-de.go create mode 100644 client/webserver/newui/locales/en-us.go create mode 100644 client/webserver/newui/locales/locales.go create mode 100644 client/webserver/newui/locales/pl-pl.go create mode 100644 client/webserver/newui/locales/pt-br.go create mode 100644 client/webserver/newui/locales/zh-cn.go create mode 100644 client/webserver/newui/src/components/LocaleSelector.tsx delete mode 100644 client/webserver/newui/src/components/Login.tsx diff --git a/.gitignore b/.gitignore index 9da9d48071..1d8a61f96b 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,7 @@ dex/testing/loadbot/loadbot bin/ bin-v*/ client/webserver/site/template-builder/template-builder +client/webserver/newui/locales/cmd/importlocales/importlocales dex/testing/btc/harnesschain.tar.gz client/asset/btc/electrum/example/server/server client/asset/btc/electrum/example/wallet/wallet diff --git a/client/webserver/api.go b/client/webserver/api.go index 854a854f7e..a88d6c7f93 100644 --- a/client/webserver/api.go +++ b/client/webserver/api.go @@ -1006,7 +1006,8 @@ func (s *WebServer) apiLocale(w http.ResponseWriter, r *http.Request) { return } resp := make(map[string]string) - for translationID, defaultTranslation := range enUS { + defaultLocale := localesMap["en-US"] + for translationID, defaultTranslation := range defaultLocale { t, found := m[translationID] if !found { t = defaultTranslation @@ -1642,23 +1643,25 @@ func (s *WebServer) apiUser(w http.ResponseWriter, r *http.Request) { s.authMtx.RUnlock() response := struct { - User *core.User `json:"user"` - Lang string `json:"lang"` - Langs []string `json:"langs"` - Inited bool `json:"inited"` - OK bool `json:"ok"` - OnionUrl string `json:"onionUrl"` - MMStatus *mm.Status `json:"mmStatus"` - CompanionAppPaired bool `json:"companionAppPaired"` + User *core.User `json:"user"` + Lang string `json:"lang"` + Langs []string `json:"langs"` + Inited bool `json:"inited"` + OK bool `json:"ok"` + OnionUrl string `json:"onionUrl"` + MMStatus *mm.Status `json:"mmStatus"` + CompanionAppPaired bool `json:"companionAppPaired"` + NewVersionAvailable bool `json:"newVersionAvailable"` }{ - User: u, - Lang: s.lang.Load().(string), - Langs: s.langs, - Inited: s.core.IsInitialized(), - OK: true, - OnionUrl: s.onion, - MMStatus: mmStatus, - CompanionAppPaired: paired, + User: u, + Lang: s.lang.Load().(string), + Langs: s.langs, + Inited: s.core.IsInitialized(), + OK: true, + OnionUrl: s.onion, + MMStatus: mmStatus, + CompanionAppPaired: paired, + NewVersionAvailable: s.newAppVersionAvailable, } writeJSON(w, response) } diff --git a/client/webserver/jsintl_newui.go b/client/webserver/jsintl_newui.go new file mode 100644 index 0000000000..7d530b235d --- /dev/null +++ b/client/webserver/jsintl_newui.go @@ -0,0 +1,26 @@ +//go:build newui + +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. + +package webserver + +import ( + "decred.org/dcrdex/client/intl" + "decred.org/dcrdex/client/webserver/newui/locales" +) + +var localesMap = locales.Locales + +// RegisterTranslations registers translations with the init package for +// translator worksheet preparation. +func RegisterTranslations() { + const callerID = "js" + + for lang, ts := range localesMap { + r := intl.NewRegistrar(callerID, lang, len(ts)) + for translationID, t := range ts { + r.Register(translationID, t) + } + } +} diff --git a/client/webserver/jsintl.go b/client/webserver/jsintl_oldui.go similarity index 99% rename from client/webserver/jsintl.go rename to client/webserver/jsintl_oldui.go index ada841eb13..d7e8a09f52 100644 --- a/client/webserver/jsintl.go +++ b/client/webserver/jsintl_oldui.go @@ -1,3 +1,8 @@ +//go:build !newui + +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. + package webserver import "decred.org/dcrdex/client/intl" diff --git a/client/webserver/locales/locales.go b/client/webserver/locales/locales.go index 3479194c41..fd8c9e60ed 100644 --- a/client/webserver/locales/locales.go +++ b/client/webserver/locales/locales.go @@ -7,9 +7,14 @@ import ( "golang.org/x/text/language" ) -var ( - Locales map[string]map[string]*intl.Translation -) +var Locales = map[string]map[string]*intl.Translation{ + "en-US": EnUS, + "pt-BR": PtBr, + "zh-CN": ZhCN, + "pl-PL": PlPL, + "de-DE": DeDE, + "ar": Ar, +} // RegisterTranslations registers translations with the init package for // translator worksheet preparation. @@ -24,15 +29,6 @@ func RegisterTranslations() { } func init() { - Locales = map[string]map[string]*intl.Translation{ - "en-US": EnUS, - "pt-BR": PtBr, - "zh-CN": ZhCN, - "pl-PL": PlPL, - "de-DE": DeDE, - "ar": Ar, - } - for localeName := range Locales { _, err := language.Parse(localeName) if err != nil { diff --git a/client/webserver/newui/locales/ar.go b/client/webserver/newui/locales/ar.go new file mode 100644 index 0000000000..9c1e03f4dc --- /dev/null +++ b/client/webserver/newui/locales/ar.go @@ -0,0 +1,14 @@ +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. +package locales + +import "decred.org/dcrdex/client/intl" + +var Ar = map[string]*intl.Translation{ + "Unlock": {T: "الغاء القفل"}, + "Assets": {T: "الأصول"}, + "Receive": {T: "استلام"}, + "Send": {T: "ارسال"}, + "Swap": {T: "المقايضة"}, + "Trade": {T: "تداول"}, +} diff --git a/client/webserver/newui/locales/cmd/importlocales/main.go b/client/webserver/newui/locales/cmd/importlocales/main.go new file mode 100644 index 0000000000..6a83ed9d60 --- /dev/null +++ b/client/webserver/newui/locales/cmd/importlocales/main.go @@ -0,0 +1,109 @@ +package main + +import ( + "bytes" + "fmt" + "maps" + "os" + "os/exec" + "path/filepath" + "slices" + "strings" + + "decred.org/dcrdex/client/intl" + oldloc "decred.org/dcrdex/client/webserver/locales" + newloc "decred.org/dcrdex/client/webserver/newui/locales" +) + +/* +importlocales looks for entries in the EnUS translations map that don't have +translations in other maps, and then checks the locales from the old UI to +see if there is a translation there that can be used, and updates the files. +*/ + +type mapMatch struct { + filename string + oldMap map[string]*intl.Translation + newMap map[string]*intl.Translation +} + +var mapMatches = []mapMatch{ + {"ar.go", oldloc.Ar, newloc.Ar}, + {"de-de.go", oldloc.DeDE, newloc.DeDE}, + {"pl-pl.go", oldloc.PlPL, newloc.PlPL}, + {"pt-br.go", oldloc.PtBr, newloc.PtBr}, + {"zh-cn.go", oldloc.ZhCN, newloc.ZhCN}, +} + +func main() { + newuiLocalesDir, _ := filepath.Abs("../../") + + // Extract & sort keys + orderedKeys := slices.Collect(maps.Keys(newloc.EnUS)) + slices.Sort(orderedKeys) + + // Determine which ones to transfer + var transferKeys []string + for _, key := range orderedKeys { + newTrans := newloc.EnUS[key] + oldTrans, okOld := oldloc.EnUS[key] + if okOld && oldTrans.T == newTrans.T { + transferKeys = append(transferKeys, key) + } + } + + for _, match := range mapMatches { + fpath := filepath.Join(newuiLocalesDir, match.filename) + content, err := os.ReadFile(fpath) + if err != nil { + fmt.Println("Error reading file:", fpath) + continue + } + + idx := bytes.LastIndexByte(content, '}') + if idx == -1 { + fmt.Println("No closing brace found in", fpath) + continue + } + + var newLines []string + for _, key := range transferKeys { + // check if key already exists in actual target map + if _, exists := match.newMap[key]; exists { + continue + } + + if oldVal, ok := match.oldMap[key]; ok { + // We need to format it properly. + if oldVal.Version != 0 { + newLines = append(newLines, fmt.Sprintf("\t%q: {Version: %d, T: %q},", key, oldVal.Version, oldVal.T)) + } else { + newLines = append(newLines, fmt.Sprintf("\t%q: {T: %q},", key, oldVal.T)) + } + } + } + + if len(newLines) > 0 { + prefix := string(content[:idx]) + prefix = strings.TrimRight(prefix, " \n\r\t") + if !strings.HasSuffix(prefix, "{") { + prefix += "\n" + } else { + prefix += "\n" + } + + newContent := prefix + strings.Join(newLines, "\n") + "\n}\n" + err = os.WriteFile(fpath, []byte(newContent), 0644) + if err != nil { + fmt.Println("Error writing file:", fpath, err) + } else { + fmt.Printf("Updated %s with %d entries\n", match.filename, len(newLines)) + + cmd := exec.Command("gofmt", "-w", fpath) + if err := cmd.Run(); err != nil { + fmt.Println("Error running gofmt on:", fpath, err) + } + } + } + } +} diff --git a/client/webserver/newui/locales/de-de.go b/client/webserver/newui/locales/de-de.go new file mode 100644 index 0000000000..6ca901b385 --- /dev/null +++ b/client/webserver/newui/locales/de-de.go @@ -0,0 +1,14 @@ +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. +package locales + +import "decred.org/dcrdex/client/intl" + +var DeDE = map[string]*intl.Translation{ + "Unlock": {T: "Entsperren"}, + "Assets": {T: "Assets"}, + "Receive": {T: "Erhalte "}, + "Send": {T: "Senden"}, + "Swap": {T: "Swap"}, + "Trade": {T: "Handeln"}, +} diff --git a/client/webserver/newui/locales/en-us.go b/client/webserver/newui/locales/en-us.go new file mode 100644 index 0000000000..ce2b7ff84c --- /dev/null +++ b/client/webserver/newui/locales/en-us.go @@ -0,0 +1,23 @@ +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. +package locales + +import "decred.org/dcrdex/client/intl" + +var EnUS = map[string]*intl.Translation{ + "prompt_for_seed": {T: "Are you restoring Bison Wallet from a seed?"}, + "seed_display_warning": {T: "Your seed is shown below. Write it down and keep it safe. You will need it to restore your wallet if you lose your device."}, + "Welcome Back!": {T: "Welcome Back!"}, + "Unlock": {T: "Unlock"}, + "password": {T: "password"}, + "Assets": {T: "Assets"}, + "Receive": {T: "Receive"}, + "Send": {T: "Send"}, + "Swap": {T: "Swap"}, + "VIEWS": {T: "VIEWS"}, + "FAVORITES": {T: "FAVORITES"}, + "Logout": {T: "Logout"}, + "Portfolio": {T: "Portfolio"}, + "Trade": {T: "Trade"}, + "New": {T: "New"}, +} diff --git a/client/webserver/newui/locales/locales.go b/client/webserver/newui/locales/locales.go new file mode 100644 index 0000000000..858cdc0f64 --- /dev/null +++ b/client/webserver/newui/locales/locales.go @@ -0,0 +1,14 @@ +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. +package locales + +import "decred.org/dcrdex/client/intl" + +var Locales = map[string]map[string]*intl.Translation{ + "en-US": EnUS, + "pt-BR": PtBr, + "zh-CN": ZhCN, + "pl-PL": PlPL, + "de-DE": DeDE, + "ar": Ar, +} diff --git a/client/webserver/newui/locales/pl-pl.go b/client/webserver/newui/locales/pl-pl.go new file mode 100644 index 0000000000..284f6db96e --- /dev/null +++ b/client/webserver/newui/locales/pl-pl.go @@ -0,0 +1,14 @@ +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. +package locales + +import "decred.org/dcrdex/client/intl" + +var PlPL = map[string]*intl.Translation{ + "Unlock": {T: "Odblokuj"}, + "Assets": {T: "Aktywa"}, + "Receive": {T: "Otrzymaj"}, + "Send": {T: "Wyślij"}, + "Swap": {T: "Zamiana"}, + "Trade": {T: "Wymiana"}, +} diff --git a/client/webserver/newui/locales/pt-br.go b/client/webserver/newui/locales/pt-br.go new file mode 100644 index 0000000000..64c191f7a9 --- /dev/null +++ b/client/webserver/newui/locales/pt-br.go @@ -0,0 +1,12 @@ +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. +package locales + +import "decred.org/dcrdex/client/intl" + +var PtBr = map[string]*intl.Translation{ + "Swap": {T: "Troca"}, + "Trade": {T: "Troca"}, + "Assets": {T: "Ativos"}, + "Unlock": {T: "Destrancar"}, +} diff --git a/client/webserver/newui/locales/zh-cn.go b/client/webserver/newui/locales/zh-cn.go new file mode 100644 index 0000000000..b516bbfbe7 --- /dev/null +++ b/client/webserver/newui/locales/zh-cn.go @@ -0,0 +1,14 @@ +// This code is available on the terms of the project LICENSE.md file, +// also available online at https://blueoakcouncil.org/license/1.0.0. +package locales + +import "decred.org/dcrdex/client/intl" + +var ZhCN = map[string]*intl.Translation{ + "Unlock": {T: "解锁"}, + "Assets": {T: "资产"}, + "Receive": {T: "接收"}, + "Send": {T: "发送"}, + "Swap": {T: "交换"}, + "Trade": {T: "交易"}, +} diff --git a/client/webserver/newui/src/App.tsx b/client/webserver/newui/src/App.tsx index 097488922b..5a5255683b 100644 --- a/client/webserver/newui/src/App.tsx +++ b/client/webserver/newui/src/App.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react' +import { useEffect, useReducer, useState } from 'react' import app from './js/application' import UnlockForm from './components/UnlockForm' import MainFrame from './components/MainFrame' @@ -13,6 +13,7 @@ import { document.addEventListener('submit', e => e.preventDefault()) export const App = () => { + const [, reRender] = useReducer(x => x + 1, 0); const [appState, setAppState] = useState(null) const [pageData, setPageData] = useState(null) @@ -21,7 +22,7 @@ export const App = () => { } const start = async () => { - await app.start(setPageData) + await app.start(setPageData, reRender) await resetAppState() if (!app.user && !pageData) app.loadPage('') // reset URL } diff --git a/client/webserver/newui/src/components/InitWizard.tsx b/client/webserver/newui/src/components/InitWizard.tsx index 8a6bf521b1..082205050b 100644 --- a/client/webserver/newui/src/components/InitWizard.tsx +++ b/client/webserver/newui/src/components/InitWizard.tsx @@ -1,6 +1,7 @@ import { useState } from 'react' import t from '../js/intl' import PasswordInput from './PasswordInput' +import LocaleSelector from './LocaleSelector' import { postJSON } from '../js/http' /* @@ -98,10 +99,10 @@ export const SeedInput = ({ setSeed, setUsingSeed }: SeedInputParams) => { + onClick={submitSeed}>{t('Recover')} + onClick={onGoBackClicked}>{t('Go Back')} ) @@ -143,20 +144,19 @@ export default function InitWizard ({ setInited }: InitWizardParams) { if (usingSeed) done() } + const renderContent = () => { + if (usingSeed === undefined) return + if (usingSeed && !seed) return + if (!registered) return + return { done() }} seed={seed} /> + } + return (
- { - usingSeed === undefined ? : - usingSeed && !seed ? ( - ) : - !registered ? ( - - ) : { done() }} seed={seed} /> - } +
+ +
+ {renderContent()}
) } \ No newline at end of file diff --git a/client/webserver/newui/src/components/LocaleSelector.tsx b/client/webserver/newui/src/components/LocaleSelector.tsx new file mode 100644 index 0000000000..3266c38cd4 --- /dev/null +++ b/client/webserver/newui/src/components/LocaleSelector.tsx @@ -0,0 +1,62 @@ +import { useState } from 'react' +import app from '../js/application' + +export default function LocaleSelector () { + const [lang, setLang] = useState(app.lang) + + const changeLanguage = async (newLang: string) => { + await app.changeLocale(newLang) + app.reRender() + setLang(newLang) + } + + return ( +
{ + e.currentTarget.querySelector('select').click() + }}> + + +
+ + ) +} + +interface LangData { + name: string + flag: string +} + +const localeData: Record = { + 'en-US': { + name: 'English', + flag: '🇺🇸' // Not 🇬🇧. MURICA! + }, + 'pt-BR': { + name: 'Português', + flag: '🇧🇷' + }, + 'zh-CN': { + name: '中文', + flag: '🇨🇳' + }, + 'pl-PL': { + name: 'Polski', + flag: '🇵🇱' + }, + 'de-DE': { + name: 'Deutsch', + flag: '🇩🇪' + }, + 'ar': { + name: 'العربية', + flag: '🇪🇬' // Egypt I guess + } +} \ No newline at end of file diff --git a/client/webserver/newui/src/components/Login.tsx b/client/webserver/newui/src/components/Login.tsx deleted file mode 100644 index cf6e8ee679..0000000000 --- a/client/webserver/newui/src/components/Login.tsx +++ /dev/null @@ -1,5 +0,0 @@ -export const Login = () => { - return ( -
Login Div
- ); -} \ No newline at end of file diff --git a/client/webserver/newui/src/components/PasswordInput.tsx b/client/webserver/newui/src/components/PasswordInput.tsx index 6db850eba1..9842a09b6a 100644 --- a/client/webserver/newui/src/components/PasswordInput.tsx +++ b/client/webserver/newui/src/components/PasswordInput.tsx @@ -1,5 +1,6 @@ import { useState, ChangeEvent } from "react" +import t from "../js/intl" interface PasswordInputParams { onChange: (e: ChangeEvent) => void @@ -21,7 +22,7 @@ export default function PasswordInput ({ onChange, placeholder, value }: Passwor
diff --git a/client/webserver/newui/src/components/UnlockForm.tsx b/client/webserver/newui/src/components/UnlockForm.tsx index 95e0b3a598..6cb10c8400 100644 --- a/client/webserver/newui/src/components/UnlockForm.tsx +++ b/client/webserver/newui/src/components/UnlockForm.tsx @@ -1,7 +1,9 @@ import { useState, ChangeEvent } from 'react' import t from '../js/intl' import PasswordInput from './PasswordInput' +import LocaleSelector from './LocaleSelector' import { postJSON } from '../js/http' +import app from '../js/application' interface UnlockedFormParams { setUnlocked: () => void @@ -23,6 +25,9 @@ export default function UnlockForm ({ setUnlocked }: UnlockedFormParams) { return (
+
+ +
diff --git a/client/webserver/newui/src/index.html b/client/webserver/newui/src/index.html index 242f9045a5..578b77e6c6 100644 --- a/client/webserver/newui/src/index.html +++ b/client/webserver/newui/src/index.html @@ -1,17 +1,17 @@ - + - + + Bison Wallet
- \ No newline at end of file diff --git a/client/webserver/newui/src/js/application.ts b/client/webserver/newui/src/js/application.ts index 94762e774a..6b235dd35d 100644 --- a/client/webserver/newui/src/js/application.ts +++ b/client/webserver/newui/src/js/application.ts @@ -1,4 +1,4 @@ -import { getJSON } from "./http" +import { getJSON, postJSON } from "./http" import { AppState, User, @@ -27,16 +27,24 @@ import { RateNote, TipChangeNote, BookUpdate, + MarketMakingStatus } from "./registry" import { TickerAsset, normalizedTicker } from "./assets" import Doc from "./doc" import State from "./state" import ws from "./ws" +import { loadLocale } from "./intl" export class Application { user: User | null commitHash: string + langs: string[] + lang: string + mmStatus: MarketMakingStatus + inited: boolean + authed: boolean pageLoaded: (d: PageData) => void + reRender: () => void pageData: PageData tickerList: TickerAsset[] tickerMap: Record @@ -98,8 +106,9 @@ export class Application { window.user = () => this.user } - async start (pageLoaded: (d: PageData) => void) { + async start (pageLoaded: (d: PageData) => void, reRender: () => void) { this.pageLoaded = pageLoaded + this.reRender = reRender await this.fetchBuildInfo() console.log('Bison Wallet, Build', this.commitHash.substring(0, 8)) @@ -154,10 +163,24 @@ export class Application { const r = await getJSON('/api/user') const needsTickers = r.user && !this.user this.user = r.user + this.inited = r.inited + this.authed = Boolean(r.user) + if (r.lang != this.lang) { + await loadLocale(r.lang, this.commitHash, false) + } + this.lang = r.lang + this.langs = r.langs + this.mmStatus = r.mmStatus if (needsTickers) this.prepareTickerAssets() return r } + async changeLocale (lang: string) { + await postJSON('/api/setlocale', lang) + await loadLocale(lang, this.commitHash, false) + this.lang = lang + } + async fetchUser (): Promise { const r = await this.fetchAppState() return r.user diff --git a/client/webserver/newui/src/js/intl.ts b/client/webserver/newui/src/js/intl.ts index 14185a0e68..f00672e6a3 100644 --- a/client/webserver/newui/src/js/intl.ts +++ b/client/webserver/newui/src/js/intl.ts @@ -1,17 +1,93 @@ -const defaultTranslations = { - 'Initialize Wallet': 'Initialize Wallet', - 'prompt_for_seed': 'Are you restoring Bison Wallet from a seed?', - 'Unlock': 'Unlock', - 'seed_display_warning': 'Your seed is shown below. Write it down and keep it safe. You will need it to restore your wallet if you lose your device.' +import State from "./state" +import { postJSON } from "./http" +import { PageElement } from "./registry" + +let translations: Record = {} + +// translate +export default function t (slug: string): string { + const s = translations[slug] + if (!s && recordMissingTranslations && missingTranslations.indexOf(slug) === -1) { + console.log(`missing translation: '${slug}'\n`) + missingTranslations.push(slug) + } + return s || slug } -let translations: Record = Object.assign({}, defaultTranslations) +export function tvar (slug: string, args: Record): string { + return stringTemplateParser(t(slug), args) +} -export const setTranslations = (ts: Record) => { - translations = Object.assign({}, defaultTranslations, ts) +export function tdom (slug: string, args: Record): PageElement { + return textToDOM(tvar(slug, args)) } -// translate -export default function t (slug: string): string { - return translations[slug] || slug +export async function loadLocale (lang: string, commitHash: string, skipCache: boolean) { + if (!skipCache) { + const specs = State.fetchLocal(State.localeSpecsKey) + if (specs && specs.lang === lang && specs.commitHash === commitHash) { + translations = State.fetchLocal(State.localeKey) + return + } + } + + translations = await postJSON('/api/locale', lang) + State.storeLocal(State.localeSpecsKey, { lang, commitHash }) + State.storeLocal(State.localeKey, translations) +} + +window.clearLocale = () => { + State.removeLocal(State.localeSpecsKey) + State.removeLocal(State.localeKey) +} + +/* prep will format the message to the current locale. */ +export function prep (k: string, args?: Record) { + const text = translations[k] + if (!text) return '' + return stringTemplateParser(text, args || {}) +} + +/* + * stringTemplateParser is a template string matcher, where expression is any + * text. It switches what is inside double brackets (e.g. 'buy {{ asset }}') + * for the value described into args. args is an object with keys + * equal to the placeholder keys. (e.g. {"asset": "dcr"}). + * So that will be switched for: 'asset dcr'. + */ +function stringTemplateParser (expression: string, args: Record) { + // templateMatcher matches any text which: + // is some {{ text }} between two brackets, and a space between them. + // It is global, therefore it will change all occurrences found. + // text can be anything, but brackets '{}' and space '\s' + const templateMatcher = /{{\s?([^{}\s]*)\s?}}/g + return expression.replace(templateMatcher, (_, value) => args[value]) +} + +const domParser = new DOMParser() + +function textToDOM (s: string) { + const doc = domParser.parseFromString(s, 'text/html') + return doc.body +} + +const missingTranslations: string[] = [] +let recordMissingTranslations: boolean = State.fetchLocal(State.recordMissingTranslationsLK) || false + +window.recordMissingTranslations = (enable?: boolean) => { + enable = enable === undefined ? true : enable + recordMissingTranslations = enable + State.storeLocal(State.recordMissingTranslationsLK, enable) +} +window.dumpMissingTranslations = () => { + const formattedData = JSON.stringify(missingTranslations, null, 2) + const blob = new Blob([formattedData], { type: 'application/json' }) + const url = URL.createObjectURL(blob) + const a = document.createElement('a') + a.href = url + a.download = 'missing-translations.json' + document.body.appendChild(a) + a.click() + document.body.removeChild(a) + URL.revokeObjectURL(url) } diff --git a/client/webserver/newui/src/js/registry.ts b/client/webserver/newui/src/js/registry.ts index 5cfcc6f848..d0dce832f1 100644 --- a/client/webserver/newui/src/js/registry.ts +++ b/client/webserver/newui/src/js/registry.ts @@ -6,8 +6,6 @@ declare global { recordLogger: (loggerID: string, enable: boolean) => void dumpLogger: (loggerID: string) => void mmstatus: () => Promise - testFormatFourSigFigs: () => void - testFormatRateFullPrecision: () => void user: () => User cexBook: () => Promise mmStatus: () => MarketMakingStatus @@ -18,6 +16,8 @@ declare global { open: (url?: string | URL, target?: string, features?: string) => WindowProxy | null sendOSNotification (title: string, body?: string): void clearLocale (): void + recordMissingTranslations (enable?: boolean): void + dumpMissingTranslations (): void } } diff --git a/client/webserver/newui/src/js/state.ts b/client/webserver/newui/src/js/state.ts index 9af64a4a30..5d717c1894 100644 --- a/client/webserver/newui/src/js/state.ts +++ b/client/webserver/newui/src/js/state.ts @@ -20,8 +20,9 @@ export default class State { // static notificationsLK = 'notifications' // DEPRECATED before v1 // static orderDisclaimerAckedLK = 'ordAck' // static lastCandleDurationLK = 'lastCandleDuration' - // static localeSpecsKey = 'localeSpecsLK' - // static localeKey = 'localeLK' + static localeSpecsKey = 'localeSpecsLK' + static localeKey = 'localeLK' + static recordMissingTranslationsLK = 'recordMissingTranslationsLK' static setCookie (cname: string, cvalue: string) { const d = new Date() diff --git a/client/webserver/newui/src/scss/main.scss b/client/webserver/newui/src/scss/main.scss index e0bdb2a117..04e1f53e10 100644 --- a/client/webserver/newui/src/scss/main.scss +++ b/client/webserver/newui/src/scss/main.scss @@ -72,6 +72,23 @@ textarea { } } +// TODO: Implement our own React changeLanguage(e.target.value)} value={lang} - onClick={(e) => e.stopPropagation()}> +