From 409cba4f6316703eadc9cae65ca5f2e488cc438c Mon Sep 17 00:00:00 2001 From: Erick Cestari Date: Wed, 13 May 2026 11:25:41 -0300 Subject: [PATCH 01/69] ci: harden main.yml workflow against supply-chain risks Apply least-privilege and standard hardening to the CI workflow: - Set top-level `permissions: contents: read` so `GITHUB_TOKEN` no longer defaults to broad read/write across the repo. - Pass `github.base_ref` and `github.repository` via env vars in the `check-commits` job to prevent shell injection via expression interpolation in `run:` blocks. - Pin third-party `jpribyl/action-docker-layer-caching` to a full commit SHA so a tag retag cannot swap in unreviewed code. - Bump `actions/checkout@v3` to `@v4` in `sqlc-check` for consistency with the rest of the workflow. - Use `yarn install --frozen-lockfile` for all dependency installs so CI fails on lockfile drift instead of silently resolving new package versions. --- .github/workflows/main.yml | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5a4091dd..c8391c5f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,6 +13,9 @@ concurrency: group: ${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true +permissions: + contents: read + defaults: run: shell: bash @@ -49,7 +52,7 @@ jobs: - name: install dependencies working-directory: ./app - run: yarn + run: yarn install --frozen-lockfile - name: lint code working-directory: ./app @@ -153,7 +156,7 @@ jobs: - name: install dependencies working-directory: ./app - run: yarn + run: yarn install --frozen-lockfile - name: run check run: make rpc-js-compile && make protos-check @@ -183,15 +186,20 @@ jobs: go-version: '${{ env.GO_VERSION }}' - name: fetch and rebase on ${{ github.base_ref }} + env: + BASE_REF: ${{ github.base_ref }} + REPOSITORY: ${{ github.repository }} run: | - git remote add upstream https://github.com/${{ github.repository }} + git remote add upstream "https://github.com/${REPOSITORY}" git fetch upstream export GIT_COMMITTER_EMAIL="litd-ci@example.com" export GIT_COMMITTER_NAME="LiT CI" - git rebase upstream/${{ github.base_ref }} + git rebase "upstream/${BASE_REF}" - name: check commits - run: scripts/check-each-commit.sh upstream/${{ github.base_ref }} + env: + BASE_REF: ${{ github.base_ref }} + run: scripts/check-each-commit.sh "upstream/${BASE_REF}" ####################### # sql model generation @@ -201,7 +209,7 @@ jobs: runs-on: ubuntu-latest steps: - name: git checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go @@ -209,7 +217,7 @@ jobs: go-version: '${{ env.GO_VERSION }}' - name: docker image cache - uses: jpribyl/action-docker-layer-caching@v0.1.1 + uses: jpribyl/action-docker-layer-caching@c632825d12ec837065f49726ea27ddd40bcc7894 # v0.1.1 continue-on-error: true - name: Generate sql models @@ -329,7 +337,7 @@ jobs: - name: install dependencies working-directory: ./app - run: yarn + run: yarn install --frozen-lockfile - name: run itest ${{ matrix.name }} run: make ${{ matrix.args }} From 650fd92259694647333dfae8e09f583b571bab5e Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Tue, 16 Jun 2026 00:13:57 +0200 Subject: [PATCH 02/69] app: patch Loop proto import for local proto build Rewrite Loop's lnd proto import during proto generation so make protos continues to work with this repo's local proto layout. This became necessary when Loop v0.32.0-beta started shipping the looprpc/client.proto change from upstream commit f47b6115571f6072fe68057cb4eff30cc4fc47df ("looprpc: extend client.proto with lnrpc.OutPoint and lnrpc.OpenChannelRequest"). That update made the downloaded Loop proto import lnrpc/lightning.proto, while LiT stores the downloaded lnd proto locally as proto/lnd.proto and invokes protoc with ../proto as the import root. As a result, the downloaded Loop proto overwrote the local compatibility fix and make protos failed with "lnrpc/lightning.proto: File not found". Patch the downloaded proto in build-protos.js to import lnd.proto instead, and keep proto/loop.proto aligned with the same import path. This is needed because changing only the checked-in proto file is not enough: the build script re-fetches and replaces it on every run. --- app/scripts/build-protos.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/scripts/build-protos.js b/app/scripts/build-protos.js index 412605b0..ebf1e0df 100644 --- a/app/scripts/build-protos.js +++ b/app/scripts/build-protos.js @@ -124,6 +124,10 @@ const sanitize = async () => { 'import "reservation.proto"', 'import "swapserverrpc/reservation.proto"', ); + content = content.replace( + 'import "lnrpc/lightning.proto"', + 'import "lnd.proto"', + ); await fs.writeFile(path, content); } }; From d9b8d6d4b844a13a74bde634de367459b3f82077 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Thu, 11 Jun 2026 12:52:09 +0200 Subject: [PATCH 03/69] terminal: shut down on declined SQL migration Treat a declined kvdb-to-SQL migration prompt as a startup-abort condition that shuts litd down fully. This prevents litd from leaving the status server running after the operator refuses the migration prompt. The reason why this is motivated, is that `litd` at this stage of the startup process will not be ready to handle an `litcli stop` RPC call. --- migration_prompt.go | 8 ++++++-- migration_prompt_test.go | 2 +- terminal.go | 13 +++++++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/migration_prompt.go b/migration_prompt.go index a41b12f8..ee62df35 100644 --- a/migration_prompt.go +++ b/migration_prompt.go @@ -17,6 +17,10 @@ import ( const autoMigrateKVDBEnvVar = "LIT_AUTO_MIGRATE_TO_SQL" +var errKVDBToSQLMigrationDeclined = errors.New( + "manual confirmation declined", +) + var kvdbToSQLMigrationPromptLines = []string{ "", "CAUTION: litd is about to migrate your existing data to a new SQL " + @@ -175,8 +179,8 @@ func promptForKVDBToSQLMigrationConfirmation(input io.Reader, } if strings.TrimSpace(answer) != "yes" { - return errors.New("manual confirmation declined; refusing to " + - "continue kvdb-to-SQL migration") + return fmt.Errorf("%w; refusing to continue kvdb-to-SQL "+ + "migration", errKVDBToSQLMigrationDeclined) } return nil diff --git a/migration_prompt_test.go b/migration_prompt_test.go index 634ad2cf..cb615f24 100644 --- a/migration_prompt_test.go +++ b/migration_prompt_test.go @@ -58,7 +58,7 @@ func TestConfirmPendingKVDBToSQLMigration(t *testing.T) { createActiveAccountsKVDB(t, dbDir) }, input: "no\n", - expectErr: "manual confirmation declined", + expectErr: errKVDBToSQLMigrationDeclined.Error(), }, { name: "skips prompt on auto migration config", diff --git a/terminal.go b/terminal.go index 9fda836b..0d8e3e0c 100644 --- a/terminal.go +++ b/terminal.go @@ -405,6 +405,19 @@ func (g *LightningTerminal) Run(ctx context.Context) error { g.statusMgr.SetErrored( subservers.LIT, "could not start Lit: %v", startErr, ) + + // If the user has declined the migration prompt, we shut down + // Lit fully, and do not keep the status server up and running. + // The motivation for this is that the error occurs prior to + // Lit being able to accept a `litcli stop` call. Users running + // in an env that can't easily kill the daemon therefore need to + // be able to shut it down by just declining the migration. + // Note that no sub-servers, including `lnd`, have been + // started/connected to when the migration prompt is shown. We + // can therefore safely shut Lit down without affecting them. + if errors.Is(startErr, errKVDBToSQLMigrationDeclined) { + shutdownInterceptor.RequestShutdown() + } } // Now block until we receive an error or the main shutdown From 27eba1e5c139473bc542feaf1c6ef1a88c698a7b Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Thu, 11 Jun 2026 23:04:11 +0200 Subject: [PATCH 04/69] db: unify kvdb file existence checks Add a tombstone helper for checking whether a legacy kvdb file exists on disk, without inspecting any tombstone state inside the database. Use this helper in the tombstone deprecation and activity checks so missing-file handling is centralized in one place instead of being reimplemented in each function. We also export this helper function, as we'll use it in the upcoming commit which checks if the legacy any bbolt database file exists before attempting to migrate it. --- db/tombstone/tombstone.go | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/db/tombstone/tombstone.go b/db/tombstone/tombstone.go index 78589eb4..cd186c74 100644 --- a/db/tombstone/tombstone.go +++ b/db/tombstone/tombstone.go @@ -34,10 +34,31 @@ const ( dbFilePermission = 0600 ) +// KVDBFileExists reports whether the legacy bbolt database file exists at the +// given path. This only checks file presence and intentionally ignores any +// tombstone state inside the database. +func KVDBFileExists(path string) (bool, error) { + fi, err := os.Stat(path) + switch { + case err == nil: + return !fi.IsDir(), nil + + case os.IsNotExist(err): + return false, nil + + default: + return false, err + } +} + // DeprecateKVDB marks the given legacy bbolt database as deprecated by // writing the migration tombstone marker into the specified top-level bucket. func DeprecateKVDB(path string, timeout time.Duration, bucketKey []byte) error { - if _, err := os.Stat(path); os.IsNotExist(err) { + exists, err := KVDBFileExists(path) + if err != nil { + return err + } + if !exists { return nil } @@ -59,7 +80,11 @@ func DeprecateKVDB(path string, timeout time.Duration, bucketKey []byte) error { func CheckKVDBDeprecated(path string, bucketKey []byte, timeout time.Duration) error { - if _, err := os.Stat(path); os.IsNotExist(err) { + exists, err := KVDBFileExists(path) + if err != nil { + return err + } + if !exists { return nil } @@ -93,11 +118,15 @@ func CheckKVDBDeprecated(path string, bucketKey []byte, func HasActiveKVDB(path string, bucketKey []byte, timeout time.Duration) (bool, error) { - if _, err := os.Stat(path); os.IsNotExist(err) { + exists, err := KVDBFileExists(path) + if err != nil { + return false, err + } + if !exists { return false, nil } - err := CheckKVDBDeprecated(path, bucketKey, timeout) + err = CheckKVDBDeprecated(path, bucketKey, timeout) switch { case errors.Is(err, ErrKVDBDeprecated): return false, nil From 059554474e92b102dbbaeda5ee6e87c5fdf2ebd8 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Thu, 11 Jun 2026 23:04:37 +0200 Subject: [PATCH 05/69] db: skip SQL migration when no kvdb files exist Avoid creating legacy bbolt database files when the kvdb-to-SQL programmatic migration runs on a node that never had LiT kvdb state. Note that we only skip the creating the database file if there is no single bbolt database file. If for example there's only 1 existing bbolt database file, we will still create the new bbolt database file for the other 2 bbolt databases, as we for example need to pass the accounts & session databases to the firewalldb migration, and we'd want to avoid having the migrations become more complex by having to handle the case where the other databases are missing. --- db/migsets/programmatic_migrations.go | 36 +++++ db/migsets/programmatic_migrations_test.go | 152 +++++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 db/migsets/programmatic_migrations_test.go diff --git a/db/migsets/programmatic_migrations.go b/db/migsets/programmatic_migrations.go index 70825375..585bf016 100644 --- a/db/migsets/programmatic_migrations.go +++ b/db/migsets/programmatic_migrations.go @@ -6,12 +6,14 @@ import ( "encoding/binary" "errors" "fmt" + "path/filepath" "time" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" "github.com/lightninglabs/lightning-terminal/accounts" "github.com/lightninglabs/lightning-terminal/db/sqlcmig6" + "github.com/lightninglabs/lightning-terminal/db/tombstone" "github.com/lightninglabs/lightning-terminal/firewalldb" "github.com/lightninglabs/lightning-terminal/session" "github.com/lightningnetwork/lnd/clock" @@ -88,6 +90,40 @@ func kvdbToSqlProgrammaticMigration(ctx context.Context, _ *sqldb.BaseDB, clock clock.Clock, q *sqlcmig6.Queries) error { start := time.Now() + + accountsActive, err := tombstone.KVDBFileExists( + filepath.Join(accountsDir, accounts.DBFilename), + ) + if err != nil { + return fmt.Errorf("unable to inspect accounts kvdb: %w", err) + } + + sessionsActive, err := tombstone.KVDBFileExists( + filepath.Join(networkDir, session.DBFilename), + ) + if err != nil { + return fmt.Errorf("unable to inspect session kvdb: %w", err) + } + + firewallActive, err := tombstone.KVDBFileExists( + filepath.Join(networkDir, firewalldb.DBFilename), + ) + if err != nil { + return fmt.Errorf("unable to inspect rules kvdb: %w", err) + } + + if !accountsActive && !sessionsActive && !firewallActive { + log.Infof("Skipping KVDB to SQL migration for all stores: " + + "no legacy database files exist") + + return nil + } + + if basicClient == nil { + return errors.New("lightning client is required for " + + "migration but was nil") + } + log.Infof("Starting KVDB to SQL migration for all stores") accountStore, err := accounts.NewBoltStoreForMigration( diff --git a/db/migsets/programmatic_migrations_test.go b/db/migsets/programmatic_migrations_test.go new file mode 100644 index 00000000..49d3b110 --- /dev/null +++ b/db/migsets/programmatic_migrations_test.go @@ -0,0 +1,152 @@ +package migsets + +import ( + "context" + "net" + "os" + "path/filepath" + "testing" + "time" + + "github.com/lightninglabs/lightning-terminal/accounts" + "github.com/lightninglabs/lightning-terminal/db" + "github.com/lightninglabs/lightning-terminal/db/sqlcmig6" + "github.com/lightninglabs/lightning-terminal/firewalldb" + "github.com/lightninglabs/lightning-terminal/session" + "github.com/lightningnetwork/lnd/clock" + "github.com/lightningnetwork/lnd/lnrpc" + "github.com/lightningnetwork/lnd/sqldb/v2" + "github.com/stretchr/testify/require" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/test/bufconn" +) + +// TestKVDBToSQLProgrammaticMigrationSkipsMissingStores verifies that the kvdb +// to SQL migration does not create missing legacy kvdb files while scanning for +// stores to migrate. +func TestKVDBToSQLProgrammaticMigrationSkipsMissingStores(t *testing.T) { + t.Parallel() + + accountsDir := t.TempDir() + networkDir := t.TempDir() + + sqlStore := sqldb.NewTestSqliteDB(t, db.MakeTestMigrationSets()) + queries := sqlcmig6.NewForType( + sqlStore.BaseDB, sqlStore.BackendType, + ) + + err := kvdbToSqlProgrammaticMigration( + context.Background(), nil, accountsDir, networkDir, + sqlStore.BaseDB, clock.NewDefaultClock(), queries, + ) + require.NoError(t, err) + + requireNoFile(t, filepath.Join(accountsDir, accounts.DBFilename)) + requireNoFile(t, filepath.Join(networkDir, session.DBFilename)) + requireNoFile(t, filepath.Join(networkDir, firewalldb.DBFilename)) +} + +// TestKVDBToSQLProgrammaticMigrationRunsWithOneBBoltDBFiles verifies that the +// migration still runs when only the accounts kvdb exists, creates the missing +// legacy files, and migrates the existing account data to SQL. +func TestKVDBToSQLProgrammaticMigrationRunsWithOneBBoltDBFiles(t *testing.T) { + t.Parallel() + + ctx := context.Background() + testClock := clock.NewDefaultClock() + accountsDir := t.TempDir() + networkDir := t.TempDir() + + accountStore, err := accounts.NewBoltStore( + accountsDir, accounts.DBFilename, testClock, + ) + require.NoError(t, err) + + _, err = accountStore.NewAccount(ctx, 1234, time.Time{}, "acct-1") + require.NoError(t, err) + require.NoError(t, accountStore.Close()) + + sqlStore := sqldb.NewTestSqliteDB(t, db.MakeTestMigrationSets()) + queries := sqlcmig6.NewForType( + sqlStore.BaseDB, sqlStore.BackendType, + ) + + lndClient := newTestLightningClient(t) + + err = kvdbToSqlProgrammaticMigration( + ctx, lndClient, accountsDir, networkDir, + sqlStore.BaseDB, testClock, queries, + ) + require.NoError(t, err) + + requireFileExists(t, filepath.Join(accountsDir, accounts.DBFilename)) + requireFileExists(t, filepath.Join(networkDir, session.DBFilename)) + requireFileExists(t, filepath.Join(networkDir, firewalldb.DBFilename)) + + dbAccounts, err := queries.ListAllAccounts(ctx) + require.NoError(t, err) + require.Len(t, dbAccounts, 1) + + dbSessions, err := queries.ListSessions(ctx) + require.NoError(t, err) + require.Empty(t, dbSessions) +} + +func requireNoFile(t *testing.T, path string) { + t.Helper() + + _, err := os.Stat(path) + require.ErrorIs(t, err, os.ErrNotExist) +} + +func requireFileExists(t *testing.T, path string) { + t.Helper() + + _, err := os.Stat(path) + require.NoError(t, err) +} + +func newTestLightningClient(t *testing.T) lnrpc.LightningClient { + t.Helper() + + lis := bufconn.Listen(1024 * 1024) + server := grpc.NewServer() + lnrpc.RegisterLightningServer(server, &testLightningServer{}) + + go func() { + _ = server.Serve(lis) + }() + + t.Cleanup(func() { + server.Stop() + require.NoError(t, lis.Close()) + }) + + conn, err := grpc.DialContext( + context.Background(), "passthrough:///bufnet", + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithContextDialer( + func(context.Context, string) (net.Conn, error) { + return lis.Dial() + }, + ), + ) + require.NoError(t, err) + + t.Cleanup(func() { + require.NoError(t, conn.Close()) + }) + + return lnrpc.NewLightningClient(conn) +} + +type testLightningServer struct { + lnrpc.UnimplementedLightningServer +} + +func (t *testLightningServer) ListMacaroonIDs(context.Context, + *lnrpc.ListMacaroonIDsRequest) (*lnrpc.ListMacaroonIDsResponse, error) { + + return &lnrpc.ListMacaroonIDsResponse{}, nil +} From 6d2bf233e8ef44321982df1210532755f3991215 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Thu, 11 Jun 2026 12:35:00 +0200 Subject: [PATCH 06/69] config: block startup on mixed SQL backends Reject `litd` startup when another SQL database exists than the selected SQL `databasebackend` choice. When starting with the `databasebackend` config flag set to `postgres`, we check whether an `sqlite` database file exists at the default path and fail startup if it does. When starting with `sqlite`, we instead check whether `postgres` database configuration has been provided and, if so, whether a database exists at the configured `postgres` connection parameters. This prevents accidental switches between SQL backends. This is especially important because allowing such a switch would retrigger the KVDB-to-SQL migration for the newly configured SQL backend. In that scenario, the data would already have been migrated previously, meaning the migration source would be stale and could result in outdated data being imported. Additionally, it would create two divergent copies of the data across separate SQL backends. Since we do not support migrations between SQL backends, recovering from such a situation would not be possible. --- config.go | 127 +++++++++++++++++++++++++++++++++++++++++++ config_test.go | 143 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 270 insertions(+) create mode 100644 config_test.go diff --git a/config.go b/config.go index 0ea6fffb..6ff2b635 100644 --- a/config.go +++ b/config.go @@ -3,6 +3,7 @@ package terminal import ( "context" "crypto/tls" + "database/sql" "errors" "fmt" "io/ioutil" @@ -15,6 +16,7 @@ import ( "github.com/btcsuite/btcd/btcutil" "github.com/jessevdk/go-flags" + "github.com/lib/pq" "github.com/lightninglabs/faraday" "github.com/lightninglabs/faraday/chain" "github.com/lightninglabs/faraday/frdrpcserver" @@ -727,6 +729,11 @@ func loadAndValidateConfig(interceptor signal.Interceptor) (*Config, error) { ) } + err = validateExclusiveSQLBackends(cfg, litDir) + if err != nil { + return nil, err + } + err = cfg.DevConfig.Validate() if err != nil { return nil, err @@ -1149,6 +1156,126 @@ func readAutoMigrateKVDB(config *Config) error { return nil } +// validateExclusiveSQLBackends errors and thereby rejects startup when the +// inactive SQL backend still has data at its default location. This prevents +// silently switching to a different SQL store and starting against an empty +// database. +func validateExclusiveSQLBackends(cfg *Config, litDir string) error { + switch cfg.DatabaseBackend { + case DatabaseBackendPostgres: + sqlitePath := filepath.Join( + litDir, cfg.Network, defaultSqliteDatabaseFileName, + ) + + exists, err := sqliteDatabaseExists(sqlitePath) + if err != nil { + return fmt.Errorf("unable to check for existing "+ + "sqlite database file at %s: %w", sqlitePath, + err) + } + if exists { + return fmt.Errorf("cannot start litd with postgres "+ + "backend: sqlite database file already exists "+ + "at %s. If you really intend to switch to "+ + "postgres you must delete the sqlite "+ + "database (effectively deleting all stored "+ + "data) before restarting with postgres again", + sqlitePath) + } + + case DatabaseBackendSqlite: + exists, err := postgresDatabaseExists(cfg.Postgres) + if err != nil { + return fmt.Errorf("unable to check for existing "+ + "postgres database %q at %s:%d for user %q. "+ + "Note that a postgres configuration is set "+ + "despite sqlite being set as the "+ + "databasebackend: %w", cfg.Postgres.DBName, + cfg.Postgres.Host, cfg.Postgres.Port, + cfg.Postgres.User, err) + } + if exists { + return fmt.Errorf("cannot start litd with sqlite "+ + "backend: postgres database %q already exists "+ + "at %s:%d for user %q; If you really intend "+ + "to switch to sqlite you must delete the "+ + "postgres database (effectively deleting all "+ + "stored data) before restarting with sqlite "+ + "again", cfg.Postgres.DBName, cfg.Postgres.Host, + cfg.Postgres.Port, cfg.Postgres.User) + } + } + + return nil +} + +// sqliteDatabaseExists reports whether a SQLite database file exists at the +// given path. +func sqliteDatabaseExists(path string) (bool, error) { + _, err := os.Stat(path) + switch { + case err == nil: + return true, nil + + case os.IsNotExist(err): + return false, nil + + default: + return false, err + } +} + +// postgresDatabaseExists reports whether a Postgres database can be reached +// with the configured connection info. If the configuration does not identify +// a concrete database, the check is skipped. +func postgresDatabaseExists(cfg *db.PostgresConfig) (bool, error) { + if !hasPostgresConnectionInfo(cfg) { + return false, nil + } + + dbConn, err := sql.Open("postgres", cfg.DSN(false)) + if err != nil { + return false, fmt.Errorf("unable to check for existing "+ + "postgres database %q: %w", cfg.DBName, err) + } + defer dbConn.Close() + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + err = dbConn.PingContext(ctx) + switch { + case err == nil: + return true, nil + + case isMissingPostgresDatabase(err): + return false, nil + + default: + return false, fmt.Errorf("unable to check for existing "+ + "postgres database %q: %w", cfg.DBName, err) + } +} + +// hasPostgresConnectionInfo reports whether the config identifies a concrete +// Postgres database to probe. +func hasPostgresConnectionInfo(cfg *db.PostgresConfig) bool { + return cfg != nil && cfg.Host != "" && cfg.Port != 0 && + cfg.User != "" && cfg.DBName != "" +} + +// isMissingPostgresDatabase reports whether the probe failed because the +// target database does not exist. The lib/pq driver surfaces that as SQLSTATE +// 3D000 (invalid_catalog_name). +func isMissingPostgresDatabase(err error) bool { + var pqErr *pq.Error + if errors.As(err, &pqErr) { + return string(pqErr.Code) == "3D000" + } + + return false +} + func buildTLSConfigForHttp2(config *Config) (*tls.Config, error) { var tlsConfig *tls.Config diff --git a/config_test.go b/config_test.go new file mode 100644 index 00000000..03a7c6a4 --- /dev/null +++ b/config_test.go @@ -0,0 +1,143 @@ +package terminal + +import ( + "database/sql" + "os" + "path/filepath" + "testing" + + "github.com/lightninglabs/lightning-terminal/db" + "github.com/stretchr/testify/require" +) + +// TestBlockStartupForPostgresIfSqliteDBExists verifies that a Postgres startup +// is rejected when the default SQLite database file still exists for the +// selected network. +func TestBlockStartupForPostgresIfSqliteDBExists(t *testing.T) { + litDir := t.TempDir() + sqlitePath := filepath.Join( + litDir, "regtest", defaultSqliteDatabaseFileName, + ) + + fixture := db.NewTestPgFixture( + t, db.DefaultPostgresFixtureLifetime, true, + ) + t.Cleanup(func() { + fixture.TearDown(t) + }) + + require.NoError(t, os.MkdirAll(filepath.Dir(sqlitePath), 0700)) + require.NoError(t, os.WriteFile(sqlitePath, []byte("sqlite"), 0600)) + + cfg := &Config{ + DatabaseBackend: DatabaseBackendPostgres, + LitDir: litDir, + Network: "regtest", + Postgres: fixture.GetConfig(), + } + + err := validateExclusiveSQLBackends(cfg, litDir) + require.Error(t, err) + require.Contains(t, err.Error(), "sqlite database file already exists") + require.Contains(t, err.Error(), sqlitePath) +} + +// TestBlockStartupForSqliteIfPostgresDBExists verifies that a SQLite startup is +// rejected when the configured Postgres database already exists. +func TestBlockStartupForSqliteIfPostgresDBExists(t *testing.T) { + fixture := db.NewTestPgFixture( + t, db.DefaultPostgresFixtureLifetime, true, + ) + t.Cleanup(func() { + fixture.TearDown(t) + }) + + cfg := &Config{ + DatabaseBackend: DatabaseBackendSqlite, + Postgres: fixture.GetConfig(), + } + + err := validateExclusiveSQLBackends(cfg, "") + require.Error(t, err) + require.Contains(t, err.Error(), "postgres database") + require.Contains(t, err.Error(), cfg.Postgres.DBName) +} + +// TestDontBlockSqliteOnlyStartup verifies that SQLite startup is allowed when +// no concrete Postgres database is configured. +func TestDontBlockSqliteOnlyStartup(t *testing.T) { + cfg := &Config{ + DatabaseBackend: DatabaseBackendSqlite, + } + + require.NoError(t, validateExclusiveSQLBackends(cfg, "")) +} + +// TestDontBlockSqliteStartupIfConfiguredPostgresDoesntExist verifies that a +// SQLite startup is allowed when the configured Postgres database does not +// exist. +func TestDontBlockSqliteStartupIfConfiguredPostgresDoesntExist(t *testing.T) { + fixture := db.NewTestPgFixture( + t, db.DefaultPostgresFixtureLifetime, true, + ) + t.Cleanup(func() { + fixture.TearDown(t) + }) + + pgCfg := fixture.GetConfig() + pgCfg.DBName = "does_not_exist_for_config_validation" + + cfg := &Config{ + DatabaseBackend: DatabaseBackendSqlite, + Postgres: pgCfg, + } + + require.NoError(t, validateExclusiveSQLBackends(cfg, "")) + + // We also validate that the validateExclusiveSQLBackends passed because + // the db with the configured DBName doesn't exist and not because the + // connection parameters are wrong. This proves that we're ok with a + // postgres setup existing, as long as the specific database doesn't + // exist. + dbConn, err := sql.Open("postgres", pgCfg.DSN(false)) + require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, dbConn.Close()) + }) + + err = dbConn.Ping() + require.Error(t, err) + require.True(t, isMissingPostgresDatabase(err)) +} + +// TestDontBlockPostgresOnlyStartup verifies that a Postgres is allowed when +// no sqlite database file exists for the selected network, despite the actual +// folder where the file would be placed exists. +func TestDontBlockPostgresOnlyStartup(t *testing.T) { + litDir := t.TempDir() + sqlitePath := filepath.Join( + litDir, "regtest", defaultSqliteDatabaseFileName, + ) + + fixture := db.NewTestPgFixture( + t, db.DefaultPostgresFixtureLifetime, true, + ) + t.Cleanup(func() { + fixture.TearDown(t) + }) + + require.NoError(t, os.MkdirAll(filepath.Dir(sqlitePath), 0700)) + + // NOTE: we don't write any file to the sqlite path here, so the sqlite + // database file never exists, only the default directory where it would + // be located. + + cfg := &Config{ + DatabaseBackend: DatabaseBackendPostgres, + LitDir: litDir, + Network: "regtest", + Postgres: fixture.GetConfig(), + } + + require.NoError(t, validateExclusiveSQLBackends(cfg, litDir)) +} From 42c31055379e4fa9699dca69dd2a4223ae568a89 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Tue, 16 Jun 2026 21:38:35 +0200 Subject: [PATCH 07/69] terminal: thread a context into postgresDatabaseExists --- config.go | 18 ++++++++++++------ config_test.go | 18 +++++++++++++----- terminal.go | 2 +- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/config.go b/config.go index 6ff2b635..fa39c6bc 100644 --- a/config.go +++ b/config.go @@ -578,7 +578,9 @@ func defaultConfig() *Config { // loadAndValidateConfig loads the terminal's main configuration and validates // its content. -func loadAndValidateConfig(interceptor signal.Interceptor) (*Config, error) { +func loadAndValidateConfig(ctx context.Context, + interceptor signal.Interceptor) (*Config, error) { + // Start with the default configuration. preCfg := defaultConfig() @@ -729,7 +731,7 @@ func loadAndValidateConfig(interceptor signal.Interceptor) (*Config, error) { ) } - err = validateExclusiveSQLBackends(cfg, litDir) + err = validateExclusiveSQLBackends(ctx, cfg, litDir) if err != nil { return nil, err } @@ -1160,7 +1162,9 @@ func readAutoMigrateKVDB(config *Config) error { // inactive SQL backend still has data at its default location. This prevents // silently switching to a different SQL store and starting against an empty // database. -func validateExclusiveSQLBackends(cfg *Config, litDir string) error { +func validateExclusiveSQLBackends(ctx context.Context, cfg *Config, + litDir string) error { + switch cfg.DatabaseBackend { case DatabaseBackendPostgres: sqlitePath := filepath.Join( @@ -1184,7 +1188,7 @@ func validateExclusiveSQLBackends(cfg *Config, litDir string) error { } case DatabaseBackendSqlite: - exists, err := postgresDatabaseExists(cfg.Postgres) + exists, err := postgresDatabaseExists(ctx, cfg.Postgres) if err != nil { return fmt.Errorf("unable to check for existing "+ "postgres database %q at %s:%d for user %q. "+ @@ -1228,7 +1232,9 @@ func sqliteDatabaseExists(path string) (bool, error) { // postgresDatabaseExists reports whether a Postgres database can be reached // with the configured connection info. If the configuration does not identify // a concrete database, the check is skipped. -func postgresDatabaseExists(cfg *db.PostgresConfig) (bool, error) { +func postgresDatabaseExists(ctx context.Context, + cfg *db.PostgresConfig) (bool, error) { + if !hasPostgresConnectionInfo(cfg) { return false, nil } @@ -1240,7 +1246,7 @@ func postgresDatabaseExists(cfg *db.PostgresConfig) (bool, error) { } defer dbConn.Close() - ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + ctx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel() err = dbConn.PingContext(ctx) diff --git a/config_test.go b/config_test.go index 03a7c6a4..0a5d2430 100644 --- a/config_test.go +++ b/config_test.go @@ -36,7 +36,7 @@ func TestBlockStartupForPostgresIfSqliteDBExists(t *testing.T) { Postgres: fixture.GetConfig(), } - err := validateExclusiveSQLBackends(cfg, litDir) + err := validateExclusiveSQLBackends(t.Context(), cfg, litDir) require.Error(t, err) require.Contains(t, err.Error(), "sqlite database file already exists") require.Contains(t, err.Error(), sqlitePath) @@ -57,7 +57,7 @@ func TestBlockStartupForSqliteIfPostgresDBExists(t *testing.T) { Postgres: fixture.GetConfig(), } - err := validateExclusiveSQLBackends(cfg, "") + err := validateExclusiveSQLBackends(t.Context(), cfg, "") require.Error(t, err) require.Contains(t, err.Error(), "postgres database") require.Contains(t, err.Error(), cfg.Postgres.DBName) @@ -70,7 +70,9 @@ func TestDontBlockSqliteOnlyStartup(t *testing.T) { DatabaseBackend: DatabaseBackendSqlite, } - require.NoError(t, validateExclusiveSQLBackends(cfg, "")) + require.NoError( + t, validateExclusiveSQLBackends(t.Context(), cfg, ""), + ) } // TestDontBlockSqliteStartupIfConfiguredPostgresDoesntExist verifies that a @@ -92,7 +94,9 @@ func TestDontBlockSqliteStartupIfConfiguredPostgresDoesntExist(t *testing.T) { Postgres: pgCfg, } - require.NoError(t, validateExclusiveSQLBackends(cfg, "")) + require.NoError( + t, validateExclusiveSQLBackends(t.Context(), cfg, ""), + ) // We also validate that the validateExclusiveSQLBackends passed because // the db with the configured DBName doesn't exist and not because the @@ -139,5 +143,9 @@ func TestDontBlockPostgresOnlyStartup(t *testing.T) { Postgres: fixture.GetConfig(), } - require.NoError(t, validateExclusiveSQLBackends(cfg, litDir)) + require.NoError( + t, validateExclusiveSQLBackends( + t.Context(), cfg, litDir, + ), + ) } diff --git a/terminal.go b/terminal.go index 9fda836b..f4d01b65 100644 --- a/terminal.go +++ b/terminal.go @@ -289,7 +289,7 @@ func (g *LightningTerminal) Run(ctx context.Context) error { } }() - cfg, err := loadAndValidateConfig(shutdownInterceptor) + cfg, err := loadAndValidateConfig(ctx, shutdownInterceptor) if err != nil { return fmt.Errorf("could not load config: %w", err) } From 0b8fd174574e1bbf81e3ad5dbd25e7a35ddd0dbe Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Sun, 31 May 2026 16:04:07 -0500 Subject: [PATCH 08/69] litcli: add custom permissions to session add Add support for the `--permission` flag (which takes `entity:action` pairs), similar to `lncli bakemacaroon`, when creating custom sessions with `litcli sessions add`. Supports repeated flags, comma-separated lists, and mixed input. --- cmd/litcli/sessions.go | 75 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 6 deletions(-) diff --git a/cmd/litcli/sessions.go b/cmd/litcli/sessions.go index e6d1c8f2..44f51290 100644 --- a/cmd/litcli/sessions.go +++ b/cmd/litcli/sessions.go @@ -3,6 +3,7 @@ package main import ( "encoding/hex" "fmt" + "strings" "time" "github.com/lightninglabs/lightning-terminal/litrpc" @@ -85,6 +86,20 @@ var addSessionCommand = cli.Command{ "For example, '/lnrpc\\..*' will result in " + "all `lnrpc` permissions being included.", }, + cli.StringSliceFlag{ + Name: "permission", + Usage: "A permission that should be included in the " + + "macaroon of a custom session, in the " + + "format entity:action (e.g. info:read), " + + "similar to lncli bakemacaroon. " + + "Note that this flag will only be used if " + + "the 'type' flag is set to 'custom'. " + + "This flag can be specified multiple times, " + + "comma-separated, or mixed (e.g., " + + "'info:read,onchain:write' or " + + "--permission info:read --permission " + + "onchain:write).", + }, cli.StringFlag{ Name: "account_id", Usage: "The account id that should be used for " + @@ -109,12 +124,12 @@ func addSession(cli *cli.Context) error { return err } - var macPerms []*litrpc.MacaroonPermission - for _, uri := range cli.StringSlice("uri") { - macPerms = append(macPerms, &litrpc.MacaroonPermission{ - Entity: macaroons.PermissionEntityCustomURI, - Action: uri, - }) + macPerms, err := parseCustomPermissions( + cli.StringSlice("uri"), + cli.StringSlice("permission"), + ) + if err != nil { + return err } sessionLength := time.Second * time.Duration(cli.Uint64("expiry")) @@ -304,3 +319,51 @@ func revokeSession(cli *cli.Context) error { return nil } + +func parseCustomPermissions(uris, permissions []string) ( + []*litrpc.MacaroonPermission, error) { + + var macPerms []*litrpc.MacaroonPermission + + for _, uri := range uris { + macPerms = append(macPerms, &litrpc.MacaroonPermission{ + Entity: macaroons.PermissionEntityCustomURI, + Action: uri, + }) + } + + for _, perm := range permissions { + parts := strings.Split(perm, ",") + + for _, part := range parts { + part = strings.TrimSpace(part) + + if part == "" { + continue + } + + subParts := strings.Split(part, ":") + if len(subParts) != 2 { + return nil, fmt.Errorf("invalid permission "+ + "format '%s', must be entity:action", + part) + } + + entity := strings.TrimSpace(subParts[0]) + action := strings.TrimSpace(subParts[1]) + + if entity == "" || action == "" { + return nil, fmt.Errorf("invalid permission "+ + "format '%s', entity and action "+ + "must not be empty", part) + } + + macPerms = append(macPerms, &litrpc.MacaroonPermission{ + Entity: entity, + Action: action, + }) + } + } + + return macPerms, nil +} From 04f06144bd862f959806d2fe0dea06f3b346e32c Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Sun, 31 May 2026 16:04:11 -0500 Subject: [PATCH 09/69] litcli: add custom session permission unit tests Add comprehensive unit tests for the parsing and validation logic of the custom permissions parser (`parseCustomPermissions`) in `litcli`. --- cmd/litcli/sessions_test.go | 173 ++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 cmd/litcli/sessions_test.go diff --git a/cmd/litcli/sessions_test.go b/cmd/litcli/sessions_test.go new file mode 100644 index 00000000..bb289679 --- /dev/null +++ b/cmd/litcli/sessions_test.go @@ -0,0 +1,173 @@ +package main + +import ( + "testing" + + "github.com/lightninglabs/lightning-terminal/litrpc" + "github.com/lightningnetwork/lnd/macaroons" + "github.com/stretchr/testify/require" +) + +// TestParseCustomPermissions tests that custom permissions (URIs and +// entity:action pairs) are parsed and validated correctly. +func TestParseCustomPermissions(t *testing.T) { + customURI := macaroons.PermissionEntityCustomURI + + tests := []struct { + name string + uris []string + permissions []string + expected []*litrpc.MacaroonPermission + expectErr bool + errContains string + }{ + { + name: "valid URIs only", + uris: []string{ + "/lnrpc.Lightning/GetInfo", + "/lnrpc.Lightning/UpdateChannelPolicy", + }, + permissions: nil, + expected: []*litrpc.MacaroonPermission{ + { + Entity: customURI, + Action: "/lnrpc.Lightning/GetInfo", + }, + { + Entity: customURI, + Action: "/lnrpc.Lightning/" + + "UpdateChannelPolicy", + }, + }, + expectErr: false, + }, + { + name: "valid permissions only - repeated flags", + uris: nil, + permissions: []string{ + "info:read", + "offchain:write", + }, + expected: []*litrpc.MacaroonPermission{ + { + Entity: "info", + Action: "read", + }, + { + Entity: "offchain", + Action: "write", + }, + }, + expectErr: false, + }, + { + name: "valid permissions only - comma separated", + uris: nil, + permissions: []string{ + "info:read,offchain:write", + }, + expected: []*litrpc.MacaroonPermission{ + { + Entity: "info", + Action: "read", + }, + { + Entity: "offchain", + Action: "write", + }, + }, + expectErr: false, + }, + { + name: "valid permissions only - mixed with whitespace", + uris: nil, + permissions: []string{ + " info:read , offchain:write ", + }, + expected: []*litrpc.MacaroonPermission{ + { + Entity: "info", + Action: "read", + }, + { + Entity: "offchain", + Action: "write", + }, + }, + expectErr: false, + }, + { + name: "combination of URIs and permissions", + uris: []string{ + "/lnrpc.Lightning/GetInfo", + }, + permissions: []string{ + "info:read,offchain:write", + "onchain:read", + }, + expected: []*litrpc.MacaroonPermission{ + { + Entity: customURI, + Action: "/lnrpc.Lightning/GetInfo", + }, + { + Entity: "info", + Action: "read", + }, + { + Entity: "offchain", + Action: "write", + }, + { + Entity: "onchain", + Action: "read", + }, + }, + expectErr: false, + }, + { + name: "invalid perm - missing colon", + uris: nil, + permissions: []string{"inforead"}, + expectErr: true, + errContains: "must be entity:action", + }, + { + name: "invalid perm - multiple colons", + uris: nil, + permissions: []string{"info:read:extra"}, + expectErr: true, + errContains: "must be entity:action", + }, + { + name: "invalid perm - empty entity", + uris: nil, + permissions: []string{":read"}, + expectErr: true, + errContains: "entity and action must not be empty", + }, + { + name: "invalid perm - empty action", + uris: nil, + permissions: []string{"info:"}, + expectErr: true, + errContains: "entity and action must not be empty", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + actual, err := parseCustomPermissions( + tt.uris, tt.permissions, + ) + if tt.expectErr { + require.Error(t, err) + require.Contains(t, err.Error(), tt.errContains) + require.Nil(t, actual) + } else { + require.NoError(t, err) + require.Equal(t, tt.expected, actual) + } + }) + } +} From 484d5d789e1094a0d464bc48b69fd5819f038935 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Sun, 31 May 2026 16:27:46 -0500 Subject: [PATCH 10/69] itest: add custom permissions integration tests Add a new sub-test case to verify that custom `entity:action` permissions are correctly handled and enforced for LNC custom sessions. The test uses the `info:read` permission to assert that the connection can only query LND's GetInfo endpoint and is blocked on other endpoints. Tests are added for both integrated mode and remote mode suites. --- itest/litd_mode_integrated_test.go | 49 ++++++++++++++++++++++++++++++ itest/litd_mode_remote_test.go | 49 ++++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+) diff --git a/itest/litd_mode_integrated_test.go b/itest/litd_mode_integrated_test.go index 9cce6bf8..889fca0b 100644 --- a/itest/litd_mode_integrated_test.go +++ b/itest/litd_mode_integrated_test.go @@ -692,6 +692,55 @@ func integratedTestSuite(ctx context.Context, net *NetworkHarness, t *testing.T, }) } }) + + t.Run("lnc auth custom entity action perms", func(tt *testing.T) { + cfg := net.Alice.Cfg + + ctx := context.Background() + ctxt, cancel := context.WithTimeout(ctx, defaultTimeout) + defer cancel() + + customPerms := []*litrpc.MacaroonPermission{ + { + Entity: "info", + Action: "read", + }, + } + + rawLNCConn := setUpLNCConn( + ctxt, t, cfg.LitAddr(), cfg.LitTLSCertPath, + cfg.LitMacPath, + litrpc.SessionType_TYPE_MACAROON_CUSTOM, + customPerms, + ) + defer rawLNCConn.Close() + + for _, endpoint := range endpoints { + endpoint := endpoint + endpointDisabled := subServersDisabled && + endpoint.canDisable + + expectedErr := "permission denied" + if endpoint.noAuth { + expectedErr = "unknown service" + } + + tt.Run(endpoint.name+" lit port", func(ttt *testing.T) { + // Only lnrpc (GetInfo) is allowed, as we + // only granted the "info:read" permission. + allowed := endpoint.name == "lnrpc" + + runLNCAuthTest( + ttt, rawLNCConn, endpoint.requestFn, + endpoint.successPattern, + allowed, expectedErr, + endpointDisabled, + endpoint.disabledPattern, + endpoint.noAuth, + ) + }) + } + }) } func uiPasswordAuthCheck(t *testing.T, cfg *LitNodeConfig, subServersDisabled, diff --git a/itest/litd_mode_remote_test.go b/itest/litd_mode_remote_test.go index 35df9048..1ba6303f 100644 --- a/itest/litd_mode_remote_test.go +++ b/itest/litd_mode_remote_test.go @@ -259,6 +259,55 @@ func remoteTestSuite(ctx context.Context, net *NetworkHarness, t *testing.T, } }) + t.Run("lnc auth custom entity action perms", func(tt *testing.T) { + cfg := net.Bob.Cfg + + ctx := context.Background() + ctxt, cancel := context.WithTimeout(ctx, defaultTimeout) + defer cancel() + + customPerms := []*litrpc.MacaroonPermission{ + { + Entity: "info", + Action: "read", + }, + } + + rawLNCConn := setUpLNCConn( + ctxt, tt, cfg.LitAddr(), cfg.LitTLSCertPath, + cfg.LitMacPath, + litrpc.SessionType_TYPE_MACAROON_CUSTOM, + customPerms, + ) + defer rawLNCConn.Close() + + for _, endpoint := range endpoints { + endpoint := endpoint + endpointDisabled := subServersDisabled && + endpoint.canDisable + + expectedErr := "permission denied" + if endpoint.noAuth { + expectedErr = "unknown service" + } + + tt.Run(endpoint.name+" lit port", func(ttt *testing.T) { + // Only lnrpc (GetInfo) is allowed, as we + // only granted the "info:read" permission. + allowed := endpoint.name == "lnrpc" + + runLNCAuthTest( + ttt, rawLNCConn, endpoint.requestFn, + endpoint.successPattern, + allowed, expectedErr, + endpointDisabled, + endpoint.disabledPattern, + endpoint.noAuth, + ) + }) + } + }) + t.Run("gRPC super macaroon account system test", func(tt *testing.T) { cfg := net.Bob.Cfg From 05d05669865bf426837795f58515c50410c9dbc2 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Sun, 31 May 2026 16:04:21 -0500 Subject: [PATCH 11/69] docs: add release note for session custom perms Add a release note to the upcoming release notes document for 0.17.0 detailing the newly added support for custom permissions via the `--permission` flag in `litcli sessions add`. --- docs/release-notes/release-notes-0.17.0.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/release-notes/release-notes-0.17.0.md b/docs/release-notes/release-notes-0.17.0.md index 3bed9eda..a836e841 100644 --- a/docs/release-notes/release-notes-0.17.0.md +++ b/docs/release-notes/release-notes-0.17.0.md @@ -85,6 +85,12 @@ `litcli accounts update debit` and `litcli accounts update credit` commands to modify an account's balance. +* [Add custom permissions support to sessions](https://github.com/lightninglabs/lightning-terminal/pull/1317): + Added the `--permission` flag to `litcli sessions add` to allow specifying + custom `entity:action` permissions (e.g. `info:read`), similar to + `lncli bakemacaroon`, for sessions of type `custom`. Supports repeated flags, + comma-separated lists, and mixed input. + ### Technical and Architectural Updates ## RPC Updates From 02a1b3130332181630ab1d088d1686c5159bf837 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Mon, 22 Jun 2026 03:27:39 -0500 Subject: [PATCH 12/69] itest: fix testRequestLoggerDisable node cleanup The test node variable was reassigned in a later step. This broke the deferred cleanup closure and leaked the reqlog-on node process. The leaked process caused random cleanup timeouts under heavy test load. Fixed by copying the node to a local variable before the defer. --- itest/litd_firewall_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/itest/litd_firewall_test.go b/itest/litd_firewall_test.go index c1fb8573..be16725c 100644 --- a/itest/litd_firewall_test.go +++ b/itest/litd_firewall_test.go @@ -308,8 +308,9 @@ func testRequestLoggerDisable(ctx context.Context, net *NetworkHarness, "--autopilot.disable", ) require.NoError(t.t, err) + reqLogOnNode := node defer func() { - _ = net.ShutdownNode(node) + _ = net.ShutdownNode(reqLogOnNode) }() rawConn, err = connectLitRPC( From 163cccba891eea939e2cf099c0964222d84ed143 Mon Sep 17 00:00:00 2001 From: 0xfandom Date: Tue, 23 Jun 2026 14:58:19 +0530 Subject: [PATCH 13/69] test: add coverage for account checkLabel validation checkLabel rejects labels that could be mistaken for a hex-encoded account ID. Add a table-driven test covering the accepted cases (empty, plain text, short hex, and non-hex strings of account-ID length) as well as the rejected cases (lower- and upper-case hex strings of account-ID length). Signed-off-by: 0xfandom --- accounts/store_test.go | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/accounts/store_test.go b/accounts/store_test.go index bee1d3a9..e5469385 100644 --- a/accounts/store_test.go +++ b/accounts/store_test.go @@ -778,3 +778,61 @@ func TestLastInvoiceIndexes(t *testing.T) { require.EqualValues(t, 7, add) require.EqualValues(t, 99, settle) } + +// TestCheckLabel ensures that only labels that could be mistaken for a hex +// encoded account ID are rejected, while all other labels (including the empty +// label) are accepted. +func TestCheckLabel(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + label string + expectErr bool + }{{ + name: "empty label is allowed", + label: "", + }, { + name: "plain text label is allowed", + label: "my account", + }, { + name: "short hex label is allowed", + label: "00112233", + }, { + name: "non-hex label with account ID length is allowed", + // 16 characters long, matching an encoded account ID, but not + // valid hex. + label: "zzzzzzzzzzzzzzzz", + }, { + name: "lowercase hex label with account ID length is rejected", + // 16 characters of valid hex, exactly the length of an encoded + // account ID. + label: "0011223344556677", + expectErr: true, + }, { + name: "uppercase hex label with account ID length is rejected", + // hex.DecodeString also accepts uppercase digits, so this must + // be rejected as well. + label: "00112233445566AA", + expectErr: true, + }} + + for _, tc := range tests { + tc := tc + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + err := checkLabel(tc.label) + if tc.expectErr { + require.ErrorContains( + t, err, "is not allowed as it can be "+ + "mistaken", + ) + + return + } + + require.NoError(t, err) + }) + } +} From 5c34be31f44ad347e071d6b38db70d8972105efd Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Mon, 22 Jun 2026 12:07:42 +0200 Subject: [PATCH 14/69] terminal: bump `lnd`, `loop`, `looprpc` & `swapserverrpc` Bump `lnd` to version `v0.21.1-beta`, as well as `loop` to version `v0.33.3-beta`. Additionally, we bump `looprpc` & `swapserverrpc` to versions compatible with the new `loop` version. --- app/src/types/generated/loop_pb.d.ts | 126 ++- app/src/types/generated/loop_pb.js | 875 +++++++++++++----- app/src/types/generated/loop_pb_service.d.ts | 19 + app/src/types/generated/loop_pb_service.js | 40 + .../generated/swapserverrpc/server_pb.d.ts | 99 ++ .../generated/swapserverrpc/server_pb.js | 780 +++++++++++++++- go.mod | 10 +- go.sum | 20 +- proto/loop.proto | 119 ++- proto/swapserverrpc/server.proto | 38 + 10 files changed, 1801 insertions(+), 325 deletions(-) diff --git a/app/src/types/generated/loop_pb.d.ts b/app/src/types/generated/loop_pb.d.ts index 6ab8eac0..6286d4c7 100644 --- a/app/src/types/generated/loop_pb.d.ts +++ b/app/src/types/generated/loop_pb.d.ts @@ -3,6 +3,49 @@ import * as jspb from "google-protobuf"; import * as swapserverrpc_common_pb from "./swapserverrpc/common_pb"; +import * as lnd_pb from "./lnd_pb"; + +export class StaticOpenChannelRequest extends jspb.Message { + hasOpenChannelRequest(): boolean; + clearOpenChannelRequest(): void; + getOpenChannelRequest(): lnd_pb.OpenChannelRequest | undefined; + setOpenChannelRequest(value?: lnd_pb.OpenChannelRequest): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StaticOpenChannelRequest.AsObject; + static toObject(includeInstance: boolean, msg: StaticOpenChannelRequest): StaticOpenChannelRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StaticOpenChannelRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StaticOpenChannelRequest; + static deserializeBinaryFromReader(message: StaticOpenChannelRequest, reader: jspb.BinaryReader): StaticOpenChannelRequest; +} + +export namespace StaticOpenChannelRequest { + export type AsObject = { + openChannelRequest?: lnd_pb.OpenChannelRequest.AsObject, + } +} + +export class StaticOpenChannelResponse extends jspb.Message { + getChannelOpenOutpoint(): string; + setChannelOpenOutpoint(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): StaticOpenChannelResponse.AsObject; + static toObject(includeInstance: boolean, msg: StaticOpenChannelResponse): StaticOpenChannelResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: StaticOpenChannelResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): StaticOpenChannelResponse; + static deserializeBinaryFromReader(message: StaticOpenChannelResponse, reader: jspb.BinaryReader): StaticOpenChannelResponse; +} + +export namespace StaticOpenChannelResponse { + export type AsObject = { + channelOpenOutpoint: string, + } +} export class StopDaemonRequest extends jspb.Message { serializeBinary(): Uint8Array; @@ -1247,6 +1290,9 @@ export class LiquidityParameters extends jspb.Message { setEasyAutoloopExcludedPeersList(value: Array): void; addEasyAutoloopExcludedPeers(value: Uint8Array | string, index?: number): Uint8Array | string; + getLoopInSource(): LoopInSourceMap[keyof LoopInSourceMap]; + setLoopInSource(value: LoopInSourceMap[keyof LoopInSourceMap]): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): LiquidityParameters.AsObject; static toObject(includeInstance: boolean, msg: LiquidityParameters): LiquidityParameters.AsObject; @@ -1286,6 +1332,7 @@ export namespace LiquidityParameters { easyAssetParamsMap: Array<[string, EasyAssetAutoloopParams.AsObject]>, fastSwapPublication: boolean, easyAutoloopExcludedPeersList: Array, + loopInSource: LoopInSourceMap[keyof LoopInSourceMap], } } @@ -1450,6 +1497,11 @@ export class SuggestSwapsResponse extends jspb.Message { setLoopInList(value: Array): void; addLoopIn(value?: LoopInRequest, index?: number): LoopInRequest; + clearStaticLoopInList(): void; + getStaticLoopInList(): Array; + setStaticLoopInList(value: Array): void; + addStaticLoopIn(value?: StaticAddressLoopInRequest, index?: number): StaticAddressLoopInRequest; + clearDisqualifiedList(): void; getDisqualifiedList(): Array; setDisqualifiedList(value: Array): void; @@ -1469,6 +1521,7 @@ export namespace SuggestSwapsResponse { export type AsObject = { loopOutList: Array, loopInList: Array, + staticLoopInList: Array, disqualifiedList: Array, } } @@ -1921,9 +1974,9 @@ export namespace Utxo { export class WithdrawDepositsRequest extends jspb.Message { clearOutpointsList(): void; - getOutpointsList(): Array; - setOutpointsList(value: Array): void; - addOutpoints(value?: OutPoint, index?: number): OutPoint; + getOutpointsList(): Array; + setOutpointsList(value: Array): void; + addOutpoints(value?: lnd_pb.OutPoint, index?: number): lnd_pb.OutPoint; getAll(): boolean; setAll(value: boolean): void; @@ -1949,7 +2002,7 @@ export class WithdrawDepositsRequest extends jspb.Message { export namespace WithdrawDepositsRequest { export type AsObject = { - outpointsList: Array, + outpointsList: Array, all: boolean, destAddr: string, satPerVbyte: string, @@ -1981,36 +2034,6 @@ export namespace WithdrawDepositsResponse { } } -export class OutPoint extends jspb.Message { - getTxidBytes(): Uint8Array | string; - getTxidBytes_asU8(): Uint8Array; - getTxidBytes_asB64(): string; - setTxidBytes(value: Uint8Array | string): void; - - getTxidStr(): string; - setTxidStr(value: string): void; - - getOutputIndex(): number; - setOutputIndex(value: number): void; - - serializeBinary(): Uint8Array; - toObject(includeInstance?: boolean): OutPoint.AsObject; - static toObject(includeInstance: boolean, msg: OutPoint): OutPoint.AsObject; - static extensions: {[key: number]: jspb.ExtensionFieldInfo}; - static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; - static serializeBinaryToWriter(message: OutPoint, writer: jspb.BinaryWriter): void; - static deserializeBinary(bytes: Uint8Array): OutPoint; - static deserializeBinaryFromReader(message: OutPoint, reader: jspb.BinaryReader): OutPoint; -} - -export namespace OutPoint { - export type AsObject = { - txidBytes: Uint8Array | string, - txidStr: string, - outputIndex: number, - } -} - export class ListStaticAddressDepositsRequest extends jspb.Message { getStateFilter(): DepositStateMap[keyof DepositStateMap]; setStateFilter(value: DepositStateMap[keyof DepositStateMap]): void; @@ -2179,6 +2202,9 @@ export class StaticAddressSummaryResponse extends jspb.Message { getValueHtlcTimeoutSweepsSatoshis(): string; setValueHtlcTimeoutSweepsSatoshis(value: string): void; + getValueChannelsOpened(): string; + setValueChannelsOpened(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StaticAddressSummaryResponse.AsObject; static toObject(includeInstance: boolean, msg: StaticAddressSummaryResponse): StaticAddressSummaryResponse.AsObject; @@ -2200,6 +2226,7 @@ export namespace StaticAddressSummaryResponse { valueWithdrawnSatoshis: string, valueLoopedInSatoshis: string, valueHtlcTimeoutSweepsSatoshis: string, + valueChannelsOpened: string, } } @@ -2318,6 +2345,21 @@ export class StaticAddressLoopInSwap extends jspb.Message { setDepositsList(value: Array): void; addDeposits(value?: Deposit, index?: number): Deposit; + getInitiationTime(): string; + setInitiationTime(value: string): void; + + getLastUpdateTime(): string; + setLastUpdateTime(value: string): void; + + getCostServer(): string; + setCostServer(value: string): void; + + getCostOnchain(): string; + setCostOnchain(value: string): void; + + getCostOffchain(): string; + setCostOffchain(value: string): void; + serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): StaticAddressLoopInSwap.AsObject; static toObject(includeInstance: boolean, msg: StaticAddressLoopInSwap): StaticAddressLoopInSwap.AsObject; @@ -2336,6 +2378,11 @@ export namespace StaticAddressLoopInSwap { swapAmountSatoshis: string, paymentRequestAmountSatoshis: string, depositsList: Array, + initiationTime: string, + lastUpdateTime: string, + costServer: string, + costOnchain: string, + costOffchain: string, } } @@ -2661,6 +2708,13 @@ export interface FailureReasonMap { export const FailureReason: FailureReasonMap; +export interface LoopInSourceMap { + LOOP_IN_SOURCE_WALLET: 0; + LOOP_IN_SOURCE_STATIC_ADDRESS: 1; +} + +export const LoopInSource: LoopInSourceMap; + export interface LiquidityRuleTypeMap { UNKNOWN: 0; THRESHOLD: 1; @@ -2683,6 +2737,8 @@ export interface AutoReasonMap { AUTO_REASON_LIQUIDITY_OK: 11; AUTO_REASON_BUDGET_INSUFFICIENT: 12; AUTO_REASON_FEE_INSUFFICIENT: 13; + AUTO_REASON_STATIC_LOOP_IN_NO_CANDIDATE: 14; + AUTO_REASON_CUSTOM_CHANNEL_DATA: 15; } export const AutoReason: AutoReasonMap; @@ -2699,6 +2755,8 @@ export interface DepositStateMap { PUBLISH_EXPIRED: 8; WAIT_FOR_EXPIRY_SWEEP: 9; EXPIRED: 10; + OPENING_CHANNEL: 11; + CHANNEL_PUBLISHED: 12; } export const DepositState: DepositStateMap; diff --git a/app/src/types/generated/loop_pb.js b/app/src/types/generated/loop_pb.js index 6d8a2183..87b704a4 100644 --- a/app/src/types/generated/loop_pb.js +++ b/app/src/types/generated/loop_pb.js @@ -26,6 +26,8 @@ var global = var swapserverrpc_common_pb = require('./swapserverrpc/common_pb.js'); goog.object.extend(proto, swapserverrpc_common_pb); +var lnd_pb = require('./lnd_pb.js'); +goog.object.extend(proto, lnd_pb); goog.exportSymbol('proto.looprpc.AbandonSwapRequest', null, global); goog.exportSymbol('proto.looprpc.AbandonSwapResponse', null, global); goog.exportSymbol('proto.looprpc.AddressType', null, global); @@ -73,12 +75,12 @@ goog.exportSymbol('proto.looprpc.ListSwapsResponse', null, global); goog.exportSymbol('proto.looprpc.ListUnspentDepositsRequest', null, global); goog.exportSymbol('proto.looprpc.ListUnspentDepositsResponse', null, global); goog.exportSymbol('proto.looprpc.LoopInRequest', null, global); +goog.exportSymbol('proto.looprpc.LoopInSource', null, global); goog.exportSymbol('proto.looprpc.LoopOutRequest', null, global); goog.exportSymbol('proto.looprpc.LoopStats', null, global); goog.exportSymbol('proto.looprpc.MonitorRequest', null, global); goog.exportSymbol('proto.looprpc.NewStaticAddressRequest', null, global); goog.exportSymbol('proto.looprpc.NewStaticAddressResponse', null, global); -goog.exportSymbol('proto.looprpc.OutPoint', null, global); goog.exportSymbol('proto.looprpc.OutQuoteResponse', null, global); goog.exportSymbol('proto.looprpc.OutTermsResponse', null, global); goog.exportSymbol('proto.looprpc.ProbeRequest', null, global); @@ -96,6 +98,8 @@ goog.exportSymbol('proto.looprpc.StaticAddressLoopInSwapState', null, global); goog.exportSymbol('proto.looprpc.StaticAddressSummaryRequest', null, global); goog.exportSymbol('proto.looprpc.StaticAddressSummaryResponse', null, global); goog.exportSymbol('proto.looprpc.StaticAddressWithdrawal', null, global); +goog.exportSymbol('proto.looprpc.StaticOpenChannelRequest', null, global); +goog.exportSymbol('proto.looprpc.StaticOpenChannelResponse', null, global); goog.exportSymbol('proto.looprpc.StopDaemonRequest', null, global); goog.exportSymbol('proto.looprpc.StopDaemonResponse', null, global); goog.exportSymbol('proto.looprpc.SuggestSwapsRequest', null, global); @@ -114,6 +118,48 @@ goog.exportSymbol('proto.looprpc.TokensResponse', null, global); goog.exportSymbol('proto.looprpc.Utxo', null, global); goog.exportSymbol('proto.looprpc.WithdrawDepositsRequest', null, global); goog.exportSymbol('proto.looprpc.WithdrawDepositsResponse', null, global); +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.looprpc.StaticOpenChannelRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.looprpc.StaticOpenChannelRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.looprpc.StaticOpenChannelRequest.displayName = 'proto.looprpc.StaticOpenChannelRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.looprpc.StaticOpenChannelResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.looprpc.StaticOpenChannelResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.looprpc.StaticOpenChannelResponse.displayName = 'proto.looprpc.StaticOpenChannelResponse'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -1374,27 +1420,6 @@ if (goog.DEBUG && !COMPILED) { */ proto.looprpc.WithdrawDepositsResponse.displayName = 'proto.looprpc.WithdrawDepositsResponse'; } -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.looprpc.OutPoint = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.looprpc.OutPoint, jspb.Message); -if (goog.DEBUG && !COMPILED) { - /** - * @public - * @override - */ - proto.looprpc.OutPoint.displayName = 'proto.looprpc.OutPoint'; -} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -1755,6 +1780,287 @@ if (goog.DEBUG && !COMPILED) { +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.looprpc.StaticOpenChannelRequest.prototype.toObject = function(opt_includeInstance) { + return proto.looprpc.StaticOpenChannelRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.looprpc.StaticOpenChannelRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.looprpc.StaticOpenChannelRequest.toObject = function(includeInstance, msg) { + var f, obj = { + openChannelRequest: (f = msg.getOpenChannelRequest()) && lnd_pb.OpenChannelRequest.toObject(includeInstance, f) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.looprpc.StaticOpenChannelRequest} + */ +proto.looprpc.StaticOpenChannelRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.looprpc.StaticOpenChannelRequest; + return proto.looprpc.StaticOpenChannelRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.looprpc.StaticOpenChannelRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.looprpc.StaticOpenChannelRequest} + */ +proto.looprpc.StaticOpenChannelRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new lnd_pb.OpenChannelRequest; + reader.readMessage(value,lnd_pb.OpenChannelRequest.deserializeBinaryFromReader); + msg.setOpenChannelRequest(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.looprpc.StaticOpenChannelRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.looprpc.StaticOpenChannelRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.looprpc.StaticOpenChannelRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.looprpc.StaticOpenChannelRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getOpenChannelRequest(); + if (f != null) { + writer.writeMessage( + 1, + f, + lnd_pb.OpenChannelRequest.serializeBinaryToWriter + ); + } +}; + + +/** + * optional lnrpc.OpenChannelRequest open_channel_request = 1; + * @return {?proto.lnrpc.OpenChannelRequest} + */ +proto.looprpc.StaticOpenChannelRequest.prototype.getOpenChannelRequest = function() { + return /** @type{?proto.lnrpc.OpenChannelRequest} */ ( + jspb.Message.getWrapperField(this, lnd_pb.OpenChannelRequest, 1)); +}; + + +/** + * @param {?proto.lnrpc.OpenChannelRequest|undefined} value + * @return {!proto.looprpc.StaticOpenChannelRequest} returns this +*/ +proto.looprpc.StaticOpenChannelRequest.prototype.setOpenChannelRequest = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.looprpc.StaticOpenChannelRequest} returns this + */ +proto.looprpc.StaticOpenChannelRequest.prototype.clearOpenChannelRequest = function() { + return this.setOpenChannelRequest(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.looprpc.StaticOpenChannelRequest.prototype.hasOpenChannelRequest = function() { + return jspb.Message.getField(this, 1) != null; +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.looprpc.StaticOpenChannelResponse.prototype.toObject = function(opt_includeInstance) { + return proto.looprpc.StaticOpenChannelResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.looprpc.StaticOpenChannelResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.looprpc.StaticOpenChannelResponse.toObject = function(includeInstance, msg) { + var f, obj = { + channelOpenOutpoint: jspb.Message.getFieldWithDefault(msg, 1, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.looprpc.StaticOpenChannelResponse} + */ +proto.looprpc.StaticOpenChannelResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.looprpc.StaticOpenChannelResponse; + return proto.looprpc.StaticOpenChannelResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.looprpc.StaticOpenChannelResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.looprpc.StaticOpenChannelResponse} + */ +proto.looprpc.StaticOpenChannelResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setChannelOpenOutpoint(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.looprpc.StaticOpenChannelResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.looprpc.StaticOpenChannelResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.looprpc.StaticOpenChannelResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.looprpc.StaticOpenChannelResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getChannelOpenOutpoint(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } +}; + + +/** + * optional string channel_open_outpoint = 1; + * @return {string} + */ +proto.looprpc.StaticOpenChannelResponse.prototype.getChannelOpenOutpoint = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.looprpc.StaticOpenChannelResponse} returns this + */ +proto.looprpc.StaticOpenChannelResponse.prototype.setChannelOpenOutpoint = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + + + + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -10079,7 +10385,8 @@ proto.looprpc.LiquidityParameters.toObject = function(includeInstance, msg) { accountAddrType: jspb.Message.getFieldWithDefault(msg, 24, 0), easyAssetParamsMap: (f = msg.getEasyAssetParamsMap()) ? f.toObject(includeInstance, proto.looprpc.EasyAssetAutoloopParams.toObject) : [], fastSwapPublication: jspb.Message.getBooleanFieldWithDefault(msg, 26, false), - easyAutoloopExcludedPeersList: msg.getEasyAutoloopExcludedPeersList_asB64() + easyAutoloopExcludedPeersList: msg.getEasyAutoloopExcludedPeersList_asB64(), + loopInSource: jspb.Message.getFieldWithDefault(msg, 28, 0) }; if (includeInstance) { @@ -10227,6 +10534,10 @@ proto.looprpc.LiquidityParameters.deserializeBinaryFromReader = function(msg, re var value = /** @type {!Uint8Array} */ (reader.readBytes()); msg.addEasyAutoloopExcludedPeers(value); break; + case 28: + var value = /** @type {!proto.looprpc.LoopInSource} */ (reader.readEnum()); + msg.setLoopInSource(value); + break; default: reader.skipField(); break; @@ -10443,6 +10754,13 @@ proto.looprpc.LiquidityParameters.serializeBinaryToWriter = function(message, wr f ); } + f = message.getLoopInSource(); + if (f !== 0.0) { + writer.writeEnum( + 28, + f + ); + } }; @@ -11000,6 +11318,24 @@ proto.looprpc.LiquidityParameters.prototype.clearEasyAutoloopExcludedPeersList = }; +/** + * optional LoopInSource loop_in_source = 28; + * @return {!proto.looprpc.LoopInSource} + */ +proto.looprpc.LiquidityParameters.prototype.getLoopInSource = function() { + return /** @type {!proto.looprpc.LoopInSource} */ (jspb.Message.getFieldWithDefault(this, 28, 0)); +}; + + +/** + * @param {!proto.looprpc.LoopInSource} value + * @return {!proto.looprpc.LiquidityParameters} returns this + */ +proto.looprpc.LiquidityParameters.prototype.setLoopInSource = function(value) { + return jspb.Message.setProto3EnumField(this, 28, value); +}; + + @@ -12037,7 +12373,7 @@ proto.looprpc.Disqualified.prototype.setReason = function(value) { * @private {!Array} * @const */ -proto.looprpc.SuggestSwapsResponse.repeatedFields_ = [1,3,2]; +proto.looprpc.SuggestSwapsResponse.repeatedFields_ = [1,3,4,2]; @@ -12074,6 +12410,8 @@ proto.looprpc.SuggestSwapsResponse.toObject = function(includeInstance, msg) { proto.looprpc.LoopOutRequest.toObject, includeInstance), loopInList: jspb.Message.toObjectList(msg.getLoopInList(), proto.looprpc.LoopInRequest.toObject, includeInstance), + staticLoopInList: jspb.Message.toObjectList(msg.getStaticLoopInList(), + proto.looprpc.StaticAddressLoopInRequest.toObject, includeInstance), disqualifiedList: jspb.Message.toObjectList(msg.getDisqualifiedList(), proto.looprpc.Disqualified.toObject, includeInstance) }; @@ -12122,6 +12460,11 @@ proto.looprpc.SuggestSwapsResponse.deserializeBinaryFromReader = function(msg, r reader.readMessage(value,proto.looprpc.LoopInRequest.deserializeBinaryFromReader); msg.addLoopIn(value); break; + case 4: + var value = new proto.looprpc.StaticAddressLoopInRequest; + reader.readMessage(value,proto.looprpc.StaticAddressLoopInRequest.deserializeBinaryFromReader); + msg.addStaticLoopIn(value); + break; case 2: var value = new proto.looprpc.Disqualified; reader.readMessage(value,proto.looprpc.Disqualified.deserializeBinaryFromReader); @@ -12172,6 +12515,14 @@ proto.looprpc.SuggestSwapsResponse.serializeBinaryToWriter = function(message, w proto.looprpc.LoopInRequest.serializeBinaryToWriter ); } + f = message.getStaticLoopInList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 4, + f, + proto.looprpc.StaticAddressLoopInRequest.serializeBinaryToWriter + ); + } f = message.getDisqualifiedList(); if (f.length > 0) { writer.writeRepeatedMessage( @@ -12259,6 +12610,44 @@ proto.looprpc.SuggestSwapsResponse.prototype.clearLoopInList = function() { }; +/** + * repeated StaticAddressLoopInRequest static_loop_in = 4; + * @return {!Array} + */ +proto.looprpc.SuggestSwapsResponse.prototype.getStaticLoopInList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, proto.looprpc.StaticAddressLoopInRequest, 4)); +}; + + +/** + * @param {!Array} value + * @return {!proto.looprpc.SuggestSwapsResponse} returns this +*/ +proto.looprpc.SuggestSwapsResponse.prototype.setStaticLoopInList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 4, value); +}; + + +/** + * @param {!proto.looprpc.StaticAddressLoopInRequest=} opt_value + * @param {number=} opt_index + * @return {!proto.looprpc.StaticAddressLoopInRequest} + */ +proto.looprpc.SuggestSwapsResponse.prototype.addStaticLoopIn = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 4, opt_value, proto.looprpc.StaticAddressLoopInRequest, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.looprpc.SuggestSwapsResponse} returns this + */ +proto.looprpc.SuggestSwapsResponse.prototype.clearStaticLoopInList = function() { + return this.setStaticLoopInList([]); +}; + + /** * repeated Disqualified disqualified = 2; * @return {!Array} @@ -15501,7 +15890,7 @@ proto.looprpc.WithdrawDepositsRequest.prototype.toObject = function(opt_includeI proto.looprpc.WithdrawDepositsRequest.toObject = function(includeInstance, msg) { var f, obj = { outpointsList: jspb.Message.toObjectList(msg.getOutpointsList(), - proto.looprpc.OutPoint.toObject, includeInstance), + lnd_pb.OutPoint.toObject, includeInstance), all: jspb.Message.getBooleanFieldWithDefault(msg, 2, false), destAddr: jspb.Message.getFieldWithDefault(msg, 3, ""), satPerVbyte: jspb.Message.getFieldWithDefault(msg, 4, "0"), @@ -15543,8 +15932,8 @@ proto.looprpc.WithdrawDepositsRequest.deserializeBinaryFromReader = function(msg var field = reader.getFieldNumber(); switch (field) { case 1: - var value = new proto.looprpc.OutPoint; - reader.readMessage(value,proto.looprpc.OutPoint.deserializeBinaryFromReader); + var value = new lnd_pb.OutPoint; + reader.readMessage(value,lnd_pb.OutPoint.deserializeBinaryFromReader); msg.addOutpoints(value); break; case 2: @@ -15597,7 +15986,7 @@ proto.looprpc.WithdrawDepositsRequest.serializeBinaryToWriter = function(message writer.writeRepeatedMessage( 1, f, - proto.looprpc.OutPoint.serializeBinaryToWriter + lnd_pb.OutPoint.serializeBinaryToWriter ); } f = message.getAll(); @@ -15632,17 +16021,17 @@ proto.looprpc.WithdrawDepositsRequest.serializeBinaryToWriter = function(message /** - * repeated OutPoint outpoints = 1; - * @return {!Array} + * repeated lnrpc.OutPoint outpoints = 1; + * @return {!Array} */ proto.looprpc.WithdrawDepositsRequest.prototype.getOutpointsList = function() { - return /** @type{!Array} */ ( - jspb.Message.getRepeatedWrapperField(this, proto.looprpc.OutPoint, 1)); + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, lnd_pb.OutPoint, 1)); }; /** - * @param {!Array} value + * @param {!Array} value * @return {!proto.looprpc.WithdrawDepositsRequest} returns this */ proto.looprpc.WithdrawDepositsRequest.prototype.setOutpointsList = function(value) { @@ -15651,12 +16040,12 @@ proto.looprpc.WithdrawDepositsRequest.prototype.setOutpointsList = function(valu /** - * @param {!proto.looprpc.OutPoint=} opt_value + * @param {!proto.lnrpc.OutPoint=} opt_value * @param {number=} opt_index - * @return {!proto.looprpc.OutPoint} + * @return {!proto.lnrpc.OutPoint} */ proto.looprpc.WithdrawDepositsRequest.prototype.addOutpoints = function(opt_value, opt_index) { - return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.looprpc.OutPoint, opt_index); + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.lnrpc.OutPoint, opt_index); }; @@ -15902,220 +16291,6 @@ proto.looprpc.WithdrawDepositsResponse.prototype.setAddress = function(value) { - - -if (jspb.Message.GENERATE_TO_OBJECT) { -/** - * Creates an object representation of this proto. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * Optional fields that are not set will be set to undefined. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * net/proto2/compiler/js/internal/generator.cc#kKeyword. - * @param {boolean=} opt_includeInstance Deprecated. whether to include the - * JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @return {!Object} - */ -proto.looprpc.OutPoint.prototype.toObject = function(opt_includeInstance) { - return proto.looprpc.OutPoint.toObject(opt_includeInstance, this); -}; - - -/** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Deprecated. Whether to include - * the JSPB instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.looprpc.OutPoint} msg The msg instance to transform. - * @return {!Object} - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.looprpc.OutPoint.toObject = function(includeInstance, msg) { - var f, obj = { - txidBytes: msg.getTxidBytes_asB64(), - txidStr: jspb.Message.getFieldWithDefault(msg, 2, ""), - outputIndex: jspb.Message.getFieldWithDefault(msg, 3, 0) - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; -}; -} - - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.looprpc.OutPoint} - */ -proto.looprpc.OutPoint.deserializeBinary = function(bytes) { - var reader = new jspb.BinaryReader(bytes); - var msg = new proto.looprpc.OutPoint; - return proto.looprpc.OutPoint.deserializeBinaryFromReader(msg, reader); -}; - - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.looprpc.OutPoint} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.looprpc.OutPoint} - */ -proto.looprpc.OutPoint.deserializeBinaryFromReader = function(msg, reader) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - var field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = /** @type {!Uint8Array} */ (reader.readBytes()); - msg.setTxidBytes(value); - break; - case 2: - var value = /** @type {string} */ (reader.readString()); - msg.setTxidStr(value); - break; - case 3: - var value = /** @type {number} */ (reader.readUint32()); - msg.setOutputIndex(value); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.looprpc.OutPoint.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - proto.looprpc.OutPoint.serializeBinaryToWriter(this, writer); - return writer.getResultBuffer(); -}; - - -/** - * Serializes the given message to binary data (in protobuf wire - * format), writing to the given BinaryWriter. - * @param {!proto.looprpc.OutPoint} message - * @param {!jspb.BinaryWriter} writer - * @suppress {unusedLocalVariables} f is only used for nested messages - */ -proto.looprpc.OutPoint.serializeBinaryToWriter = function(message, writer) { - var f = undefined; - f = message.getTxidBytes_asU8(); - if (f.length > 0) { - writer.writeBytes( - 1, - f - ); - } - f = message.getTxidStr(); - if (f.length > 0) { - writer.writeString( - 2, - f - ); - } - f = message.getOutputIndex(); - if (f !== 0) { - writer.writeUint32( - 3, - f - ); - } -}; - - -/** - * optional bytes txid_bytes = 1; - * @return {!(string|Uint8Array)} - */ -proto.looprpc.OutPoint.prototype.getTxidBytes = function() { - return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); -}; - - -/** - * optional bytes txid_bytes = 1; - * This is a type-conversion wrapper around `getTxidBytes()` - * @return {string} - */ -proto.looprpc.OutPoint.prototype.getTxidBytes_asB64 = function() { - return /** @type {string} */ (jspb.Message.bytesAsB64( - this.getTxidBytes())); -}; - - -/** - * optional bytes txid_bytes = 1; - * Note that Uint8Array is not supported on all browsers. - * @see http://caniuse.com/Uint8Array - * This is a type-conversion wrapper around `getTxidBytes()` - * @return {!Uint8Array} - */ -proto.looprpc.OutPoint.prototype.getTxidBytes_asU8 = function() { - return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( - this.getTxidBytes())); -}; - - -/** - * @param {!(string|Uint8Array)} value - * @return {!proto.looprpc.OutPoint} returns this - */ -proto.looprpc.OutPoint.prototype.setTxidBytes = function(value) { - return jspb.Message.setProto3BytesField(this, 1, value); -}; - - -/** - * optional string txid_str = 2; - * @return {string} - */ -proto.looprpc.OutPoint.prototype.getTxidStr = function() { - return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); -}; - - -/** - * @param {string} value - * @return {!proto.looprpc.OutPoint} returns this - */ -proto.looprpc.OutPoint.prototype.setTxidStr = function(value) { - return jspb.Message.setProto3StringField(this, 2, value); -}; - - -/** - * optional uint32 output_index = 3; - * @return {number} - */ -proto.looprpc.OutPoint.prototype.getOutputIndex = function() { - return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0)); -}; - - -/** - * @param {number} value - * @return {!proto.looprpc.OutPoint} returns this - */ -proto.looprpc.OutPoint.prototype.setOutputIndex = function(value) { - return jspb.Message.setProto3IntField(this, 3, value); -}; - - - /** * List of repeated fields within this message type. * @private {!Array} @@ -17124,7 +17299,8 @@ proto.looprpc.StaticAddressSummaryResponse.toObject = function(includeInstance, valueExpiredSatoshis: jspb.Message.getFieldWithDefault(msg, 6, "0"), valueWithdrawnSatoshis: jspb.Message.getFieldWithDefault(msg, 7, "0"), valueLoopedInSatoshis: jspb.Message.getFieldWithDefault(msg, 8, "0"), - valueHtlcTimeoutSweepsSatoshis: jspb.Message.getFieldWithDefault(msg, 9, "0") + valueHtlcTimeoutSweepsSatoshis: jspb.Message.getFieldWithDefault(msg, 9, "0"), + valueChannelsOpened: jspb.Message.getFieldWithDefault(msg, 10, "0") }; if (includeInstance) { @@ -17197,6 +17373,10 @@ proto.looprpc.StaticAddressSummaryResponse.deserializeBinaryFromReader = functio var value = /** @type {string} */ (reader.readInt64String()); msg.setValueHtlcTimeoutSweepsSatoshis(value); break; + case 10: + var value = /** @type {string} */ (reader.readInt64String()); + msg.setValueChannelsOpened(value); + break; default: reader.skipField(); break; @@ -17289,6 +17469,13 @@ proto.looprpc.StaticAddressSummaryResponse.serializeBinaryToWriter = function(me f ); } + f = message.getValueChannelsOpened(); + if (parseInt(f, 10) !== 0) { + writer.writeInt64String( + 10, + f + ); + } }; @@ -17454,6 +17641,24 @@ proto.looprpc.StaticAddressSummaryResponse.prototype.setValueHtlcTimeoutSweepsSa }; +/** + * optional int64 value_channels_opened = 10; + * @return {string} + */ +proto.looprpc.StaticAddressSummaryResponse.prototype.getValueChannelsOpened = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 10, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.looprpc.StaticAddressSummaryResponse} returns this + */ +proto.looprpc.StaticAddressSummaryResponse.prototype.setValueChannelsOpened = function(value) { + return jspb.Message.setProto3StringIntField(this, 10, value); +}; + + @@ -18167,7 +18372,12 @@ proto.looprpc.StaticAddressLoopInSwap.toObject = function(includeInstance, msg) swapAmountSatoshis: jspb.Message.getFieldWithDefault(msg, 4, "0"), paymentRequestAmountSatoshis: jspb.Message.getFieldWithDefault(msg, 5, "0"), depositsList: jspb.Message.toObjectList(msg.getDepositsList(), - proto.looprpc.Deposit.toObject, includeInstance) + proto.looprpc.Deposit.toObject, includeInstance), + initiationTime: jspb.Message.getFieldWithDefault(msg, 7, "0"), + lastUpdateTime: jspb.Message.getFieldWithDefault(msg, 8, "0"), + costServer: jspb.Message.getFieldWithDefault(msg, 9, "0"), + costOnchain: jspb.Message.getFieldWithDefault(msg, 10, "0"), + costOffchain: jspb.Message.getFieldWithDefault(msg, 11, "0") }; if (includeInstance) { @@ -18229,6 +18439,26 @@ proto.looprpc.StaticAddressLoopInSwap.deserializeBinaryFromReader = function(msg reader.readMessage(value,proto.looprpc.Deposit.deserializeBinaryFromReader); msg.addDeposits(value); break; + case 7: + var value = /** @type {string} */ (reader.readInt64String()); + msg.setInitiationTime(value); + break; + case 8: + var value = /** @type {string} */ (reader.readInt64String()); + msg.setLastUpdateTime(value); + break; + case 9: + var value = /** @type {string} */ (reader.readInt64String()); + msg.setCostServer(value); + break; + case 10: + var value = /** @type {string} */ (reader.readInt64String()); + msg.setCostOnchain(value); + break; + case 11: + var value = /** @type {string} */ (reader.readInt64String()); + msg.setCostOffchain(value); + break; default: reader.skipField(); break; @@ -18301,6 +18531,41 @@ proto.looprpc.StaticAddressLoopInSwap.serializeBinaryToWriter = function(message proto.looprpc.Deposit.serializeBinaryToWriter ); } + f = message.getInitiationTime(); + if (parseInt(f, 10) !== 0) { + writer.writeInt64String( + 7, + f + ); + } + f = message.getLastUpdateTime(); + if (parseInt(f, 10) !== 0) { + writer.writeInt64String( + 8, + f + ); + } + f = message.getCostServer(); + if (parseInt(f, 10) !== 0) { + writer.writeInt64String( + 9, + f + ); + } + f = message.getCostOnchain(); + if (parseInt(f, 10) !== 0) { + writer.writeInt64String( + 10, + f + ); + } + f = message.getCostOffchain(); + if (parseInt(f, 10) !== 0) { + writer.writeInt64String( + 11, + f + ); + } }; @@ -18475,6 +18740,96 @@ proto.looprpc.StaticAddressLoopInSwap.prototype.clearDepositsList = function() { }; +/** + * optional int64 initiation_time = 7; + * @return {string} + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.getInitiationTime = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.looprpc.StaticAddressLoopInSwap} returns this + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.setInitiationTime = function(value) { + return jspb.Message.setProto3StringIntField(this, 7, value); +}; + + +/** + * optional int64 last_update_time = 8; + * @return {string} + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.getLastUpdateTime = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 8, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.looprpc.StaticAddressLoopInSwap} returns this + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.setLastUpdateTime = function(value) { + return jspb.Message.setProto3StringIntField(this, 8, value); +}; + + +/** + * optional int64 cost_server = 9; + * @return {string} + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.getCostServer = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 9, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.looprpc.StaticAddressLoopInSwap} returns this + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.setCostServer = function(value) { + return jspb.Message.setProto3StringIntField(this, 9, value); +}; + + +/** + * optional int64 cost_onchain = 10; + * @return {string} + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.getCostOnchain = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 10, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.looprpc.StaticAddressLoopInSwap} returns this + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.setCostOnchain = function(value) { + return jspb.Message.setProto3StringIntField(this, 10, value); +}; + + +/** + * optional int64 cost_offchain = 11; + * @return {string} + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.getCostOffchain = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 11, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.looprpc.StaticAddressLoopInSwap} returns this + */ +proto.looprpc.StaticAddressLoopInSwap.prototype.setCostOffchain = function(value) { + return jspb.Message.setProto3StringIntField(this, 11, value); +}; + + /** * List of repeated fields within this message type. @@ -20614,6 +20969,14 @@ proto.looprpc.FailureReason = { FAILURE_REASON_INCORRECT_HTLC_AMT_SWEPT: 9 }; +/** + * @enum {number} + */ +proto.looprpc.LoopInSource = { + LOOP_IN_SOURCE_WALLET: 0, + LOOP_IN_SOURCE_STATIC_ADDRESS: 1 +}; + /** * @enum {number} */ @@ -20639,7 +21002,9 @@ proto.looprpc.AutoReason = { AUTO_REASON_LOOP_IN: 10, AUTO_REASON_LIQUIDITY_OK: 11, AUTO_REASON_BUDGET_INSUFFICIENT: 12, - AUTO_REASON_FEE_INSUFFICIENT: 13 + AUTO_REASON_FEE_INSUFFICIENT: 13, + AUTO_REASON_STATIC_LOOP_IN_NO_CANDIDATE: 14, + AUTO_REASON_CUSTOM_CHANNEL_DATA: 15 }; /** @@ -20656,7 +21021,9 @@ proto.looprpc.DepositState = { HTLC_TIMEOUT_SWEPT: 7, PUBLISH_EXPIRED: 8, WAIT_FOR_EXPIRY_SWEEP: 9, - EXPIRED: 10 + EXPIRED: 10, + OPENING_CHANNEL: 11, + CHANNEL_PUBLISHED: 12 }; /** diff --git a/app/src/types/generated/loop_pb_service.d.ts b/app/src/types/generated/loop_pb_service.d.ts index fc3ea084..ee7a1c41 100644 --- a/app/src/types/generated/loop_pb_service.d.ts +++ b/app/src/types/generated/loop_pb_service.d.ts @@ -292,6 +292,15 @@ type SwapClientStaticAddressLoopIn = { readonly responseType: typeof loop_pb.StaticAddressLoopInResponse; }; +type SwapClientStaticOpenChannel = { + readonly methodName: string; + readonly service: typeof SwapClient; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof loop_pb.StaticOpenChannelRequest; + readonly responseType: typeof loop_pb.StaticOpenChannelResponse; +}; + export class SwapClient { static readonly serviceName: string; static readonly LoopOut: SwapClientLoopOut; @@ -326,6 +335,7 @@ export class SwapClient { static readonly ListStaticAddressSwaps: SwapClientListStaticAddressSwaps; static readonly GetStaticAddressSummary: SwapClientGetStaticAddressSummary; static readonly StaticAddressLoopIn: SwapClientStaticAddressLoopIn; + static readonly StaticOpenChannel: SwapClientStaticOpenChannel; } export type ServiceError = { message: string, code: number; metadata: grpc.Metadata } @@ -640,5 +650,14 @@ export class SwapClientClient { requestMessage: loop_pb.StaticAddressLoopInRequest, callback: (error: ServiceError|null, responseMessage: loop_pb.StaticAddressLoopInResponse|null) => void ): UnaryResponse; + staticOpenChannel( + requestMessage: loop_pb.StaticOpenChannelRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: loop_pb.StaticOpenChannelResponse|null) => void + ): UnaryResponse; + staticOpenChannel( + requestMessage: loop_pb.StaticOpenChannelRequest, + callback: (error: ServiceError|null, responseMessage: loop_pb.StaticOpenChannelResponse|null) => void + ): UnaryResponse; } diff --git a/app/src/types/generated/loop_pb_service.js b/app/src/types/generated/loop_pb_service.js index 0dd94516..7d285764 100644 --- a/app/src/types/generated/loop_pb_service.js +++ b/app/src/types/generated/loop_pb_service.js @@ -298,6 +298,15 @@ SwapClient.StaticAddressLoopIn = { responseType: loop_pb.StaticAddressLoopInResponse }; +SwapClient.StaticOpenChannel = { + methodName: "StaticOpenChannel", + service: SwapClient, + requestStream: false, + responseStream: false, + requestType: loop_pb.StaticOpenChannelRequest, + responseType: loop_pb.StaticOpenChannelResponse +}; + exports.SwapClient = SwapClient; function SwapClientClient(serviceHost, options) { @@ -1305,5 +1314,36 @@ SwapClientClient.prototype.staticAddressLoopIn = function staticAddressLoopIn(re }; }; +SwapClientClient.prototype.staticOpenChannel = function staticOpenChannel(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(SwapClient.StaticOpenChannel, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + exports.SwapClientClient = SwapClientClient; diff --git a/app/src/types/generated/swapserverrpc/server_pb.d.ts b/app/src/types/generated/swapserverrpc/server_pb.d.ts index 63bff333..84bcbd8e 100644 --- a/app/src/types/generated/swapserverrpc/server_pb.d.ts +++ b/app/src/types/generated/swapserverrpc/server_pb.d.ts @@ -1098,6 +1098,21 @@ export class SubscribeNotificationsResponse extends jspb.Message { getUnfinishedSwap(): ServerUnfinishedSwapNotification | undefined; setUnfinishedSwap(value?: ServerUnfinishedSwapNotification): void; + hasStaticLoopInRiskAccepted(): boolean; + clearStaticLoopInRiskAccepted(): void; + getStaticLoopInRiskAccepted(): ServerStaticLoopInRiskAcceptedNotification | undefined; + setStaticLoopInRiskAccepted(value?: ServerStaticLoopInRiskAcceptedNotification): void; + + hasStaticLoopInRiskRejected(): boolean; + clearStaticLoopInRiskRejected(): void; + getStaticLoopInRiskRejected(): ServerStaticLoopInRiskRejectedNotification | undefined; + setStaticLoopInRiskRejected(value?: ServerStaticLoopInRiskRejectedNotification): void; + + hasHtlcConfirmed(): boolean; + clearHtlcConfirmed(): void; + getHtlcConfirmed(): ServerHtlcConfirmedNotification | undefined; + setHtlcConfirmed(value?: ServerHtlcConfirmedNotification): void; + getNotificationCase(): SubscribeNotificationsResponse.NotificationCase; serializeBinary(): Uint8Array; toObject(includeInstance?: boolean): SubscribeNotificationsResponse.AsObject; @@ -1114,6 +1129,9 @@ export namespace SubscribeNotificationsResponse { reservationNotification?: swapserverrpc_reservation_pb.ServerReservationNotification.AsObject, staticLoopInSweep?: ServerStaticLoopInSweepNotification.AsObject, unfinishedSwap?: ServerUnfinishedSwapNotification.AsObject, + staticLoopInRiskAccepted?: ServerStaticLoopInRiskAcceptedNotification.AsObject, + staticLoopInRiskRejected?: ServerStaticLoopInRiskRejectedNotification.AsObject, + htlcConfirmed?: ServerHtlcConfirmedNotification.AsObject, } export enum NotificationCase { @@ -1121,6 +1139,9 @@ export namespace SubscribeNotificationsResponse { RESERVATION_NOTIFICATION = 1, STATIC_LOOP_IN_SWEEP = 2, UNFINISHED_SWAP = 3, + STATIC_LOOP_IN_RISK_ACCEPTED = 4, + STATIC_LOOP_IN_RISK_REJECTED = 5, + HTLC_CONFIRMED = 6, } } @@ -1161,6 +1182,50 @@ export namespace ServerStaticLoopInSweepNotification { } } +export class ServerStaticLoopInRiskAcceptedNotification extends jspb.Message { + getSwapHash(): Uint8Array | string; + getSwapHash_asU8(): Uint8Array; + getSwapHash_asB64(): string; + setSwapHash(value: Uint8Array | string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ServerStaticLoopInRiskAcceptedNotification.AsObject; + static toObject(includeInstance: boolean, msg: ServerStaticLoopInRiskAcceptedNotification): ServerStaticLoopInRiskAcceptedNotification.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ServerStaticLoopInRiskAcceptedNotification, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ServerStaticLoopInRiskAcceptedNotification; + static deserializeBinaryFromReader(message: ServerStaticLoopInRiskAcceptedNotification, reader: jspb.BinaryReader): ServerStaticLoopInRiskAcceptedNotification; +} + +export namespace ServerStaticLoopInRiskAcceptedNotification { + export type AsObject = { + swapHash: Uint8Array | string, + } +} + +export class ServerStaticLoopInRiskRejectedNotification extends jspb.Message { + getSwapHash(): Uint8Array | string; + getSwapHash_asU8(): Uint8Array; + getSwapHash_asB64(): string; + setSwapHash(value: Uint8Array | string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ServerStaticLoopInRiskRejectedNotification.AsObject; + static toObject(includeInstance: boolean, msg: ServerStaticLoopInRiskRejectedNotification): ServerStaticLoopInRiskRejectedNotification.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ServerStaticLoopInRiskRejectedNotification, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ServerStaticLoopInRiskRejectedNotification; + static deserializeBinaryFromReader(message: ServerStaticLoopInRiskRejectedNotification, reader: jspb.BinaryReader): ServerStaticLoopInRiskRejectedNotification; +} + +export namespace ServerStaticLoopInRiskRejectedNotification { + export type AsObject = { + swapHash: Uint8Array | string, + } +} + export class ServerUnfinishedSwapNotification extends jspb.Message { getSwapHash(): Uint8Array | string; getSwapHash_asU8(): Uint8Array; @@ -1187,6 +1252,40 @@ export namespace ServerUnfinishedSwapNotification { } } +export class ServerHtlcConfirmedNotification extends jspb.Message { + getSwapHash(): Uint8Array | string; + getSwapHash_asU8(): Uint8Array; + getSwapHash_asB64(): string; + setSwapHash(value: Uint8Array | string): void; + + getHtlcOutpoint(): string; + setHtlcOutpoint(value: string): void; + + getHtlcAddress(): string; + setHtlcAddress(value: string): void; + + getSatPerVbyte(): number; + setSatPerVbyte(value: number): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): ServerHtlcConfirmedNotification.AsObject; + static toObject(includeInstance: boolean, msg: ServerHtlcConfirmedNotification): ServerHtlcConfirmedNotification.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: ServerHtlcConfirmedNotification, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): ServerHtlcConfirmedNotification; + static deserializeBinaryFromReader(message: ServerHtlcConfirmedNotification, reader: jspb.BinaryReader): ServerHtlcConfirmedNotification; +} + +export namespace ServerHtlcConfirmedNotification { + export type AsObject = { + swapHash: Uint8Array | string, + htlcOutpoint: string, + htlcAddress: string, + satPerVbyte: number, + } +} + export interface ProtocolVersionMap { LEGACY: 0; MULTI_LOOP_OUT: 1; diff --git a/app/src/types/generated/swapserverrpc/server_pb.js b/app/src/types/generated/swapserverrpc/server_pb.js index f984720a..8b765a31 100644 --- a/app/src/types/generated/swapserverrpc/server_pb.js +++ b/app/src/types/generated/swapserverrpc/server_pb.js @@ -46,6 +46,7 @@ goog.exportSymbol('proto.looprpc.ReportRoutingResultRes', null, global); goog.exportSymbol('proto.looprpc.RouteCancel', null, global); goog.exportSymbol('proto.looprpc.RoutePaymentType', null, global); goog.exportSymbol('proto.looprpc.RoutingPlugin', null, global); +goog.exportSymbol('proto.looprpc.ServerHtlcConfirmedNotification', null, global); goog.exportSymbol('proto.looprpc.ServerLoopInQuoteRequest', null, global); goog.exportSymbol('proto.looprpc.ServerLoopInQuoteResponse', null, global); goog.exportSymbol('proto.looprpc.ServerLoopInRequest', null, global); @@ -64,6 +65,8 @@ goog.exportSymbol('proto.looprpc.ServerProbeRequest', null, global); goog.exportSymbol('proto.looprpc.ServerProbeResponse', null, global); goog.exportSymbol('proto.looprpc.ServerPushKeyReq', null, global); goog.exportSymbol('proto.looprpc.ServerPushKeyRes', null, global); +goog.exportSymbol('proto.looprpc.ServerStaticLoopInRiskAcceptedNotification', null, global); +goog.exportSymbol('proto.looprpc.ServerStaticLoopInRiskRejectedNotification', null, global); goog.exportSymbol('proto.looprpc.ServerStaticLoopInSweepNotification', null, global); goog.exportSymbol('proto.looprpc.ServerSwapState', null, global); goog.exportSymbol('proto.looprpc.ServerUnfinishedSwapNotification', null, global); @@ -851,6 +854,48 @@ if (goog.DEBUG && !COMPILED) { */ proto.looprpc.ServerStaticLoopInSweepNotification.displayName = 'proto.looprpc.ServerStaticLoopInSweepNotification'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.looprpc.ServerStaticLoopInRiskAcceptedNotification, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.displayName = 'proto.looprpc.ServerStaticLoopInRiskAcceptedNotification'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.looprpc.ServerStaticLoopInRiskRejectedNotification, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.looprpc.ServerStaticLoopInRiskRejectedNotification.displayName = 'proto.looprpc.ServerStaticLoopInRiskRejectedNotification'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -872,6 +917,27 @@ if (goog.DEBUG && !COMPILED) { */ proto.looprpc.ServerUnfinishedSwapNotification.displayName = 'proto.looprpc.ServerUnfinishedSwapNotification'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.looprpc.ServerHtlcConfirmedNotification = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.looprpc.ServerHtlcConfirmedNotification, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.looprpc.ServerHtlcConfirmedNotification.displayName = 'proto.looprpc.ServerHtlcConfirmedNotification'; +} @@ -8546,7 +8612,7 @@ proto.looprpc.SubscribeNotificationsRequest.prototype.setVersion = function(valu * @private {!Array>} * @const */ -proto.looprpc.SubscribeNotificationsResponse.oneofGroups_ = [[1,2,3]]; +proto.looprpc.SubscribeNotificationsResponse.oneofGroups_ = [[1,2,3,4,5,6]]; /** * @enum {number} @@ -8555,7 +8621,10 @@ proto.looprpc.SubscribeNotificationsResponse.NotificationCase = { NOTIFICATION_NOT_SET: 0, RESERVATION_NOTIFICATION: 1, STATIC_LOOP_IN_SWEEP: 2, - UNFINISHED_SWAP: 3 + UNFINISHED_SWAP: 3, + STATIC_LOOP_IN_RISK_ACCEPTED: 4, + STATIC_LOOP_IN_RISK_REJECTED: 5, + HTLC_CONFIRMED: 6 }; /** @@ -8598,7 +8667,10 @@ proto.looprpc.SubscribeNotificationsResponse.toObject = function(includeInstance var f, obj = { reservationNotification: (f = msg.getReservationNotification()) && swapserverrpc_reservation_pb.ServerReservationNotification.toObject(includeInstance, f), staticLoopInSweep: (f = msg.getStaticLoopInSweep()) && proto.looprpc.ServerStaticLoopInSweepNotification.toObject(includeInstance, f), - unfinishedSwap: (f = msg.getUnfinishedSwap()) && proto.looprpc.ServerUnfinishedSwapNotification.toObject(includeInstance, f) + unfinishedSwap: (f = msg.getUnfinishedSwap()) && proto.looprpc.ServerUnfinishedSwapNotification.toObject(includeInstance, f), + staticLoopInRiskAccepted: (f = msg.getStaticLoopInRiskAccepted()) && proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.toObject(includeInstance, f), + staticLoopInRiskRejected: (f = msg.getStaticLoopInRiskRejected()) && proto.looprpc.ServerStaticLoopInRiskRejectedNotification.toObject(includeInstance, f), + htlcConfirmed: (f = msg.getHtlcConfirmed()) && proto.looprpc.ServerHtlcConfirmedNotification.toObject(includeInstance, f) }; if (includeInstance) { @@ -8650,6 +8722,21 @@ proto.looprpc.SubscribeNotificationsResponse.deserializeBinaryFromReader = funct reader.readMessage(value,proto.looprpc.ServerUnfinishedSwapNotification.deserializeBinaryFromReader); msg.setUnfinishedSwap(value); break; + case 4: + var value = new proto.looprpc.ServerStaticLoopInRiskAcceptedNotification; + reader.readMessage(value,proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.deserializeBinaryFromReader); + msg.setStaticLoopInRiskAccepted(value); + break; + case 5: + var value = new proto.looprpc.ServerStaticLoopInRiskRejectedNotification; + reader.readMessage(value,proto.looprpc.ServerStaticLoopInRiskRejectedNotification.deserializeBinaryFromReader); + msg.setStaticLoopInRiskRejected(value); + break; + case 6: + var value = new proto.looprpc.ServerHtlcConfirmedNotification; + reader.readMessage(value,proto.looprpc.ServerHtlcConfirmedNotification.deserializeBinaryFromReader); + msg.setHtlcConfirmed(value); + break; default: reader.skipField(); break; @@ -8703,6 +8790,30 @@ proto.looprpc.SubscribeNotificationsResponse.serializeBinaryToWriter = function( proto.looprpc.ServerUnfinishedSwapNotification.serializeBinaryToWriter ); } + f = message.getStaticLoopInRiskAccepted(); + if (f != null) { + writer.writeMessage( + 4, + f, + proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.serializeBinaryToWriter + ); + } + f = message.getStaticLoopInRiskRejected(); + if (f != null) { + writer.writeMessage( + 5, + f, + proto.looprpc.ServerStaticLoopInRiskRejectedNotification.serializeBinaryToWriter + ); + } + f = message.getHtlcConfirmed(); + if (f != null) { + writer.writeMessage( + 6, + f, + proto.looprpc.ServerHtlcConfirmedNotification.serializeBinaryToWriter + ); + } }; @@ -8817,6 +8928,117 @@ proto.looprpc.SubscribeNotificationsResponse.prototype.hasUnfinishedSwap = funct }; +/** + * optional ServerStaticLoopInRiskAcceptedNotification static_loop_in_risk_accepted = 4; + * @return {?proto.looprpc.ServerStaticLoopInRiskAcceptedNotification} + */ +proto.looprpc.SubscribeNotificationsResponse.prototype.getStaticLoopInRiskAccepted = function() { + return /** @type{?proto.looprpc.ServerStaticLoopInRiskAcceptedNotification} */ ( + jspb.Message.getWrapperField(this, proto.looprpc.ServerStaticLoopInRiskAcceptedNotification, 4)); +}; + + +/** + * @param {?proto.looprpc.ServerStaticLoopInRiskAcceptedNotification|undefined} value + * @return {!proto.looprpc.SubscribeNotificationsResponse} returns this +*/ +proto.looprpc.SubscribeNotificationsResponse.prototype.setStaticLoopInRiskAccepted = function(value) { + return jspb.Message.setOneofWrapperField(this, 4, proto.looprpc.SubscribeNotificationsResponse.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.looprpc.SubscribeNotificationsResponse} returns this + */ +proto.looprpc.SubscribeNotificationsResponse.prototype.clearStaticLoopInRiskAccepted = function() { + return this.setStaticLoopInRiskAccepted(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.looprpc.SubscribeNotificationsResponse.prototype.hasStaticLoopInRiskAccepted = function() { + return jspb.Message.getField(this, 4) != null; +}; + + +/** + * optional ServerStaticLoopInRiskRejectedNotification static_loop_in_risk_rejected = 5; + * @return {?proto.looprpc.ServerStaticLoopInRiskRejectedNotification} + */ +proto.looprpc.SubscribeNotificationsResponse.prototype.getStaticLoopInRiskRejected = function() { + return /** @type{?proto.looprpc.ServerStaticLoopInRiskRejectedNotification} */ ( + jspb.Message.getWrapperField(this, proto.looprpc.ServerStaticLoopInRiskRejectedNotification, 5)); +}; + + +/** + * @param {?proto.looprpc.ServerStaticLoopInRiskRejectedNotification|undefined} value + * @return {!proto.looprpc.SubscribeNotificationsResponse} returns this +*/ +proto.looprpc.SubscribeNotificationsResponse.prototype.setStaticLoopInRiskRejected = function(value) { + return jspb.Message.setOneofWrapperField(this, 5, proto.looprpc.SubscribeNotificationsResponse.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.looprpc.SubscribeNotificationsResponse} returns this + */ +proto.looprpc.SubscribeNotificationsResponse.prototype.clearStaticLoopInRiskRejected = function() { + return this.setStaticLoopInRiskRejected(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.looprpc.SubscribeNotificationsResponse.prototype.hasStaticLoopInRiskRejected = function() { + return jspb.Message.getField(this, 5) != null; +}; + + +/** + * optional ServerHtlcConfirmedNotification htlc_confirmed = 6; + * @return {?proto.looprpc.ServerHtlcConfirmedNotification} + */ +proto.looprpc.SubscribeNotificationsResponse.prototype.getHtlcConfirmed = function() { + return /** @type{?proto.looprpc.ServerHtlcConfirmedNotification} */ ( + jspb.Message.getWrapperField(this, proto.looprpc.ServerHtlcConfirmedNotification, 6)); +}; + + +/** + * @param {?proto.looprpc.ServerHtlcConfirmedNotification|undefined} value + * @return {!proto.looprpc.SubscribeNotificationsResponse} returns this +*/ +proto.looprpc.SubscribeNotificationsResponse.prototype.setHtlcConfirmed = function(value) { + return jspb.Message.setOneofWrapperField(this, 6, proto.looprpc.SubscribeNotificationsResponse.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.looprpc.SubscribeNotificationsResponse} returns this + */ +proto.looprpc.SubscribeNotificationsResponse.prototype.clearHtlcConfirmed = function() { + return this.setHtlcConfirmed(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.looprpc.SubscribeNotificationsResponse.prototype.hasHtlcConfirmed = function() { + return jspb.Message.getField(this, 6) != null; +}; + + /** * List of repeated fields within this message type. @@ -9122,6 +9344,314 @@ proto.looprpc.ServerStaticLoopInSweepNotification.prototype.clearPrevoutInfoList +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.prototype.toObject = function(opt_includeInstance) { + return proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.looprpc.ServerStaticLoopInRiskAcceptedNotification} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.toObject = function(includeInstance, msg) { + var f, obj = { + swapHash: msg.getSwapHash_asB64() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.looprpc.ServerStaticLoopInRiskAcceptedNotification} + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.looprpc.ServerStaticLoopInRiskAcceptedNotification; + return proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.looprpc.ServerStaticLoopInRiskAcceptedNotification} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.looprpc.ServerStaticLoopInRiskAcceptedNotification} + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setSwapHash(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.looprpc.ServerStaticLoopInRiskAcceptedNotification} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSwapHash_asU8(); + if (f.length > 0) { + writer.writeBytes( + 1, + f + ); + } +}; + + +/** + * optional bytes swap_hash = 1; + * @return {!(string|Uint8Array)} + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.prototype.getSwapHash = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * optional bytes swap_hash = 1; + * This is a type-conversion wrapper around `getSwapHash()` + * @return {string} + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.prototype.getSwapHash_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getSwapHash())); +}; + + +/** + * optional bytes swap_hash = 1; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getSwapHash()` + * @return {!Uint8Array} + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.prototype.getSwapHash_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getSwapHash())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.looprpc.ServerStaticLoopInRiskAcceptedNotification} returns this + */ +proto.looprpc.ServerStaticLoopInRiskAcceptedNotification.prototype.setSwapHash = function(value) { + return jspb.Message.setProto3BytesField(this, 1, value); +}; + + + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification.prototype.toObject = function(opt_includeInstance) { + return proto.looprpc.ServerStaticLoopInRiskRejectedNotification.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.looprpc.ServerStaticLoopInRiskRejectedNotification} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification.toObject = function(includeInstance, msg) { + var f, obj = { + swapHash: msg.getSwapHash_asB64() + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.looprpc.ServerStaticLoopInRiskRejectedNotification} + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.looprpc.ServerStaticLoopInRiskRejectedNotification; + return proto.looprpc.ServerStaticLoopInRiskRejectedNotification.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.looprpc.ServerStaticLoopInRiskRejectedNotification} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.looprpc.ServerStaticLoopInRiskRejectedNotification} + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setSwapHash(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.looprpc.ServerStaticLoopInRiskRejectedNotification.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.looprpc.ServerStaticLoopInRiskRejectedNotification} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSwapHash_asU8(); + if (f.length > 0) { + writer.writeBytes( + 1, + f + ); + } +}; + + +/** + * optional bytes swap_hash = 1; + * @return {!(string|Uint8Array)} + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification.prototype.getSwapHash = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * optional bytes swap_hash = 1; + * This is a type-conversion wrapper around `getSwapHash()` + * @return {string} + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification.prototype.getSwapHash_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getSwapHash())); +}; + + +/** + * optional bytes swap_hash = 1; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getSwapHash()` + * @return {!Uint8Array} + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification.prototype.getSwapHash_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getSwapHash())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.looprpc.ServerStaticLoopInRiskRejectedNotification} returns this + */ +proto.looprpc.ServerStaticLoopInRiskRejectedNotification.prototype.setSwapHash = function(value) { + return jspb.Message.setProto3BytesField(this, 1, value); +}; + + + + + if (jspb.Message.GENERATE_TO_OBJECT) { /** * Creates an object representation of this proto. @@ -9303,6 +9833,250 @@ proto.looprpc.ServerUnfinishedSwapNotification.prototype.setIsLoopIn = function( }; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.toObject = function(opt_includeInstance) { + return proto.looprpc.ServerHtlcConfirmedNotification.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.looprpc.ServerHtlcConfirmedNotification} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.looprpc.ServerHtlcConfirmedNotification.toObject = function(includeInstance, msg) { + var f, obj = { + swapHash: msg.getSwapHash_asB64(), + htlcOutpoint: jspb.Message.getFieldWithDefault(msg, 2, ""), + htlcAddress: jspb.Message.getFieldWithDefault(msg, 3, ""), + satPerVbyte: jspb.Message.getFieldWithDefault(msg, 4, 0) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.looprpc.ServerHtlcConfirmedNotification} + */ +proto.looprpc.ServerHtlcConfirmedNotification.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.looprpc.ServerHtlcConfirmedNotification; + return proto.looprpc.ServerHtlcConfirmedNotification.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.looprpc.ServerHtlcConfirmedNotification} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.looprpc.ServerHtlcConfirmedNotification} + */ +proto.looprpc.ServerHtlcConfirmedNotification.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {!Uint8Array} */ (reader.readBytes()); + msg.setSwapHash(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setHtlcOutpoint(value); + break; + case 3: + var value = /** @type {string} */ (reader.readString()); + msg.setHtlcAddress(value); + break; + case 4: + var value = /** @type {number} */ (reader.readUint32()); + msg.setSatPerVbyte(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.looprpc.ServerHtlcConfirmedNotification.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.looprpc.ServerHtlcConfirmedNotification} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.looprpc.ServerHtlcConfirmedNotification.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getSwapHash_asU8(); + if (f.length > 0) { + writer.writeBytes( + 1, + f + ); + } + f = message.getHtlcOutpoint(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } + f = message.getHtlcAddress(); + if (f.length > 0) { + writer.writeString( + 3, + f + ); + } + f = message.getSatPerVbyte(); + if (f !== 0) { + writer.writeUint32( + 4, + f + ); + } +}; + + +/** + * optional bytes swap_hash = 1; + * @return {!(string|Uint8Array)} + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.getSwapHash = function() { + return /** @type {!(string|Uint8Array)} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * optional bytes swap_hash = 1; + * This is a type-conversion wrapper around `getSwapHash()` + * @return {string} + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.getSwapHash_asB64 = function() { + return /** @type {string} */ (jspb.Message.bytesAsB64( + this.getSwapHash())); +}; + + +/** + * optional bytes swap_hash = 1; + * Note that Uint8Array is not supported on all browsers. + * @see http://caniuse.com/Uint8Array + * This is a type-conversion wrapper around `getSwapHash()` + * @return {!Uint8Array} + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.getSwapHash_asU8 = function() { + return /** @type {!Uint8Array} */ (jspb.Message.bytesAsU8( + this.getSwapHash())); +}; + + +/** + * @param {!(string|Uint8Array)} value + * @return {!proto.looprpc.ServerHtlcConfirmedNotification} returns this + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.setSwapHash = function(value) { + return jspb.Message.setProto3BytesField(this, 1, value); +}; + + +/** + * optional string htlc_outpoint = 2; + * @return {string} + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.getHtlcOutpoint = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.looprpc.ServerHtlcConfirmedNotification} returns this + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.setHtlcOutpoint = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + +/** + * optional string htlc_address = 3; + * @return {string} + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.getHtlcAddress = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "")); +}; + + +/** + * @param {string} value + * @return {!proto.looprpc.ServerHtlcConfirmedNotification} returns this + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.setHtlcAddress = function(value) { + return jspb.Message.setProto3StringField(this, 3, value); +}; + + +/** + * optional uint32 sat_per_vbyte = 4; + * @return {number} + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.getSatPerVbyte = function() { + return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0)); +}; + + +/** + * @param {number} value + * @return {!proto.looprpc.ServerHtlcConfirmedNotification} returns this + */ +proto.looprpc.ServerHtlcConfirmedNotification.prototype.setSatPerVbyte = function(value) { + return jspb.Message.setProto3IntField(this, 4, value); +}; + + /** * @enum {number} */ diff --git a/go.mod b/go.mod index 86e10259..64cf2abe 100644 --- a/go.mod +++ b/go.mod @@ -24,15 +24,15 @@ require ( github.com/lightninglabs/lightning-node-connect/mailbox v1.0.2-0.20250610182311-2f1d46ef18b7 github.com/lightninglabs/lightning-terminal/autopilotserverrpc v0.0.3 github.com/lightninglabs/lndclient v0.21.0-1 - github.com/lightninglabs/loop v0.31.8-beta - github.com/lightninglabs/loop/looprpc v1.0.13 - github.com/lightninglabs/loop/swapserverrpc v1.0.20 + github.com/lightninglabs/loop v0.33.3-beta + github.com/lightninglabs/loop/looprpc v1.0.14 + github.com/lightninglabs/loop/swapserverrpc v1.0.21 github.com/lightninglabs/pool v0.7.1-beta github.com/lightninglabs/pool/auctioneerrpc v1.1.3 github.com/lightninglabs/pool/poolrpc v1.0.1 github.com/lightninglabs/taproot-assets v0.8.0 github.com/lightninglabs/taproot-assets/taprpc v1.1.0 - github.com/lightningnetwork/lnd v0.21.0-beta + github.com/lightningnetwork/lnd v0.21.1-beta github.com/lightningnetwork/lnd/cert v1.2.2 github.com/lightningnetwork/lnd/clock v1.1.1 github.com/lightningnetwork/lnd/fn v1.2.5 @@ -40,7 +40,7 @@ require ( github.com/lightningnetwork/lnd/kvdb v1.4.16 github.com/lightningnetwork/lnd/sqldb/v2 v2.0.0-20260326184657-f7cc56305bae github.com/lightningnetwork/lnd/tlv v1.3.2 - github.com/lightningnetwork/lnd/tor v1.1.6 + github.com/lightningnetwork/lnd/tor v1.1.7 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f github.com/mwitkow/grpc-proxy v0.0.0-20230212185441-f345521cb9c9 github.com/ory/dockertest/v3 v3.10.0 diff --git a/go.sum b/go.sum index 085cf27c..fb14de9b 100644 --- a/go.sum +++ b/go.sum @@ -1144,12 +1144,12 @@ github.com/lightninglabs/lightning-node-connect/mailbox v1.0.2-0.20250610182311- github.com/lightninglabs/lightning-node-connect/mailbox v1.0.2-0.20250610182311-2f1d46ef18b7/go.mod h1:cQA5pybYbERkMlE8j49LITZZozQZIXABbWJLIpMWnus= github.com/lightninglabs/lndclient v0.21.0-1 h1:NuyccCK7tbMaH7hhqtewcx+qeBel4/RLJrlnQ/lMkkY= github.com/lightninglabs/lndclient v0.21.0-1/go.mod h1:RUIcfPr82HrvZr3pu9f8nbD5v6VFbm+KgExqNNp5bE4= -github.com/lightninglabs/loop v0.31.8-beta h1:9vYO5kDLrtQ9Mx41r0dAcVmZM1aQmkaDWwLUK1qOAes= -github.com/lightninglabs/loop v0.31.8-beta/go.mod h1:WHtv21ZYDuYrPWTIXlvAW3x78LPW7LFDCEOYsS1LBzU= -github.com/lightninglabs/loop/looprpc v1.0.13 h1:bOWDp+XnG28wP9Q8ZXvhhVuAQ7yYhuvPIfJk68GVLWk= -github.com/lightninglabs/loop/looprpc v1.0.13/go.mod h1:+m2HQ5gfMpoq449gyTsub/e3dKrOzAR6iWY11NV610M= -github.com/lightninglabs/loop/swapserverrpc v1.0.20 h1:/svfGdnwXE0++IvcNc50zjnpLPcJcvf+i2zPDhrAITo= -github.com/lightninglabs/loop/swapserverrpc v1.0.20/go.mod h1:nIgLTTEZ/fdWi9UVjNZ8XkkDMZI9wcEEVkEl9Wltyb4= +github.com/lightninglabs/loop v0.33.3-beta h1:L8wYQZIrz9Xpsre0eSGEfO0ahthr7sVjLzDBxaedx7w= +github.com/lightninglabs/loop v0.33.3-beta/go.mod h1:nQIASE+Y6X5x7I0RY9hH/Q748+Oi90OdqibpwYAnAKE= +github.com/lightninglabs/loop/looprpc v1.0.14 h1:9gaAVGplNZMyalLV8qxILXDD9F8QSgdtOgrtOFw60V4= +github.com/lightninglabs/loop/looprpc v1.0.14/go.mod h1:vUYOyRjWWKSnCrFyugiXuS90eC/FajYoTY3OE18cRNo= +github.com/lightninglabs/loop/swapserverrpc v1.0.21 h1:MI8LhS7jtjqI6b7AcE/kHO9WKGVxiWCMmt302dBsM6A= +github.com/lightninglabs/loop/swapserverrpc v1.0.21/go.mod h1:c0rJiM9TiZ7gr/snaALWixTf3UU1GNWZ9sYASTTHSZk= github.com/lightninglabs/migrate/v4 v4.18.2-9023d66a-fork-pr-2.0.20251211093704-71c1eef09789 h1:7kX7vUgHUazAHcCJ6uzBDa4/2MEGEbMEfa01GtfqmTQ= github.com/lightninglabs/migrate/v4 v4.18.2-9023d66a-fork-pr-2.0.20251211093704-71c1eef09789/go.mod h1:99BKpIi6ruaaXRM1A77eqZ+FWPQ3cfRa+ZVy5bmWMaY= github.com/lightninglabs/neutrino v0.17.1 h1:lNhgq7ix/N81R6oATroP/kHMzH1qzVVF2dEGcTlN2t4= @@ -1170,8 +1170,8 @@ github.com/lightninglabs/taproot-assets/taprpc v1.1.0 h1:Oum7ddGygrEaT+NHqpaQI8U github.com/lightninglabs/taproot-assets/taprpc v1.1.0/go.mod h1:X7XP753o8xCgjVI2mRu1Tvpyk3k4uybGDMFhpF6IRxI= github.com/lightningnetwork/lightning-onion v1.3.0 h1:FqILgHjD6euc/Muo1VOzZ4+XDPuFnw6EYROBq0rR/5c= github.com/lightningnetwork/lightning-onion v1.3.0/go.mod h1:nP85zMHG7c0si/eHBbSQpuDCtnIXfSvFrK3tW6YWzmU= -github.com/lightningnetwork/lnd v0.21.0-beta h1:bDP5UH15E7DVGTztsmBPQLqgyilq5EXDrglvQFmRc3U= -github.com/lightningnetwork/lnd v0.21.0-beta/go.mod h1:HcKq9DyxbVEZXuR28TIyGbIIgAjANCxI+N6dqOnRBAA= +github.com/lightningnetwork/lnd v0.21.1-beta h1:XYr8CRY3EB5bQ8I43/6QbOZP1dRi/XI6dwzTHlS2jxQ= +github.com/lightningnetwork/lnd v0.21.1-beta/go.mod h1:iqqf8Cyq0F7ssUftb17+Y644OWVg2OMOpvWSyzympXs= github.com/lightningnetwork/lnd/actor v0.0.6 h1:Ge8N2wivARG+27qJBwTlB0vwsypStZYZy8vk4Zl38sU= github.com/lightningnetwork/lnd/actor v0.0.6/go.mod h1:YAsoniSbY/cAM9HTVNfZLvt7RI6swDxy6wzPspTcMZg= github.com/lightningnetwork/lnd/cert v1.2.2 h1:71YK6hogeJtxSxw2teq3eGeuy4rHGKcFf0d0Uy4qBjI= @@ -1196,8 +1196,8 @@ github.com/lightningnetwork/lnd/ticker v1.1.1 h1:J/b6N2hibFtC7JLV77ULQp++QLtCwT6 github.com/lightningnetwork/lnd/ticker v1.1.1/go.mod h1:waPTRAAcwtu7Ji3+3k+u/xH5GHovTsCoSVpho0KDvdA= github.com/lightningnetwork/lnd/tlv v1.3.2 h1:MO4FCk7F4k5xPMqVZF6Nb/kOpxlwPrUQpYjmyKny5s0= github.com/lightningnetwork/lnd/tlv v1.3.2/go.mod h1:pJuiBj1ecr1WWLOtcZ+2+hu9Ey25aJWFIsjmAoPPnmc= -github.com/lightningnetwork/lnd/tor v1.1.6 h1:WHUumk7WgU6BUFsqHuqszI9P6nfhMeIG+rjJBlVE6OE= -github.com/lightningnetwork/lnd/tor v1.1.6/go.mod h1:qSRB8llhAK+a6kaTPWOLLXSZc6Hg8ZC0mq1sUQ/8JfI= +github.com/lightningnetwork/lnd/tor v1.1.7 h1:BfY1KQGz3LVaeaAGI4XYGYCwDQR1ADFD1P/uXsS2dQc= +github.com/lightningnetwork/lnd/tor v1.1.7/go.mod h1:DANQ6QCQBiR+CqrM+mKudgkMy6CR/RS4ALDbjb2W4FU= github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796 h1:sjOGyegMIhvgfq5oaue6Td+hxZuf3tDC8lAPrFldqFw= github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796/go.mod h1:3p7ZTf9V1sNPI5H8P3NkTFF4LuwMdPl2DodF60qAKqY= github.com/ltcsuite/ltcutil v0.0.0-20181217130922-17f3b04680b6/go.mod h1:8Vg/LTOO0KYa/vlHWJ6XZAevPQThGH5sufO0Hrou/lA= diff --git a/proto/loop.proto b/proto/loop.proto index e2528610..f2c1192f 100644 --- a/proto/loop.proto +++ b/proto/loop.proto @@ -1,6 +1,7 @@ syntax = "proto3"; import "swapserverrpc/common.proto"; +import "lnd.proto"; package looprpc; @@ -206,13 +207,34 @@ service SwapClient { rpc GetStaticAddressSummary (StaticAddressSummaryRequest) returns (StaticAddressSummaryResponse); - /* loop:`static` + /* loop:`static in` StaticAddressLoopIn initiates a static address loop-in swap. */ rpc StaticAddressLoopIn (StaticAddressLoopInRequest) returns (StaticAddressLoopInResponse); + + /* loop:`static openchannel` + StaticOpenChannel opens a channel funded by selected static address + deposits. + */ + rpc StaticOpenChannel (StaticOpenChannelRequest) + returns (StaticOpenChannelResponse); } +message StaticOpenChannelRequest { + // Wrap lnd's request so Loop can extend this RPC with Loop-specific fields + // without diverging from the upstream API surface. + lnrpc.OpenChannelRequest open_channel_request = 1; +} + +message StaticOpenChannelResponse { + /* + The outpoint of the channel opening transaction in the format + "txid:output_index". + */ + string channel_open_outpoint = 1; +}; + message StopDaemonRequest { } @@ -1170,6 +1192,18 @@ message GetInfoResponse { message GetLiquidityParamsRequest { } +enum LoopInSource { + /* + Use the legacy wallet-funded loop-in flow. + */ + LOOP_IN_SOURCE_WALLET = 0; + + /* + Use deposited static-address funds for loop-in autoloops. + */ + LOOP_IN_SOURCE_STATIC_ADDRESS = 1; +} + message LiquidityParameters { /* A set of liquidity rules that describe the desired liquidity balance. @@ -1348,6 +1382,11 @@ message LiquidityParameters { considered for easy autoloop swaps. */ repeated bytes easy_autoloop_excluded_peers = 27; + + /* + Selects which source autoloop uses for loop-in rules. + */ + LoopInSource loop_in_source = 28; } message EasyAssetAutoloopParams { @@ -1504,6 +1543,18 @@ enum AutoReason { the portion of total swap amount that we allow fees to consume. */ AUTO_REASON_FEE_INSUFFICIENT = 13; + + /* + No static loop-in candidate indicates that static loop-in autoloop was + selected, but no full-deposit static candidate fit the rule. + */ + AUTO_REASON_STATIC_LOOP_IN_NO_CANDIDATE = 14; + + /* + Custom channel data indicates that the target channel carries custom + channel data and is excluded from the standard autoloop planner. + */ + AUTO_REASON_CUSTOM_CHANNEL_DATA = 15; } message Disqualified { @@ -1534,6 +1585,11 @@ message SuggestSwapsResponse { */ repeated LoopInRequest loop_in = 3; + /* + The set of recommended static-address loop in swaps. + */ + repeated StaticAddressLoopInRequest static_loop_in = 4; + /* Disqualified contains the set of channels that swaps are not recommended for. @@ -1771,7 +1827,7 @@ message WithdrawDepositsRequest { /* The outpoints of the deposits to withdraw. */ - repeated OutPoint outpoints = 1; + repeated lnrpc.OutPoint outpoints = 1; /* If set to true, all deposits will be withdrawn. @@ -1810,23 +1866,6 @@ message WithdrawDepositsResponse { string address = 2; } -message OutPoint { - /* - Raw bytes representing the transaction id. - */ - bytes txid_bytes = 1; - - /* - Reversed, hex-encoded string representing the transaction id. - */ - string txid_str = 2; - - /* - The index of the output on the transaction. - */ - uint32 output_index = 3; -} - message ListStaticAddressDepositsRequest { /* Filters the list of all stored deposits by deposit state. @@ -1914,6 +1953,11 @@ message StaticAddressSummaryResponse { The total value of all htlc timeout sweeps that the client swept. */ int64 value_htlc_timeout_sweeps_satoshis = 9 [jstype = JS_STRING]; + + /* + The total value of all deposits that have been used for channel openings. + */ + int64 value_channels_opened = 10 [jstype = JS_STRING]; } enum DepositState { @@ -1982,6 +2026,18 @@ enum DepositState { has been sufficiently confirmed. */ EXPIRED = 10; + + /* + OPENING_CHANNEL indicates that the channel open in which the deposit was + used is in progress. + */ + OPENING_CHANNEL = 11; + + /* + CHANNEL_PUBLISHED indicates that the channel open was finalized and + published and that it should be managed from lnd from now on. + */ + CHANNEL_PUBLISHED = 12; } message Deposit { @@ -2087,6 +2143,31 @@ message StaticAddressLoopInSwap { The deposits that were used for this swap. */ repeated Deposit deposits = 6; + + /* + Initiation time of the swap. + */ + int64 initiation_time = 7 [jstype = JS_STRING]; + + /* + Last update time of the swap. + */ + int64 last_update_time = 8 [jstype = JS_STRING]; + + /* + Swap server cost. + */ + int64 cost_server = 9 [jstype = JS_STRING]; + + /* + On-chain transaction cost. + */ + int64 cost_onchain = 10 [jstype = JS_STRING]; + + /* + Off-chain routing fees. + */ + int64 cost_offchain = 11 [jstype = JS_STRING]; } enum StaticAddressLoopInSwapState { diff --git a/proto/swapserverrpc/server.proto b/proto/swapserverrpc/server.proto index e72f0668..25c4a109 100644 --- a/proto/swapserverrpc/server.proto +++ b/proto/swapserverrpc/server.proto @@ -679,6 +679,11 @@ message SubscribeNotificationsResponse { ServerReservationNotification reservation_notification = 1; ServerStaticLoopInSweepNotification static_loop_in_sweep = 2; ServerUnfinishedSwapNotification unfinished_swap = 3; + ServerStaticLoopInRiskAcceptedNotification + static_loop_in_risk_accepted = 4; + ServerStaticLoopInRiskRejectedNotification + static_loop_in_risk_rejected = 5; + ServerHtlcConfirmedNotification htlc_confirmed = 6; } } @@ -699,6 +704,22 @@ message ServerStaticLoopInSweepNotification { repeated PrevoutInfo prevout_info = 4; } +// ServerStaticLoopInRiskAcceptedNotification tells the client that the server +// has accepted confirmation risk for a static loop-in and will start attempting +// the off-chain swap payment. +message ServerStaticLoopInRiskAcceptedNotification { + // The swap hash the accepted risk belongs to. + bytes swap_hash = 1; +} + +// ServerStaticLoopInRiskRejectedNotification tells the client that the server +// will not continue waiting for confirmation risk acceptance for a static +// loop-in. +message ServerStaticLoopInRiskRejectedNotification { + // The swap hash the rejected risk wait belongs to. + bytes swap_hash = 1; +} + // ServerUnfinishedSwapNotification notifies the client about an unfinished // swap that needs attention. This is useful in client data loss scenarios to // help the client recover the swap. @@ -709,3 +730,20 @@ message ServerUnfinishedSwapNotification { // Whether the swap is a loop in or loop out. bool is_loop_in = 2; } + +// ServerHtlcConfirmedNotification is a notification from the server to the +// client that the on-chain HTLC for a loop out swap has been confirmed. +message ServerHtlcConfirmedNotification { + // The swap hash of the loop out swap. + bytes swap_hash = 1; + + // htlc_outpoint is the outpoint of the confirmed HTLC in the format + // "txid:output_index". + string htlc_outpoint = 2; + + // htlc_address is the address of the confirmed HTLC output. + string htlc_address = 3; + + // sat_per_vbyte is the requested recovery sweep fee rate. + uint32 sat_per_vbyte = 4; +} From 5032e33d35aea813eff2b31cf6833113586e58b9 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Tue, 16 Jun 2026 00:38:40 +0200 Subject: [PATCH 15/69] litrpc: bump `lnd` and `looprpc` Bump `lnd` to `v0.21.1-beta`. We also bump `looprpc` to the version compatible with `loop` `v0.33.3-beta`. --- litrpc/go.mod | 12 ++++++------ litrpc/go.sum | 34 ++++++++++++---------------------- 2 files changed, 18 insertions(+), 28 deletions(-) diff --git a/litrpc/go.mod b/litrpc/go.mod index 0dfef792..01ac7be1 100644 --- a/litrpc/go.mod +++ b/litrpc/go.mod @@ -5,10 +5,10 @@ go 1.25.10 require ( github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 github.com/lightninglabs/faraday/frdrpc v1.0.1 - github.com/lightninglabs/loop/looprpc v1.0.13 + github.com/lightninglabs/loop/looprpc v1.0.14 github.com/lightninglabs/pool/poolrpc v1.0.1 github.com/lightninglabs/taproot-assets/taprpc v1.1.0 - github.com/lightningnetwork/lnd v0.21.0-beta + github.com/lightningnetwork/lnd v0.21.1-beta google.golang.org/grpc v1.79.3 google.golang.org/protobuf v1.36.11 ) @@ -107,7 +107,7 @@ require ( github.com/lightningnetwork/lnd/sqldb v1.0.13 // indirect github.com/lightningnetwork/lnd/ticker v1.1.1 // indirect github.com/lightningnetwork/lnd/tlv v1.3.2 // indirect - github.com/lightningnetwork/lnd/tor v1.1.6 // indirect + github.com/lightningnetwork/lnd/tor v1.1.7 // indirect github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect @@ -152,15 +152,15 @@ require ( go.etcd.io/etcd/raft/v3 v3.5.12 // indirect go.etcd.io/etcd/server/v3 v3.5.12 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/sdk v1.43.0 // indirect go.opentelemetry.io/otel/trace v1.43.0 // indirect - go.opentelemetry.io/proto/otlp v1.0.0 // indirect + go.opentelemetry.io/proto/otlp v1.3.1 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.23.0 // indirect diff --git a/litrpc/go.sum b/litrpc/go.sum index 21ced1af..79336bbf 100644 --- a/litrpc/go.sum +++ b/litrpc/go.sum @@ -36,7 +36,6 @@ cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRY cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= -cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= @@ -173,13 +172,10 @@ cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63 cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= -cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= -cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= @@ -721,8 +717,6 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= @@ -787,8 +781,6 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= -github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fergusstrange/embedded-postgres v1.25.0 h1:sa+k2Ycrtz40eCRPOzI7Ry7TtkWXXJ+YRsxpKMDhxK0= @@ -1098,8 +1090,8 @@ github.com/lightninglabs/faraday/frdrpc v1.0.1 h1:3YlP9UwT0bmT468oAdn4dxwsaJBI4Q github.com/lightninglabs/faraday/frdrpc v1.0.1/go.mod h1:ot1R/RGzk61d3qCrZPL36jI5ziGmKbvvE7UQKsJKuvk= github.com/lightninglabs/gozmq v0.0.0-20191113021534-d20a764486bf h1:HZKvJUHlcXI/f/O0Avg7t8sqkPo78HFzjmeYFl6DPnc= github.com/lightninglabs/gozmq v0.0.0-20191113021534-d20a764486bf/go.mod h1:vxmQPeIQxPf6Jf9rM8R+B4rKBqLA2AjttNxkFBL2Plk= -github.com/lightninglabs/loop/looprpc v1.0.13 h1:bOWDp+XnG28wP9Q8ZXvhhVuAQ7yYhuvPIfJk68GVLWk= -github.com/lightninglabs/loop/looprpc v1.0.13/go.mod h1:+m2HQ5gfMpoq449gyTsub/e3dKrOzAR6iWY11NV610M= +github.com/lightninglabs/loop/looprpc v1.0.14 h1:9gaAVGplNZMyalLV8qxILXDD9F8QSgdtOgrtOFw60V4= +github.com/lightninglabs/loop/looprpc v1.0.14/go.mod h1:vUYOyRjWWKSnCrFyugiXuS90eC/FajYoTY3OE18cRNo= github.com/lightninglabs/loop/swapserverrpc v1.0.14 h1:0+UrC2oNFsWYqGZjmU+Fkcn8iXsea89VZdfmBXSyPPg= github.com/lightninglabs/loop/swapserverrpc v1.0.14/go.mod h1:HDRyzFOZeX0e1P9f9RSFE7FzE5u6Eta0hPqx5W7Wp24= github.com/lightninglabs/neutrino v0.17.1 h1:lNhgq7ix/N81R6oATroP/kHMzH1qzVVF2dEGcTlN2t4= @@ -1116,8 +1108,8 @@ github.com/lightninglabs/taproot-assets/taprpc v1.1.0 h1:Oum7ddGygrEaT+NHqpaQI8U github.com/lightninglabs/taproot-assets/taprpc v1.1.0/go.mod h1:X7XP753o8xCgjVI2mRu1Tvpyk3k4uybGDMFhpF6IRxI= github.com/lightningnetwork/lightning-onion v1.3.0 h1:FqILgHjD6euc/Muo1VOzZ4+XDPuFnw6EYROBq0rR/5c= github.com/lightningnetwork/lightning-onion v1.3.0/go.mod h1:nP85zMHG7c0si/eHBbSQpuDCtnIXfSvFrK3tW6YWzmU= -github.com/lightningnetwork/lnd v0.21.0-beta h1:bDP5UH15E7DVGTztsmBPQLqgyilq5EXDrglvQFmRc3U= -github.com/lightningnetwork/lnd v0.21.0-beta/go.mod h1:HcKq9DyxbVEZXuR28TIyGbIIgAjANCxI+N6dqOnRBAA= +github.com/lightningnetwork/lnd v0.21.1-beta h1:XYr8CRY3EB5bQ8I43/6QbOZP1dRi/XI6dwzTHlS2jxQ= +github.com/lightningnetwork/lnd v0.21.1-beta/go.mod h1:iqqf8Cyq0F7ssUftb17+Y644OWVg2OMOpvWSyzympXs= github.com/lightningnetwork/lnd/actor v0.0.6 h1:Ge8N2wivARG+27qJBwTlB0vwsypStZYZy8vk4Zl38sU= github.com/lightningnetwork/lnd/actor v0.0.6/go.mod h1:YAsoniSbY/cAM9HTVNfZLvt7RI6swDxy6wzPspTcMZg= github.com/lightningnetwork/lnd/clock v1.1.1 h1:OfR3/zcJd2RhH0RU+zX/77c0ZiOnIMsDIBjgjWdZgA0= @@ -1136,8 +1128,8 @@ github.com/lightningnetwork/lnd/ticker v1.1.1 h1:J/b6N2hibFtC7JLV77ULQp++QLtCwT6 github.com/lightningnetwork/lnd/ticker v1.1.1/go.mod h1:waPTRAAcwtu7Ji3+3k+u/xH5GHovTsCoSVpho0KDvdA= github.com/lightningnetwork/lnd/tlv v1.3.2 h1:MO4FCk7F4k5xPMqVZF6Nb/kOpxlwPrUQpYjmyKny5s0= github.com/lightningnetwork/lnd/tlv v1.3.2/go.mod h1:pJuiBj1ecr1WWLOtcZ+2+hu9Ey25aJWFIsjmAoPPnmc= -github.com/lightningnetwork/lnd/tor v1.1.6 h1:WHUumk7WgU6BUFsqHuqszI9P6nfhMeIG+rjJBlVE6OE= -github.com/lightningnetwork/lnd/tor v1.1.6/go.mod h1:qSRB8llhAK+a6kaTPWOLLXSZc6Hg8ZC0mq1sUQ/8JfI= +github.com/lightningnetwork/lnd/tor v1.1.7 h1:BfY1KQGz3LVaeaAGI4XYGYCwDQR1ADFD1P/uXsS2dQc= +github.com/lightningnetwork/lnd/tor v1.1.7/go.mod h1:DANQ6QCQBiR+CqrM+mKudgkMy6CR/RS4ALDbjb2W4FU= github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796 h1:sjOGyegMIhvgfq5oaue6Td+hxZuf3tDC8lAPrFldqFw= github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796/go.mod h1:3p7ZTf9V1sNPI5H8P3NkTFF4LuwMdPl2DodF60qAKqY= github.com/ltcsuite/ltcutil v0.0.0-20181217130922-17f3b04680b6/go.mod h1:8Vg/LTOO0KYa/vlHWJ6XZAevPQThGH5sufO0Hrou/lA= @@ -1350,14 +1342,14 @@ go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 h1:SpGay3w+nEwMpfVnbqOLH5gY52/foP8RE8UzTZ1pdSE= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1/go.mod h1:4UoMYEZOC0yN/sPGH76KPkkU7zgiEWYWL9vwmbnTJPE= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 h1:dIIDULZJpgdiHz5tXrTgKIMLkus6jEFa7x5SOKcyR7E= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0/go.mod h1:jlRVBe7+Z1wyxFSUs48L6OBQZ5JwH2Hg/Vbl+t9rAgI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0= go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= @@ -1371,8 +1363,8 @@ go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLh go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= -go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= +go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= +go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -1580,8 +1572,6 @@ golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= -golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= -golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= From 503201ffa7abba6b6ec49f3e020b6426b97eaa8a Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Fri, 26 Jun 2026 22:19:14 +0200 Subject: [PATCH 16/69] perms: bump `lnd` to `v0.21.1-beta` --- perms/go.mod | 4 ++-- perms/go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/perms/go.mod b/perms/go.mod index 3d1ce5e4..562d73bc 100644 --- a/perms/go.mod +++ b/perms/go.mod @@ -4,7 +4,7 @@ go 1.25.10 require ( github.com/btcsuite/btcd v0.25.1-0.20260310163610-1c55c7c18179 - github.com/lightningnetwork/lnd v0.21.0-beta + github.com/lightningnetwork/lnd v0.21.1-beta github.com/stretchr/testify v1.11.1 gopkg.in/macaroon-bakery.v2 v2.3.0 ) @@ -111,7 +111,7 @@ require ( github.com/lightningnetwork/lnd/sqldb v1.0.13 // indirect github.com/lightningnetwork/lnd/ticker v1.1.1 // indirect github.com/lightningnetwork/lnd/tlv v1.3.2 // indirect - github.com/lightningnetwork/lnd/tor v1.1.6 // indirect + github.com/lightningnetwork/lnd/tor v1.1.7 // indirect github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect diff --git a/perms/go.sum b/perms/go.sum index 57cd781d..d068e4d3 100644 --- a/perms/go.sum +++ b/perms/go.sum @@ -372,8 +372,8 @@ github.com/lightninglabs/neutrino/cache v1.1.3 h1:rgnabC41W+XaPuBTQrdeFjFCCAVKh1 github.com/lightninglabs/neutrino/cache v1.1.3/go.mod h1:qxkJb+pUxR5p84jl5uIGFCR4dGdFkhNUwMSxw3EUWls= github.com/lightningnetwork/lightning-onion v1.3.0 h1:FqILgHjD6euc/Muo1VOzZ4+XDPuFnw6EYROBq0rR/5c= github.com/lightningnetwork/lightning-onion v1.3.0/go.mod h1:nP85zMHG7c0si/eHBbSQpuDCtnIXfSvFrK3tW6YWzmU= -github.com/lightningnetwork/lnd v0.21.0-beta h1:bDP5UH15E7DVGTztsmBPQLqgyilq5EXDrglvQFmRc3U= -github.com/lightningnetwork/lnd v0.21.0-beta/go.mod h1:HcKq9DyxbVEZXuR28TIyGbIIgAjANCxI+N6dqOnRBAA= +github.com/lightningnetwork/lnd v0.21.1-beta h1:XYr8CRY3EB5bQ8I43/6QbOZP1dRi/XI6dwzTHlS2jxQ= +github.com/lightningnetwork/lnd v0.21.1-beta/go.mod h1:iqqf8Cyq0F7ssUftb17+Y644OWVg2OMOpvWSyzympXs= github.com/lightningnetwork/lnd/actor v0.0.6 h1:Ge8N2wivARG+27qJBwTlB0vwsypStZYZy8vk4Zl38sU= github.com/lightningnetwork/lnd/actor v0.0.6/go.mod h1:YAsoniSbY/cAM9HTVNfZLvt7RI6swDxy6wzPspTcMZg= github.com/lightningnetwork/lnd/cert v1.2.2 h1:71YK6hogeJtxSxw2teq3eGeuy4rHGKcFf0d0Uy4qBjI= @@ -394,8 +394,8 @@ github.com/lightningnetwork/lnd/ticker v1.1.1 h1:J/b6N2hibFtC7JLV77ULQp++QLtCwT6 github.com/lightningnetwork/lnd/ticker v1.1.1/go.mod h1:waPTRAAcwtu7Ji3+3k+u/xH5GHovTsCoSVpho0KDvdA= github.com/lightningnetwork/lnd/tlv v1.3.2 h1:MO4FCk7F4k5xPMqVZF6Nb/kOpxlwPrUQpYjmyKny5s0= github.com/lightningnetwork/lnd/tlv v1.3.2/go.mod h1:pJuiBj1ecr1WWLOtcZ+2+hu9Ey25aJWFIsjmAoPPnmc= -github.com/lightningnetwork/lnd/tor v1.1.6 h1:WHUumk7WgU6BUFsqHuqszI9P6nfhMeIG+rjJBlVE6OE= -github.com/lightningnetwork/lnd/tor v1.1.6/go.mod h1:qSRB8llhAK+a6kaTPWOLLXSZc6Hg8ZC0mq1sUQ/8JfI= +github.com/lightningnetwork/lnd/tor v1.1.7 h1:BfY1KQGz3LVaeaAGI4XYGYCwDQR1ADFD1P/uXsS2dQc= +github.com/lightningnetwork/lnd/tor v1.1.7/go.mod h1:DANQ6QCQBiR+CqrM+mKudgkMy6CR/RS4ALDbjb2W4FU= github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796 h1:sjOGyegMIhvgfq5oaue6Td+hxZuf3tDC8lAPrFldqFw= github.com/ltcsuite/ltcd v0.0.0-20190101042124-f37f8bf35796/go.mod h1:3p7ZTf9V1sNPI5H8P3NkTFF4LuwMdPl2DodF60qAKqY= github.com/ltcsuite/ltcutil v0.0.0-20181217130922-17f3b04680b6/go.mod h1:8Vg/LTOO0KYa/vlHWJ6XZAevPQThGH5sufO0Hrou/lA= From 901d60cc0eed76baa3e69db83d77e0d0113d9343 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Fri, 26 Jun 2026 22:44:17 +0200 Subject: [PATCH 17/69] docs: update compatibility notes Add `v0.16.1-alpha` & `v0.17.0-alpha` to the compatibility notes. --- docs/compatibility.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/compatibility.md b/docs/compatibility.md index 57b3dd11..ada36442 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -12,6 +12,8 @@ bundled version will always come with the correct compatible versioning. | LiT | min LND version | |-------------------|-----------------| +| **v0.17.0-alpha** | v0.19.0-beta | +| **v0.16.1-alpha** | v0.19.0-beta | | **v0.16.0-alpha** | v0.19.0-beta | | **v0.15.3-alpha** | v0.19.0-beta | | **v0.15.2-alpha** | v0.19.0-beta | From 569fdee4f49fcd6324fe9c7ac3fd52e870acfc3d Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Tue, 16 Jun 2026 00:35:02 +0200 Subject: [PATCH 18/69] docs: prepare release notes for `v0.17.0-alpha` --- docs/release-notes/release-notes-0.17.0.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/release-notes/release-notes-0.17.0.md b/docs/release-notes/release-notes-0.17.0.md index 3bed9eda..7b98f392 100644 --- a/docs/release-notes/release-notes-0.17.0.md +++ b/docs/release-notes/release-notes-0.17.0.md @@ -93,11 +93,16 @@ ### LND -* [Bump lnd to v0.21.0-beta and lndclient to - v0.21.0-1](https://github.com/lightninglabs/lightning-terminal/pull/1300). +* [Bump lnd to + v0.21.1-beta](https://github.com/lightninglabs/lightning-terminal/pull/1331). ### Loop +* Bump [`loop` to + v0.33.3-beta](https://github.com/lightninglabs/lightning-terminal/pull/1331), + Additionally, `looprpc` is bumped to `v1.0.14` and `swapserverrpc` is bumped + to `v1.0.21` match the version used in `loop` `v0.33.3-beta`. + ### Pool * Updated [`pool` to From 8cd75e44d960668cb18a6c0d92f669538809ee4c Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Tue, 16 Jun 2026 00:29:26 +0200 Subject: [PATCH 19/69] version: bump version to `v0.17.0-alpha` --- version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.go b/version.go index f598f4e6..64fbb803 100644 --- a/version.go +++ b/version.go @@ -39,7 +39,7 @@ const ( // appPreRelease MUST only contain characters from semanticAlphabet per // the semantic versioning spec. - appPreRelease = "alpha.rc1" + appPreRelease = "alpha" ) // Version returns the application version as a properly formed string per the From b4133b1a12b333a90c7c9f70037dc1b8215c873b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jun 2026 19:36:47 +0000 Subject: [PATCH 20/69] build(deps): bump github.com/opencontainers/runc from 1.2.8 to 1.3.6 Bumps [github.com/opencontainers/runc](https://github.com/opencontainers/runc) from 1.2.8 to 1.3.6. - [Release notes](https://github.com/opencontainers/runc/releases) - [Changelog](https://github.com/opencontainers/runc/blob/main/CHANGELOG.md) - [Commits](https://github.com/opencontainers/runc/compare/v1.2.8...v1.3.6) --- updated-dependencies: - dependency-name: github.com/opencontainers/runc dependency-version: 1.3.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- go.mod | 6 +++--- go.sum | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 86e10259..eb2879be 100644 --- a/go.mod +++ b/go.mod @@ -46,7 +46,7 @@ require ( github.com/ory/dockertest/v3 v3.10.0 github.com/pmezard/go-difflib v1.0.0 github.com/stretchr/testify v1.11.1 - github.com/urfave/cli v1.22.14 + github.com/urfave/cli v1.22.16 go.etcd.io/bbolt v1.4.3 golang.org/x/crypto v0.47.0 golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 @@ -93,7 +93,7 @@ require ( github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect github.com/decred/dcrd/crypto/blake256 v1.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect github.com/decred/dcrd/lru v1.1.2 // indirect @@ -174,7 +174,7 @@ require ( github.com/ncruces/go-strftime v0.1.9 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect - github.com/opencontainers/runc v1.2.8 // indirect + github.com/opencontainers/runc v1.3.6 // indirect github.com/prometheus/client_golang v1.14.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect github.com/prometheus/common v0.37.0 // indirect diff --git a/go.sum b/go.sum index 085cf27c..adbf2600 100644 --- a/go.sum +++ b/go.sum @@ -600,7 +600,7 @@ git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3p github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= @@ -748,9 +748,8 @@ github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pq github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= +github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.24 h1:bJrF4RRfyJnbTJqzRLHzcGaZK1NeM5kTC9jGgovnR1s= @@ -1269,8 +1268,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= -github.com/opencontainers/runc v1.2.8 h1:RnEICeDReapbZ5lZEgHvj7E9Q3Eex9toYmaGBsbvU5Q= -github.com/opencontainers/runc v1.2.8/go.mod h1:cC0YkmZcuvr+rtBZ6T7NBoVbMGNAdLa/21vIElJDOzI= +github.com/opencontainers/runc v1.3.6 h1:SLGIymCtsk80iNPWgbc8dtjI30r+5mTVV+4dN8/17Sk= +github.com/opencontainers/runc v1.3.6/go.mod h1:o1wyv76EDlTkcf0KTFgN8bMWLPvgF/HfX709lDv+rr4= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4= github.com/ory/dockertest/v3 v3.10.0/go.mod h1:nr57ZbRWMqfsdGdFNLHz5jjNdDb7VVFnzAeW1n5N1Lg= @@ -1374,6 +1373,7 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -1382,8 +1382,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/zbase32 v0.0.0-20160707012821-501572607d02 h1:tcJ6OjwOMvExLlzrAVZute09ocAGa7KqOON60++Gz4E= github.com/tv42/zbase32 v0.0.0-20160707012821-501572607d02/go.mod h1:tHlrkM198S068ZqfrO6S8HsoJq2bF3ETfTL+kt4tInY= -github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= -github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= +github.com/urfave/cli v1.22.16 h1:MH0k6uJxdwdeWQTwhSO42Pwr4YLrNLwBtg1MRgTqPdQ= +github.com/urfave/cli v1.22.16/go.mod h1:EeJR6BKodywf4zciqrdw6hpCPk68JO9z5LazXZMn5Po= github.com/urfave/cli-docs/v3 v3.1.1-0.20251020101624-bec07369b4f6 h1:cm0BrTu3Q0CNo+vB5kErCcVMZqD2D1z7y3YVIiBlr+o= github.com/urfave/cli-docs/v3 v3.1.1-0.20251020101624-bec07369b4f6/go.mod h1:59d+5Hz1h6GSGJ10cvcEkbIe3j233t4XDqI72UIx7to= github.com/urfave/cli/v3 v3.4.1 h1:1M9UOCy5bLmGnuu1yn3t3CB4rG79Rtoxuv1sPhnm6qM= From bcdbe68fa14e330021e9f05e789ed470d7b97ff0 Mon Sep 17 00:00:00 2001 From: 0xfandom Date: Tue, 30 Jun 2026 11:59:39 +0530 Subject: [PATCH 21/69] config: make `litd -V` report litd's own version The `-V` flag inherited from lnd printed the integrated lnd version (`build.Version()`) instead of litd's own version, while litd's own `--version` flag already reported the correct value via RichVersion(). Consolidate both flags so either one prints litd's version. Fixes #1091 Signed-off-by: 0xfandom --- config.go | 10 +++------- docs/release-notes/release-notes-0.17.0.md | 4 ++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/config.go b/config.go index f8d49ee6..88ce14be 100644 --- a/config.go +++ b/config.go @@ -365,18 +365,14 @@ func loadAndValidateConfig(interceptor signal.Interceptor) (*Config, error) { return nil, fmt.Errorf("error parsing flags: %w", err) } - // Show the version and exit if the version flag was specified. + // Show the version and exit if the version flag was specified. This + // applies for both the `--version` and the `-V` flag. appName := filepath.Base(os.Args[0]) appName = strings.TrimSuffix(appName, filepath.Ext(appName)) - if preCfg.ShowVersion { + if preCfg.ShowVersion || preCfg.Lnd.ShowVersion { fmt.Println(appName, "version", RichVersion()) os.Exit(0) } - if preCfg.Lnd.ShowVersion { - fmt.Println(appName, "version", build.Version(), - "commit="+build.Commit) - os.Exit(0) - } // The logging config we use to initialise the sub-logger manager below // depends on whether we're running in remote mode or not. diff --git a/docs/release-notes/release-notes-0.17.0.md b/docs/release-notes/release-notes-0.17.0.md index d9b29cec..6a9bf331 100644 --- a/docs/release-notes/release-notes-0.17.0.md +++ b/docs/release-notes/release-notes-0.17.0.md @@ -35,6 +35,10 @@ ### Technical and Architectural Updates +* [Report litd's own version for `litd + -V`](https://github.com/lightninglabs/lightning-terminal/pull/1337): The `-V` + flag now prints litd's version instead of the integrated lnd version. + ## RPC Updates ## Integrated Binary Updates From 4e72e798e6039b17efcf6f9e68610005cc3c3f55 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Wed, 1 Jul 2026 12:53:07 +0200 Subject: [PATCH 22/69] docker: improve cleanup of docker space in CI Mimic `lnd`s cleanup of docker space in CI by adding a new clean-space job which removes the same docker related artifacts as `lnd` does prior to running the rest of the docker.yml jobs. --- .github/actions/cleanup-space/action.yml | 48 ++++++++++++++++++++++++ .github/workflows/docker.yml | 2 +- 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 .github/actions/cleanup-space/action.yml diff --git a/.github/actions/cleanup-space/action.yml b/.github/actions/cleanup-space/action.yml new file mode 100644 index 00000000..d03e1e54 --- /dev/null +++ b/.github/actions/cleanup-space/action.yml @@ -0,0 +1,48 @@ +name: "Clean up runner disk space" +description: "Removes large, non-essential toolsets to free up disk space." + +runs: + using: "composite" + steps: + - name: Free up disk space + shell: bash + run: | + echo "Removing large toolsets to free up disk space..." + echo "Disk space before cleanup:" + df -h + + # Remove large language/runtime toolsets that aren't needed for the + # Docker image build on the GitHub-hosted runner. + sudo rm -rf /usr/share/dotnet + sudo rm -rf /usr/local/lib/android + sudo rm -rf /opt/ghc + sudo rm -rf /usr/share/swift + sudo rm -rf /usr/local/julia* + sudo rm -rf /opt/hostedtoolcache + + # Reclaim any Docker images that may already be present on the runner. + docker image prune -a -f || true + + # Remove large apt packages and clean related caches. + sudo apt-get remove -y \ + '^aspnetcore-.*' \ + '^dotnet-.*' \ + '^llvm-.*' \ + 'php.*' \ + '^mongodb-.*' \ + '^mysql-.*' \ + azure-cli \ + google-chrome-stable \ + firefox \ + powershell \ + mono-devel \ + libgl1-mesa-dri 2>/dev/null || true + sudo apt-get autoremove -y + sudo apt-get clean + + # Remove additional large caches and tool directories. + sudo rm -rf /usr/local/share/boost + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + + echo "Disk space after cleanup:" + df -h diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index c3a8406d..aa31ea8a 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: cleanup space - run: rm -rf /opt/hostedtoolcache + uses: ./.github/actions/cleanup-space - name: Set up QEMU uses: lightninglabs/gh-actions/setup-qemu-action@2021.01.25.00 From e3091c90454383d528ed72301244c119e06c05c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jul 2026 13:12:40 +0000 Subject: [PATCH 23/69] build(deps): bump github.com/opencontainers/runc in /litrpc Bumps [github.com/opencontainers/runc](https://github.com/opencontainers/runc) from 1.2.8 to 1.3.6. - [Release notes](https://github.com/opencontainers/runc/releases) - [Changelog](https://github.com/opencontainers/runc/blob/main/CHANGELOG.md) - [Commits](https://github.com/opencontainers/runc/compare/v1.2.8...v1.3.6) --- updated-dependencies: - dependency-name: github.com/opencontainers/runc dependency-version: 1.3.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- litrpc/go.mod | 3 ++- litrpc/go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/litrpc/go.mod b/litrpc/go.mod index 01ac7be1..26767f33 100644 --- a/litrpc/go.mod +++ b/litrpc/go.mod @@ -16,6 +16,7 @@ require ( require ( dario.cat/mergo v1.0.1 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect + github.com/BurntSushi/toml v1.4.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect @@ -122,7 +123,7 @@ require ( github.com/ncruces/go-strftime v0.1.9 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect - github.com/opencontainers/runc v1.2.8 // indirect + github.com/opencontainers/runc v1.3.6 // indirect github.com/ory/dockertest/v3 v3.10.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.14.0 // indirect diff --git a/litrpc/go.sum b/litrpc/go.sum index 79336bbf..130e503d 100644 --- a/litrpc/go.sum +++ b/litrpc/go.sum @@ -600,8 +600,8 @@ git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3p github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= @@ -1194,8 +1194,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= -github.com/opencontainers/runc v1.2.8 h1:RnEICeDReapbZ5lZEgHvj7E9Q3Eex9toYmaGBsbvU5Q= -github.com/opencontainers/runc v1.2.8/go.mod h1:cC0YkmZcuvr+rtBZ6T7NBoVbMGNAdLa/21vIElJDOzI= +github.com/opencontainers/runc v1.3.6 h1:SLGIymCtsk80iNPWgbc8dtjI30r+5mTVV+4dN8/17Sk= +github.com/opencontainers/runc v1.3.6/go.mod h1:o1wyv76EDlTkcf0KTFgN8bMWLPvgF/HfX709lDv+rr4= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4= github.com/ory/dockertest/v3 v3.10.0/go.mod h1:nr57ZbRWMqfsdGdFNLHz5jjNdDb7VVFnzAeW1n5N1Lg= From 4614ade31cb822119876f2bcc0a4aaaea7d7e310 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Jul 2026 05:23:17 +0000 Subject: [PATCH 24/69] build(deps): bump github.com/opencontainers/runc in /perms Bumps [github.com/opencontainers/runc](https://github.com/opencontainers/runc) from 1.2.8 to 1.3.6. - [Release notes](https://github.com/opencontainers/runc/releases) - [Changelog](https://github.com/opencontainers/runc/blob/main/CHANGELOG.md) - [Commits](https://github.com/opencontainers/runc/compare/v1.2.8...v1.3.6) --- updated-dependencies: - dependency-name: github.com/opencontainers/runc dependency-version: 1.3.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- perms/go.mod | 4 ++-- perms/go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/perms/go.mod b/perms/go.mod index 562d73bc..d50ab687 100644 --- a/perms/go.mod +++ b/perms/go.mod @@ -12,7 +12,7 @@ require ( require ( dario.cat/mergo v1.0.2 // indirect github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect - github.com/BurntSushi/toml v1.3.2 // indirect + github.com/BurntSushi/toml v1.4.0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect github.com/NebulousLabs/fastrand v0.0.0-20181203155948-6fb6489aac4e // indirect github.com/NebulousLabs/go-upnp v0.0.0-20180202185039-29b680b06c82 // indirect @@ -126,7 +126,7 @@ require ( github.com/ncruces/go-strftime v0.1.9 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.1 // indirect - github.com/opencontainers/runc v1.2.8 // indirect + github.com/opencontainers/runc v1.3.6 // indirect github.com/ory/dockertest/v3 v3.10.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.11.1 // indirect diff --git a/perms/go.sum b/perms/go.sum index d068e4d3..abb8e1de 100644 --- a/perms/go.sum +++ b/perms/go.sum @@ -9,8 +9,8 @@ dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= -github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= @@ -451,8 +451,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= -github.com/opencontainers/runc v1.2.8 h1:RnEICeDReapbZ5lZEgHvj7E9Q3Eex9toYmaGBsbvU5Q= -github.com/opencontainers/runc v1.2.8/go.mod h1:cC0YkmZcuvr+rtBZ6T7NBoVbMGNAdLa/21vIElJDOzI= +github.com/opencontainers/runc v1.3.6 h1:SLGIymCtsk80iNPWgbc8dtjI30r+5mTVV+4dN8/17Sk= +github.com/opencontainers/runc v1.3.6/go.mod h1:o1wyv76EDlTkcf0KTFgN8bMWLPvgF/HfX709lDv+rr4= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/ory/dockertest/v3 v3.10.0 h1:4K3z2VMe8Woe++invjaTB7VRyQXQy5UY+loujO4aNE4= github.com/ory/dockertest/v3 v3.10.0/go.mod h1:nr57ZbRWMqfsdGdFNLHz5jjNdDb7VVFnzAeW1n5N1Lg= From 053498caba114a043ed424eeab0dadf57627d68d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 19:42:23 +0000 Subject: [PATCH 25/69] build(deps): bump golang.org/x/net from 0.49.0 to 0.55.0 Bumps [golang.org/x/net](https://github.com/golang/net) from 0.49.0 to 0.55.0. - [Commits](https://github.com/golang/net/compare/v0.49.0...v0.55.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-version: 0.55.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- go.mod | 16 ++++++++-------- go.sum | 32 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index d4eb2a3e..5da54632 100644 --- a/go.mod +++ b/go.mod @@ -48,10 +48,10 @@ require ( github.com/stretchr/testify v1.11.1 github.com/urfave/cli v1.22.16 go.etcd.io/bbolt v1.4.3 - golang.org/x/crypto v0.47.0 + golang.org/x/crypto v0.51.0 golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 - golang.org/x/net v0.49.0 - golang.org/x/sync v0.19.0 + golang.org/x/net v0.55.0 + golang.org/x/sync v0.20.0 google.golang.org/grpc v1.80.0 google.golang.org/protobuf v1.36.11 gopkg.in/macaroon-bakery.v2 v2.3.0 @@ -222,12 +222,12 @@ require ( go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.24.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/mod v0.31.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/term v0.41.0 // indirect - golang.org/x/text v0.33.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/term v0.43.0 // indirect + golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.11.0 // indirect - golang.org/x/tools v0.40.0 // indirect + golang.org/x/tools v0.44.0 // indirect google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260120221211-b8f7ae30c516 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516 // indirect diff --git a/go.sum b/go.sum index 8d2cf629..0396e3b4 100644 --- a/go.sum +++ b/go.sum @@ -1506,8 +1506,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= -golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= +golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= +golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1567,8 +1567,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= -golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20150829230318-ea47fc708ee3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1642,8 +1642,8 @@ golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= -golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1690,8 +1690,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1795,8 +1795,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1808,8 +1808,8 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= -golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1827,8 +1827,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1908,8 +1908,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= -golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From b3e7b2fc572058c0642f5b9c324e79b5121ddb79 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Jul 2026 17:17:15 +0000 Subject: [PATCH 26/69] build(deps): bump golang.org/x/crypto from 0.45.0 to 0.52.0 in /tools Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.45.0 to 0.52.0. - [Commits](https://github.com/golang/crypto/compare/v0.45.0...v0.52.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-version: 0.52.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- tools/go.mod | 12 ++++++------ tools/go.sum | 28 ++++++++++++++-------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index df409d1f..832e91ed 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -202,13 +202,13 @@ require ( go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/crypto v0.45.0 // indirect + golang.org/x/crypto v0.52.0 // indirect golang.org/x/exp/typeparams v0.0.0-20250210185358-939b2ce775ac // indirect - golang.org/x/mod v0.29.0 // indirect - golang.org/x/sync v0.18.0 // indirect - golang.org/x/sys v0.38.0 // indirect - golang.org/x/text v0.31.0 // indirect - golang.org/x/tools v0.38.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/text v0.37.0 // indirect + golang.org/x/tools v0.44.0 // indirect golang.org/x/tools/go/expect v0.1.1-deprecated // indirect golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated // indirect google.golang.org/protobuf v1.36.4 // indirect diff --git a/tools/go.sum b/tools/go.sum index a98bd08e..20829b8b 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -754,8 +754,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= -golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -802,8 +802,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -850,8 +850,8 @@ golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= +golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -873,8 +873,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -937,8 +937,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= @@ -959,8 +959,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1023,8 +1023,8 @@ golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= -golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM= golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= From 41a6c8b3f7b91bc98f434911a0b17f9a6a3dda77 Mon Sep 17 00:00:00 2001 From: ziggie Date: Fri, 10 Jul 2026 19:24:26 -0300 Subject: [PATCH 27/69] build: bump go to v1.25.11 --- .github/workflows/main.yml | 2 +- Dockerfile | 2 +- Makefile | 2 +- autopilotserverrpc/go.mod | 2 +- dev.Dockerfile | 2 +- go.mod | 2 +- litrpc/Dockerfile | 2 +- litrpc/go.mod | 2 +- make/builder.Dockerfile | 2 +- perms/go.mod | 2 +- tools/Dockerfile | 2 +- tools/go.mod | 2 +- tools/linters/go.mod | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 92adc4c3..8335e91b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -21,7 +21,7 @@ env: # If you change this value, please change it in the following files as well: # /Dockerfile # /dev.Dockerfile - GO_VERSION: 1.25.10 + GO_VERSION: 1.25.11 jobs: ######################## diff --git a/Dockerfile b/Dockerfile index b357b3b0..1490b88f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ RUN apk add --no-cache --update alpine-sdk \ # The first stage is already done and all static assets should now be generated # in the app/build sub directory. -FROM golang:1.25.10-alpine3.23@sha256:8d22e29d960bc50cd025d93d5b7c7d220b1ee9aa7a239b3c8f55a57e987e8d45 as golangbuilder +FROM golang:1.25.11-alpine3.23@sha256:60e626bbde32def8694687d03536ea4341b19e5f068e9a630225a1dfbd0505c9 as golangbuilder # Instead of checking out from git again, we just copy the whole working # directory of the previous stage that includes the generated static assets. diff --git a/Makefile b/Makefile index f36c0fce..f6895e91 100644 --- a/Makefile +++ b/Makefile @@ -22,7 +22,7 @@ PUBLIC_URL := # GO_VERSION is the Go version used for the release build, docker files, and # GitHub Actions. This is the reference version for the project. All other Go # versions are checked against this version. -GO_VERSION = 1.25.10 +GO_VERSION = 1.25.11 LOOP_COMMIT := $(shell cat go.mod | \ grep $(LOOP_PKG) | \ diff --git a/autopilotserverrpc/go.mod b/autopilotserverrpc/go.mod index 26907825..268020bd 100644 --- a/autopilotserverrpc/go.mod +++ b/autopilotserverrpc/go.mod @@ -1,6 +1,6 @@ module github.com/lightninglabs/lightning-terminal/autopilotserverrpc -go 1.25.10 +go 1.25.11 require ( google.golang.org/grpc v1.79.3 diff --git a/dev.Dockerfile b/dev.Dockerfile index 2578903a..195988f4 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -20,7 +20,7 @@ RUN cd /go/src/github.com/lightninglabs/lightning-terminal/app \ # The first stage is already done and all static assets should now be generated # in the app/build sub directory. -FROM golang:1.25.10-alpine3.23@sha256:8d22e29d960bc50cd025d93d5b7c7d220b1ee9aa7a239b3c8f55a57e987e8d45 as golangbuilder +FROM golang:1.25.11-alpine3.23@sha256:60e626bbde32def8694687d03536ea4341b19e5f068e9a630225a1dfbd0505c9 as golangbuilder # Instead of checking out from git again, we just copy the whole working # directory of the previous stage that includes the generated static assets. diff --git a/go.mod b/go.mod index 5da54632..5527b361 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/lightninglabs/lightning-terminal -go 1.25.10 +go 1.25.11 require ( github.com/btcsuite/btcd v0.25.1-0.20260310163610-1c55c7c18179 diff --git a/litrpc/Dockerfile b/litrpc/Dockerfile index 6c9ca2bd..6294c5cd 100644 --- a/litrpc/Dockerfile +++ b/litrpc/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.25.10-bookworm@sha256:154bd7001b6eb339e88c964442c0ad6ed5e53f09844cc818a41ce4ecb3ce3b43 +FROM golang:1.25.11-bookworm@sha256:b96f24a8d7d010ea0acb9c3ba99064740f02b6b984612b28bd3c9c5ab9453e38 RUN apt-get update && apt-get install -y \ git \ diff --git a/litrpc/go.mod b/litrpc/go.mod index 26767f33..85fa5fcf 100644 --- a/litrpc/go.mod +++ b/litrpc/go.mod @@ -1,6 +1,6 @@ module github.com/lightninglabs/lightning-terminal/litrpc -go 1.25.10 +go 1.25.11 require ( github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 diff --git a/make/builder.Dockerfile b/make/builder.Dockerfile index ca221a35..d2a1c6f0 100644 --- a/make/builder.Dockerfile +++ b/make/builder.Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.25.10-bookworm@sha256:154bd7001b6eb339e88c964442c0ad6ed5e53f09844cc818a41ce4ecb3ce3b43 +FROM golang:1.25.11-bookworm@sha256:b96f24a8d7d010ea0acb9c3ba99064740f02b6b984612b28bd3c9c5ab9453e38 MAINTAINER Olaoluwa Osuntokun diff --git a/perms/go.mod b/perms/go.mod index d50ab687..684fc75f 100644 --- a/perms/go.mod +++ b/perms/go.mod @@ -1,6 +1,6 @@ module github.com/lightninglabs/lightning-terminal/perms -go 1.25.10 +go 1.25.11 require ( github.com/btcsuite/btcd v0.25.1-0.20260310163610-1c55c7c18179 diff --git a/tools/Dockerfile b/tools/Dockerfile index 3a87c148..07a9af7f 100644 --- a/tools/Dockerfile +++ b/tools/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.25.10-bookworm@sha256:154bd7001b6eb339e88c964442c0ad6ed5e53f09844cc818a41ce4ecb3ce3b43 +FROM golang:1.25.11-bookworm@sha256:b96f24a8d7d010ea0acb9c3ba99064740f02b6b984612b28bd3c9c5ab9453e38 RUN apt-get update && apt-get install -y git ENV GOCACHE=/tmp/build/.cache diff --git a/tools/go.mod b/tools/go.mod index 832e91ed..022d7b40 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -1,6 +1,6 @@ module github.com/lightninglabs/lightning-terminal/tools -go 1.25.10 +go 1.25.11 require ( github.com/btcsuite/btcd v0.24.2 diff --git a/tools/linters/go.mod b/tools/linters/go.mod index 968d6dd0..5ba85043 100644 --- a/tools/linters/go.mod +++ b/tools/linters/go.mod @@ -1,6 +1,6 @@ module github.com/lightninglabs/lightning-terminal/tools/linters -go 1.25.10 +go 1.25.11 require ( github.com/golangci/plugin-module-register v0.1.1 From 2a4a57b55bd7e071f2d68673f4ad0ead47bf61a8 Mon Sep 17 00:00:00 2001 From: ziggie Date: Fri, 10 Jul 2026 19:01:41 -0300 Subject: [PATCH 28/69] build: bump sqldb/v2 to v2.0.0 --- accounts/store_sql.go | 4 +--- db/migrations.go | 38 ++++++++++++++++++++++++++++++++ db/migsets/sql_migrations.go | 1 + db/migsets/sql_migrations_dev.go | 1 + firewalldb/sql_store.go | 4 +--- go.mod | 2 +- go.sum | 4 ++-- session/sql_store.go | 4 +--- 8 files changed, 46 insertions(+), 12 deletions(-) diff --git a/accounts/store_sql.go b/accounts/store_sql.go index dba24dbf..61780c12 100644 --- a/accounts/store_sql.go +++ b/accounts/store_sql.go @@ -33,8 +33,6 @@ const ( // //nolint:ll type SQLQueries interface { - sqldb.BaseQuerier - AddAccountInvoice(ctx context.Context, arg sqlc.AddAccountInvoiceParams) error DeleteAccount(ctx context.Context, id int64) error DeleteAccountPayment(ctx context.Context, arg sqlc.DeleteAccountPaymentParams) error @@ -79,7 +77,7 @@ type SQLStore struct { clock clock.Clock } -type sqlQueriesExecutor[T sqldb.BaseQuerier] struct { +type sqlQueriesExecutor[T any] struct { *sqldb.TransactionExecutor[T] SQLQueries diff --git a/db/migrations.go b/db/migrations.go index 5943b7fb..3aef6b9d 100644 --- a/db/migrations.go +++ b/db/migrations.go @@ -37,6 +37,43 @@ const ( LatestDevMigrationVersion = 0 ) +// MakeMigrationDescriptors returns the ordered migration descriptors for LiT's +// production SQL schema. +func MakeMigrationDescriptors() []sqldb.MigrationDescriptor { + return []sqldb.MigrationDescriptor{ + { + Name: "accounts", + Version: 1, + SchemaVersion: 1, + }, + { + Name: "sessions", + Version: 2, + SchemaVersion: 2, + }, + { + Name: "kvstores", + Version: 3, + SchemaVersion: 3, + }, + { + Name: "privacy_pairs", + Version: 4, + SchemaVersion: 4, + }, + { + Name: "actions", + Version: 5, + SchemaVersion: 5, + }, + { + Name: "kvdb_to_sql", + Version: 6, + SchemaVersion: 6, + }, + } +} + // HasDevMigrations reports whether any dev SQL migration files are embedded in // the current build. This lets dev builds omit the separate dev migration set // cleanly when the directory exists but currently contains no migration files. @@ -67,6 +104,7 @@ func MakeTestMigrationSets() []sqldb.MigrationSet { // // NOTE: This MUST be updated when a new migration is added. LatestMigrationVersion: LatestMigrationVersion, + Descriptors: MakeMigrationDescriptors(), MakeProgrammaticMigrations: func(db *sqldb.BaseDB) ( map[uint]migrate.ProgrammaticMigrEntry, error) { diff --git a/db/migsets/sql_migrations.go b/db/migsets/sql_migrations.go index 0a6b1d69..6fde04ac 100644 --- a/db/migsets/sql_migrations.go +++ b/db/migsets/sql_migrations.go @@ -35,6 +35,7 @@ func MakeMigrationSets(ctx context.Context, basicClient lnrpc.LightningClient, // // NOTE: This MUST be updated when a new migration is added. LatestMigrationVersion: db.LatestMigrationVersion, + Descriptors: db.MakeMigrationDescriptors(), MakeProgrammaticMigrations: func(baseDB *sqldb.BaseDB) ( map[uint]migrate.ProgrammaticMigrEntry, error) { diff --git a/db/migsets/sql_migrations_dev.go b/db/migsets/sql_migrations_dev.go index 5e07d29a..569eae33 100644 --- a/db/migsets/sql_migrations_dev.go +++ b/db/migsets/sql_migrations_dev.go @@ -34,6 +34,7 @@ func MakeMigrationSets(ctx context.Context, // // NOTE: This MUST be updated when a new migration is added. LatestMigrationVersion: db.LatestMigrationVersion, + Descriptors: db.MakeMigrationDescriptors(), MakeProgrammaticMigrations: func(baseDB *sqldb.BaseDB) ( map[uint]migrate.ProgrammaticMigrEntry, error) { diff --git a/firewalldb/sql_store.go b/firewalldb/sql_store.go index 72d54cf1..d3192927 100644 --- a/firewalldb/sql_store.go +++ b/firewalldb/sql_store.go @@ -20,8 +20,6 @@ type SQLSessionQueries interface { // SQLQueries is a subset of the sqlc.Queries interface that can be used to // interact with various firewalldb tables. type SQLQueries interface { - sqldb.BaseQuerier - SQLKVStoreQueries SQLPrivacyPairQueries SQLActionQueries @@ -48,7 +46,7 @@ type SQLDB struct { clock clock.Clock } -type sqlQueriesExecutor[T sqldb.BaseQuerier] struct { +type sqlQueriesExecutor[T any] struct { *sqldb.TransactionExecutor[T] SQLQueries diff --git a/go.mod b/go.mod index 5527b361..c60bcc3c 100644 --- a/go.mod +++ b/go.mod @@ -38,7 +38,7 @@ require ( github.com/lightningnetwork/lnd/fn v1.2.5 github.com/lightningnetwork/lnd/fn/v2 v2.0.9 github.com/lightningnetwork/lnd/kvdb v1.4.16 - github.com/lightningnetwork/lnd/sqldb/v2 v2.0.0-20260326184657-f7cc56305bae + github.com/lightningnetwork/lnd/sqldb/v2 v2.0.0 github.com/lightningnetwork/lnd/tlv v1.3.2 github.com/lightningnetwork/lnd/tor v1.1.7 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f diff --git a/go.sum b/go.sum index 0396e3b4..066f7e10 100644 --- a/go.sum +++ b/go.sum @@ -1189,8 +1189,8 @@ github.com/lightningnetwork/lnd/queue v1.2.0 h1:sSrn+u84OLuOT/F+xGxgg8VfknXeIZEA github.com/lightningnetwork/lnd/queue v1.2.0/go.mod h1:qLNP0L3B7piRGvDyhAyJKic4xTt+Mw4D7mWrQeuAwxY= github.com/lightningnetwork/lnd/sqldb v1.0.13 h1:CcG9mrHNW/hIuZnqgosdiNmS7QhjSyfR/XkSFJB7EC8= github.com/lightningnetwork/lnd/sqldb v1.0.13/go.mod h1:ew3kMfknA0B4djTtrQSAkxvro+8+c++L8LuNaoT7GQA= -github.com/lightningnetwork/lnd/sqldb/v2 v2.0.0-20260326184657-f7cc56305bae h1:ICRuZIkXed43iuqcJaayubPTcQolttttwNZFrapdwIo= -github.com/lightningnetwork/lnd/sqldb/v2 v2.0.0-20260326184657-f7cc56305bae/go.mod h1:T2F1Sfb0oSpZyylIEE3ijiSejaXvIExER5xEdoe5wEE= +github.com/lightningnetwork/lnd/sqldb/v2 v2.0.0 h1:c0tt+rlsXCPmPlw641ruOe+EmeyFPWmD+E4sONaj0lc= +github.com/lightningnetwork/lnd/sqldb/v2 v2.0.0/go.mod h1:TyfjJz1iAKJA3uw3Tk7Mto0FJZY/MR5mAUc5qI80zB4= github.com/lightningnetwork/lnd/ticker v1.1.1 h1:J/b6N2hibFtC7JLV77ULQp++QLtCwT6ijJlbdiZFbSM= github.com/lightningnetwork/lnd/ticker v1.1.1/go.mod h1:waPTRAAcwtu7Ji3+3k+u/xH5GHovTsCoSVpho0KDvdA= github.com/lightningnetwork/lnd/tlv v1.3.2 h1:MO4FCk7F4k5xPMqVZF6Nb/kOpxlwPrUQpYjmyKny5s0= diff --git a/session/sql_store.go b/session/sql_store.go index f8286e3f..58d21c64 100644 --- a/session/sql_store.go +++ b/session/sql_store.go @@ -24,8 +24,6 @@ import ( // // nolint:ll type SQLQueries interface { - sqldb.BaseQuerier - GetAliasBySessionID(ctx context.Context, id int64) ([]byte, error) GetSessionByID(ctx context.Context, id int64) (sqlc.Session, error) GetSessionsInGroup(ctx context.Context, groupID sql.NullInt64) ([]sqlc.Session, error) @@ -78,7 +76,7 @@ type SQLStore struct { clock clock.Clock } -type sqlQueriesExecutor[T sqldb.BaseQuerier] struct { +type sqlQueriesExecutor[T any] struct { *sqldb.TransactionExecutor[T] SQLQueries From 324f87d7daa7d70c49e889d50a82e7a9ee22f6bf Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Tue, 14 Jul 2026 23:08:07 +0200 Subject: [PATCH 29/69] build: bump `protobuf-go-hex-display` Bump protobuf-go-hex-display to version v1.36.11-hex-display. --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index c60bcc3c..50183a78 100644 --- a/go.mod +++ b/go.mod @@ -250,7 +250,7 @@ replace ( // We want to format raw bytes as hex instead of base64. The forked version // allows us to specify that as an option. This is required for the // taproot-assets dependency to function properly. -replace google.golang.org/protobuf => github.com/lightninglabs/protobuf-go-hex-display v1.34.2-hex-display +replace google.golang.org/protobuf => github.com/lightninglabs/protobuf-go-hex-display v1.36.11-hex-display // We are using a fork of the migration library in tapd with custom // functionality that did not yet make it into the upstream repository. Because diff --git a/go.sum b/go.sum index 066f7e10..dcca45cd 100644 --- a/go.sum +++ b/go.sum @@ -1161,8 +1161,8 @@ github.com/lightninglabs/pool/auctioneerrpc v1.1.3 h1:Di5Nf8Gll9wl6tbXsusGXj9e4y github.com/lightninglabs/pool/auctioneerrpc v1.1.3/go.mod h1:N/X9SxrBCjquK8XkwSgk4qvGC2g8Dra9uiw5sXWmEl0= github.com/lightninglabs/pool/poolrpc v1.0.1 h1:XbNx28TYwEj/PVsnnF9TnveVCMCYfS1vVkcwz29vPmM= github.com/lightninglabs/pool/poolrpc v1.0.1/go.mod h1:836icifg/SBnZbiae0v3jeRRzCrT6LWo32SqCS/JiGk= -github.com/lightninglabs/protobuf-go-hex-display v1.34.2-hex-display h1:w7FM5LH9Z6CpKxl13mS48idsu6F+cEZf0lkyiV+Dq9g= -github.com/lightninglabs/protobuf-go-hex-display v1.34.2-hex-display/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +github.com/lightninglabs/protobuf-go-hex-display v1.36.11-hex-display h1:fjePiMfYbg3KodAiSXwkpGZpYdPeNd9VnggJWiY6AaY= +github.com/lightninglabs/protobuf-go-hex-display v1.36.11-hex-display/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= github.com/lightninglabs/taproot-assets v0.8.0 h1:8Mky342/f5hbVm94Owj0YveIdKuTasJwFB6uqAa5/gc= github.com/lightninglabs/taproot-assets v0.8.0/go.mod h1:SEoMeNzpENVUPnvuqllkDhl7QvNE74+Dtb/dnkbrygg= github.com/lightninglabs/taproot-assets/taprpc v1.1.0 h1:Oum7ddGygrEaT+NHqpaQI8U6pV5jJUH4hvhezl5y00k= From c478f8227a2b4a696ba466f20d1a04101c192356 Mon Sep 17 00:00:00 2001 From: bitromortac Date: Wed, 15 Jul 2026 09:12:56 +0000 Subject: [PATCH 30/69] terminal: gate wallet-ready status on lnd's actual RPC readiness readyChan/unlockChan only guarantee lnd's gRPC listener socket is bound, not that lnd's RPC interceptor has left WAITING_TO_START. Callers that poll litd's status (itest's WaitForLNDWalletReady, litcli status, the UI) could observe "Wallet Ready" and then immediately hit a "waiting to start, RPC services not available" error, which was the root cause of a flake in TestLightningTerminal/.../terminal_stateless_init_mode (CI run 29286599979, PR #1322). Poll lnd's StateService, which is exempt from both the macaroon and RPC-readiness checks, until it reports leaving WAITING_TO_START before advertising the wallet as ready. --- lnd_ready.go | 54 +++++++++++++++++++++ lnd_ready_test.go | 117 ++++++++++++++++++++++++++++++++++++++++++++++ terminal.go | 20 ++++++++ 3 files changed, 191 insertions(+) create mode 100644 lnd_ready.go create mode 100644 lnd_ready_test.go diff --git a/lnd_ready.go b/lnd_ready.go new file mode 100644 index 00000000..66239a48 --- /dev/null +++ b/lnd_ready.go @@ -0,0 +1,54 @@ +package terminal + +import ( + "context" + "fmt" + "time" + + "github.com/lightningnetwork/lnd/lnrpc" +) + +// waitForLndRPCReady polls lnd's StateService until lnd's RPC interceptor has +// left the WAITING_TO_START state, or timeout elapses. Unlike every other +// lnd RPC, the StateService is exempt from both lnd's macaroon check and its +// RPC-readiness check (see lnd's rpcperms.InterceptorChain), so it can be +// queried on a fresh connection before the wallet is unlocked and before any +// macaroon exists. This lets us distinguish lnd's gRPC listener merely being +// bound (which is all readyChan/unlockChan guarantee) from lnd actually being +// able to service non-State RPCs. +func waitForLndRPCReady(ctx context.Context, stateClient lnrpc.StateClient, + timeout time.Duration) error { + + timer := time.NewTimer(timeout) + defer timer.Stop() + + var lastErr error + + for { + resp, err := stateClient.GetState(ctx, &lnrpc.GetStateRequest{}) + switch { + case err != nil: + lastErr = err + + case resp.State != lnrpc.WalletState_WAITING_TO_START: + return nil + } + + select { + case <-time.After(stateServicePollInterval): + + case <-timer.C: + if lastErr != nil { + return fmt.Errorf("lnd's RPC interceptor "+ + "did not leave WAITING_TO_START "+ + "within %v: %w", timeout, lastErr) + } + + return fmt.Errorf("lnd's RPC interceptor did not "+ + "leave WAITING_TO_START within %v", timeout) + + case <-ctx.Done(): + return ctx.Err() + } + } +} diff --git a/lnd_ready_test.go b/lnd_ready_test.go new file mode 100644 index 00000000..d6659db4 --- /dev/null +++ b/lnd_ready_test.go @@ -0,0 +1,117 @@ +package terminal + +import ( + "context" + "errors" + "testing" + "time" + + "github.com/lightningnetwork/lnd/lnrpc" + "github.com/stretchr/testify/require" + "google.golang.org/grpc" +) + +// fakeStateClient is a test-only lnrpc.StateClient that replays a canned +// sequence of GetState responses/errors, repeating the last entry once the +// sequence is exhausted. +type fakeStateClient struct { + lnrpc.StateClient + + responses []*lnrpc.GetStateResponse + errs []error + calls int +} + +func (f *fakeStateClient) GetState(_ context.Context, + _ *lnrpc.GetStateRequest, _ ...grpc.CallOption) ( + *lnrpc.GetStateResponse, error) { + + idx := f.calls + if idx >= len(f.responses) { + idx = len(f.responses) - 1 + } + f.calls++ + + return f.responses[idx], f.errs[idx] +} + +// TestWaitForLndRPCReady asserts that waitForLndRPCReady correctly polls +// lnd's StateService until it reports a state other than WAITING_TO_START, +// and that it times out with an error if that never happens. +func TestWaitForLndRPCReady(t *testing.T) { + t.Parallel() + + activeResp := &lnrpc.GetStateResponse{ + State: lnrpc.WalletState_RPC_ACTIVE, + } + waitingResp := &lnrpc.GetStateResponse{ + State: lnrpc.WalletState_WAITING_TO_START, + } + + testCases := []struct { + name string + client *fakeStateClient + timeout time.Duration + expectError bool + }{ + { + name: "ready immediately", + client: &fakeStateClient{ + responses: []*lnrpc.GetStateResponse{ + activeResp, + }, + errs: []error{nil}, + }, + timeout: time.Second, + }, + { + name: "ready after N polls", + client: &fakeStateClient{ + responses: []*lnrpc.GetStateResponse{ + waitingResp, waitingResp, activeResp, + }, + errs: []error{nil, nil, nil}, + }, + timeout: time.Second, + }, + { + name: "timeout without transition", + client: &fakeStateClient{ + responses: []*lnrpc.GetStateResponse{ + waitingResp, + }, + errs: []error{nil}, + }, + timeout: 300 * time.Millisecond, + expectError: true, + }, + { + name: "timeout while erroring", + client: &fakeStateClient{ + responses: []*lnrpc.GetStateResponse{nil}, + errs: []error{ + errors.New("connection refused"), + }, + }, + timeout: 300 * time.Millisecond, + expectError: true, + }, + } + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + err := waitForLndRPCReady( + context.Background(), tc.client, tc.timeout, + ) + + if tc.expectError { + require.Error(t, err) + return + } + require.NoError(t, err) + }) + } +} diff --git a/terminal.go b/terminal.go index 7ef5c4b2..c2098bd6 100644 --- a/terminal.go +++ b/terminal.go @@ -87,6 +87,10 @@ const ( defaultRPCTimeout = 3 * time.Minute minimumRPCTimeout = 30 * time.Second defaultStartupTimeout = 5 * time.Second + + // stateServicePollInterval is how often we poll lnd's StateService + // while waiting for its RPC interceptor to leave WAITING_TO_START. + stateServicePollInterval = 200 * time.Millisecond ) // restRegistration is a function type that represents a REST proxy @@ -673,6 +677,22 @@ func (g *LightningTerminal) start(ctx context.Context) error { err) } + // The unlockChan/readyChan signal we waited on above only guarantees + // that lnd's gRPC listener socket is bound, not that lnd's RPC + // interceptor has advanced far enough to service non-State RPCs. Wait + // for that here so that the "Wallet Ready" status set below is not + // observed before it's actually true. + lndStateClient := lnrpc.NewStateClient(g.lndConn) + if err := waitForLndRPCReady( + ctx, lndStateClient, defaultConnectTimeout, + ); err != nil { + g.statusMgr.SetErrored( + subservers.LND, "lnd RPC not ready: %v", err, + ) + + return fmt.Errorf("lnd RPC not ready: %v", err) + } + // We now set a custom status for the LND sub-server to indicate that // the wallet is ready. // This is done _before_ we have set up the lnd clients so that the From 6f8159e003a7fdbc20f6cebe69942d6b269e7e8e Mon Sep 17 00:00:00 2001 From: bitromortac Date: Wed, 15 Jul 2026 11:08:22 +0000 Subject: [PATCH 31/69] itest: wait for LiT's own Running status in WaitUntilStarted HarnessNode.Start calls WaitUntilStarted, then immediately reads LitMacPath off disk via connectLitRPC to set up hn.litConn. But WaitUntilStarted only polled subservers.LND's Running status, not LiT's own - and litd only bakes and writes its default macaroons to disk during its own startInternalSubServers step, strictly after LND is marked Running but before LiT itself is. That left a window where the harness read LitMacPath before litd had written it, failing with "open .../lit.macaroon: no such file or directory" (TestLightningTerminal/.../terminal_stateless_init_mode, CI run 29407791912). Wait for subservers.LIT's Running status alongside the existing per-subserver checks so callers can't observe LiT as "started" before it has finished baking its macaroons. --- itest/litd_node.go | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/itest/litd_node.go b/itest/litd_node.go index fc1be2c6..753b14ed 100644 --- a/itest/litd_node.go +++ b/itest/litd_node.go @@ -899,31 +899,56 @@ func (hn *HarnessNode) WaitUntilStarted(conn grpc.ClientConnInterface, return err } + // LiT itself only reports Running once it has finished baking + // and writing its default macaroons to disk, so waiting for + // this closes the race between that and callers that read + // LitMacPath straight off disk right after we return. + litStatus, ok := states.SubServers[subservers.LIT] + if !ok || !litStatus.Running { + return fmt.Errorf("LiT has not yet started") + } + if faradayMode != terminal.ModeDisable { faraday, ok := states.SubServers[subservers.FARADAY] - if !ok || !faraday.Running { - return fmt.Errorf("faraday has not yet started") + if !ok { + return fmt.Errorf("faraday status not found") + } + if faraday.Error != "" { + return fmt.Errorf("faraday failed to "+ + "start: %s", faraday.Error) } } if loopMode != terminal.ModeDisable { loop, ok := states.SubServers[subservers.LOOP] - if !ok || !loop.Running { - return fmt.Errorf("loop has not yet started") + if !ok { + return fmt.Errorf("loop status not found") + } + if loop.Error != "" { + return fmt.Errorf("loop failed to "+ + "start: %s", loop.Error) } } if poolMode != terminal.ModeDisable { pool, ok := states.SubServers[subservers.POOL] - if !ok || !pool.Running { - return fmt.Errorf("pool has not yet started") + if !ok { + return fmt.Errorf("pool status not found") + } + if pool.Error != "" { + return fmt.Errorf("pool failed to "+ + "start: %s", pool.Error) } } if tapMode != terminal.ModeDisable { tap, ok := states.SubServers[subservers.TAP] - if !ok || !tap.Running { - return fmt.Errorf("tap has not yet started") + if !ok { + return fmt.Errorf("tap status not found") + } + if tap.Error != "" { + return fmt.Errorf("tap failed to "+ + "start: %s", tap.Error) } } From 9370a6aef39a215b50ca4599faa0be21b8f55ae5 Mon Sep 17 00:00:00 2001 From: bitromortac Date: Wed, 15 Jul 2026 10:12:36 +0000 Subject: [PATCH 32/69] docs: update release notes --- docs/release-notes/release-notes-0.17.0.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/release-notes/release-notes-0.17.0.md b/docs/release-notes/release-notes-0.17.0.md index 1156f20c..aa90df90 100644 --- a/docs/release-notes/release-notes-0.17.0.md +++ b/docs/release-notes/release-notes-0.17.0.md @@ -33,6 +33,13 @@ expiration date would overwrite it to 0 (never expires). It now correctly defaults to -1 (no change). +* [Gate wallet-ready status on lnd's actual RPC + readiness](https://github.com/lightninglabs/lightning-terminal/pull/1353): + Fixed a startup race where litd could report the LND sub-server as "Wallet + Ready" before lnd's RPC interceptor had actually left its + `WAITING_TO_START` state, so the very next call could still fail with + `rpc error: ... waiting to start`. + ### Functional Changes/Additions * [Support for SQL database From 403efb3b46e7a4cfb935d7d8735d1817cb830509 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Thu, 16 Jul 2026 13:26:51 +0200 Subject: [PATCH 33/69] docs: add release notes for v0.17.1-alpha --- docs/release-notes/release-notes-0.17.1.md | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 docs/release-notes/release-notes-0.17.1.md diff --git a/docs/release-notes/release-notes-0.17.1.md b/docs/release-notes/release-notes-0.17.1.md new file mode 100644 index 00000000..2e08dc1b --- /dev/null +++ b/docs/release-notes/release-notes-0.17.1.md @@ -0,0 +1,37 @@ +# Release Notes + +- [Lightning Terminal](#lightning-terminal) + - [Bug Fixes](#bug-fixes) + - [Functional Changes/Additions](#functional-changesadditions) + - [Technical and Architectural Updates](#technical-and-architectural-updates) +- [Integrated Binary Updates](#integrated-binary-updates) + - [LND](#lnd) + - [Loop](#loop) + - [Pool](#pool) + - [Faraday](#faraday) + - [Taproot Assets](#taproot-assets) +- [Contributors](#contributors-alphabetical-order) + +## Lightning Terminal + +### Bug Fixes + +### Functional Changes/Additions + +### Technical and Architectural Updates + +## RPC Updates + +## Integrated Binary Updates + +### LND + +### Loop + +### Pool + +### Faraday + +### Taproot Assets + +# Contributors (Alphabetical Order) From 7604bd297bb259a112c71584fb50f51c52dbc9f2 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Thu, 16 Jul 2026 13:28:09 +0200 Subject: [PATCH 34/69] docs: move release note entries added after v0.17.0-alpha Move the release note entries that were added after v0.17.0-alpha to the v0.17.1 release notes. --- docs/release-notes/release-notes-0.17.0.md | 11 ----------- docs/release-notes/release-notes-0.17.1.md | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/docs/release-notes/release-notes-0.17.0.md b/docs/release-notes/release-notes-0.17.0.md index aa90df90..110ebf15 100644 --- a/docs/release-notes/release-notes-0.17.0.md +++ b/docs/release-notes/release-notes-0.17.0.md @@ -33,13 +33,6 @@ expiration date would overwrite it to 0 (never expires). It now correctly defaults to -1 (no change). -* [Gate wallet-ready status on lnd's actual RPC - readiness](https://github.com/lightninglabs/lightning-terminal/pull/1353): - Fixed a startup race where litd could report the LND sub-server as "Wallet - Ready" before lnd's RPC interceptor had actually left its - `WAITING_TO_START` state, so the very next call could still fail with - `rpc error: ... waiting to start`. - ### Functional Changes/Additions * [Support for SQL database @@ -100,10 +93,6 @@ ### Technical and Architectural Updates -* [Report litd's own version for `litd - -V`](https://github.com/lightninglabs/lightning-terminal/pull/1337): The `-V` - flag now prints litd's version instead of the integrated lnd version. - ## RPC Updates ## Integrated Binary Updates diff --git a/docs/release-notes/release-notes-0.17.1.md b/docs/release-notes/release-notes-0.17.1.md index 2e08dc1b..6627288e 100644 --- a/docs/release-notes/release-notes-0.17.1.md +++ b/docs/release-notes/release-notes-0.17.1.md @@ -16,10 +16,21 @@ ### Bug Fixes +* [Gate wallet-ready status on lnd's actual RPC + readiness](https://github.com/lightninglabs/lightning-terminal/pull/1353): + Fixed a startup race where litd could report the LND sub-server as "Wallet + Ready" before lnd's RPC interceptor had actually left its + `WAITING_TO_START` state, so the very next call could still fail with + `rpc error: ... waiting to start`. + ### Functional Changes/Additions ### Technical and Architectural Updates +* [Report litd's own version for `litd + -V`](https://github.com/lightninglabs/lightning-terminal/pull/1337): The `-V` + flag now prints litd's version instead of the integrated lnd version. + ## RPC Updates ## Integrated Binary Updates @@ -35,3 +46,6 @@ ### Taproot Assets # Contributors (Alphabetical Order) + +* 0xfandom +* bitromortac From 73569014f29bf17a59e08ecadb0411bb2dfa4eca Mon Sep 17 00:00:00 2001 From: Vandit Singh Date: Fri, 12 Jun 2026 18:03:27 +0530 Subject: [PATCH 35/69] accounts: don't mask payment errors when request values are absent --- accounts/checkers.go | 12 ++++- accounts/checkers_test.go | 36 ++++++++++++++ docs/release-notes/release-notes-0.17.1.md | 9 ++++ itest/litd_accounts_test.go | 56 ++++++++++++++++++++++ 4 files changed, 111 insertions(+), 2 deletions(-) diff --git a/accounts/checkers.go b/accounts/checkers.go index 03a50fc9..53eda5a1 100644 --- a/accounts/checkers.go +++ b/accounts/checkers.go @@ -668,10 +668,18 @@ func erroredPaymentHandler(service Service) mid.ErrorHandler { return nil, err } + // On streaming sends a call can return a response and then a + // terminal error, so the same request's error may be processed + // more than once. If the request values are already gone there + // is nothing left to clean up and we let the error pass + // through. reqVals, ok := service.GetValues(reqID) if !ok { - return nil, fmt.Errorf("no request values found for "+ - "request: %d", reqID) + log.Tracef("No request values found for request: %d, "+ + "passing the response error through unchanged", + reqID) + + return nil, nil } log.Tracef("Handling payment request error for payment with "+ diff --git a/accounts/checkers_test.go b/accounts/checkers_test.go index c6203c6f..8c4e294b 100644 --- a/accounts/checkers_test.go +++ b/accounts/checkers_test.go @@ -677,6 +677,42 @@ func TestSendPaymentV2(t *testing.T) { _, err = service.checkers.handleErrorResponse(ctx, uri, nil) require.NoError(t, err) assertBalance(acct.ID, 2000) + + // Finally, replicate the streaming scenario. Since SendPaymentV2 is a + // streaming endpoint, the request values are deleted as soon as a + // terminal Payment response is handled. If lnd then sends a terminal + // error response for the same request, the error handler finds no + // request values. It must pass the original error through unchanged + // instead of masking it with a confusing "no request values found" + // error. + reqID5 := nextRequestID() + ctx = AddRequestIDToContext(ctxWithAcct, reqID5) + + // Send a valid request so the request values are registered. + err = service.checkers.checkIncomingRequest( + ctx, uri, &routerrpc.SendPaymentRequest{ + AmtMsat: 1000, + PaymentHash: testHash2[:], + }, + ) + require.NoError(t, err) + + // A failed Payment response deletes the stored request values. + _, err = service.checkers.replaceOutgoingResponse( + ctx, uri, &lnrpc.Payment{ + PaymentHash: hex.EncodeToString(testHash2[:]), + Status: lnrpc.Payment_FAILED, + }, + ) + require.NoError(t, err) + + // A subsequent error response for the same request must not be masked. + originalErr := fmt.Errorf("account balance insufficient") + returnedErr, err := service.checkers.handleErrorResponse( + ctx, uri, originalErr, + ) + require.NoError(t, err) + require.ErrorContains(t, returnedErr, "account balance insufficient") } // TestSendToRouteV2 performs test coverage on the SendToRouteV2 checker. diff --git a/docs/release-notes/release-notes-0.17.1.md b/docs/release-notes/release-notes-0.17.1.md index 6627288e..888c9cfc 100644 --- a/docs/release-notes/release-notes-0.17.1.md +++ b/docs/release-notes/release-notes-0.17.1.md @@ -23,6 +23,14 @@ `WAITING_TO_START` state, so the very next call could still fail with `rpc error: ... waiting to start`. +* [Don't mask account payment errors when request values are + absent](https://github.com/lightninglabs/lightning-terminal/pull/1322): + When a streaming account payment (`SendPaymentV2`/`SendToRouteV2`) fails and + lnd returns a terminal error after the request values have already been + cleaned up, lnd's underlying error is now passed through to the caller instead + of being masked by a confusing `no request values found for request: ` + error. + ### Functional Changes/Additions ### Technical and Architectural Updates @@ -49,3 +57,4 @@ * 0xfandom * bitromortac +* Vandit Singh diff --git a/itest/litd_accounts_test.go b/itest/litd_accounts_test.go index 3f097465..9fa8d55a 100644 --- a/itest/litd_accounts_test.go +++ b/itest/litd_accounts_test.go @@ -170,6 +170,12 @@ func runAccountSystemTest(t *harnessTest, node *HarnessNode, hostPort, ctxm, t, rawConn, newAcctBalance, acctResp.Account.Id, ) + // Make sure a payment that the account checker rejects surfaces the + // real error instead of the masked "no request values found" error. + testAccountPaymentErrorPassthrough( + ctxa, t, rawConn, charlie, newAcctBalance, + ) + // Clean up our channel and payments, so we can start the next test // iteration with a clean slate. closeChannelAndAssert(t, net, node, channelOp, false) @@ -313,6 +319,56 @@ func testAccountRestrictions(ctxa context.Context, t *harnessTest, return initialAccountBalance + inboundPaymentAmt - outboundPaymentAmt } +// testAccountPaymentErrorPassthrough verifies that a payment which the account +// checker rejects because the account balance is insufficient surfaces a clear +// account-balance error to the caller, and never the masked "no request values +// found for request: " error. +// +// SendPaymentV2 is a streaming RPC, so lnd surfaces the account checker's +// rejection through the stream's terminal error path. That reaches +// erroredPaymentHandler with no stored request values, which is exactly the +// case where the error must pass through unmasked instead of being replaced by +// a confusing "no request values found" error. +func testAccountPaymentErrorPassthrough(ctxa context.Context, t *harnessTest, + rawConn grpc.ClientConnInterface, charlie *HarnessNode, + accountBalance uint64) { + + ctxb := context.Background() + ctxt, cancel := context.WithTimeout(ctxb, defaultTimeout) + defer cancel() + + routerClient := routerrpc.NewRouterClient(rawConn) + + // Create a routable invoice on Charlie whose amount exceeds the account + // balance, so the only possible reason the payment fails is the + // insufficient account balance. + excessiveAmt := int64(accountBalance) + 10_000 + invoice, err := charlie.AddInvoice(ctxt, &lnrpc.Invoice{ + Value: excessiveAmt, + Memo: "exceeds account balance", + }) + require.NoError(t.t, err) + + sendReq := &routerrpc.SendPaymentRequest{ + PaymentRequest: invoice.PaymentRequest, + TimeoutSeconds: 60, + FeeLimitMsat: 1000, + } + stream, err := routerClient.SendPaymentV2(ctxa, sendReq) + require.NoError(t.t, err) + + // The payment must fail with the underlying account-balance error and + // not be masked by the confusing "no request values found" error. + _, err = getPaymentResult(stream, false) + require.Error(t.t, err) + require.NotContains(t.t, err.Error(), "no request values found") + require.Contains(t.t, err.Error(), "account balance insufficient") + + // The account balance must be untouched by the rejected payment. + lightningClient := lnrpc.NewLightningClient(rawConn) + assertChannelBalance(ctxa, t.t, lightningClient, accountBalance, 0) +} + func assertChannelBalance(ctx context.Context, t *testing.T, client lnrpc.LightningClient, localBalance, remoteBalance uint64) { From 6d89f0703761020c9fe953868dff2e1c7f944d91 Mon Sep 17 00:00:00 2001 From: bitromortac Date: Tue, 21 Jul 2026 09:19:30 +0000 Subject: [PATCH 36/69] firewall: fix 32-bit int truncation Upgrade the randIntn function signature from int to int64 to prevent unpredictable integer truncation on 32-bit systems (e.g., Raspberry Pi). This ensures UnixNano timestamps in hideTimestamp and large amounts in hideAmount do not cause unexpected runtime failures when calling ForwardingHistory. --- firewall/privacy_mapper.go | 55 ++++++++----- firewall/privacy_mapper_test.go | 140 +++++++++++++++++++++++++------- 2 files changed, 144 insertions(+), 51 deletions(-) diff --git a/firewall/privacy_mapper.go b/firewall/privacy_mapper.go index 8049595d..460181a2 100644 --- a/firewall/privacy_mapper.go +++ b/firewall/privacy_mapper.go @@ -7,6 +7,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "math/big" "strconv" "strings" @@ -61,14 +62,14 @@ var _ mid.RequestInterceptor = (*PrivacyMapper)(nil) // requests to their real values and vice versa for responses. type PrivacyMapper struct { db firewalldb.PrivacyMapper - randIntn func(int) (int, error) + randIntn func(int64) (int64, error) sessionDB firewalldb.SessionDB } // NewPrivacyMapper returns a new instance of PrivacyMapper. The randIntn // function is used to draw randomness for request field obfuscation. func NewPrivacyMapper(newDB firewalldb.PrivacyMapper, - randIntn func(int) (int, error), + randIntn func(int64) (int64, error), sessionDB firewalldb.SessionDB) *PrivacyMapper { return &PrivacyMapper{ @@ -379,7 +380,7 @@ func handleGetInfoResponse(db firewalldb.PrivacyMapDB, func handleFwdHistoryResponse(db firewalldb.PrivacyMapDB, flags session.PrivacyFlags, - randIntn func(int) (int, error)) func(ctx context.Context, + randIntn func(int64) (int64, error)) func(ctx context.Context, r *lnrpc.ForwardingHistoryResponse) (proto.Message, error) { return func(ctx context.Context, r *lnrpc.ForwardingHistoryResponse) ( @@ -582,7 +583,7 @@ func handleListChannelsRequest(db firewalldb.PrivacyMapDB, func handleListChannelsResponse(db firewalldb.PrivacyMapDB, flags session.PrivacyFlags, - randIntn func(int) (int, error)) func(ctx context.Context, + randIntn func(int64) (int64, error)) func(ctx context.Context, r *lnrpc.ListChannelsResponse) (proto.Message, error) { return func(ctx context.Context, r *lnrpc.ListChannelsResponse) ( @@ -866,7 +867,7 @@ func handleUpdatePolicyResponse(db firewalldb.PrivacyMapDB, func handleWalletBalanceResponse(_ firewalldb.PrivacyMapDB, flags session.PrivacyFlags, - randIntn func(int) (int, error)) func(ctx context.Context, + randIntn func(int64) (int64, error)) func(ctx context.Context, r *lnrpc.WalletBalanceResponse) (proto.Message, error) { return func(_ context.Context, r *lnrpc.WalletBalanceResponse) ( @@ -945,7 +946,7 @@ func handleWalletBalanceResponse(_ firewalldb.PrivacyMapDB, func handleClosedChannelsResponse(db firewalldb.PrivacyMapDB, flags session.PrivacyFlags, - randIntn func(int) (int, error)) func(ctx context.Context, + randIntn func(int64) (int64, error)) func(ctx context.Context, r *lnrpc.ClosedChannelsResponse) (proto.Message, error) { return func(ctx context.Context, r *lnrpc.ClosedChannelsResponse) ( @@ -1065,7 +1066,7 @@ func handleClosedChannelsResponse(db firewalldb.PrivacyMapDB, // channel. func obfuscatePendingChannel(ctx context.Context, c *lnrpc.PendingChannelsResponse_PendingChannel, - tx firewalldb.PrivacyMapTx, randIntn func(int) (int, error), + tx firewalldb.PrivacyMapTx, randIntn func(int64) (int64, error), flags session.PrivacyFlags) ( *lnrpc.PendingChannelsResponse_PendingChannel, error) { @@ -1142,7 +1143,7 @@ func obfuscatePendingChannel(ctx context.Context, func handlePendingChannelsResponse(db firewalldb.PrivacyMapDB, flags session.PrivacyFlags, - randIntn func(int) (int, error)) func(ctx context.Context, + randIntn func(int64) (int64, error)) func(ctx context.Context, r *lnrpc.PendingChannelsResponse) (proto.Message, error) { return func(ctx context.Context, r *lnrpc.PendingChannelsResponse) ( @@ -1729,7 +1730,7 @@ func handleConnectPeerRequest(db firewalldb.PrivacyMapDB, } // maybeHideAmount hides an amount if the privacy flag is not set. -func maybeHideAmount(flags session.PrivacyFlags, randIntn func(int) (int, +func maybeHideAmount(flags session.PrivacyFlags, randIntn func(int64) (int64, error), a int64) (int64, error) { if !flags.Contains(session.ClearAmounts) { @@ -1748,8 +1749,8 @@ func maybeHideAmount(flags session.PrivacyFlags, randIntn func(int) (int, // hideAmount symmetrically randomizes an amount around a given relative // variation interval. relativeVariation should be between 0 and 1. -func hideAmount(randIntn func(n int) (int, error), relativeVariation float64, - amount uint64) (uint64, error) { +func hideAmount(randIntn func(n int64) (int64, error), + relativeVariation float64, amount uint64) (uint64, error) { if relativeVariation < 0 || relativeVariation > 1 { return 0, fmt.Errorf("hide amount: relative variation is not "+ @@ -1757,6 +1758,11 @@ func hideAmount(randIntn func(n int) (int, error), relativeVariation float64, relativeVariation) } + if amount > math.MaxInt64 { + return 0, fmt.Errorf("hide amount: amount %d overflows "+ + "int64", amount) + } + if amount == 0 { return 0, nil } @@ -1765,8 +1771,13 @@ func hideAmount(randIntn func(n int) (int, error), relativeVariation float64, // between 0 and 1. fuzzInterval := uint64(float64(amount) * relativeVariation) - amountMin := int(amount - fuzzInterval) - amountMax := int(amount + fuzzInterval) + if amount+fuzzInterval > math.MaxInt64 { + return 0, fmt.Errorf("hide amount: amount %d with variation "+ + "overflows int64", amount) + } + + amountMin := int64(amount - fuzzInterval) + amountMax := int64(amount + fuzzInterval) randAmount, err := randBetween(randIntn, amountMin, amountMax) if err != nil { @@ -1778,7 +1789,7 @@ func hideAmount(randIntn func(n int) (int, error), relativeVariation float64, // hideTimestamp symmetrically randomizes a unix timestamp given an absolute // variation interval. The random input is expected to be rand.Intn. -func hideTimestamp(randIntn func(n int) (int, error), +func hideTimestamp(randIntn func(n int64) (int64, error), absoluteVariation time.Duration, timestamp time.Time) (time.Time, error) { @@ -1802,18 +1813,20 @@ func hideTimestamp(randIntn func(n int) (int, error), timeMax := timestamp.Add(absoluteVariation) timeNs, err := randBetween( - randIntn, int(timeMin.UnixNano()), int(timeMax.UnixNano()), + randIntn, timeMin.UnixNano(), timeMax.UnixNano(), ) if err != nil { return time.Time{}, err } - return time.Unix(0, int64(timeNs)), nil + return time.Unix(0, timeNs), nil } // randBetween generates a random number between [min, max) given a source of // randomness. -func randBetween(randIntn func(int) (int, error), min, max int) (int, error) { +func randBetween(randIntn func(int64) (int64, error), + min, max int64) (int64, error) { + if max < min { return 0, fmt.Errorf("min is not allowed to be greater than "+ "max, (min: %v, max: %v)", min, max) @@ -1833,7 +1846,7 @@ func randBetween(randIntn func(int) (int, error), min, max int) (int, error) { } // hideBool generates a random bool given a random input. -func hideBool(randIntn func(n int) (int, error)) (bool, error) { +func hideBool(randIntn func(n int64) (int64, error)) (bool, error) { random, err := randIntn(2) if err != nil { return false, err @@ -1845,17 +1858,17 @@ func hideBool(randIntn func(n int) (int, error)) (bool, error) { } // CryptoRandIntn generates a random number between [0, n). -func CryptoRandIntn(n int) (int, error) { +func CryptoRandIntn(n int64) (int64, error) { if n == 0 { return 0, nil } - nBig, err := rand.Int(rand.Reader, big.NewInt(int64(n))) + randBig, err := rand.Int(rand.Reader, big.NewInt(n)) if err != nil { return 0, err } - return int(nBig.Int64()), nil + return randBig.Int64(), nil } // ObfuscateConfig alters the config string by replacing sensitive data with diff --git a/firewall/privacy_mapper_test.go b/firewall/privacy_mapper_test.go index 53dcf6eb..060d0efa 100644 --- a/firewall/privacy_mapper_test.go +++ b/firewall/privacy_mapper_test.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "math" "testing" "time" @@ -919,7 +920,9 @@ func TestPrivacyMapper(t *testing.T) { require.NoError(t, err) // randIntn is used for deterministic testing. - randIntn := func(n int) (int, error) { return 100, nil } + randIntn := func(n int64) (int64, error) { + return 100, nil + } p := NewPrivacyMapper(db, randIntn, pd) rawMsg, err := proto.Marshal(test.msg) @@ -1188,8 +1191,10 @@ var _ firewalldb.PrivacyMapDB = (*mockPrivacyMapDB)(nil) // TestRandBetween tests random number generation for numbers in an interval. func TestRandBetween(t *testing.T) { - min := 0 - max := 10 + var ( + min int64 + max int64 = 10 + ) for i := 0; i < 100; i++ { val, err := randBetween(CryptoRandIntn, min, max) @@ -1210,38 +1215,40 @@ func TestHideAmount(t *testing.T) { tests := []struct { name string amount uint64 - randIntFn func(int) (int, error) + randIntFn func(int64) (int64, error) expected uint64 }{ { name: "zero test amount", - randIntFn: func(int) (int, error) { return 0, nil }, + randIntFn: func(int64) (int64, error) { return 0, nil }, }, { name: "test small amount", - randIntFn: func(int) (int, error) { return 0, nil }, + randIntFn: func(int64) (int64, error) { return 0, nil }, amount: 1, expected: 1, }, { name: "min value", - randIntFn: func(int) (int, error) { return 0, nil }, + randIntFn: func(int64) (int64, error) { return 0, nil }, amount: testAmount, expected: lowerBound, }, { name: "max value", - randIntFn: func(int) (int, error) { - return int(upperBound - lowerBound), nil + randIntFn: func(n int64) (int64, error) { + return int64(upperBound - lowerBound), nil }, amount: testAmount, expected: upperBound, }, { - name: "some fuzz", - randIntFn: func(int) (int, error) { return 123, nil }, - amount: testAmount, - expected: lowerBound + 123, + name: "some fuzz", + randIntFn: func(int64) (int64, error) { + return 123, nil + }, + amount: testAmount, + expected: lowerBound + 123, }, } @@ -1270,6 +1277,33 @@ func TestHideAmount(t *testing.T) { require.NoError(t, err) } }) + + t.Run("hideAmount overflow validation", func(t *testing.T) { + // amount > math.MaxInt64 should fail. + _, err := hideAmount( + CryptoRandIntn, + relativeVariation, + math.MaxInt64+1, + ) + require.Error(t, err) + + // amount <= math.MaxInt64 but amount + fuzzInterval > + // math.MaxInt64 should fail. + _, err = hideAmount( + CryptoRandIntn, + 0.05, + math.MaxInt64-100, + ) + require.Error(t, err) + + // A value that just fits should succeed. + _, err = hideAmount( + CryptoRandIntn, + 0.1, + 922337203685477580, + ) + require.NoError(t, err) + }) } // TestHideTimestamp test correct timestamp hiding. @@ -1281,31 +1315,33 @@ func TestHideTimestamp(t *testing.T) { tests := []struct { name string - randIntFn func(int) (int, error) + randIntFn func(int64) (int64, error) timestamp time.Time expected time.Time }{ { name: "zero timestamp", - randIntFn: func(int) (int, error) { return 0, nil }, + randIntFn: func(int64) (int64, error) { return 0, nil }, }, { name: "min value", - randIntFn: func(int) (int, error) { return 0, nil }, + randIntFn: func(int64) (int64, error) { return 0, nil }, timestamp: timestamp, expected: lowerBound, }, { name: "max value", - randIntFn: func(int) (int, error) { - return int(upperBound.Sub(lowerBound)), nil + randIntFn: func(n int64) (int64, error) { + return int64(upperBound.Sub(lowerBound)), nil }, timestamp: timestamp, expected: upperBound, }, { - name: "some fuzz", - randIntFn: func(int) (int, error) { return 123, nil }, + name: "some fuzz", + randIntFn: func(int64) (int64, error) { + return 123, nil + }, timestamp: timestamp, expected: lowerBound.Add(time.Duration(123)), }, @@ -1328,17 +1364,37 @@ func TestHideTimestamp(t *testing.T) { // TestHideBool test correct boolean hiding. func TestHideBool(t *testing.T) { - val, err := hideBool(func(int) (int, error) { return 100, nil }) - require.NoError(t, err) - require.True(t, val) + tests := []struct { + name string + random int64 + expected bool + }{ + { + name: "random value", + random: 100, + expected: true, + }, + { + name: "exact threshold value", + random: 1, + expected: true, + }, + { + name: "below threshold value", + random: 0, + expected: false, + }, + } - val, err = hideBool(func(int) (int, error) { return 1, nil }) - require.NoError(t, err) - require.True(t, val) - - val, err = hideBool(func(int) (int, error) { return 0, nil }) - require.NoError(t, err) - require.False(t, val) + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + val, err := hideBool(func(n int64) (int64, error) { + return tc.random, nil + }) + require.NoError(t, err) + require.Equal(t, tc.expected, val) + }) + } } // TestObfuscateConfig tests that we substitute substrings in the config @@ -1605,3 +1661,27 @@ func variance(numbers []uint64) uint64 { return uint64(sum) } + +// Test32BitOverflowAndTruncation ensures values > MaxInt32 do not truncate on +// 32-bit runtimes. +func Test32BitOverflowAndTruncation(t *testing.T) { + largeValue := int64(math.MaxInt32) + 1 + + // Ensure randBetween successfully operates on values larger than + // MaxInt32 without any architecture-dependent truncation. + mockRand := func(n int64) (int64, error) { + return n - 1, nil + } + + val, err := randBetween(mockRand, largeValue, largeValue+10) + require.NoError(t, err) + require.Equal(t, largeValue+9, val) + + // Ensure hideTimestamp works with a 64-bit nanosecond timestamp + // representing a real far-future date (> MaxInt32). + farFutureTime := time.Unix(0, 1600000000000000000) // ~Year 2020 in ns + variation := 10 * time.Minute + resTime, err := hideTimestamp(mockRand, variation, farFutureTime) + require.NoError(t, err) + require.NotEmpty(t, resTime) +} From cf7e53842a3c694f1c0cccce2d6754ed24031ded Mon Sep 17 00:00:00 2001 From: bitromortac Date: Tue, 21 Jul 2026 09:19:42 +0000 Subject: [PATCH 37/69] firewall: optimize CryptoRandIntn with sync.Pool Utilize a sync.Pool for *big.Int instances in CryptoRandIntn to avoid frequent heap allocations. This significantly reduces garbage collection pressure when randomizing timestamps, amounts, and fees inside loops (e.g. iterating over forwarding history responses). --- firewall/privacy_mapper.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/firewall/privacy_mapper.go b/firewall/privacy_mapper.go index 460181a2..d7b7bec9 100644 --- a/firewall/privacy_mapper.go +++ b/firewall/privacy_mapper.go @@ -11,6 +11,7 @@ import ( "math/big" "strconv" "strings" + "sync" "time" "github.com/btcsuite/btcd/chaincfg/chainhash" @@ -1857,13 +1858,26 @@ func hideBool(randIntn func(n int64) (int64, error)) (bool, error) { return random >= 1, nil } +// bigIntPool is a pool of *big.Int values to avoid frequent heap allocations in +// CryptoRandIntn. +var bigIntPool = sync.Pool{ + New: func() any { + return new(big.Int) + }, +} + // CryptoRandIntn generates a random number between [0, n). func CryptoRandIntn(n int64) (int64, error) { if n == 0 { return 0, nil } - randBig, err := rand.Int(rand.Reader, big.NewInt(n)) + nBig := bigIntPool.Get().(*big.Int) + defer bigIntPool.Put(nBig) + + nBig.SetInt64(n) + + randBig, err := rand.Int(rand.Reader, nBig) if err != nil { return 0, err } From f5a1a020eb5f9c7c5570c02fd02c3a45815d1046 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Thu, 28 May 2026 17:29:12 -0500 Subject: [PATCH 38/69] proto: add AccountPayments to Accounts service Define the AccountPayments RPC endpoint and its request/response messages in lit-accounts.proto. This endpoint allows querying paginated payment history for a specific account. Also update the frontend JS/TS proto sanitization script to map the imported lnd.proto file to its flat directory path, fixing app build. --- app/scripts/build-protos.js | 4 + app/src/types/generated/lit-accounts_pb.d.ts | 69 +++ app/src/types/generated/lit-accounts_pb.js | 537 +++++++++++++++++ .../generated/lit-accounts_pb_service.d.ts | 19 + .../generated/lit-accounts_pb_service.js | 40 ++ litrpc/accounts.pb.json.go | 25 + litrpc/lit-accounts.pb.go | 250 ++++++-- litrpc/lit-accounts.pb.gw.go | 87 +++ litrpc/lit-accounts.proto | 59 ++ litrpc/lit-accounts.swagger.json | 550 ++++++++++++++++++ litrpc/lit-accounts.yaml | 2 + litrpc/lit-accounts_grpc.pb.go | 40 ++ proto/lit-accounts.proto | 59 ++ 13 files changed, 1701 insertions(+), 40 deletions(-) diff --git a/app/scripts/build-protos.js b/app/scripts/build-protos.js index ebf1e0df..e63bb166 100644 --- a/app/scripts/build-protos.js +++ b/app/scripts/build-protos.js @@ -128,6 +128,10 @@ const sanitize = async () => { 'import "lnrpc/lightning.proto"', 'import "lnd.proto"', ); + content = content.replace( + 'import "proto/lnd.proto";', + 'import "lnd.proto";', + ); await fs.writeFile(path, content); } }; diff --git a/app/src/types/generated/lit-accounts_pb.d.ts b/app/src/types/generated/lit-accounts_pb.d.ts index da1c1543..44ff560c 100644 --- a/app/src/types/generated/lit-accounts_pb.d.ts +++ b/app/src/types/generated/lit-accounts_pb.d.ts @@ -2,6 +2,7 @@ // file: lit-accounts.proto import * as jspb from "google-protobuf"; +import * as lnd_pb from "./lnd_pb"; export class CreateAccountRequest extends jspb.Message { getAccountBalance(): string; @@ -432,3 +433,71 @@ export namespace AccountIdentifier { } } +export class AccountPaymentsRequest extends jspb.Message { + hasAccount(): boolean; + clearAccount(): void; + getAccount(): AccountIdentifier | undefined; + setAccount(value?: AccountIdentifier): void; + + getMaxPayments(): string; + setMaxPayments(value: string): void; + + getIndexOffset(): string; + setIndexOffset(value: string): void; + + getCountTotalPayments(): boolean; + setCountTotalPayments(value: boolean): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): AccountPaymentsRequest.AsObject; + static toObject(includeInstance: boolean, msg: AccountPaymentsRequest): AccountPaymentsRequest.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: AccountPaymentsRequest, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): AccountPaymentsRequest; + static deserializeBinaryFromReader(message: AccountPaymentsRequest, reader: jspb.BinaryReader): AccountPaymentsRequest; +} + +export namespace AccountPaymentsRequest { + export type AsObject = { + account?: AccountIdentifier.AsObject, + maxPayments: string, + indexOffset: string, + countTotalPayments: boolean, + } +} + +export class AccountPaymentsResponse extends jspb.Message { + clearPaymentsList(): void; + getPaymentsList(): Array; + setPaymentsList(value: Array): void; + addPayments(value?: lnd_pb.Payment, index?: number): lnd_pb.Payment; + + getFirstIndexOffset(): string; + setFirstIndexOffset(value: string): void; + + getLastIndexOffset(): string; + setLastIndexOffset(value: string): void; + + getTotalNumPayments(): string; + setTotalNumPayments(value: string): void; + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): AccountPaymentsResponse.AsObject; + static toObject(includeInstance: boolean, msg: AccountPaymentsResponse): AccountPaymentsResponse.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: AccountPaymentsResponse, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): AccountPaymentsResponse; + static deserializeBinaryFromReader(message: AccountPaymentsResponse, reader: jspb.BinaryReader): AccountPaymentsResponse; +} + +export namespace AccountPaymentsResponse { + export type AsObject = { + paymentsList: Array, + firstIndexOffset: string, + lastIndexOffset: string, + totalNumPayments: string, + } +} + diff --git a/app/src/types/generated/lit-accounts_pb.js b/app/src/types/generated/lit-accounts_pb.js index 64acda55..a1fdc24a 100644 --- a/app/src/types/generated/lit-accounts_pb.js +++ b/app/src/types/generated/lit-accounts_pb.js @@ -24,12 +24,16 @@ var global = (function () { return this; }).call(null) || Function('return this')(); +var lnd_pb = require('./lnd_pb.js'); +goog.object.extend(proto, lnd_pb); goog.exportSymbol('proto.litrpc.Account', null, global); goog.exportSymbol('proto.litrpc.AccountIdentifier', null, global); goog.exportSymbol('proto.litrpc.AccountIdentifier.IdentifierCase', null, global); goog.exportSymbol('proto.litrpc.AccountInfoRequest', null, global); goog.exportSymbol('proto.litrpc.AccountInvoice', null, global); goog.exportSymbol('proto.litrpc.AccountPayment', null, global); +goog.exportSymbol('proto.litrpc.AccountPaymentsRequest', null, global); +goog.exportSymbol('proto.litrpc.AccountPaymentsResponse', null, global); goog.exportSymbol('proto.litrpc.CreateAccountRequest', null, global); goog.exportSymbol('proto.litrpc.CreateAccountResponse', null, global); goog.exportSymbol('proto.litrpc.CreditAccountRequest', null, global); @@ -377,6 +381,48 @@ if (goog.DEBUG && !COMPILED) { */ proto.litrpc.AccountIdentifier.displayName = 'proto.litrpc.AccountIdentifier'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.litrpc.AccountPaymentsRequest = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.litrpc.AccountPaymentsRequest, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.litrpc.AccountPaymentsRequest.displayName = 'proto.litrpc.AccountPaymentsRequest'; +} +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.litrpc.AccountPaymentsResponse = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, proto.litrpc.AccountPaymentsResponse.repeatedFields_, null); +}; +goog.inherits(proto.litrpc.AccountPaymentsResponse, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.litrpc.AccountPaymentsResponse.displayName = 'proto.litrpc.AccountPaymentsResponse'; +} @@ -3351,4 +3397,495 @@ proto.litrpc.AccountIdentifier.prototype.hasLabel = function() { }; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.litrpc.AccountPaymentsRequest.prototype.toObject = function(opt_includeInstance) { + return proto.litrpc.AccountPaymentsRequest.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.litrpc.AccountPaymentsRequest} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.litrpc.AccountPaymentsRequest.toObject = function(includeInstance, msg) { + var f, obj = { + account: (f = msg.getAccount()) && proto.litrpc.AccountIdentifier.toObject(includeInstance, f), + maxPayments: jspb.Message.getFieldWithDefault(msg, 2, "0"), + indexOffset: jspb.Message.getFieldWithDefault(msg, 3, "0"), + countTotalPayments: jspb.Message.getBooleanFieldWithDefault(msg, 4, false) + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.litrpc.AccountPaymentsRequest} + */ +proto.litrpc.AccountPaymentsRequest.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.litrpc.AccountPaymentsRequest; + return proto.litrpc.AccountPaymentsRequest.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.litrpc.AccountPaymentsRequest} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.litrpc.AccountPaymentsRequest} + */ +proto.litrpc.AccountPaymentsRequest.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new proto.litrpc.AccountIdentifier; + reader.readMessage(value,proto.litrpc.AccountIdentifier.deserializeBinaryFromReader); + msg.setAccount(value); + break; + case 2: + var value = /** @type {string} */ (reader.readUint64String()); + msg.setMaxPayments(value); + break; + case 3: + var value = /** @type {string} */ (reader.readUint64String()); + msg.setIndexOffset(value); + break; + case 4: + var value = /** @type {boolean} */ (reader.readBool()); + msg.setCountTotalPayments(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.litrpc.AccountPaymentsRequest.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.litrpc.AccountPaymentsRequest.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.litrpc.AccountPaymentsRequest} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.litrpc.AccountPaymentsRequest.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getAccount(); + if (f != null) { + writer.writeMessage( + 1, + f, + proto.litrpc.AccountIdentifier.serializeBinaryToWriter + ); + } + f = message.getMaxPayments(); + if (parseInt(f, 10) !== 0) { + writer.writeUint64String( + 2, + f + ); + } + f = message.getIndexOffset(); + if (parseInt(f, 10) !== 0) { + writer.writeUint64String( + 3, + f + ); + } + f = message.getCountTotalPayments(); + if (f) { + writer.writeBool( + 4, + f + ); + } +}; + + +/** + * optional AccountIdentifier account = 1; + * @return {?proto.litrpc.AccountIdentifier} + */ +proto.litrpc.AccountPaymentsRequest.prototype.getAccount = function() { + return /** @type{?proto.litrpc.AccountIdentifier} */ ( + jspb.Message.getWrapperField(this, proto.litrpc.AccountIdentifier, 1)); +}; + + +/** + * @param {?proto.litrpc.AccountIdentifier|undefined} value + * @return {!proto.litrpc.AccountPaymentsRequest} returns this +*/ +proto.litrpc.AccountPaymentsRequest.prototype.setAccount = function(value) { + return jspb.Message.setWrapperField(this, 1, value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.litrpc.AccountPaymentsRequest} returns this + */ +proto.litrpc.AccountPaymentsRequest.prototype.clearAccount = function() { + return this.setAccount(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.litrpc.AccountPaymentsRequest.prototype.hasAccount = function() { + return jspb.Message.getField(this, 1) != null; +}; + + +/** + * optional uint64 max_payments = 2; + * @return {string} + */ +proto.litrpc.AccountPaymentsRequest.prototype.getMaxPayments = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.litrpc.AccountPaymentsRequest} returns this + */ +proto.litrpc.AccountPaymentsRequest.prototype.setMaxPayments = function(value) { + return jspb.Message.setProto3StringIntField(this, 2, value); +}; + + +/** + * optional uint64 index_offset = 3; + * @return {string} + */ +proto.litrpc.AccountPaymentsRequest.prototype.getIndexOffset = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.litrpc.AccountPaymentsRequest} returns this + */ +proto.litrpc.AccountPaymentsRequest.prototype.setIndexOffset = function(value) { + return jspb.Message.setProto3StringIntField(this, 3, value); +}; + + +/** + * optional bool count_total_payments = 4; + * @return {boolean} + */ +proto.litrpc.AccountPaymentsRequest.prototype.getCountTotalPayments = function() { + return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 4, false)); +}; + + +/** + * @param {boolean} value + * @return {!proto.litrpc.AccountPaymentsRequest} returns this + */ +proto.litrpc.AccountPaymentsRequest.prototype.setCountTotalPayments = function(value) { + return jspb.Message.setProto3BooleanField(this, 4, value); +}; + + + +/** + * List of repeated fields within this message type. + * @private {!Array} + * @const + */ +proto.litrpc.AccountPaymentsResponse.repeatedFields_ = [1]; + + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.litrpc.AccountPaymentsResponse.prototype.toObject = function(opt_includeInstance) { + return proto.litrpc.AccountPaymentsResponse.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.litrpc.AccountPaymentsResponse} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.litrpc.AccountPaymentsResponse.toObject = function(includeInstance, msg) { + var f, obj = { + paymentsList: jspb.Message.toObjectList(msg.getPaymentsList(), + lnd_pb.Payment.toObject, includeInstance), + firstIndexOffset: jspb.Message.getFieldWithDefault(msg, 2, "0"), + lastIndexOffset: jspb.Message.getFieldWithDefault(msg, 3, "0"), + totalNumPayments: jspb.Message.getFieldWithDefault(msg, 4, "0") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.litrpc.AccountPaymentsResponse} + */ +proto.litrpc.AccountPaymentsResponse.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.litrpc.AccountPaymentsResponse; + return proto.litrpc.AccountPaymentsResponse.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.litrpc.AccountPaymentsResponse} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.litrpc.AccountPaymentsResponse} + */ +proto.litrpc.AccountPaymentsResponse.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = new lnd_pb.Payment; + reader.readMessage(value,lnd_pb.Payment.deserializeBinaryFromReader); + msg.addPayments(value); + break; + case 2: + var value = /** @type {string} */ (reader.readUint64String()); + msg.setFirstIndexOffset(value); + break; + case 3: + var value = /** @type {string} */ (reader.readUint64String()); + msg.setLastIndexOffset(value); + break; + case 4: + var value = /** @type {string} */ (reader.readUint64String()); + msg.setTotalNumPayments(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.litrpc.AccountPaymentsResponse.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.litrpc.AccountPaymentsResponse.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.litrpc.AccountPaymentsResponse} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.litrpc.AccountPaymentsResponse.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getPaymentsList(); + if (f.length > 0) { + writer.writeRepeatedMessage( + 1, + f, + lnd_pb.Payment.serializeBinaryToWriter + ); + } + f = message.getFirstIndexOffset(); + if (parseInt(f, 10) !== 0) { + writer.writeUint64String( + 2, + f + ); + } + f = message.getLastIndexOffset(); + if (parseInt(f, 10) !== 0) { + writer.writeUint64String( + 3, + f + ); + } + f = message.getTotalNumPayments(); + if (parseInt(f, 10) !== 0) { + writer.writeUint64String( + 4, + f + ); + } +}; + + +/** + * repeated lnrpc.Payment payments = 1; + * @return {!Array} + */ +proto.litrpc.AccountPaymentsResponse.prototype.getPaymentsList = function() { + return /** @type{!Array} */ ( + jspb.Message.getRepeatedWrapperField(this, lnd_pb.Payment, 1)); +}; + + +/** + * @param {!Array} value + * @return {!proto.litrpc.AccountPaymentsResponse} returns this +*/ +proto.litrpc.AccountPaymentsResponse.prototype.setPaymentsList = function(value) { + return jspb.Message.setRepeatedWrapperField(this, 1, value); +}; + + +/** + * @param {!proto.lnrpc.Payment=} opt_value + * @param {number=} opt_index + * @return {!proto.lnrpc.Payment} + */ +proto.litrpc.AccountPaymentsResponse.prototype.addPayments = function(opt_value, opt_index) { + return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.lnrpc.Payment, opt_index); +}; + + +/** + * Clears the list making it empty but non-null. + * @return {!proto.litrpc.AccountPaymentsResponse} returns this + */ +proto.litrpc.AccountPaymentsResponse.prototype.clearPaymentsList = function() { + return this.setPaymentsList([]); +}; + + +/** + * optional uint64 first_index_offset = 2; + * @return {string} + */ +proto.litrpc.AccountPaymentsResponse.prototype.getFirstIndexOffset = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.litrpc.AccountPaymentsResponse} returns this + */ +proto.litrpc.AccountPaymentsResponse.prototype.setFirstIndexOffset = function(value) { + return jspb.Message.setProto3StringIntField(this, 2, value); +}; + + +/** + * optional uint64 last_index_offset = 3; + * @return {string} + */ +proto.litrpc.AccountPaymentsResponse.prototype.getLastIndexOffset = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.litrpc.AccountPaymentsResponse} returns this + */ +proto.litrpc.AccountPaymentsResponse.prototype.setLastIndexOffset = function(value) { + return jspb.Message.setProto3StringIntField(this, 3, value); +}; + + +/** + * optional uint64 total_num_payments = 4; + * @return {string} + */ +proto.litrpc.AccountPaymentsResponse.prototype.getTotalNumPayments = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, "0")); +}; + + +/** + * @param {string} value + * @return {!proto.litrpc.AccountPaymentsResponse} returns this + */ +proto.litrpc.AccountPaymentsResponse.prototype.setTotalNumPayments = function(value) { + return jspb.Message.setProto3StringIntField(this, 4, value); +}; + + goog.object.extend(exports, proto.litrpc); diff --git a/app/src/types/generated/lit-accounts_pb_service.d.ts b/app/src/types/generated/lit-accounts_pb_service.d.ts index 33a0d2be..fb255a05 100644 --- a/app/src/types/generated/lit-accounts_pb_service.d.ts +++ b/app/src/types/generated/lit-accounts_pb_service.d.ts @@ -67,6 +67,15 @@ type AccountsRemoveAccount = { readonly responseType: typeof lit_accounts_pb.RemoveAccountResponse; }; +type AccountsAccountPayments = { + readonly methodName: string; + readonly service: typeof Accounts; + readonly requestStream: false; + readonly responseStream: false; + readonly requestType: typeof lit_accounts_pb.AccountPaymentsRequest; + readonly responseType: typeof lit_accounts_pb.AccountPaymentsResponse; +}; + export class Accounts { static readonly serviceName: string; static readonly CreateAccount: AccountsCreateAccount; @@ -76,6 +85,7 @@ export class Accounts { static readonly ListAccounts: AccountsListAccounts; static readonly AccountInfo: AccountsAccountInfo; static readonly RemoveAccount: AccountsRemoveAccount; + static readonly AccountPayments: AccountsAccountPayments; } export type ServiceError = { message: string, code: number; metadata: grpc.Metadata } @@ -173,5 +183,14 @@ export class AccountsClient { requestMessage: lit_accounts_pb.RemoveAccountRequest, callback: (error: ServiceError|null, responseMessage: lit_accounts_pb.RemoveAccountResponse|null) => void ): UnaryResponse; + accountPayments( + requestMessage: lit_accounts_pb.AccountPaymentsRequest, + metadata: grpc.Metadata, + callback: (error: ServiceError|null, responseMessage: lit_accounts_pb.AccountPaymentsResponse|null) => void + ): UnaryResponse; + accountPayments( + requestMessage: lit_accounts_pb.AccountPaymentsRequest, + callback: (error: ServiceError|null, responseMessage: lit_accounts_pb.AccountPaymentsResponse|null) => void + ): UnaryResponse; } diff --git a/app/src/types/generated/lit-accounts_pb_service.js b/app/src/types/generated/lit-accounts_pb_service.js index bf169c3b..d4e2ab12 100644 --- a/app/src/types/generated/lit-accounts_pb_service.js +++ b/app/src/types/generated/lit-accounts_pb_service.js @@ -73,6 +73,15 @@ Accounts.RemoveAccount = { responseType: lit_accounts_pb.RemoveAccountResponse }; +Accounts.AccountPayments = { + methodName: "AccountPayments", + service: Accounts, + requestStream: false, + responseStream: false, + requestType: lit_accounts_pb.AccountPaymentsRequest, + responseType: lit_accounts_pb.AccountPaymentsResponse +}; + exports.Accounts = Accounts; function AccountsClient(serviceHost, options) { @@ -297,5 +306,36 @@ AccountsClient.prototype.removeAccount = function removeAccount(requestMessage, }; }; +AccountsClient.prototype.accountPayments = function accountPayments(requestMessage, metadata, callback) { + if (arguments.length === 2) { + callback = arguments[1]; + } + var client = grpc.unary(Accounts.AccountPayments, { + request: requestMessage, + host: this.serviceHost, + metadata: metadata, + transport: this.options.transport, + debug: this.options.debug, + onEnd: function (response) { + if (callback) { + if (response.status !== grpc.Code.OK) { + var err = new Error(response.statusMessage); + err.code = response.status; + err.metadata = response.trailers; + callback(err, null); + } else { + callback(null, response.message); + } + } + } + }); + return { + cancel: function () { + callback = null; + client.close(); + } + }; +}; + exports.AccountsClient = AccountsClient; diff --git a/litrpc/accounts.pb.json.go b/litrpc/accounts.pb.json.go index 37773a39..21618b81 100644 --- a/litrpc/accounts.pb.json.go +++ b/litrpc/accounts.pb.json.go @@ -195,4 +195,29 @@ func RegisterAccountsJSONCallbacks(registry map[string]func(ctx context.Context, } callback(string(respBytes), nil) } + + registry["litrpc.Accounts.AccountPayments"] = func(ctx context.Context, + conn *grpc.ClientConn, reqJSON string, callback func(string, error)) { + + req := &AccountPaymentsRequest{} + err := marshaler.Unmarshal([]byte(reqJSON), req) + if err != nil { + callback("", err) + return + } + + client := NewAccountsClient(conn) + resp, err := client.AccountPayments(ctx, req) + if err != nil { + callback("", err) + return + } + + respBytes, err := marshaler.Marshal(resp) + if err != nil { + callback("", err) + return + } + callback(string(respBytes), nil) + } } diff --git a/litrpc/lit-accounts.pb.go b/litrpc/lit-accounts.pb.go index 2fc9aed0..f87de700 100644 --- a/litrpc/lit-accounts.pb.go +++ b/litrpc/lit-accounts.pb.go @@ -7,6 +7,7 @@ package litrpc import ( + lnrpc "github.com/lightningnetwork/lnd/lnrpc" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" @@ -960,11 +961,162 @@ func (*AccountIdentifier_Id) isAccountIdentifier_Identifier() {} func (*AccountIdentifier_Label) isAccountIdentifier_Identifier() {} +type AccountPaymentsRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The identifier of the account to query payments for. + Account *AccountIdentifier `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` + // The maximum number of payments to return. If set to 0, it will default + // to 20. Capped at 50. + MaxPayments uint64 `protobuf:"varint,2,opt,name=max_payments,json=maxPayments,proto3" json:"max_payments,omitempty"` + // The row offset into the list of payments that will be used as the start of + // the query. The payments are returned in ascending lexicographical order of + // their payment hash. + IndexOffset uint64 `protobuf:"varint,3,opt,name=index_offset,json=indexOffset,proto3" json:"index_offset,omitempty"` + // If set, the total number of payments matching the query will be returned + // in the response. + CountTotalPayments bool `protobuf:"varint,4,opt,name=count_total_payments,json=countTotalPayments,proto3" json:"count_total_payments,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AccountPaymentsRequest) Reset() { + *x = AccountPaymentsRequest{} + mi := &file_lit_accounts_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AccountPaymentsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountPaymentsRequest) ProtoMessage() {} + +func (x *AccountPaymentsRequest) ProtoReflect() protoreflect.Message { + mi := &file_lit_accounts_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountPaymentsRequest.ProtoReflect.Descriptor instead. +func (*AccountPaymentsRequest) Descriptor() ([]byte, []int) { + return file_lit_accounts_proto_rawDescGZIP(), []int{16} +} + +func (x *AccountPaymentsRequest) GetAccount() *AccountIdentifier { + if x != nil { + return x.Account + } + return nil +} + +func (x *AccountPaymentsRequest) GetMaxPayments() uint64 { + if x != nil { + return x.MaxPayments + } + return 0 +} + +func (x *AccountPaymentsRequest) GetIndexOffset() uint64 { + if x != nil { + return x.IndexOffset + } + return 0 +} + +func (x *AccountPaymentsRequest) GetCountTotalPayments() bool { + if x != nil { + return x.CountTotalPayments + } + return false +} + +type AccountPaymentsResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // The detailed payments associated with the account, sorted in ascending + // lexicographical order of their payment hash. + Payments []*lnrpc.Payment `protobuf:"bytes,1,rep,name=payments,proto3" json:"payments,omitempty"` + // The row offset of the first payment returned. + FirstIndexOffset uint64 `protobuf:"varint,2,opt,name=first_index_offset,json=firstIndexOffset,proto3" json:"first_index_offset,omitempty"` + // The row offset of the last payment returned. This can be used as the + // index_offset in a subsequent query to paginate forwards. + LastIndexOffset uint64 `protobuf:"varint,3,opt,name=last_index_offset,json=lastIndexOffset,proto3" json:"last_index_offset,omitempty"` + // The total number of payments matching the query (only set if + // count_total_payments was true in the request). + TotalNumPayments uint64 `protobuf:"varint,4,opt,name=total_num_payments,json=totalNumPayments,proto3" json:"total_num_payments,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AccountPaymentsResponse) Reset() { + *x = AccountPaymentsResponse{} + mi := &file_lit_accounts_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AccountPaymentsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccountPaymentsResponse) ProtoMessage() {} + +func (x *AccountPaymentsResponse) ProtoReflect() protoreflect.Message { + mi := &file_lit_accounts_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccountPaymentsResponse.ProtoReflect.Descriptor instead. +func (*AccountPaymentsResponse) Descriptor() ([]byte, []int) { + return file_lit_accounts_proto_rawDescGZIP(), []int{17} +} + +func (x *AccountPaymentsResponse) GetPayments() []*lnrpc.Payment { + if x != nil { + return x.Payments + } + return nil +} + +func (x *AccountPaymentsResponse) GetFirstIndexOffset() uint64 { + if x != nil { + return x.FirstIndexOffset + } + return 0 +} + +func (x *AccountPaymentsResponse) GetLastIndexOffset() uint64 { + if x != nil { + return x.LastIndexOffset + } + return 0 +} + +func (x *AccountPaymentsResponse) GetTotalNumPayments() uint64 { + if x != nil { + return x.TotalNumPayments + } + return 0 +} + var File_lit_accounts_proto protoreflect.FileDescriptor const file_lit_accounts_proto_rawDesc = "" + "\n" + - "\x12lit-accounts.proto\x12\x06litrpc\"~\n" + + "\x12lit-accounts.proto\x12\x06litrpc\x1a\x0fproto/lnd.proto\"~\n" + "\x14CreateAccountRequest\x12'\n" + "\x0faccount_balance\x18\x01 \x01(\x04R\x0eaccountBalance\x12'\n" + "\x0fexpiration_date\x18\x02 \x01(\x03R\x0eexpirationDate\x12\x14\n" + @@ -1019,7 +1171,17 @@ const file_lit_accounts_proto_rawDesc = "" + "\x02id\x18\x01 \x01(\tH\x00R\x02id\x12\x16\n" + "\x05label\x18\x02 \x01(\tH\x00R\x05labelB\f\n" + "\n" + - "identifier2\x86\x04\n" + + "identifier\"\xc5\x01\n" + + "\x16AccountPaymentsRequest\x123\n" + + "\aaccount\x18\x01 \x01(\v2\x19.litrpc.AccountIdentifierR\aaccount\x12!\n" + + "\fmax_payments\x18\x02 \x01(\x04R\vmaxPayments\x12!\n" + + "\findex_offset\x18\x03 \x01(\x04R\vindexOffset\x120\n" + + "\x14count_total_payments\x18\x04 \x01(\bR\x12countTotalPayments\"\xcd\x01\n" + + "\x17AccountPaymentsResponse\x12*\n" + + "\bpayments\x18\x01 \x03(\v2\x0e.lnrpc.PaymentR\bpayments\x12,\n" + + "\x12first_index_offset\x18\x02 \x01(\x04R\x10firstIndexOffset\x12*\n" + + "\x11last_index_offset\x18\x03 \x01(\x04R\x0flastIndexOffset\x12,\n" + + "\x12total_num_payments\x18\x04 \x01(\x04R\x10totalNumPayments2\xda\x04\n" + "\bAccounts\x12L\n" + "\rCreateAccount\x12\x1c.litrpc.CreateAccountRequest\x1a\x1d.litrpc.CreateAccountResponse\x12>\n" + "\rUpdateAccount\x12\x1c.litrpc.UpdateAccountRequest\x1a\x0f.litrpc.Account\x12L\n" + @@ -1027,7 +1189,8 @@ const file_lit_accounts_proto_rawDesc = "" + "\fDebitAccount\x12\x1b.litrpc.DebitAccountRequest\x1a\x1c.litrpc.DebitAccountResponse\x12I\n" + "\fListAccounts\x12\x1b.litrpc.ListAccountsRequest\x1a\x1c.litrpc.ListAccountsResponse\x12:\n" + "\vAccountInfo\x12\x1a.litrpc.AccountInfoRequest\x1a\x0f.litrpc.Account\x12L\n" + - "\rRemoveAccount\x12\x1c.litrpc.RemoveAccountRequest\x1a\x1d.litrpc.RemoveAccountResponseB4Z2github.com/lightninglabs/lightning-terminal/litrpcb\x06proto3" + "\rRemoveAccount\x12\x1c.litrpc.RemoveAccountRequest\x1a\x1d.litrpc.RemoveAccountResponse\x12R\n" + + "\x0fAccountPayments\x12\x1e.litrpc.AccountPaymentsRequest\x1a\x1f.litrpc.AccountPaymentsResponseB4Z2github.com/lightninglabs/lightning-terminal/litrpcb\x06proto3" var ( file_lit_accounts_proto_rawDescOnce sync.Once @@ -1041,24 +1204,27 @@ func file_lit_accounts_proto_rawDescGZIP() []byte { return file_lit_accounts_proto_rawDescData } -var file_lit_accounts_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_lit_accounts_proto_msgTypes = make([]protoimpl.MessageInfo, 18) var file_lit_accounts_proto_goTypes = []any{ - (*CreateAccountRequest)(nil), // 0: litrpc.CreateAccountRequest - (*CreateAccountResponse)(nil), // 1: litrpc.CreateAccountResponse - (*Account)(nil), // 2: litrpc.Account - (*AccountInvoice)(nil), // 3: litrpc.AccountInvoice - (*AccountPayment)(nil), // 4: litrpc.AccountPayment - (*UpdateAccountRequest)(nil), // 5: litrpc.UpdateAccountRequest - (*CreditAccountRequest)(nil), // 6: litrpc.CreditAccountRequest - (*CreditAccountResponse)(nil), // 7: litrpc.CreditAccountResponse - (*DebitAccountRequest)(nil), // 8: litrpc.DebitAccountRequest - (*DebitAccountResponse)(nil), // 9: litrpc.DebitAccountResponse - (*ListAccountsRequest)(nil), // 10: litrpc.ListAccountsRequest - (*ListAccountsResponse)(nil), // 11: litrpc.ListAccountsResponse - (*AccountInfoRequest)(nil), // 12: litrpc.AccountInfoRequest - (*RemoveAccountRequest)(nil), // 13: litrpc.RemoveAccountRequest - (*RemoveAccountResponse)(nil), // 14: litrpc.RemoveAccountResponse - (*AccountIdentifier)(nil), // 15: litrpc.AccountIdentifier + (*CreateAccountRequest)(nil), // 0: litrpc.CreateAccountRequest + (*CreateAccountResponse)(nil), // 1: litrpc.CreateAccountResponse + (*Account)(nil), // 2: litrpc.Account + (*AccountInvoice)(nil), // 3: litrpc.AccountInvoice + (*AccountPayment)(nil), // 4: litrpc.AccountPayment + (*UpdateAccountRequest)(nil), // 5: litrpc.UpdateAccountRequest + (*CreditAccountRequest)(nil), // 6: litrpc.CreditAccountRequest + (*CreditAccountResponse)(nil), // 7: litrpc.CreditAccountResponse + (*DebitAccountRequest)(nil), // 8: litrpc.DebitAccountRequest + (*DebitAccountResponse)(nil), // 9: litrpc.DebitAccountResponse + (*ListAccountsRequest)(nil), // 10: litrpc.ListAccountsRequest + (*ListAccountsResponse)(nil), // 11: litrpc.ListAccountsResponse + (*AccountInfoRequest)(nil), // 12: litrpc.AccountInfoRequest + (*RemoveAccountRequest)(nil), // 13: litrpc.RemoveAccountRequest + (*RemoveAccountResponse)(nil), // 14: litrpc.RemoveAccountResponse + (*AccountIdentifier)(nil), // 15: litrpc.AccountIdentifier + (*AccountPaymentsRequest)(nil), // 16: litrpc.AccountPaymentsRequest + (*AccountPaymentsResponse)(nil), // 17: litrpc.AccountPaymentsResponse + (*lnrpc.Payment)(nil), // 18: lnrpc.Payment } var file_lit_accounts_proto_depIdxs = []int32{ 2, // 0: litrpc.CreateAccountResponse.account:type_name -> litrpc.Account @@ -1069,25 +1235,29 @@ var file_lit_accounts_proto_depIdxs = []int32{ 15, // 5: litrpc.DebitAccountRequest.account:type_name -> litrpc.AccountIdentifier 2, // 6: litrpc.DebitAccountResponse.account:type_name -> litrpc.Account 2, // 7: litrpc.ListAccountsResponse.accounts:type_name -> litrpc.Account - 0, // 8: litrpc.Accounts.CreateAccount:input_type -> litrpc.CreateAccountRequest - 5, // 9: litrpc.Accounts.UpdateAccount:input_type -> litrpc.UpdateAccountRequest - 6, // 10: litrpc.Accounts.CreditAccount:input_type -> litrpc.CreditAccountRequest - 8, // 11: litrpc.Accounts.DebitAccount:input_type -> litrpc.DebitAccountRequest - 10, // 12: litrpc.Accounts.ListAccounts:input_type -> litrpc.ListAccountsRequest - 12, // 13: litrpc.Accounts.AccountInfo:input_type -> litrpc.AccountInfoRequest - 13, // 14: litrpc.Accounts.RemoveAccount:input_type -> litrpc.RemoveAccountRequest - 1, // 15: litrpc.Accounts.CreateAccount:output_type -> litrpc.CreateAccountResponse - 2, // 16: litrpc.Accounts.UpdateAccount:output_type -> litrpc.Account - 7, // 17: litrpc.Accounts.CreditAccount:output_type -> litrpc.CreditAccountResponse - 9, // 18: litrpc.Accounts.DebitAccount:output_type -> litrpc.DebitAccountResponse - 11, // 19: litrpc.Accounts.ListAccounts:output_type -> litrpc.ListAccountsResponse - 2, // 20: litrpc.Accounts.AccountInfo:output_type -> litrpc.Account - 14, // 21: litrpc.Accounts.RemoveAccount:output_type -> litrpc.RemoveAccountResponse - 15, // [15:22] is the sub-list for method output_type - 8, // [8:15] is the sub-list for method input_type - 8, // [8:8] is the sub-list for extension type_name - 8, // [8:8] is the sub-list for extension extendee - 0, // [0:8] is the sub-list for field type_name + 15, // 8: litrpc.AccountPaymentsRequest.account:type_name -> litrpc.AccountIdentifier + 18, // 9: litrpc.AccountPaymentsResponse.payments:type_name -> lnrpc.Payment + 0, // 10: litrpc.Accounts.CreateAccount:input_type -> litrpc.CreateAccountRequest + 5, // 11: litrpc.Accounts.UpdateAccount:input_type -> litrpc.UpdateAccountRequest + 6, // 12: litrpc.Accounts.CreditAccount:input_type -> litrpc.CreditAccountRequest + 8, // 13: litrpc.Accounts.DebitAccount:input_type -> litrpc.DebitAccountRequest + 10, // 14: litrpc.Accounts.ListAccounts:input_type -> litrpc.ListAccountsRequest + 12, // 15: litrpc.Accounts.AccountInfo:input_type -> litrpc.AccountInfoRequest + 13, // 16: litrpc.Accounts.RemoveAccount:input_type -> litrpc.RemoveAccountRequest + 16, // 17: litrpc.Accounts.AccountPayments:input_type -> litrpc.AccountPaymentsRequest + 1, // 18: litrpc.Accounts.CreateAccount:output_type -> litrpc.CreateAccountResponse + 2, // 19: litrpc.Accounts.UpdateAccount:output_type -> litrpc.Account + 7, // 20: litrpc.Accounts.CreditAccount:output_type -> litrpc.CreditAccountResponse + 9, // 21: litrpc.Accounts.DebitAccount:output_type -> litrpc.DebitAccountResponse + 11, // 22: litrpc.Accounts.ListAccounts:output_type -> litrpc.ListAccountsResponse + 2, // 23: litrpc.Accounts.AccountInfo:output_type -> litrpc.Account + 14, // 24: litrpc.Accounts.RemoveAccount:output_type -> litrpc.RemoveAccountResponse + 17, // 25: litrpc.Accounts.AccountPayments:output_type -> litrpc.AccountPaymentsResponse + 18, // [18:26] is the sub-list for method output_type + 10, // [10:18] is the sub-list for method input_type + 10, // [10:10] is the sub-list for extension type_name + 10, // [10:10] is the sub-list for extension extendee + 0, // [0:10] is the sub-list for field type_name } func init() { file_lit_accounts_proto_init() } @@ -1105,7 +1275,7 @@ func file_lit_accounts_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_lit_accounts_proto_rawDesc), len(file_lit_accounts_proto_rawDesc)), NumEnums: 0, - NumMessages: 16, + NumMessages: 18, NumExtensions: 0, NumServices: 1, }, diff --git a/litrpc/lit-accounts.pb.gw.go b/litrpc/lit-accounts.pb.gw.go index 9db31213..d08e7d82 100644 --- a/litrpc/lit-accounts.pb.gw.go +++ b/litrpc/lit-accounts.pb.gw.go @@ -325,6 +325,42 @@ func local_request_Accounts_RemoveAccount_0(ctx context.Context, marshaler runti } +var ( + filter_Accounts_AccountPayments_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Accounts_AccountPayments_0(ctx context.Context, marshaler runtime.Marshaler, client AccountsClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccountPaymentsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Accounts_AccountPayments_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AccountPayments(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Accounts_AccountPayments_0(ctx context.Context, marshaler runtime.Marshaler, server AccountsServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccountPaymentsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Accounts_AccountPayments_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AccountPayments(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterAccountsHandlerServer registers the http handlers for service Accounts to "mux". // UnaryRPC :call AccountsServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -482,6 +518,31 @@ func RegisterAccountsHandlerServer(ctx context.Context, mux *runtime.ServeMux, s }) + mux.Handle("GET", pattern_Accounts_AccountPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/litrpc.Accounts/AccountPayments", runtime.WithHTTPPathPattern("/v1/accounts/payments")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Accounts_AccountPayments_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Accounts_AccountPayments_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -655,6 +716,28 @@ func RegisterAccountsHandlerClient(ctx context.Context, mux *runtime.ServeMux, c }) + mux.Handle("GET", pattern_Accounts_AccountPayments_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/litrpc.Accounts/AccountPayments", runtime.WithHTTPPathPattern("/v1/accounts/payments")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Accounts_AccountPayments_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Accounts_AccountPayments_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -670,6 +753,8 @@ var ( pattern_Accounts_ListAccounts_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "accounts"}, "")) pattern_Accounts_RemoveAccount_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "accounts", "id"}, "")) + + pattern_Accounts_AccountPayments_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "accounts", "payments"}, "")) ) var ( @@ -684,4 +769,6 @@ var ( forward_Accounts_ListAccounts_0 = runtime.ForwardResponseMessage forward_Accounts_RemoveAccount_0 = runtime.ForwardResponseMessage + + forward_Accounts_AccountPayments_0 = runtime.ForwardResponseMessage ) diff --git a/litrpc/lit-accounts.proto b/litrpc/lit-accounts.proto index 8545cdc8..951d63e6 100644 --- a/litrpc/lit-accounts.proto +++ b/litrpc/lit-accounts.proto @@ -2,6 +2,8 @@ syntax = "proto3"; package litrpc; +import "proto/lnd.proto"; + option go_package = "github.com/lightninglabs/lightning-terminal/litrpc"; service Accounts { @@ -52,6 +54,12 @@ service Accounts { RemoveAccount removes the given account from the account database. */ rpc RemoveAccount (RemoveAccountRequest) returns (RemoveAccountResponse); + + /* litcli: `accounts payments` + AccountPayments returns the detailed payment history for the given account. + */ + rpc AccountPayments (AccountPaymentsRequest) + returns (AccountPaymentsResponse); } message CreateAccountRequest { @@ -244,4 +252,55 @@ message AccountIdentifier { // The label of the account. string label = 2; } +} + +message AccountPaymentsRequest { + /* + The identifier of the account to query payments for. + */ + AccountIdentifier account = 1; + + /* + The maximum number of payments to return. If set to 0, it will default + to 20. Capped at 50. + */ + uint64 max_payments = 2; + + /* + The row offset into the list of payments that will be used as the start of + the query. The payments are returned in ascending lexicographical order of + their payment hash. + */ + uint64 index_offset = 3; + + /* + If set, the total number of payments matching the query will be returned + in the response. + */ + bool count_total_payments = 4; +} + +message AccountPaymentsResponse { + /* + The detailed payments associated with the account, sorted in ascending + lexicographical order of their payment hash. + */ + repeated lnrpc.Payment payments = 1; + + /* + The row offset of the first payment returned. + */ + uint64 first_index_offset = 2; + + /* + The row offset of the last payment returned. This can be used as the + index_offset in a subsequent query to paginate forwards. + */ + uint64 last_index_offset = 3; + + /* + The total number of payments matching the query (only set if + count_total_payments was true in the request). + */ + uint64 total_num_payments = 4; } \ No newline at end of file diff --git a/litrpc/lit-accounts.swagger.json b/litrpc/lit-accounts.swagger.json index 76b6dd2a..7382ccd6 100644 --- a/litrpc/lit-accounts.swagger.json +++ b/litrpc/lit-accounts.swagger.json @@ -151,6 +151,68 @@ ] } }, + "/v1/accounts/payments": { + "get": { + "summary": "litcli: `accounts payments`\nAccountPayments returns the detailed payment history for the given account.", + "operationId": "Accounts_AccountPayments", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/litrpcAccountPaymentsResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "account.id", + "description": "The ID of the account.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "account.label", + "description": "The label of the account.", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "max_payments", + "description": "The maximum number of payments to return. If set to 0, it will default\nto 20. Capped at 50.", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "index_offset", + "description": "The row offset into the list of payments that will be used as the start of\nthe query. The payments are returned in ascending lexicographical order of\ntheir payment hash.", + "in": "query", + "required": false, + "type": "string", + "format": "uint64" + }, + { + "name": "count_total_payments", + "description": "If set, the total number of payments matching the query will be returned\nin the response.", + "in": "query", + "required": false, + "type": "boolean" + } + ], + "tags": [ + "Accounts" + ] + } + }, "/v1/accounts/{id}": { "delete": { "summary": "litcli: `accounts remove`\nRemoveAccount removes the given account from the account database.", @@ -295,6 +357,63 @@ } } }, + "FailureFailureCode": { + "type": "string", + "enum": [ + "RESERVED", + "INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS", + "INCORRECT_PAYMENT_AMOUNT", + "FINAL_INCORRECT_CLTV_EXPIRY", + "FINAL_INCORRECT_HTLC_AMOUNT", + "FINAL_EXPIRY_TOO_SOON", + "INVALID_REALM", + "EXPIRY_TOO_SOON", + "INVALID_ONION_VERSION", + "INVALID_ONION_HMAC", + "INVALID_ONION_KEY", + "AMOUNT_BELOW_MINIMUM", + "FEE_INSUFFICIENT", + "INCORRECT_CLTV_EXPIRY", + "CHANNEL_DISABLED", + "TEMPORARY_CHANNEL_FAILURE", + "REQUIRED_NODE_FEATURE_MISSING", + "REQUIRED_CHANNEL_FEATURE_MISSING", + "UNKNOWN_NEXT_PEER", + "TEMPORARY_NODE_FAILURE", + "PERMANENT_NODE_FAILURE", + "PERMANENT_CHANNEL_FAILURE", + "EXPIRY_TOO_FAR", + "MPP_TIMEOUT", + "INVALID_ONION_PAYLOAD", + "INVALID_ONION_BLINDING", + "INTERNAL_FAILURE", + "UNKNOWN_FAILURE", + "UNREADABLE_FAILURE" + ], + "default": "RESERVED", + "description": " - RESERVED: The numbers assigned in this enumeration match the failure codes as\ndefined in BOLT #4. Because protobuf 3 requires enums to start with 0,\na RESERVED value is added.\n - INTERNAL_FAILURE: An internal error occurred.\n - UNKNOWN_FAILURE: The error source is known, but the failure itself couldn't be decoded.\n - UNREADABLE_FAILURE: An unreadable failure result is returned if the received failure message\ncannot be decrypted. In that case the error source is unknown." + }, + "HTLCAttemptHTLCStatus": { + "type": "string", + "enum": [ + "IN_FLIGHT", + "SUCCEEDED", + "FAILED" + ], + "default": "IN_FLIGHT" + }, + "PaymentPaymentStatus": { + "type": "string", + "enum": [ + "UNKNOWN", + "IN_FLIGHT", + "SUCCEEDED", + "FAILED", + "INITIATED" + ], + "default": "UNKNOWN", + "description": " - UNKNOWN: Deprecated. This status will never be returned.\n - IN_FLIGHT: Payment has inflight HTLCs.\n - SUCCEEDED: Payment is settled.\n - FAILED: Payment is failed.\n - INITIATED: Payment is created and has not attempted any HTLCs." + }, "litrpcAccount": { "type": "object", "properties": { @@ -386,6 +505,34 @@ } } }, + "litrpcAccountPaymentsResponse": { + "type": "object", + "properties": { + "payments": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/lnrpcPayment" + }, + "description": "The detailed payments associated with the account, sorted in ascending\nlexicographical order of their payment hash." + }, + "first_index_offset": { + "type": "string", + "format": "uint64", + "description": "The row offset of the first payment returned." + }, + "last_index_offset": { + "type": "string", + "format": "uint64", + "description": "The row offset of the last payment returned. This can be used as the\nindex_offset in a subsequent query to paginate forwards." + }, + "total_num_payments": { + "type": "string", + "format": "uint64", + "description": "The total number of payments matching the query (only set if\ncount_total_payments was true in the request)." + } + } + }, "litrpcCreateAccountRequest": { "type": "object", "properties": { @@ -453,6 +600,409 @@ "litrpcRemoveAccountResponse": { "type": "object" }, + "lnrpcAMPRecord": { + "type": "object", + "properties": { + "root_share": { + "type": "string", + "format": "byte" + }, + "set_id": { + "type": "string", + "format": "byte" + }, + "child_index": { + "type": "integer", + "format": "int64" + } + } + }, + "lnrpcChannelUpdate": { + "type": "object", + "properties": { + "signature": { + "type": "string", + "format": "byte", + "description": "The signature that validates the announced data and proves the ownership\nof node id." + }, + "chain_hash": { + "type": "string", + "format": "byte", + "description": "The target chain that this channel was opened within. This value\nshould be the genesis hash of the target chain. Along with the short\nchannel ID, this uniquely identifies the channel globally in a\nblockchain." + }, + "chan_id": { + "type": "string", + "format": "uint64", + "description": "The unique description of the funding transaction." + }, + "timestamp": { + "type": "integer", + "format": "int64", + "description": "A timestamp that allows ordering in the case of multiple announcements.\nWe should ignore the message if timestamp is not greater than the\nlast-received." + }, + "message_flags": { + "type": "integer", + "format": "int64", + "description": "The bitfield that describes whether optional fields are present in this\nupdate. Currently, the least-significant bit must be set to 1 if the\noptional field MaxHtlc is present." + }, + "channel_flags": { + "type": "integer", + "format": "int64", + "description": "The bitfield that describes additional meta-data concerning how the\nupdate is to be interpreted. Currently, the least-significant bit must be\nset to 0 if the creating node corresponds to the first node in the\npreviously sent channel announcement and 1 otherwise. If the second bit\nis set, then the channel is set to be disabled." + }, + "time_lock_delta": { + "type": "integer", + "format": "int64", + "description": "The minimum number of blocks this node requires to be added to the expiry\nof HTLCs. This is a security parameter determined by the node operator.\nThis value represents the required gap between the time locks of the\nincoming and outgoing HTLC's set to this node." + }, + "htlc_minimum_msat": { + "type": "string", + "format": "uint64", + "description": "The minimum HTLC value which will be accepted." + }, + "base_fee": { + "type": "integer", + "format": "int64", + "description": "The base fee that must be used for incoming HTLC's to this particular\nchannel. This value will be tacked onto the required for a payment\nindependent of the size of the payment." + }, + "fee_rate": { + "type": "integer", + "format": "int64", + "description": "The fee rate that will be charged per millionth of a satoshi." + }, + "htlc_maximum_msat": { + "type": "string", + "format": "uint64", + "description": "The maximum HTLC value which will be accepted." + }, + "extra_opaque_data": { + "type": "string", + "format": "byte", + "description": "The set of data that was appended to this message, some of which we may\nnot actually know how to iterate or parse. By holding onto this data, we\nensure that we're able to properly validate the set of signatures that\ncover these new fields, and ensure we're able to make upgrades to the\nnetwork in a forwards compatible manner." + } + } + }, + "lnrpcFailure": { + "type": "object", + "properties": { + "code": { + "$ref": "#/definitions/FailureFailureCode", + "title": "Failure code as defined in the Lightning spec" + }, + "channel_update": { + "$ref": "#/definitions/lnrpcChannelUpdate", + "description": "An optional channel update message." + }, + "htlc_msat": { + "type": "string", + "format": "uint64", + "description": "A failure type-dependent htlc value." + }, + "onion_sha_256": { + "type": "string", + "format": "byte", + "description": "The sha256 sum of the onion payload." + }, + "cltv_expiry": { + "type": "integer", + "format": "int64", + "description": "A failure type-dependent cltv expiry value." + }, + "flags": { + "type": "integer", + "format": "int64", + "description": "A failure type-dependent flags value." + }, + "failure_source_index": { + "type": "integer", + "format": "int64", + "description": "The position in the path of the intermediate or final node that generated\nthe failure message. Position zero is the sender node." + }, + "height": { + "type": "integer", + "format": "int64", + "description": "A failure type-dependent block height." + } + } + }, + "lnrpcHTLCAttempt": { + "type": "object", + "properties": { + "attempt_id": { + "type": "string", + "format": "uint64", + "description": "The unique ID that is used for this attempt." + }, + "status": { + "$ref": "#/definitions/HTLCAttemptHTLCStatus", + "description": "The status of the HTLC." + }, + "route": { + "$ref": "#/definitions/lnrpcRoute", + "description": "The route taken by this HTLC." + }, + "attempt_time_ns": { + "type": "string", + "format": "int64", + "description": "The time in UNIX nanoseconds at which this HTLC was sent." + }, + "resolve_time_ns": { + "type": "string", + "format": "int64", + "description": "The time in UNIX nanoseconds at which this HTLC was settled or failed.\nThis value will not be set if the HTLC is still IN_FLIGHT." + }, + "failure": { + "$ref": "#/definitions/lnrpcFailure", + "description": "Detailed htlc failure info." + }, + "preimage": { + "type": "string", + "format": "byte", + "description": "The preimage that was used to settle the HTLC." + } + } + }, + "lnrpcHop": { + "type": "object", + "properties": { + "chan_id": { + "type": "string", + "format": "uint64", + "description": "The unique channel ID for the channel. The first 3 bytes are the block\nheight, the next 3 the index within the block, and the last 2 bytes are the\noutput index for the channel." + }, + "chan_capacity": { + "type": "string", + "format": "int64" + }, + "amt_to_forward": { + "type": "string", + "format": "int64" + }, + "fee": { + "type": "string", + "format": "int64" + }, + "expiry": { + "type": "integer", + "format": "int64" + }, + "amt_to_forward_msat": { + "type": "string", + "format": "int64" + }, + "fee_msat": { + "type": "string", + "format": "int64" + }, + "pub_key": { + "type": "string", + "description": "An optional public key of the hop. If the public key is given, the payment\ncan be executed without relying on a copy of the channel graph." + }, + "tlv_payload": { + "type": "boolean", + "description": "If set to true, then this hop will be encoded using the new variable length\nTLV format. Note that if any custom tlv_records below are specified, then\nthis field MUST be set to true for them to be encoded properly." + }, + "mpp_record": { + "$ref": "#/definitions/lnrpcMPPRecord", + "description": "An optional TLV record that signals the use of an MPP payment. If present,\nthe receiver will enforce that the same mpp_record is included in the final\nhop payload of all non-zero payments in the HTLC set. If empty, a regular\nsingle-shot payment is or was attempted." + }, + "amp_record": { + "$ref": "#/definitions/lnrpcAMPRecord", + "description": "An optional TLV record that signals the use of an AMP payment. If present,\nthe receiver will treat all received payments including the same\n(payment_addr, set_id) pair as being part of one logical payment. The\npayment will be settled by XORing the root_share's together and deriving the\nchild hashes and preimages according to BOLT XX. Must be used in conjunction\nwith mpp_record." + }, + "custom_records": { + "type": "object", + "additionalProperties": { + "type": "string", + "format": "byte" + }, + "description": "An optional set of key-value TLV records. This is useful within the context\nof the SendToRoute call as it allows callers to specify arbitrary K-V pairs\nto drop off at each hop within the onion." + }, + "metadata": { + "type": "string", + "format": "byte", + "description": "The payment metadata to send along with the payment to the payee." + }, + "blinding_point": { + "type": "string", + "format": "byte", + "description": "Blinding point is an optional blinding point included for introduction\nnodes in blinded paths. This field is mandatory for hops that represents\nthe introduction point in a blinded path." + }, + "encrypted_data": { + "type": "string", + "format": "byte", + "description": "Encrypted data is a receiver-produced blob of data that provides hops\nin a blinded route with forwarding data. As this data is encrypted by\nthe recipient, we will not be able to parse it - it is essentially an\narbitrary blob of data from our node's perspective. This field is\nmandatory for all hops in a blinded path, including the introduction\nnode." + }, + "total_amt_msat": { + "type": "string", + "format": "uint64", + "description": "The total amount that is sent to the recipient (possibly across multiple\nHTLCs), as specified by the sender when making a payment to a blinded path.\nThis value is only set in the final hop payload of a blinded payment. This\nvalue is analogous to the MPPRecord that is used for regular (non-blinded)\nMPP payments." + } + } + }, + "lnrpcMPPRecord": { + "type": "object", + "properties": { + "payment_addr": { + "type": "string", + "format": "byte", + "description": "A unique, random identifier used to authenticate the sender as the intended\npayer of a multi-path payment. The payment_addr must be the same for all\nsubpayments, and match the payment_addr provided in the receiver's invoice.\nThe same payment_addr must be used on all subpayments. This is also called\npayment secret in specifications (e.g. BOLT 11)." + }, + "total_amt_msat": { + "type": "string", + "format": "int64", + "description": "The total amount in milli-satoshis being sent as part of a larger multi-path\npayment. The caller is responsible for ensuring subpayments to the same node\nand payment_hash sum exactly to total_amt_msat. The same\ntotal_amt_msat must be used on all subpayments." + } + } + }, + "lnrpcPayment": { + "type": "object", + "properties": { + "payment_hash": { + "type": "string", + "title": "The payment hash" + }, + "value": { + "type": "string", + "format": "int64", + "description": "Deprecated, use value_sat or value_msat." + }, + "creation_date": { + "type": "string", + "format": "int64", + "title": "Deprecated, use creation_time_ns" + }, + "fee": { + "type": "string", + "format": "int64", + "description": "Deprecated, use fee_sat or fee_msat." + }, + "payment_preimage": { + "type": "string", + "title": "The payment preimage" + }, + "value_sat": { + "type": "string", + "format": "int64", + "title": "The value of the payment in satoshis" + }, + "value_msat": { + "type": "string", + "format": "int64", + "title": "The value of the payment in milli-satoshis" + }, + "payment_request": { + "type": "string", + "description": "The optional payment request being fulfilled." + }, + "status": { + "$ref": "#/definitions/PaymentPaymentStatus", + "description": "The status of the payment." + }, + "fee_sat": { + "type": "string", + "format": "int64", + "title": "The fee paid for this payment in satoshis" + }, + "fee_msat": { + "type": "string", + "format": "int64", + "title": "The fee paid for this payment in milli-satoshis" + }, + "creation_time_ns": { + "type": "string", + "format": "int64", + "description": "The time in UNIX nanoseconds at which the payment was created." + }, + "htlcs": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/lnrpcHTLCAttempt" + }, + "description": "The HTLCs made in attempt to settle the payment." + }, + "payment_index": { + "type": "string", + "format": "uint64", + "description": "The creation index of this payment. Each payment can be uniquely identified\nby this index, which may not strictly increment by 1 for payments made in\nolder versions of lnd." + }, + "failure_reason": { + "$ref": "#/definitions/lnrpcPaymentFailureReason" + }, + "first_hop_custom_records": { + "type": "object", + "additionalProperties": { + "type": "string", + "format": "byte" + }, + "description": "The custom TLV records that were sent to the first hop as part of the HTLC\nwire message for this payment." + } + } + }, + "lnrpcPaymentFailureReason": { + "type": "string", + "enum": [ + "FAILURE_REASON_NONE", + "FAILURE_REASON_TIMEOUT", + "FAILURE_REASON_NO_ROUTE", + "FAILURE_REASON_ERROR", + "FAILURE_REASON_INCORRECT_PAYMENT_DETAILS", + "FAILURE_REASON_INSUFFICIENT_BALANCE", + "FAILURE_REASON_CANCELED" + ], + "default": "FAILURE_REASON_NONE", + "description": " - FAILURE_REASON_NONE: Payment isn't failed (yet).\n - FAILURE_REASON_TIMEOUT: There are more routes to try, but the payment timeout was exceeded.\n - FAILURE_REASON_NO_ROUTE: All possible routes were tried and failed permanently. Or were no\nroutes to the destination at all.\n - FAILURE_REASON_ERROR: A non-recoverable error has occured.\n - FAILURE_REASON_INCORRECT_PAYMENT_DETAILS: Payment details incorrect (unknown hash, invalid amt or\ninvalid final cltv delta)\n - FAILURE_REASON_INSUFFICIENT_BALANCE: Insufficient local balance.\n - FAILURE_REASON_CANCELED: The payment was canceled." + }, + "lnrpcRoute": { + "type": "object", + "properties": { + "total_time_lock": { + "type": "integer", + "format": "int64", + "description": "The cumulative (final) time lock across the entire route. This is the CLTV\nvalue that should be extended to the first hop in the route. All other hops\nwill decrement the time-lock as advertised, leaving enough time for all\nhops to wait for or present the payment preimage to complete the payment." + }, + "total_fees": { + "type": "string", + "format": "int64", + "description": "The sum of the fees paid at each hop within the final route. In the case\nof a one-hop payment, this value will be zero as we don't need to pay a fee\nto ourselves." + }, + "total_amt": { + "type": "string", + "format": "int64", + "description": "The total amount of funds required to complete a payment over this route.\nThis value includes the cumulative fees at each hop. As a result, the HTLC\nextended to the first-hop in the route will need to have at least this many\nsatoshis, otherwise the route will fail at an intermediate node due to an\ninsufficient amount of fees." + }, + "hops": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/lnrpcHop" + }, + "description": "Contains details concerning the specific forwarding details at each hop." + }, + "total_fees_msat": { + "type": "string", + "format": "int64", + "description": "The total fees in millisatoshis." + }, + "total_amt_msat": { + "type": "string", + "format": "int64", + "description": "The total amount in millisatoshis." + }, + "first_hop_amount_msat": { + "type": "string", + "format": "int64", + "description": "The actual on-chain amount that was sent out to the first hop. This value is\nonly different from the total_amt_msat field if this is a custom channel\npayment and the value transported in the HTLC is different from the BTC\namount in the HTLC. If this value is zero, then this is an old payment that\ndidn't have this value yet and can be ignored." + }, + "custom_channel_data": { + "type": "string", + "format": "byte", + "description": "Custom channel data that might be populated in custom channels." + } + }, + "description": "A path through the channel graph which runs over one or more channels in\nsuccession. This struct carries all the information required to craft the\nSphinx onion packet, and send the payment along the first hop in the path. A\nroute is only selected as valid if all the channels have sufficient capacity to\ncarry the initial payment amount after fees are accounted for." + }, "protobufAny": { "type": "object", "properties": { diff --git a/litrpc/lit-accounts.yaml b/litrpc/lit-accounts.yaml index 7fa8e2d6..f917b789 100644 --- a/litrpc/lit-accounts.yaml +++ b/litrpc/lit-accounts.yaml @@ -21,3 +21,5 @@ http: - selector: litrpc.Accounts.DebitAccount post: "/v1/accounts/debit/{account.id}" body: "*" + - selector: litrpc.Accounts.AccountPayments + get: "/v1/accounts/payments" diff --git a/litrpc/lit-accounts_grpc.pb.go b/litrpc/lit-accounts_grpc.pb.go index 7b6e72eb..7e00dd3e 100644 --- a/litrpc/lit-accounts_grpc.pb.go +++ b/litrpc/lit-accounts_grpc.pb.go @@ -52,6 +52,9 @@ type AccountsClient interface { // litcli: `accounts remove` // RemoveAccount removes the given account from the account database. RemoveAccount(ctx context.Context, in *RemoveAccountRequest, opts ...grpc.CallOption) (*RemoveAccountResponse, error) + // litcli: `accounts payments` + // AccountPayments returns the detailed payment history for the given account. + AccountPayments(ctx context.Context, in *AccountPaymentsRequest, opts ...grpc.CallOption) (*AccountPaymentsResponse, error) } type accountsClient struct { @@ -125,6 +128,15 @@ func (c *accountsClient) RemoveAccount(ctx context.Context, in *RemoveAccountReq return out, nil } +func (c *accountsClient) AccountPayments(ctx context.Context, in *AccountPaymentsRequest, opts ...grpc.CallOption) (*AccountPaymentsResponse, error) { + out := new(AccountPaymentsResponse) + err := c.cc.Invoke(ctx, "/litrpc.Accounts/AccountPayments", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // AccountsServer is the server API for Accounts service. // All implementations must embed UnimplementedAccountsServer // for forward compatibility @@ -163,6 +175,9 @@ type AccountsServer interface { // litcli: `accounts remove` // RemoveAccount removes the given account from the account database. RemoveAccount(context.Context, *RemoveAccountRequest) (*RemoveAccountResponse, error) + // litcli: `accounts payments` + // AccountPayments returns the detailed payment history for the given account. + AccountPayments(context.Context, *AccountPaymentsRequest) (*AccountPaymentsResponse, error) mustEmbedUnimplementedAccountsServer() } @@ -191,6 +206,9 @@ func (UnimplementedAccountsServer) AccountInfo(context.Context, *AccountInfoRequ func (UnimplementedAccountsServer) RemoveAccount(context.Context, *RemoveAccountRequest) (*RemoveAccountResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RemoveAccount not implemented") } +func (UnimplementedAccountsServer) AccountPayments(context.Context, *AccountPaymentsRequest) (*AccountPaymentsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AccountPayments not implemented") +} func (UnimplementedAccountsServer) mustEmbedUnimplementedAccountsServer() {} // UnsafeAccountsServer may be embedded to opt out of forward compatibility for this service. @@ -330,6 +348,24 @@ func _Accounts_RemoveAccount_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _Accounts_AccountPayments_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AccountPaymentsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AccountsServer).AccountPayments(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/litrpc.Accounts/AccountPayments", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AccountsServer).AccountPayments(ctx, req.(*AccountPaymentsRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Accounts_ServiceDesc is the grpc.ServiceDesc for Accounts service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -365,6 +401,10 @@ var Accounts_ServiceDesc = grpc.ServiceDesc{ MethodName: "RemoveAccount", Handler: _Accounts_RemoveAccount_Handler, }, + { + MethodName: "AccountPayments", + Handler: _Accounts_AccountPayments_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "lit-accounts.proto", diff --git a/proto/lit-accounts.proto b/proto/lit-accounts.proto index 3ab21cc2..aab1c126 100644 --- a/proto/lit-accounts.proto +++ b/proto/lit-accounts.proto @@ -2,6 +2,8 @@ syntax = "proto3"; package litrpc; +import "lnd.proto"; + option go_package = "github.com/lightninglabs/lightning-terminal/litrpc"; service Accounts { @@ -52,6 +54,12 @@ service Accounts { RemoveAccount removes the given account from the account database. */ rpc RemoveAccount (RemoveAccountRequest) returns (RemoveAccountResponse); + + /* litcli: `accounts payments` + AccountPayments returns the detailed payment history for the given account. + */ + rpc AccountPayments (AccountPaymentsRequest) + returns (AccountPaymentsResponse); } message CreateAccountRequest { @@ -244,4 +252,55 @@ message AccountIdentifier { // The label of the account. string label = 2; } +} + +message AccountPaymentsRequest { + /* + The identifier of the account to query payments for. + */ + AccountIdentifier account = 1; + + /* + The maximum number of payments to return. If set to 0, it will default + to 20. Capped at 50. + */ + uint64 max_payments = 2 [jstype = JS_STRING]; + + /* + The row offset into the list of payments that will be used as the start of + the query. The payments are returned in ascending lexicographical order of + their payment hash. + */ + uint64 index_offset = 3 [jstype = JS_STRING]; + + /* + If set, the total number of payments matching the query will be returned + in the response. + */ + bool count_total_payments = 4; +} + +message AccountPaymentsResponse { + /* + The detailed payments associated with the account, sorted in ascending + lexicographical order of their payment hash. + */ + repeated lnrpc.Payment payments = 1; + + /* + The row offset of the first payment returned. + */ + uint64 first_index_offset = 2 [jstype = JS_STRING]; + + /* + The row offset of the last payment returned. This can be used as the + index_offset in a subsequent query to paginate forwards. + */ + uint64 last_index_offset = 3 [jstype = JS_STRING]; + + /* + The total number of payments matching the query (only set if + count_total_payments was true in the request). + */ + uint64 total_num_payments = 4 [jstype = JS_STRING]; } \ No newline at end of file From a132fca1ba3e07e0f73faf8d1d104275938fae33 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Thu, 28 May 2026 17:29:12 -0500 Subject: [PATCH 39/69] db/sqlc: add queries for account payments Add SQL queries to select account payments with pagination (limit and offset), and a query to count the total payments for a given account. --- db/sqlc/accounts.sql.go | 55 ++++++++++++++++++++++++++++++++++++ db/sqlc/querier.go | 2 ++ db/sqlc/queries/accounts.sql | 12 ++++++++ 3 files changed, 69 insertions(+) diff --git a/db/sqlc/accounts.sql.go b/db/sqlc/accounts.sql.go index 6322e709..7b399fc6 100644 --- a/db/sqlc/accounts.sql.go +++ b/db/sqlc/accounts.sql.go @@ -11,6 +11,48 @@ import ( "time" ) +const accountPaymentsPaginated = `-- name: AccountPaymentsPaginated :many +SELECT account_id, hash, status, full_amount_msat +FROM account_payments +WHERE account_id = $1 +ORDER BY hash ASC +LIMIT $2 OFFSET $3 +` + +type AccountPaymentsPaginatedParams struct { + AccountID int64 + Limit int32 + Offset int32 +} + +func (q *Queries) AccountPaymentsPaginated(ctx context.Context, arg AccountPaymentsPaginatedParams) ([]AccountPayment, error) { + rows, err := q.db.QueryContext(ctx, accountPaymentsPaginated, arg.AccountID, arg.Limit, arg.Offset) + if err != nil { + return nil, err + } + defer rows.Close() + var items []AccountPayment + for rows.Next() { + var i AccountPayment + if err := rows.Scan( + &i.AccountID, + &i.Hash, + &i.Status, + &i.FullAmountMsat, + ); err != nil { + return nil, err + } + items = append(items, i) + } + if err := rows.Close(); err != nil { + return nil, err + } + if err := rows.Err(); err != nil { + return nil, err + } + return items, nil +} + const addAccountInvoice = `-- name: AddAccountInvoice :exec INSERT INTO account_invoices (account_id, hash) VALUES ($1, $2) @@ -26,6 +68,19 @@ func (q *Queries) AddAccountInvoice(ctx context.Context, arg AddAccountInvoicePa return err } +const countAccountPayments = `-- name: CountAccountPayments :one +SELECT COUNT(*) +FROM account_payments +WHERE account_id = $1 +` + +func (q *Queries) CountAccountPayments(ctx context.Context, accountID int64) (int64, error) { + row := q.db.QueryRowContext(ctx, countAccountPayments, accountID) + var count int64 + err := row.Scan(&count) + return count, err +} + const deleteAccount = `-- name: DeleteAccount :exec DELETE FROM accounts WHERE id = $1 diff --git a/db/sqlc/querier.go b/db/sqlc/querier.go index 4b32259f..96cea34b 100644 --- a/db/sqlc/querier.go +++ b/db/sqlc/querier.go @@ -10,7 +10,9 @@ import ( ) type Querier interface { + AccountPaymentsPaginated(ctx context.Context, arg AccountPaymentsPaginatedParams) ([]AccountPayment, error) AddAccountInvoice(ctx context.Context, arg AddAccountInvoiceParams) error + CountAccountPayments(ctx context.Context, accountID int64) (int64, error) DeleteAccount(ctx context.Context, id int64) error DeleteAccountPayment(ctx context.Context, arg DeleteAccountPaymentParams) error DeleteAllTempKVStores(ctx context.Context) error diff --git a/db/sqlc/queries/accounts.sql b/db/sqlc/queries/accounts.sql index 4fff012a..416b74d7 100644 --- a/db/sqlc/queries/accounts.sql +++ b/db/sqlc/queries/accounts.sql @@ -80,6 +80,18 @@ WHERE account_id = $1; SELECT * FROM account_payments; +-- name: AccountPaymentsPaginated :many +SELECT * +FROM account_payments +WHERE account_id = $1 +ORDER BY hash ASC +LIMIT $2 OFFSET $3; + +-- name: CountAccountPayments :one +SELECT COUNT(*) +FROM account_payments +WHERE account_id = $1; + -- name: ListAccountInvoices :many SELECT * FROM account_invoices From 5632998030a2f558dd630d4206b30109d5b7da7d Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Tue, 7 Jul 2026 11:21:54 -0500 Subject: [PATCH 40/69] accounts: implement ListAccountPayments in SQLStore Add sqlc queries to select account payment hashes from the database. Implement the ListAccountPayments method in the SQLStore, allowing retrieval of stored payment hashes for SQLite and Postgres backends. Also define the AccountPaymentEntry helper struct in accounts/interface.go to wrap payment hashes and details. --- accounts/interface.go | 6 ++++ accounts/store_sql.go | 76 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/accounts/interface.go b/accounts/interface.go index 709f40ec..85486662 100644 --- a/accounts/interface.go +++ b/accounts/interface.go @@ -107,6 +107,12 @@ type AccountInvoices map[lntypes.Hash]struct{} // AccountPayments is the set of payments that are associated with an account. type AccountPayments map[lntypes.Hash]*PaymentEntry +// AccountPaymentEntry wraps a payment hash with its entry details. +type AccountPaymentEntry struct { + Hash lntypes.Hash + *PaymentEntry +} + // OffChainBalanceAccount holds all information that is needed to keep track of // a user's off-chain account balance. This balance can only be spent by paying // invoices. diff --git a/accounts/store_sql.go b/accounts/store_sql.go index 61780c12..277aaf76 100644 --- a/accounts/store_sql.go +++ b/accounts/store_sql.go @@ -46,6 +46,8 @@ type SQLQueries interface { ListAllAccountPayments(ctx context.Context) ([]sqlc.AccountPayment, error) ListAccountInvoices(ctx context.Context, id int64) ([]sqlc.AccountInvoice, error) ListAccountPayments(ctx context.Context, id int64) ([]sqlc.AccountPayment, error) + AccountPaymentsPaginated(ctx context.Context, arg sqlc.AccountPaymentsPaginatedParams) ([]sqlc.AccountPayment, error) + CountAccountPayments(ctx context.Context, accountID int64) (int64, error) ListAllAccounts(ctx context.Context) ([]sqlc.Account, error) SetAccountIndex(ctx context.Context, arg sqlc.SetAccountIndexParams) error UpdateAccountBalance(ctx context.Context, arg sqlc.UpdateAccountBalanceParams) (int64, error) @@ -779,6 +781,80 @@ func (s *SQLStore) DeleteAccountPayment(ctx context.Context, alias AccountID, }, sqldb.NoOpReset) } +// ListAccountPayments returns a paginated list of payments +// associated with the given account, sorted in ascending lexicographical +// order of their payment hash. +func (s *SQLStore) ListAccountPayments(ctx context.Context, alias AccountID, + offset, limit int32) ([]*AccountPaymentEntry, error) { + + var ( + readTxOpts = db.NewQueryReadTx() + payments []*AccountPaymentEntry + ) + err := s.db.ExecTx(ctx, &readTxOpts, func(db SQLQueries) error { + id, err := getAccountIDByAlias(ctx, db, alias) + if err != nil { + return err + } + + var dbPayments []sqlc.AccountPayment + dbPayments, err = db.AccountPaymentsPaginated( + ctx, sqlc.AccountPaymentsPaginatedParams{ + AccountID: id, + Limit: limit, + Offset: offset, + }, + ) + if err != nil { + return err + } + + payments = make([]*AccountPaymentEntry, len(dbPayments)) + for i, p := range dbPayments { + var hash lntypes.Hash + copy(hash[:], p.Hash) + payments[i] = &AccountPaymentEntry{ + Hash: hash, + PaymentEntry: &PaymentEntry{ + Status: lnrpc.Payment_PaymentStatus( + p.Status, + ), + FullAmount: lnwire.MilliSatoshi( + p.FullAmountMsat, + ), + }, + } + } + + return nil + }, sqldb.NoOpReset) + + return payments, err +} + +// CountAccountPayments returns the total number of payments associated with +// the given account. +func (s *SQLStore) CountAccountPayments(ctx context.Context, + alias AccountID) (uint64, error) { + + var ( + readTxOpts = db.NewQueryReadTx() + count int64 + ) + err := s.db.ExecTx(ctx, &readTxOpts, func(db SQLQueries) error { + id, err := getAccountIDByAlias(ctx, db, alias) + if err != nil { + return err + } + + count, err = db.CountAccountPayments(ctx, id) + + return err + }, sqldb.NoOpReset) + + return uint64(count), err +} + // LastIndexes returns the last invoice add and settle index or // ErrNoInvoiceIndexKnown if no indexes are known yet. // From 857fb900fda9811c83372c47c0ea76c5dd576036 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Tue, 7 Jul 2026 11:21:57 -0500 Subject: [PATCH 41/69] accounts: implement ListAccountPayments in BoltStore Implement ListAccountPayments in the Bolt-based kvdb account store. The retrieved account payments are sorted in ascending lexicographical order of their payment hash. --- accounts/store_kvdb.go | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/accounts/store_kvdb.go b/accounts/store_kvdb.go index eeb3168d..4a1c62c1 100644 --- a/accounts/store_kvdb.go +++ b/accounts/store_kvdb.go @@ -9,6 +9,7 @@ import ( "math" "os" "path/filepath" + "sort" "time" "github.com/btcsuite/btcwallet/walletdb" @@ -445,6 +446,60 @@ func (s *BoltStore) DeleteAccountPayment(_ context.Context, id AccountID, return s.updateAccount(id, update) } +// ListAccountPayments returns a paginated list of payments +// associated with the given account, sorted in ascending lexicographical +// order of their payment hash. +func (s *BoltStore) ListAccountPayments(ctx context.Context, id AccountID, + offset, limit int32) ([]*AccountPaymentEntry, error) { + + account, err := s.Account(ctx, id) + if err != nil { + return nil, err + } + + var matchedPayments []*AccountPaymentEntry + for hash, entry := range account.Payments { + matchedPayments = append(matchedPayments, &AccountPaymentEntry{ + Hash: hash, + PaymentEntry: entry, + }) + } + + // Sort target hashes lexicographically to ensure pagination is + // deterministic across all store backends. + sort.Slice(matchedPayments, func(i, j int) bool { + hashI := matchedPayments[i].Hash[:] + hashJ := matchedPayments[j].Hash[:] + return bytes.Compare(hashI, hashJ) < 0 + }) + + // Apply pagination limits and offsets. + total := int32(len(matchedPayments)) + if offset >= total { + return nil, nil + } + + end := offset + limit + if limit < 0 || end > total { + end = total + } + + return matchedPayments[offset:end], nil +} + +// CountAccountPayments returns the total number of payments associated with +// the given account. +func (s *BoltStore) CountAccountPayments(ctx context.Context, + id AccountID) (uint64, error) { + + account, err := s.Account(ctx, id) + if err != nil { + return 0, err + } + + return uint64(len(account.Payments)), nil +} + func (s *BoltStore) updateAccount(id AccountID, updateFn func(*OffChainBalanceAccount) error) error { From 009a5c28bc7c3a4744f97cc2a6dab190bf496d68 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Tue, 7 Jul 2026 11:22:14 -0500 Subject: [PATCH 42/69] accounts: add payment methods to Store interface Introduce the ListAccountPayments and CountAccountPayments methods to the accounts Store interface. ListAccountPayments enables retrieval of a paginated list of payment entries associated with a given account ID, supporting offset and limit. CountAccountPayments returns the total number of payments associated with the account. --- accounts/interface.go | 10 ++++++ accounts/store_test.go | 74 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/accounts/interface.go b/accounts/interface.go index 85486662..f78a66f7 100644 --- a/accounts/interface.go +++ b/accounts/interface.go @@ -285,6 +285,16 @@ type Store interface { DeleteAccountPayment(_ context.Context, id AccountID, hash lntypes.Hash) error + // ListAccountPayments returns a paginated list of payments + // associated with the given account, sorted in ascending + // lexicographical order of their payment hash. + ListAccountPayments(ctx context.Context, id AccountID, offset, + limit int32) ([]*AccountPaymentEntry, error) + + // CountAccountPayments returns the total number of payments associated + // with the given account. + CountAccountPayments(ctx context.Context, id AccountID) (uint64, error) + // RemoveAccount finds an account by its ID and removes it from the¨ // store. RemoveAccount(ctx context.Context, id AccountID) error diff --git a/accounts/store_test.go b/accounts/store_test.go index c3610093..100f5801 100644 --- a/accounts/store_test.go +++ b/accounts/store_test.go @@ -906,3 +906,77 @@ func TestCheckLabel(t *testing.T) { }) } } + +// TestListAccountPayments tests listing and counting payment entries associated +// with a given account. +func TestListAccountPayments(t *testing.T) { + t.Parallel() + ctx := context.Background() + + store := NewTestDB(t, clock.NewTestClock(time.Now())) + + // Listing payments for non-existent account should fail. + _, err := store.ListAccountPayments( + ctx, AccountID{}, 0, 0, + ) + require.ErrorIs(t, err, ErrAccNotFound) + + acct, err := store.NewAccount( + ctx, 10000, time.Time{}, "payment-list", + ) + require.NoError(t, err) + + // Initially, there should be no payments. + payments, err := store.ListAccountPayments( + ctx, acct.ID, 0, 0, + ) + require.NoError(t, err) + require.Empty(t, payments) + + count, err := store.CountAccountPayments(ctx, acct.ID) + require.NoError(t, err) + require.Zero(t, count) + + // Add 3 payments. + hash1 := lntypes.Hash{1} + hash2 := lntypes.Hash{2} + hash3 := lntypes.Hash{3} + + _, err = store.UpsertAccountPayment( + ctx, acct.ID, hash1, 100, lnrpc.Payment_IN_FLIGHT, + ) + require.NoError(t, err) + + _, err = store.UpsertAccountPayment( + ctx, acct.ID, hash2, 200, lnrpc.Payment_SUCCEEDED, + ) + require.NoError(t, err) + + _, err = store.UpsertAccountPayment( + ctx, acct.ID, hash3, 300, lnrpc.Payment_FAILED, + ) + require.NoError(t, err) + + // Test counting all payments. + count, err = store.CountAccountPayments(ctx, acct.ID) + require.NoError(t, err) + require.EqualValues(t, 3, count) + + // List all payments in default order (ascending by hash). + payments, err = store.ListAccountPayments( + ctx, acct.ID, 0, 3, + ) + require.NoError(t, err) + require.Len(t, payments, 3) + require.Equal(t, hash1, payments[0].Hash) + require.Equal(t, hash2, payments[1].Hash) + require.Equal(t, hash3, payments[2].Hash) + + // Test offset and limit. + payments, err = store.ListAccountPayments( + ctx, acct.ID, 1, 1, + ) + require.NoError(t, err) + require.Len(t, payments, 1) + require.Equal(t, hash2, payments[0].Hash) +} From d553cb28d748e288951e243415b25a58a4f32897 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Thu, 28 May 2026 17:29:12 -0500 Subject: [PATCH 43/69] accounts: implement AccountPayments RPC handler Implement the AccountPayments handler on the Accounts RPC server. The handler resolves accounts by ID or label, loads its payment hashes, applies pagination constraints, and fetches complete payment details concurrently from LND's TrackPaymentV2. It also returns pagination metadata including the total count of payments. --- accounts/rpcserver.go | 245 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) diff --git a/accounts/rpcserver.go b/accounts/rpcserver.go index 3aa8c152..0fc92c15 100644 --- a/accounts/rpcserver.go +++ b/accounts/rpcserver.go @@ -5,18 +5,43 @@ import ( "encoding/hex" "errors" "fmt" + "sync" "time" "github.com/btcsuite/btcd/btcutil" "github.com/lightninglabs/lightning-terminal/litrpc" litmac "github.com/lightninglabs/lightning-terminal/macaroons" + "github.com/lightningnetwork/lnd/lnrpc" + "github.com/lightningnetwork/lnd/lnrpc/routerrpc" "github.com/lightningnetwork/lnd/lntypes" "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/macaroons" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "gopkg.in/macaroon-bakery.v2/bakery/checkers" "gopkg.in/macaroon.v2" ) +const ( + // DefaultMaxPayments is the default page size for listing payments. + DefaultMaxPayments = 20 + + // MaxPaymentsLimit is the maximum page size allowed for listing + // payments. + MaxPaymentsLimit = 50 + + // MaxIndexOffset is the maximum index offset allowed. + MaxIndexOffset = 0x7fffffff + + // DefaultTrackPaymentTimeout is the timeout for track payment RPC + // calls. + DefaultTrackPaymentTimeout = 8 * time.Second + + // MaxConcurrentTrackPayments is the maximum number of concurrent track + // payment requests. + MaxConcurrentTrackPayments = 10 +) + var ( // ErrServerNotActive indicates that the server has started but hasn't // fully finished the startup process. @@ -371,3 +396,223 @@ func marshalAccount(acct *OffChainBalanceAccount) *litrpc.Account { return rpcAccount } + +// AccountPayments returns the detailed payment history for the given account. +func (s *RPCServer) AccountPayments(ctx context.Context, + req *litrpc.AccountPaymentsRequest) ( + *litrpc.AccountPaymentsResponse, error) { + + if req.GetAccount() == nil { + return nil, fmt.Errorf("account param must be specified") + } + + var id, label string + switch idType := req.Account.Identifier.(type) { + case *litrpc.AccountIdentifier_Id: + id = idType.Id + case *litrpc.AccountIdentifier_Label: + label = idType.Label + } + + log.Infof("[accountpayments] id=%s, label=%v, max_payments=%d, "+ + "index_offset=%d, count_total_payments=%v", + id, label, req.MaxPayments, req.IndexOffset, + req.CountTotalPayments) + + accountID, err := s.findAccount(ctx, id, label) + if err != nil { + return nil, err + } + + // Determine limits. + limit := req.MaxPayments + if limit == 0 { + limit = DefaultMaxPayments + } else if limit > MaxPaymentsLimit { + return nil, fmt.Errorf( + "max_payments cannot exceed %d", MaxPaymentsLimit, + ) + } + + if req.IndexOffset > MaxIndexOffset { + return nil, fmt.Errorf("index_offset out of range") + } + offset := req.IndexOffset + + // Fetch the paginated payment entries from the store. + paymentsFromStore, err := s.service.store.ListAccountPayments( + ctx, accountID, int32(offset), int32(limit), + ) + if err != nil { + return nil, fmt.Errorf( + "unable to list account payments: %w", err, + ) + } + + // Fetch total payment count if requested. + var totalNumPayments uint64 + if req.CountTotalPayments { + total, err := s.service.store.CountAccountPayments( + ctx, accountID, + ) + if err != nil { + return nil, fmt.Errorf( + "unable to count account payments: %w", err, + ) + } + + totalNumPayments = total + } + + // Fetch the detailed payments concurrently from LND. + var ( + wg sync.WaitGroup + mu sync.Mutex + payments = make(map[lntypes.Hash]*lnrpc.Payment) + errs []error + sem = make(chan struct{}, MaxConcurrentTrackPayments) + ) + + rawCtx, _, client := s.service.routerClient.RawClientWithMacAuth(ctx) + + for _, entry := range paymentsFromStore { + entry := entry + + wg.Add(1) + go func() { + defer wg.Done() + + // Bounded concurrency using semaphore. + select { + case sem <- struct{}{}: + case <-rawCtx.Done(): + return + } + defer func() { <-sem }() + + // Add a timeout to prevent hanging streaming calls. + trackCtx, trackCancel := context.WithTimeout( + rawCtx, DefaultTrackPaymentTimeout, + ) + defer trackCancel() + + stream, err := client.TrackPaymentV2( + trackCtx, &routerrpc.TrackPaymentRequest{ + PaymentHash: entry.Hash[:], + NoInflightUpdates: false, + }, + ) + if err != nil { + // Skip error logging and recording if the + // parent context was cancelled or timed out. + if rawCtx.Err() != nil { + return + } + + sErr, ok := status.FromError(err) + if ok && sErr.Code() == codes.NotFound { + log.Warnf("Payment %x not found in "+ + "lnd, creating placeholder: %v", + entry.Hash[:], err) + + mu.Lock() + payments[entry.Hash] = + notFoundPayment(entry.Hash) + mu.Unlock() + + return + } + + log.Errorf("Failed to track payment %x: %v", + entry.Hash[:], err) + + mu.Lock() + errs = append(errs, err) + mu.Unlock() + + return + } + + payment, err := stream.Recv() + if err != nil { + // Skip error logging and recording if the + // parent context was cancelled or timed out. + if rawCtx.Err() != nil { + return + } + + sErr, ok := status.FromError(err) + if ok && sErr.Code() == codes.NotFound { + log.Warnf("Payment %x not found in "+ + "lnd, creating placeholder: %v", + entry.Hash[:], err) + + mu.Lock() + payments[entry.Hash] = + notFoundPayment(entry.Hash) + mu.Unlock() + + return + } + + log.Errorf("Failed to receive payment "+ + "update for %x: %v", entry.Hash[:], err) + + mu.Lock() + errs = append(errs, err) + mu.Unlock() + + return + } + + mu.Lock() + payments[entry.Hash] = payment + mu.Unlock() + }() + } + + wg.Wait() + + // Return immediately if the parent context was cancelled or timed out. + if err := rawCtx.Err(); err != nil { + return nil, err + } + + // If there were any errors tracking the payments, return the + // error. + if len(errs) > 0 { + return nil, fmt.Errorf( + "failed to fetch payment details: %w", errs[0], + ) + } + + var finalPayments []*lnrpc.Payment + for _, entry := range paymentsFromStore { + if p, ok := payments[entry.Hash]; ok { + finalPayments = append(finalPayments, p) + } + } + + var firstIndexOffset, lastIndexOffset uint64 + if len(finalPayments) > 0 { + firstIndexOffset = offset + lastIndexOffset = offset + uint64(len(finalPayments)) + } + + return &litrpc.AccountPaymentsResponse{ + Payments: finalPayments, + FirstIndexOffset: firstIndexOffset, + LastIndexOffset: lastIndexOffset, + TotalNumPayments: totalNumPayments, + }, nil +} + +// notFoundPayment creates a placeholder payment for a desynced entry. +func notFoundPayment(hash lntypes.Hash) *lnrpc.Payment { + return &lnrpc.Payment{ + PaymentHash: hex.EncodeToString(hash[:]), + Status: lnrpc.Payment_UNKNOWN, + FailureReason: lnrpc. + PaymentFailureReason_FAILURE_REASON_NONE, + } +} From 6754acc17b0a782e8957034a334ba3802f99b59b Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Thu, 28 May 2026 17:29:12 -0500 Subject: [PATCH 44/69] litcli: add payments command to accounts Introduce the 'payments' subcommand under 'litcli accounts' to query account payment history. Supports parameters for offset, page size limits, and counting of total payments. --- cmd/litcli/accounts.go | 82 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/cmd/litcli/accounts.go b/cmd/litcli/accounts.go index a67ece85..e06ed1f3 100644 --- a/cmd/litcli/accounts.go +++ b/cmd/litcli/accounts.go @@ -30,6 +30,7 @@ var accountsCommands = []cli.Command{ listAccountsCommand, accountInfoCommand, removeAccountCommand, + accountPaymentsCommand, }, Description: "Manage accounts.", }, @@ -541,3 +542,84 @@ func parseIDOrLabel(ctx *cli.Context) (string, string, cli.Args, error) { return accountID, label, args, nil } + +var accountPaymentsCommand = cli.Command{ + Name: "payments", + ShortName: "p", + Usage: "Show detailed payment history for a single " + + "off-chain account.", + ArgsUsage: "[id | label]", + Description: "Returns the detailed payment history for an " + + "account by fetching their stored hashes and querying " + + "LND. The results are returned paginated and " + + "sorted in ascending lexicographical order of their " + + "payment hash.", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: idName, + Usage: "The ID of the account.", + }, + cli.StringFlag{ + Name: labelName, + Usage: "(optional) The unique label of the account.", + }, + cli.Uint64Flag{ + Name: "max_payments", + Usage: fmt.Sprintf("The maximum number of payments to "+ + "return. The default value is %d and "+ + "the maximum is %d.", + accounts.DefaultMaxPayments, + accounts.MaxPaymentsLimit), + Value: accounts.DefaultMaxPayments, + }, + cli.Uint64Flag{ + Name: "index_offset", + Usage: "The row offset into the list of payments " + + "that will be used as the start of the " + + "query.", + }, + cli.BoolFlag{ + Name: "count_total_payments", + Usage: "If true, the total number of payments " + + "matching the query will be returned.", + }, + }, + Action: accountPayments, +} + +func accountPayments(cli *cli.Context) error { + ctx := getContext() + clientConn, cleanup, err := connectClient(cli, false) + if err != nil { + return err + } + defer cleanup() + client := litrpc.NewAccountsClient(clientConn) + + account, _, err := parseAccountIdentifier(cli) + if err != nil { + return err + } + + maxPayments := cli.Uint64("max_payments") + if maxPayments > accounts.MaxPaymentsLimit { + return fmt.Errorf( + "max_payments cannot exceed %d", + accounts.MaxPaymentsLimit, + ) + } + + req := &litrpc.AccountPaymentsRequest{ + Account: account, + MaxPayments: maxPayments, + IndexOffset: cli.Uint64("index_offset"), + CountTotalPayments: cli.Bool("count_total_payments"), + } + resp, err := client.AccountPayments(ctx, req) + if err != nil { + return err + } + + printRespJSON(resp) + return nil +} From 1abbbe649c36f99eb4967c22267b8fdf7527a567 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Thu, 28 May 2026 17:29:12 -0500 Subject: [PATCH 45/69] perms: add permissions for AccountPayments Register the /litrpc.Accounts/AccountPayments RPC endpoint in the RequiredPermissions map, requiring read access on the account entity. --- perms/permissions.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/perms/permissions.go b/perms/permissions.go index e2f2f8e0..a93289ea 100644 --- a/perms/permissions.go +++ b/perms/permissions.go @@ -44,6 +44,10 @@ var ( Entity: "account", Action: "read", }}, + "/litrpc.Accounts/AccountPayments": {{ + Entity: "account", + Action: "read", + }}, "/litrpc.Accounts/RemoveAccount": {{ Entity: "account", Action: "write", From 0977e375d6add90dd0de3ce1f39de891eddebb0f Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Thu, 28 May 2026 17:29:12 -0500 Subject: [PATCH 46/69] itest: add integration tests for AccountPayments Add integration tests inside itest/litd_accounts_test.go to verify retrieval of account payments against a running LND node, validating correct responses for ID/label lookup, offsets, pagination limits, and counting of total payments. --- itest/litd_accounts_test.go | 304 +++++++++++++++++++++++++++++++++++- 1 file changed, 303 insertions(+), 1 deletion(-) diff --git a/itest/litd_accounts_test.go b/itest/litd_accounts_test.go index 9fa8d55a..a578f214 100644 --- a/itest/litd_accounts_test.go +++ b/itest/litd_accounts_test.go @@ -2,8 +2,11 @@ package itest import ( "context" + "crypto/rand" + "encoding/hex" "fmt" "os" + "sort" "strings" "testing" "time" @@ -14,8 +17,10 @@ import ( "github.com/lightninglabs/taproot-assets/rpcutils" "github.com/lightninglabs/taproot-assets/taprpc/tapchannelrpc" "github.com/lightningnetwork/lnd/lnrpc" + "github.com/lightningnetwork/lnd/lnrpc/invoicesrpc" "github.com/lightningnetwork/lnd/lnrpc/routerrpc" "github.com/lightningnetwork/lnd/lntest" + "github.com/lightningnetwork/lnd/lntypes" "github.com/stretchr/testify/require" "google.golang.org/grpc" ) @@ -164,6 +169,225 @@ func runAccountSystemTest(t *harnessTest, node *HarnessNode, hostPort, ctxa, t, rawConn, charlie, acctBalance, ) + // Initiate a HODL payment (which remains IN_FLIGHT) and a FAILED + // payment to verify that the AccountPayments RPC correctly retrieves + // and reports payments across all potential lifecycles (SUCCEEDED, + // IN_FLIGHT, FAILED). + testCtx, testCancel := context.WithTimeout(ctxb, defaultTimeout) + defer testCancel() + + routerClient := routerrpc.NewRouterClient(rawConn) + + // 1. Initiate HODL payment (IN_FLIGHT) + var preimage lntypes.Preimage + _, err = rand.Read(preimage[:]) + require.NoError(t.t, err) + holdHash := preimage.Hash() + + holdInv, err := charlie.AddHoldInvoice( + testCtx, &invoicesrpc.AddHoldInvoiceRequest{ + Hash: holdHash[:], + Value: 2222, + }, + ) + require.NoError(t.t, err) + + sendReqHold := &routerrpc.SendPaymentRequest{ + PaymentRequest: holdInv.PaymentRequest, + TimeoutSeconds: 2, + FeeLimitMsat: 1000, + } + holdStream, err := routerClient.SendPaymentV2(ctxa, sendReqHold) + require.NoError(t.t, err) + + holdPayment, err := getPaymentResult(holdStream, true) + require.NoError(t.t, err) + require.Equal(t.t, lnrpc.Payment_IN_FLIGHT, holdPayment.Status) + + // Wait for the hold invoice to be accepted by Charlie. + require.Eventually(t.t, func() bool { + inv, err := charlie.LookupInvoice( + testCtx, &lnrpc.PaymentHash{ + RHash: holdHash[:], + }, + ) + + return err == nil && + inv.State == lnrpc.Invoice_ACCEPTED + }, defaultTimeout, 100*time.Millisecond) + + // 2. Initiate a FAILED payment + var failedHash lntypes.Hash + _, err = rand.Read(failedHash[:]) + require.NoError(t.t, err) + + var fakePubKey [33]byte + fakePubKey[0] = 0x02 + sendReqFailed := &routerrpc.SendPaymentRequest{ + Dest: fakePubKey[:], + Amt: 1111, + PaymentHash: failedHash[:], + TimeoutSeconds: 2, + FeeLimitMsat: 1000, + } + failedStream, err := routerClient.SendPaymentV2(ctxa, sendReqFailed) + require.NoError(t.t, err) + + failedPayment, err := getPaymentResult(failedStream, false) + require.NoError(t.t, err) + require.Equal(t.t, lnrpc.Payment_FAILED, failedPayment.Status) + + // Test AccountPayments RPC with all 3 payments (succeeded, + // in-flight, failed). + paymentsResp, err := acctClient.AccountPayments( + ctxm, &litrpc.AccountPaymentsRequest{ + Account: &litrpc.AccountIdentifier{ + Identifier: &litrpc.AccountIdentifier_Id{ + Id: acctResp.Account.Id, + }, + }, + CountTotalPayments: true, + }, + ) + require.NoError(t.t, err) + require.Len(t.t, paymentsResp.Payments, 3) + + // Sort the payments by value descending to ensure index-based + // assertions are deterministic regardless of database sorting by hash. + sort.Slice(paymentsResp.Payments, func(i, j int) bool { + valI := paymentsResp.Payments[i].ValueSat + valJ := paymentsResp.Payments[j].ValueSat + + return valI > valJ + }) + + // Check the succeeded payment. This corresponds to the 4444 sat + // payment initiated earlier in testAccountRestrictions using this + // account. + require.Equal( + t.t, uint64(4444), + uint64(paymentsResp.Payments[0].ValueSat), + ) + require.Equal( + t.t, lnrpc.Payment_SUCCEEDED, + paymentsResp.Payments[0].Status, + ) + + // Check In-flight payment + require.Equal( + t.t, uint64(2222), + uint64(paymentsResp.Payments[1].ValueSat), + ) + require.Equal( + t.t, lnrpc.Payment_IN_FLIGHT, + paymentsResp.Payments[1].Status, + ) + + // Check Failed payment + require.Equal( + t.t, uint64(1111), + uint64(paymentsResp.Payments[2].ValueSat), + ) + require.Equal( + t.t, lnrpc.Payment_FAILED, + paymentsResp.Payments[2].Status, + ) + + require.EqualValues(t.t, 3, paymentsResp.TotalNumPayments) + require.EqualValues(t.t, 0, paymentsResp.FirstIndexOffset) + require.EqualValues(t.t, 3, paymentsResp.LastIndexOffset) + + // Query by label. + paymentsResp, err = acctClient.AccountPayments( + ctxm, &litrpc.AccountPaymentsRequest{ + Account: &litrpc.AccountIdentifier{ + Identifier: &litrpc.AccountIdentifier_Label{ + Label: acctLabel, + }, + }, + }, + ) + require.NoError(t.t, err) + require.Len(t.t, paymentsResp.Payments, 3) + + // Query with pagination limit. + paymentsResp, err = acctClient.AccountPayments( + ctxm, &litrpc.AccountPaymentsRequest{ + Account: &litrpc.AccountIdentifier{ + Identifier: &litrpc.AccountIdentifier_Id{ + Id: acctResp.Account.Id, + }, + }, + MaxPayments: 2, + }, + ) + require.NoError(t.t, err) + require.Len(t.t, paymentsResp.Payments, 2) + require.EqualValues(t.t, 0, paymentsResp.FirstIndexOffset) + require.EqualValues(t.t, 2, paymentsResp.LastIndexOffset) + + // Query with pagination offset out of bounds. + paymentsResp, err = acctClient.AccountPayments( + ctxm, &litrpc.AccountPaymentsRequest{ + Account: &litrpc.AccountIdentifier{ + Identifier: &litrpc.AccountIdentifier_Id{ + Id: acctResp.Account.Id, + }, + }, + IndexOffset: 3, + }, + ) + require.NoError(t.t, err) + require.Empty(t.t, paymentsResp.Payments) + require.EqualValues(t.t, 0, paymentsResp.FirstIndexOffset) + require.EqualValues(t.t, 0, paymentsResp.LastIndexOffset) + + // Query with pagination offset inside bounds, where the number of + // payments returned is fewer than MaxPayments. + paymentsResp, err = acctClient.AccountPayments( + ctxm, &litrpc.AccountPaymentsRequest{ + Account: &litrpc.AccountIdentifier{ + Identifier: &litrpc.AccountIdentifier_Id{ + Id: acctResp.Account.Id, + }, + }, + IndexOffset: 2, + MaxPayments: 2, + }, + ) + require.NoError(t.t, err) + require.Len(t.t, paymentsResp.Payments, 1) + require.EqualValues(t.t, 2, paymentsResp.FirstIndexOffset) + require.EqualValues(t.t, 3, paymentsResp.LastIndexOffset) + + // Query with invalid pagination max_payments (exceeding 50). + _, err = acctClient.AccountPayments( + ctxm, &litrpc.AccountPaymentsRequest{ + Account: &litrpc.AccountIdentifier{ + Identifier: &litrpc.AccountIdentifier_Id{ + Id: acctResp.Account.Id, + }, + }, + MaxPayments: 51, + }, + ) + require.Error(t.t, err) + require.Contains(t.t, err.Error(), "max_payments cannot exceed 50") + + // Query with invalid pagination index_offset (exceeding 31-bit int). + _, err = acctClient.AccountPayments( + ctxm, &litrpc.AccountPaymentsRequest{ + Account: &litrpc.AccountIdentifier{ + Identifier: &litrpc.AccountIdentifier_Id{ + Id: acctResp.Account.Id, + }, + }, + IndexOffset: 0x80000000, + }, + ) + require.Error(t.t, err) + require.Contains(t.t, err.Error(), "index_offset out of range") + // Test the same account restrictions with an LNC session that is bound // to the account. testAccountRestrictionsLNC( @@ -176,6 +400,84 @@ func runAccountSystemTest(t *harnessTest, node *HarnessNode, hostPort, ctxa, t, rawConn, charlie, newAcctBalance, ) + // Settle the HODL invoice to clean up node state. + _, err = charlie.SettleInvoice(testCtx, &invoicesrpc.SettleInvoiceMsg{ + Preimage: preimage[:], + }) + require.NoError(t.t, err) + + // Delete a single failed payment from LND to simulate a desync case + // where this payment exists in LiT's account database but is + // deleted/absent in LND. + _, err = node.LightningClient.DeletePayment( + testCtx, &lnrpc.DeletePaymentRequest{ + PaymentHash: failedHash[:], + }, + ) + require.NoError(t.t, err) + + // Now call AccountPayments. It should find all 3 payments in the local + // store, returning a placeholder entry with status Payment_UNKNOWN for + // the deleted payment that was not found in LND. + paymentsResp, err = acctClient.AccountPayments( + ctxm, &litrpc.AccountPaymentsRequest{ + Account: &litrpc.AccountIdentifier{ + Identifier: &litrpc.AccountIdentifier_Id{ + Id: acctResp.Account.Id, + }, + }, + CountTotalPayments: true, + }, + ) + require.NoError(t.t, err) + require.Len(t.t, paymentsResp.Payments, 3) + + // Sort the payments by value descending to ensure index-based + // assertions are deterministic regardless of database sorting by hash. + sort.Slice(paymentsResp.Payments, func(i, j int) bool { + valI := paymentsResp.Payments[i].ValueSat + valJ := paymentsResp.Payments[j].ValueSat + + return valI > valJ + }) + + // Succeeded payment + require.Equal( + t.t, uint64(4444), + uint64(paymentsResp.Payments[0].ValueSat), + ) + require.Equal( + t.t, lnrpc.Payment_SUCCEEDED, + paymentsResp.Payments[0].Status, + ) + + // Settled hold payment + require.Equal( + t.t, uint64(2222), + uint64(paymentsResp.Payments[1].ValueSat), + ) + require.Equal( + t.t, lnrpc.Payment_SUCCEEDED, + paymentsResp.Payments[1].Status, + ) + + // Placeholder payment for the desynced/deleted payment + require.Equal( + t.t, hex.EncodeToString(failedHash[:]), + paymentsResp.Payments[2].PaymentHash, + ) + require.Equal( + t.t, lnrpc.Payment_UNKNOWN, + paymentsResp.Payments[2].Status, + ) + require.Equal( + t.t, lnrpc.PaymentFailureReason_FAILURE_REASON_NONE, + paymentsResp.Payments[2].FailureReason, + ) + + require.EqualValues(t.t, 3, paymentsResp.TotalNumPayments) + require.EqualValues(t.t, 0, paymentsResp.FirstIndexOffset) + require.EqualValues(t.t, 3, paymentsResp.LastIndexOffset) // Clean up our channel and payments, so we can start the next test // iteration with a clean slate. closeChannelAndAssert(t, net, node, channelOp, false) @@ -246,7 +548,7 @@ func testAccountRestrictionsLNC(ctxm context.Context, t *harnessTest, // There should be invoices and payments from the previous test over RPC // directly. assertNumInvoices(ctxt, t.t, lightningClient, 1) - assertNumPayments(ctxt, t.t, lightningClient, 1) + assertNumPayments(ctxt, t.t, lightningClient, 3) } // testAccountRestrictions tests the different scenarios in which the account From c6d81a871311bcf7845675615010196e8223b31b Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Thu, 28 May 2026 17:29:12 -0500 Subject: [PATCH 47/69] docs: add release notes for account payments Add release notes for the new accounts payments CLI subcommand and associated RPC endpoint to the v0.17.1 release notes document. --- docs/release-notes/release-notes-0.17.1.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/release-notes/release-notes-0.17.1.md b/docs/release-notes/release-notes-0.17.1.md index 888c9cfc..ce3ca83d 100644 --- a/docs/release-notes/release-notes-0.17.1.md +++ b/docs/release-notes/release-notes-0.17.1.md @@ -33,6 +33,12 @@ ### Functional Changes/Additions +* [Add accounts payments history subcommand](https://github.com/lightninglabs/lightning-terminal/pull/1316): + Added the `litcli accounts payments` subcommand and corresponding gRPC + endpoint `AccountPayments` to retrieve the off-chain payment history of + an account, supporting pagination (sorted in ascending lexicographical + order of their payment hash) and counting of total payments. + ### Technical and Architectural Updates * [Report litd's own version for `litd @@ -57,4 +63,5 @@ * 0xfandom * bitromortac +* Cyberguru1 * Vandit Singh From 6a7cc15c450802190513f03a61dd6ca548709cba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 25 Jul 2026 04:17:36 +0000 Subject: [PATCH 48/69] build(deps): bump google.golang.org/grpc from 1.80.0 to 1.82.1 Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.80.0 to 1.82.1. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.80.0...v1.82.1) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-version: 1.82.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index 50183a78..e232ac38 100644 --- a/go.mod +++ b/go.mod @@ -52,7 +52,7 @@ require ( golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 golang.org/x/net v0.55.0 golang.org/x/sync v0.20.0 - google.golang.org/grpc v1.80.0 + google.golang.org/grpc v1.82.1 google.golang.org/protobuf v1.36.11 gopkg.in/macaroon-bakery.v2 v2.3.0 gopkg.in/macaroon.v2 v2.1.0 @@ -229,8 +229,8 @@ require ( golang.org/x/time v0.11.0 // indirect golang.org/x/tools v0.44.0 // indirect google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260120221211-b8f7ae30c516 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect gopkg.in/errgo.v1 v1.0.1 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index dcca45cd..f7af4ca9 100644 --- a/go.sum +++ b/go.sum @@ -2131,10 +2131,10 @@ google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOl google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y= google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= -google.golang.org/genproto/googleapis/api v0.0.0-20260120221211-b8f7ae30c516 h1:vmC/ws+pLzWjj/gzApyoZuSVrDtF1aod4u/+bbj8hgM= -google.golang.org/genproto/googleapis/api v0.0.0-20260120221211-b8f7ae30c516/go.mod h1:p3MLuOwURrGBRoEyFHBT3GjUwaCQVKeNqqWxlcISGdw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516 h1:sNrWoksmOyF5bvJUcnmbeAmQi8baNhqg5IWaI3llQqU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -2176,8 +2176,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= -google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= +google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE= +google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/grpc/examples v0.0.0-20210424002626-9572fd6faeae/go.mod h1:Ly7ZA/ARzg8fnPU9TyZIxoz33sEUuWX7txiqs8lPTgE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= From bb4c85d427083fa201b2954683a08216014c4588 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 08:46:31 +0000 Subject: [PATCH 49/69] build(deps): bump google.golang.org/grpc in /autopilotserverrpc Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.79.3 to 1.82.1. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.79.3...v1.82.1) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-version: 1.82.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- autopilotserverrpc/go.mod | 10 ++++----- autopilotserverrpc/go.sum | 44 +++++++++++++++++++-------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/autopilotserverrpc/go.mod b/autopilotserverrpc/go.mod index 268020bd..4473e746 100644 --- a/autopilotserverrpc/go.mod +++ b/autopilotserverrpc/go.mod @@ -3,13 +3,13 @@ module github.com/lightninglabs/lightning-terminal/autopilotserverrpc go 1.25.11 require ( - google.golang.org/grpc v1.79.3 - google.golang.org/protobuf v1.36.10 + google.golang.org/grpc v1.82.1 + google.golang.org/protobuf v1.36.11 ) require ( - golang.org/x/net v0.48.0 // indirect - golang.org/x/sys v0.39.0 // indirect - golang.org/x/text v0.32.0 // indirect + golang.org/x/net v0.53.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/text v0.36.0 // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect ) diff --git a/autopilotserverrpc/go.sum b/autopilotserverrpc/go.sum index 9f287cc4..d9a7df9e 100644 --- a/autopilotserverrpc/go.sum +++ b/autopilotserverrpc/go.sum @@ -12,27 +12,27 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= -go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= -go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= -go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= -go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= -go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= -golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= -golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= -golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= -google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= -google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE= +google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= From 3a2acb6c31d127768e87873ec756178f7b3b324e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 08:46:46 +0000 Subject: [PATCH 50/69] build(deps): bump google.golang.org/grpc from 1.79.3 to 1.82.1 in /perms Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.79.3 to 1.82.1. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.79.3...v1.82.1) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-version: 1.82.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- perms/go.mod | 20 ++++++++-------- perms/go.sum | 64 ++++++++++++++++++++++++++-------------------------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/perms/go.mod b/perms/go.mod index 684fc75f..ffb2f07a 100644 --- a/perms/go.mod +++ b/perms/go.mod @@ -170,19 +170,19 @@ require ( go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.17.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.46.0 // indirect + golang.org/x/crypto v0.50.0 // indirect golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 // indirect - golang.org/x/net v0.48.0 // indirect - golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/term v0.38.0 // indirect - golang.org/x/text v0.32.0 // indirect + golang.org/x/net v0.53.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/term v0.42.0 // indirect + golang.org/x/text v0.36.0 // indirect golang.org/x/time v0.11.0 // indirect google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect - google.golang.org/grpc v1.79.3 // indirect - google.golang.org/protobuf v1.36.10 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/grpc v1.82.1 // indirect + google.golang.org/protobuf v1.36.11 // indirect gopkg.in/errgo.v1 v1.0.1 // indirect gopkg.in/macaroon.v2 v2.1.0 // indirect gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect diff --git a/perms/go.sum b/perms/go.sum index abb8e1de..5fc623d7 100644 --- a/perms/go.sum +++ b/perms/go.sum @@ -97,8 +97,8 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 h1:6xNmx7iTtyBRev0+D/Tv1FZd4SCg8axKApyNyRsAt/w= -github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5/go.mod h1:KdCmV+x/BuvyMxRnYBlmVaq4OLiKW6iRQfvC62cvdkI= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= @@ -151,8 +151,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= -github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= +github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= +github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fergusstrange/embedded-postgres v1.25.0 h1:sa+k2Ycrtz40eCRPOzI7Ry7TtkWXXJ+YRsxpKMDhxK0= @@ -621,8 +621,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= -golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 h1:3yiSh9fhy5/RhCSntf4Sy0Tnx50DmMpQ4MQdKKk4yg4= golang.org/x/exp v0.0.0-20250811191247-51f88131bc50/go.mod h1:rT6SFzZ7oxADUDx58pcaKFTcZ+inxAa9fTrYx/uVYwg= @@ -636,8 +636,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= -golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= +golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= +golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= golang.org/x/net v0.0.0-20150829230318-ea47fc708ee3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -663,13 +663,13 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= -golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= -golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -680,8 +680,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -719,16 +719,16 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= -golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -738,8 +738,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= -golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -759,16 +759,16 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= -golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= +golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= +golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -778,18 +778,18 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA= google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= -google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= -google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE= +google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -800,8 +800,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= -google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From f82bd5719b9886f4a3a95ebbf8bcd3d0fe353d7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 08:46:48 +0000 Subject: [PATCH 51/69] build(deps): bump google.golang.org/grpc in /litrpc Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.79.3 to 1.82.1. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.79.3...v1.82.1) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-version: 1.82.1 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- litrpc/go.mod | 22 +++++++++++----------- litrpc/go.sum | 48 ++++++++++++++++++++++++------------------------ 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/litrpc/go.mod b/litrpc/go.mod index 85fa5fcf..c2440e81 100644 --- a/litrpc/go.mod +++ b/litrpc/go.mod @@ -9,7 +9,7 @@ require ( github.com/lightninglabs/pool/poolrpc v1.0.1 github.com/lightninglabs/taproot-assets/taprpc v1.1.0 github.com/lightningnetwork/lnd v0.21.1-beta - google.golang.org/grpc v1.79.3 + google.golang.org/grpc v1.82.1 google.golang.org/protobuf v1.36.11 ) @@ -166,19 +166,19 @@ require ( go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.23.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.46.0 // indirect + golang.org/x/crypto v0.50.0 // indirect golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 // indirect - golang.org/x/mod v0.30.0 // indirect - golang.org/x/net v0.48.0 // indirect - golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/term v0.38.0 // indirect - golang.org/x/text v0.32.0 // indirect + golang.org/x/mod v0.34.0 // indirect + golang.org/x/net v0.53.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/term v0.42.0 // indirect + golang.org/x/text v0.36.0 // indirect golang.org/x/time v0.11.0 // indirect - golang.org/x/tools v0.39.0 // indirect + golang.org/x/tools v0.43.0 // indirect google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect gopkg.in/errgo.v1 v1.0.1 // indirect gopkg.in/macaroon-bakery.v2 v2.3.0 // indirect gopkg.in/macaroon.v2 v2.1.0 // indirect diff --git a/litrpc/go.sum b/litrpc/go.sum index 130e503d..208105e2 100644 --- a/litrpc/go.sum +++ b/litrpc/go.sum @@ -1408,8 +1408,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= -golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1469,8 +1469,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= -golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= +golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= +golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= golang.org/x/net v0.0.0-20150829230318-ea47fc708ee3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1541,8 +1541,8 @@ golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= -golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1588,8 +1588,8 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1690,8 +1690,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1703,8 +1703,8 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= -golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1722,8 +1722,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= -golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1803,8 +1803,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= -golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= +golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= +golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1819,8 +1819,8 @@ gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJ gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= @@ -2024,10 +2024,10 @@ google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOl google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y= google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= -google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= -google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -2069,8 +2069,8 @@ google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5v google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE= +google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 47e1f4099b6055ccffde6127dde27abc1299ed7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 08:47:11 +0000 Subject: [PATCH 52/69] build(deps): bump golang.org/x/crypto from 0.51.0 to 0.52.0 Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.51.0 to 0.52.0. - [Commits](https://github.com/golang/crypto/compare/v0.51.0...v0.52.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-version: 0.52.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index e232ac38..c997189b 100644 --- a/go.mod +++ b/go.mod @@ -48,7 +48,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/urfave/cli v1.22.16 go.etcd.io/bbolt v1.4.3 - golang.org/x/crypto v0.51.0 + golang.org/x/crypto v0.52.0 golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 golang.org/x/net v0.55.0 golang.org/x/sync v0.20.0 diff --git a/go.sum b/go.sum index f7af4ca9..90086290 100644 --- a/go.sum +++ b/go.sum @@ -1506,8 +1506,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= From 3975e83006f8d466bb089275283318f52cc9080e Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Sat, 13 Jun 2026 18:24:33 -0500 Subject: [PATCH 53/69] macaroons: add super macaroon helpers Introduce helper functions in the macaroons package to manage super macaroon files and permissions. Add SuperMacaroonExists, MacaroonMatchesPermissions, and BakeAndWriteSuperMacaroon. --- macaroons/super_mac.go | 128 ++++++++++++++++++++++++++++++++++++ macaroons/super_mac_test.go | 122 ++++++++++++++++++++++++++++++++++ 2 files changed, 250 insertions(+) diff --git a/macaroons/super_mac.go b/macaroons/super_mac.go index 32cad9ff..d103306e 100644 --- a/macaroons/super_mac.go +++ b/macaroons/super_mac.go @@ -6,8 +6,12 @@ import ( "encoding/binary" "encoding/hex" "errors" + "fmt" + "os" + "strings" "github.com/lightningnetwork/lnd/lnrpc" + "google.golang.org/protobuf/proto" "gopkg.in/macaroon-bakery.v2/bakery" "gopkg.in/macaroon.v2" ) @@ -118,3 +122,127 @@ func BakeSuperMacaroon(ctx context.Context, lnd lnrpc.LightningClient, return hex.EncodeToString(macBytes), err } + +// SuperMacaroonExists determines whether a macaroon file exists at the given +// path. +func SuperMacaroonExists(path string) bool { + if _, err := os.Stat(path); err != nil { + return false + } + + return true +} + +// MacaroonMatchesPermissions checks if the macaroon at the given path contains +// exactly the expected permissions (no more and no less). +func MacaroonMatchesPermissions(path string, + expectedPerms []bakery.Op) (bool, error) { + + macBytes, err := os.ReadFile(path) + if err != nil { + return false, err + } + + mac := &macaroon.Macaroon{} + if err := mac.UnmarshalBinary(macBytes); err != nil { + return false, err + } + + rawID := mac.Id() + if len(rawID) == 0 || rawID[0] != byte(bakery.LatestVersion) { + return false, errors.New("invalid macaroon version") + } + + decodedID := &lnrpc.MacaroonId{} + if err := proto.Unmarshal(rawID[1:], decodedID); err != nil { + return false, err + } + + // Map expected permissions for easy lookup: entity -> action -> true. + expectedMap := make(map[string]map[string]bool) + for _, op := range expectedPerms { + if expectedMap[op.Entity] == nil { + expectedMap[op.Entity] = make(map[string]bool) + } + + expectedMap[op.Entity][op.Action] = true + } + + // Map actual permissions from decoded macaroon ID: + // entity -> action -> true. + actualMap := make(map[string]map[string]bool) + for _, op := range decodedID.Ops { + if op == nil { + continue + } + if actualMap[op.Entity] == nil { + actualMap[op.Entity] = make(map[string]bool) + } + for _, action := range op.Actions { + actualMap[op.Entity][action] = true + } + } + + // Compare the mapped sets for exact equality. + if len(expectedMap) != len(actualMap) { + return false, nil + } + + for entity, actions := range expectedMap { + actualActions, ok := actualMap[entity] + + if !ok || len(actions) != len(actualActions) { + return false, nil + } + for action := range actions { + if !actualActions[action] { + return false, nil + } + } + } + + return true, nil +} + +// BakeAndWriteSuperMacaroon bakes a super macaroon and writes it to disk. +func BakeAndWriteSuperMacaroon(ctx context.Context, lnd lnrpc.LightningClient, + path string, perms []bakery.Op) error { + + var suffixBytes [4]byte + rootKeyID := NewSuperMacaroonRootKeyID(suffixBytes) + + superMacHex, err := BakeSuperMacaroon( + ctx, lnd, rootKeyID, perms, nil, + ) + if err != nil { + return fmt.Errorf("unable to bake super macaroon: %w", err) + } + + superMacBytes, err := hex.DecodeString(superMacHex) + if err != nil { + return fmt.Errorf("unable to decode baked "+ + "super macaroon: %w", err) + } + + if err := os.WriteFile(path, superMacBytes, 0600); err != nil { + return fmt.Errorf("unable to write super macaroon to %v: %w", + path, err) + } + + return nil +} + +// HasMacaroonSuffix checks that the super macaroon path is not empty and ends +// with the expected suffix. +func HasMacaroonSuffix(path string) error { + if path == "" { + return fmt.Errorf("super-macaroon-path cannot be empty") + } + + if !strings.HasSuffix(path, ".macaroon") { + return fmt.Errorf("super-macaroon-path must end with the " + + ".macaroon suffix") + } + + return nil +} diff --git a/macaroons/super_mac_test.go b/macaroons/super_mac_test.go index d4b91aea..a751683f 100644 --- a/macaroons/super_mac_test.go +++ b/macaroons/super_mac_test.go @@ -1,9 +1,13 @@ package macaroons import ( + "encoding/hex" + "os" + "path/filepath" "testing" "github.com/stretchr/testify/require" + "gopkg.in/macaroon-bakery.v2/bakery" ) var ( @@ -43,3 +47,121 @@ func TestIsSuperMacaroon(t *testing.T) { require.True(t, IsSuperMacaroon(testMacHex)) } + +// TestSuperMacaroonHelpers tests that SuperMacaroonExists and +// MacaroonMatchesPermissions behave correctly. +func TestSuperMacaroonHelpers(t *testing.T) { + t.Parallel() + + tempDir := t.TempDir() + path := filepath.Join(tempDir, "test.macaroon") + + // Verify that it doesn't exist yet. + require.False(t, SuperMacaroonExists(path)) + + // Write the test macaroon. + macBytes, err := hex.DecodeString(testMacHex) + require.NoError(t, err) + err = os.WriteFile(path, macBytes, 0600) + require.NoError(t, err) + + // Now it should exist. + require.True(t, SuperMacaroonExists(path)) + + // The macaroon matches this expected list of permissions. + expectedPerms := []bakery.Op{ + {Entity: "account", Action: "read"}, + {Entity: "auction", Action: "read"}, + {Entity: "audit", Action: "read"}, + {Entity: "auth", Action: "read"}, + {Entity: "info", Action: "read"}, + {Entity: "insights", Action: "read"}, + {Entity: "invoices", Action: "read"}, + {Entity: "loop", Action: "in"}, + {Entity: "loop", Action: "out"}, + {Entity: "macaroon", Action: "read"}, + {Entity: "message", Action: "read"}, + {Entity: "offchain", Action: "read"}, + {Entity: "onchain", Action: "read"}, + {Entity: "order", Action: "read"}, + {Entity: "peers", Action: "read"}, + {Entity: "rates", Action: "read"}, + {Entity: "recommendation", Action: "read"}, + {Entity: "report", Action: "read"}, + {Entity: "suggestions", Action: "read"}, + {Entity: "swap", Action: "read"}, + {Entity: "terms", Action: "read"}, + } + + matches, err := MacaroonMatchesPermissions(path, expectedPerms) + require.NoError(t, err) + require.True(t, matches) + + // A subset of permissions should NOT match exactly. + matches, err = MacaroonMatchesPermissions(path, expectedPerms[:5]) + require.NoError(t, err) + require.False(t, matches) + + // Extra/different permissions should NOT match exactly. + differentPerms := append( + expectedPerms, + bakery.Op{Entity: "invalid", Action: "write"}, + ) + matches, err = MacaroonMatchesPermissions(path, differentPerms) + require.NoError(t, err) + require.False(t, matches) +} + +// TestHasMacaroonSuffix tests that HasMacaroonSuffix correctly +// checks the suffix of the super macaroon path. +func TestHasMacaroonSuffix(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + path string + wantErr bool + errStr string + }{ + { + name: "empty path", + path: "", + wantErr: true, + errStr: "super-macaroon-path cannot be empty", + }, + { + name: "valid path", + path: "/tmp/test.macaroon", + wantErr: false, + }, + { + name: "invalid path - missing suffix", + path: "/tmp/test.mac", + wantErr: true, + errStr: "super-macaroon-path must end " + + "with the .macaroon suffix", + }, + { + name: "invalid path - wrong suffix", + path: "/tmp/test.macaroon.tmp", + wantErr: true, + errStr: "super-macaroon-path must end " + + "with the .macaroon suffix", + }, + } + + for _, tt := range tests { + tt := tt + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + err := HasMacaroonSuffix(tt.path) + if tt.wantErr { + require.Error(t, err) + require.Contains(t, err.Error(), tt.errStr) + } else { + require.NoError(t, err) + } + }) + } +} From d3e51fac178a90b098c6151c9281ad988bb06fe0 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Sat, 13 Jun 2026 18:24:10 -0500 Subject: [PATCH 54/69] config: add super macaroon startup flags and path validation Introduce configuration flags to enable baking a super macaroon on startup. Add --bake-super-macaroon (none, read-only, read-write) and --super-macaroon-path. Also add validation logic to ensure that the configured super macaroon path ends with the expected '.macaroon' suffix, rejecting startup early otherwise. --- config.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/config.go b/config.go index fc6fd7f9..038f39ef 100644 --- a/config.go +++ b/config.go @@ -27,6 +27,7 @@ import ( "github.com/lightninglabs/lightning-terminal/db/sqlc" "github.com/lightninglabs/lightning-terminal/firewall" "github.com/lightninglabs/lightning-terminal/firewalldb" + "github.com/lightninglabs/lightning-terminal/macaroons" mid "github.com/lightninglabs/lightning-terminal/rpcmiddleware" "github.com/lightninglabs/lightning-terminal/session" "github.com/lightninglabs/lightning-terminal/subservers" @@ -96,6 +97,22 @@ const ( // autogenerated lit macaroon. DefaultMacaroonFilename = "lit.macaroon" + // DefaultSuperMacaroonFilename is the default file name for the + // autogenerated super macaroon. + DefaultSuperMacaroonFilename = "super.macaroon" + + // noneChoice is the none choice for the bake-super-macaroon + // configuration option. + noneChoice = "none" + + // readOnlyChoice is the read-only choice for the bake-super-macaroon + // configuration option. + readOnlyChoice = "read-only" + + // defaultBakeSuperMacaroon is the default value for the + // bake-super-macaroon configuration option. + defaultBakeSuperMacaroon = noneChoice + defaultFirstLNCConnTimeout = 10 * time.Minute // DatabaseBackendSqlite is the name of the SQLite database backend. @@ -169,6 +186,12 @@ var ( defaultSqliteDatabasePath = filepath.Join( DefaultLitDir, DefaultNetwork, defaultSqliteDatabaseFileName, ) + + // DefaultSuperMacaroonPath is the default full path of the super + // macaroon. + DefaultSuperMacaroonPath = filepath.Join( + DefaultLitDir, DefaultNetwork, DefaultSuperMacaroonFilename, + ) ) // Config is the main configuration struct of lightning-terminal. It contains @@ -203,6 +226,9 @@ type Config struct { MacaroonPath string `long:"macaroonpath" description:"Path to write the macaroon for litd's RPC and REST services if it doesn't exist."` + BakeSuperMacaroon string `long:"bake-super-macaroon" description:"Bake a super macaroon on startup if it doesn't exist." choice:"none" choice:"read-only" choice:"read-write"` + SuperMacaroonPath string `long:"super-macaroon-path" description:"Path to write the auto-baked super macaroon. This must include both the directory and the name of the macaroon file itself (which must end with the .macaroon suffix)."` + FirstLNCConnDeadline time.Duration `long:"firstlncconndeadline" description:"The duration after a new LNC session will be revoked if no connection is made with it. This only applies for the first connection which is made using the pairing phrase. "` // DatabaseBackend is the database backend we will use for storing all @@ -543,6 +569,8 @@ func defaultConfig() *Config { LetsEncryptListen: defaultLetsEncryptListen, LetsEncryptDir: defaultLetsEncryptDir, MacaroonPath: DefaultMacaroonPath, + SuperMacaroonPath: DefaultSuperMacaroonPath, + BakeSuperMacaroon: defaultBakeSuperMacaroon, DatabaseBackend: DatabaseBackendSqlite, Sqlite: &db.SqliteConfig{ DatabaseFileName: defaultSqliteDatabasePath, @@ -732,6 +760,32 @@ func loadAndValidateConfig(ctx context.Context, return nil, err } + if cfg.BakeSuperMacaroon != defaultBakeSuperMacaroon { + if cfg.SuperMacaroonPath == DefaultSuperMacaroonPath { + cfg.SuperMacaroonPath = filepath.Join( + litDir, cfg.Network, + DefaultSuperMacaroonFilename, + ) + } + + err = macaroons.HasMacaroonSuffix( + cfg.SuperMacaroonPath, + ) + if err != nil { + return nil, err + } + + // Clean and expand the super macaroon path + cfg.SuperMacaroonPath = lncfg.CleanAndExpandPath( + cfg.SuperMacaroonPath, + ) + dir := filepath.Dir(cfg.SuperMacaroonPath) + if err := makeDirectories(dir); err != nil { + return nil, fmt.Errorf("unable to create super "+ + "macaroon directory %v: %w", dir, err) + } + } + err = cfg.DevConfig.Validate() if err != nil { return nil, err From c5fbbd4d7770fae2130faf5bdc2e364683b1e615 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Sat, 13 Jun 2026 18:24:36 -0500 Subject: [PATCH 55/69] terminal: auto-bake super macaroon on startup Automatically bake a super macaroon on startup if it doesn't already exist on disk and the `bake-super-macaroon` option is configured. On startup, the node verifies if the super macaroon file exists. If it does, it parses the macaroon, extracts and verifies the version and root key ID, and asserts that the macaroon permissions exactly match the expected active permissions. If there is a mismatch, the macaroon is regenerated and overwritten on disk. If the file does not exist, a new super macaroon is baked and written directly to disk. Also validate that the `bake-super-macaroon` option is not enabled when LND is running in stateless initialization mode, failing startup early if they are used together. --- terminal.go | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/terminal.go b/terminal.go index c2098bd6..36746444 100644 --- a/terminal.go +++ b/terminal.go @@ -822,6 +822,13 @@ func (g *LightningTerminal) start(ctx context.Context) error { return fmt.Errorf("could not start litd sub-servers: %v", err) } + // Bake the super macaroon on startup if configured, now that all local + // and remote sub-servers have been started and active permissions are + // fully known. + if err := g.setupSuperMacaroon(ctx); err != nil { + return fmt.Errorf("could not setup super macaroon: %w", err) + } + // We can now set the status of LiT as running. g.statusMgr.SetRunning(subservers.LIT) @@ -2192,3 +2199,64 @@ func randId(n int) string { return string(b) } + +// setupSuperMacaroon bakes a super macaroon and writes it to disk if needed. +func (g *LightningTerminal) setupSuperMacaroon(ctx context.Context) error { + // If the bake-super-macaroon option is set to none, we don't bake a + // macaroon. + if g.cfg.BakeSuperMacaroon == noneChoice { + return nil + } + + // If the super macaroon baking option is enabled, we cannot run in + // stateless initialization mode as it won't write any macaroons to the + // filesystem. + if g.cfg.statelessInitMode { + return fmt.Errorf("cannot use bake-super-macaroon " + + "with stateless-init mode") + } + + path := g.cfg.SuperMacaroonPath + + readOnly := g.cfg.BakeSuperMacaroon == readOnlyChoice + activePerms := g.permsMgr.ActivePermissions(readOnly) + + if litmac.SuperMacaroonExists(path) { + matches, err := litmac.MacaroonMatchesPermissions( + path, activePerms, + ) + + if err == nil && matches { + log.Debugf("Super macaroon already exists at "+ + "%v and matches configuration, "+ + "skipping bake", path) + + return nil + } + if err != nil { + return fmt.Errorf( + "unable to verify super macaroon "+ + "permissions at %v, please delete "+ + "it if the issue persists: %w", + path, err, + ) + } + + log.Infof("Super macaroon permissions " + + "differ from configuration, " + + "regenerating...") + } + + log.Infof("Baking super macaroon on startup...") + + // Bake the super macaroon and write it to disk. + if err := litmac.BakeAndWriteSuperMacaroon( + ctx, g.basicClient, path, activePerms, + ); err != nil { + return err + } + + log.Infof("Successfully baked and wrote super macaroon to %v", path) + + return nil +} From 7cde9c50ae6b7670970e94f991cd8bff9863ffe8 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Sat, 13 Jun 2026 18:25:10 -0500 Subject: [PATCH 56/69] itest: add test for super macaroon auto-bake Add testSuperMacaroonOnStartup to verify startup baking logic. The test restarts the node with the auto-baking config flags and asserts the macaroon is baked with read-only or read-write permissions accordingly. Also add validation tests verifying that starting with an invalid path suffix or in stateless-init mode with baking enabled fails as expected. Verify permission addition/expansion by starting the node with sub-servers disabled and then restarting with sub-servers re-enabled. Also verify the none config choice, asserting that no super macaroon file is baked/created on startup. --- itest/litd_mode_integrated_test.go | 215 +++++++++++++++++++++++++++++ itest/litd_test_list_on_test.go | 4 + 2 files changed, 219 insertions(+) diff --git a/itest/litd_mode_integrated_test.go b/itest/litd_mode_integrated_test.go index 889fca0b..831ec07a 100644 --- a/itest/litd_mode_integrated_test.go +++ b/itest/litd_mode_integrated_test.go @@ -11,6 +11,7 @@ import ( "io/ioutil" "net/http" "os" + "path/filepath" "strings" "testing" "time" @@ -1530,3 +1531,217 @@ func bakeSuperMacaroon(t *testing.T, cfg *LitNodeConfig, return tempFile.Name() } + +// testSuperMacaroonOnStartup tests that the super macaroon is successfully +// baked on startup if configured. +func testSuperMacaroonOnStartup(ctx context.Context, net *NetworkHarness, + t *harnessTest) { + + superMacPath := filepath.Join( + net.Alice.Cfg.LitDir, "startup-super.macaroon", + ) + + verifyMacaroonPermissions := func(path string, expectWrite bool) { + ctxTimeout, cancel := context.WithTimeout(ctx, defaultTimeout) + defer cancel() + + rawConn, err := connectRPC( + ctxTimeout, net.Alice.Cfg.LitAddr(), + net.Alice.Cfg.LitTLSCertPath, + ) + require.NoError(t.t, err) + defer rawConn.Close() + + macBytes, err := os.ReadFile(path) + require.NoError(t.t, err) + + ctxm := macaroonContext(ctxTimeout, macBytes) + lnrpcConn := lnrpc.NewLightningClient(rawConn) + + _, err = lnrpcConn.GetInfo(ctxm, &lnrpc.GetInfoRequest{}) + require.NoError(t.t, err) + + _, err = lnrpcConn.NewAddress(ctxm, &lnrpc.NewAddressRequest{ + Type: lnrpc.AddressType_WITNESS_PUBKEY_HASH, + }) + if expectWrite { + require.NoError(t.t, err) + } else { + require.Error(t.t, err) + require.Contains(t.t, err.Error(), "permission denied") + } + } + + verifyMacaroonSubserverPermissions := func(path string, + expectSubservers bool) { + + macBytes, err := os.ReadFile(path) + require.NoError(t.t, err) + + mac := &macaroon.Macaroon{} + err = mac.UnmarshalBinary(macBytes) + require.NoError(t.t, err) + + rawID := mac.Id() + require.NotEmpty(t.t, rawID) + + decodedID := &lnrpc.MacaroonId{} + err = proto.Unmarshal(rawID[1:], decodedID) + require.NoError(t.t, err) + + hasSubserver := false + for _, op := range decodedID.Ops { + if op == nil { + continue + } + if op.Entity == "loop" || op.Entity == "pool" || + op.Entity == "faraday" { + + hasSubserver = true + } + } + + if expectSubservers { + require.True( + t.t, hasSubserver, + "expected macaroon to contain "+ + "subserver permissions", + ) + } else { + require.False( + t.t, hasSubserver, + "expected macaroon NOT to contain "+ + "subserver permissions", + ) + } + } + + // Ensure any old file is removed first. + _ = os.Remove(superMacPath) + + // Test that starting Alice with an invalid super-macaroon-path (not + // ending with .macaroon) fails. + invalidMacPath := filepath.Join( + net.Alice.Cfg.LitDir, "invalid-path.mac", + ) + err := net.RestartNode( + net.Alice, nil, []LitArgOption{ + WithLitArg("bake-super-macaroon", "read-only"), + WithLitArg("super-macaroon-path", invalidMacPath), + }, + ) + require.Error(t.t, err) + + // Drain the expected process exit error from the error channel to + // prevent it from failing the test runner at the end of the test. + select { + case <-net.lndErrorChan: + case <-time.After(defaultTimeout): + t.t.Fatalf("expected process exit error in lndErrorChan") + } + + // Restart Alice with read-only super macaroon baking enabled. + err = net.RestartNode( + net.Alice, nil, []LitArgOption{ + WithLitArg("bake-super-macaroon", "read-only"), + WithLitArg("super-macaroon-path", superMacPath), + }, + ) + require.NoError(t.t, err) + + // Verify that the super macaroon was created on startup. + require.FileExists(t.t, superMacPath) + + // Verify permissions: write should be blocked. + verifyMacaroonPermissions(superMacPath, false) + + // Restart Alice with a read-write super macaroon, WITHOUT + // deleting the file. This will test the overwrite behavior when + // permissions differ. + err = net.RestartNode( + net.Alice, nil, []LitArgOption{ + WithLitArg("bake-super-macaroon", "read-write"), + WithLitArg("super-macaroon-path", superMacPath), + }, + ) + require.NoError(t.t, err) + + require.FileExists(t.t, superMacPath) + + // Verify permissions: write should succeed. + verifyMacaroonPermissions(superMacPath, true) + + // Restart Alice back with a read-only super macaroon, WITHOUT + // deleting the file. This will test the overwrite behavior when + // switching back to read-only. + err = net.RestartNode( + net.Alice, nil, []LitArgOption{ + WithLitArg("bake-super-macaroon", "read-only"), + WithLitArg("super-macaroon-path", superMacPath), + }, + ) + require.NoError(t.t, err) + + require.FileExists(t.t, superMacPath) + + // Verify permissions: write should be blocked again. + verifyMacaroonPermissions(superMacPath, false) + + // Restart Alice with a sub-server disabled to bake a super macaroon + // with a subset of permissions. + err = net.RestartNode( + net.Alice, nil, []LitArgOption{ + WithLitArg("bake-super-macaroon", "read-write"), + WithLitArg("super-macaroon-path", superMacPath), + WithLitArg("loop-mode", "disable"), + WithLitArg("pool-mode", "disable"), + WithLitArg("faraday-mode", "disable"), + }, + ) + require.NoError(t.t, err) + + require.FileExists(t.t, superMacPath) + verifyMacaroonSubserverPermissions(superMacPath, false) + + // Restart Alice with the sub-servers re-enabled. This will add + // permissions and trigger macaroon regeneration on startup. + err = net.RestartNode( + net.Alice, nil, []LitArgOption{ + WithLitArg("bake-super-macaroon", "read-write"), + WithLitArg("super-macaroon-path", superMacPath), + }, + ) + require.NoError(t.t, err) + + require.FileExists(t.t, superMacPath) + verifyMacaroonSubserverPermissions(superMacPath, true) + + // Verify permissions: write should succeed. + verifyMacaroonPermissions(superMacPath, true) + + // Clean up the super macaroon file. + _ = os.Remove(superMacPath) + + // Restart Alice with super macaroon baking disabled and verify that + // no super macaroon is created. + err = net.RestartNode( + net.Alice, nil, []LitArgOption{ + WithLitArg("bake-super-macaroon", "none"), + WithLitArg("super-macaroon-path", superMacPath), + }, + ) + require.NoError(t.t, err) + + _, err = os.Stat(superMacPath) + require.True(t.t, os.IsNotExist(err)) + + // Clean up after ourselves. + err = net.RestartNode( + net.Alice, nil, []LitArgOption{ + WithoutLitArg("bake-super-macaroon"), + WithoutLitArg("super-macaroon-path"), + }, + ) + require.NoError(t.t, err) + net.ConnectNodes(t.t, net.Alice, net.Bob) +} diff --git a/itest/litd_test_list_on_test.go b/itest/litd_test_list_on_test.go index eaf0f77f..ee0ba932 100644 --- a/itest/litd_test_list_on_test.go +++ b/itest/litd_test_list_on_test.go @@ -31,4 +31,8 @@ var allTestCases = []*testCase{ name: "kvdb to sql migration", test: testKvdbSQLMigration, }, + { + name: "terminal super macaroon on startup", + test: testSuperMacaroonOnStartup, + }, } From 0c06130ea1269a4040c08d01aefb6e49093f5956 Mon Sep 17 00:00:00 2001 From: cyberguru1 Date: Sat, 13 Jun 2026 18:25:14 -0500 Subject: [PATCH 57/69] docs: add release notes for super macaroon auto-bake Add release notes for the new auto-bake config options in release notes for version 0.17.1 and reference pull request #1324. --- docs/release-notes/release-notes-0.17.1.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/release-notes/release-notes-0.17.1.md b/docs/release-notes/release-notes-0.17.1.md index ce3ca83d..7046ef8a 100644 --- a/docs/release-notes/release-notes-0.17.1.md +++ b/docs/release-notes/release-notes-0.17.1.md @@ -39,6 +39,15 @@ an account, supporting pagination (sorted in ascending lexicographical order of their payment hash) and counting of total payments. +* [Auto-bake super macaroon on startup](https://github.com/lightninglabs/lightning-terminal/pull/1324): + Added config options `--bake-super-macaroon` (choice: `none`, `read-only`, + `read-write`) and `--super-macaroon-path` to automatically bake a super + macaroon on startup and keep its permissions in sync. When set to `read-only` + or `read-write`, the daemon will automatically bake a super macaroon + containing read-only or read-write permissions, respectively, for all active + sub-servers on startup. If the macaroon already exists but has different + permissions, it will be automatically regenerated. + ### Technical and Architectural Updates * [Report litd's own version for `litd From f162f44a0def963005db552358e01ecbbba001d8 Mon Sep 17 00:00:00 2001 From: bitromortac Date: Tue, 21 Jul 2026 11:49:17 +0000 Subject: [PATCH 58/69] docs: add release notes for privacy mapper refactoring Add a succinct release note entry detailing the 32-bit truncation prevention and allocation optimization introduced by PR-1358. --- docs/release-notes/release-notes-0.17.1.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/release-notes/release-notes-0.17.1.md b/docs/release-notes/release-notes-0.17.1.md index 6627288e..9be01091 100644 --- a/docs/release-notes/release-notes-0.17.1.md +++ b/docs/release-notes/release-notes-0.17.1.md @@ -31,6 +31,14 @@ -V`](https://github.com/lightninglabs/lightning-terminal/pull/1337): The `-V` flag now prints litd's version instead of the integrated lnd version. +* [Refactor privacy mapper to prevent 32-bit truncation and optimize + allocations](https://github.com/lightninglabs/lightning-terminal/pull/1358): + Refactored the privacy mapper's random number generation to use `int64` + instead of `int` to prevent architecture-dependent truncation on 32-bit + runtimes. This represents a breaking change to the `NewPrivacyMapper` and + `CryptoRandIntn` functions. The PR also introduced a `sync.Pool` for + `*big.Int` to optimize allocations. + ## RPC Updates ## Integrated Binary Updates From 519ce8a154b7dd03d7623e42cbdd2b84d18bcecc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 10:09:22 +0000 Subject: [PATCH 59/69] build(deps): bump golang.org/x/net in /autopilotserverrpc Bumps [golang.org/x/net](https://github.com/golang/net) from 0.53.0 to 0.55.0. - [Commits](https://github.com/golang/net/compare/v0.53.0...v0.55.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-version: 0.55.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- autopilotserverrpc/go.mod | 6 +++--- autopilotserverrpc/go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/autopilotserverrpc/go.mod b/autopilotserverrpc/go.mod index 4473e746..2ee17884 100644 --- a/autopilotserverrpc/go.mod +++ b/autopilotserverrpc/go.mod @@ -8,8 +8,8 @@ require ( ) require ( - golang.org/x/net v0.53.0 // indirect - golang.org/x/sys v0.43.0 // indirect - golang.org/x/text v0.36.0 // indirect + golang.org/x/net v0.55.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/text v0.37.0 // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect ) diff --git a/autopilotserverrpc/go.sum b/autopilotserverrpc/go.sum index d9a7df9e..4d8be5c8 100644 --- a/autopilotserverrpc/go.sum +++ b/autopilotserverrpc/go.sum @@ -22,12 +22,12 @@ go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfC go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= From 475c8609a025546a3b8d0b41155703fa998e70f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 10:09:28 +0000 Subject: [PATCH 60/69] build(deps): bump golang.org/x/crypto from 0.50.0 to 0.52.0 in /perms Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.50.0 to 0.52.0. - [Commits](https://github.com/golang/crypto/compare/v0.50.0...v0.52.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-version: 0.52.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- perms/go.mod | 10 +++++----- perms/go.sum | 28 ++++++++++++++-------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/perms/go.mod b/perms/go.mod index ffb2f07a..c9810d48 100644 --- a/perms/go.mod +++ b/perms/go.mod @@ -170,13 +170,13 @@ require ( go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.17.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.50.0 // indirect + golang.org/x/crypto v0.52.0 // indirect golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 // indirect - golang.org/x/net v0.53.0 // indirect + golang.org/x/net v0.54.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.43.0 // indirect - golang.org/x/term v0.42.0 // indirect - golang.org/x/text v0.36.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/term v0.43.0 // indirect + golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.11.0 // indirect google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect diff --git a/perms/go.sum b/perms/go.sum index 5fc623d7..8c8bde80 100644 --- a/perms/go.sum +++ b/perms/go.sum @@ -621,8 +621,8 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= -golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 h1:3yiSh9fhy5/RhCSntf4Sy0Tnx50DmMpQ4MQdKKk4yg4= golang.org/x/exp v0.0.0-20250811191247-51f88131bc50/go.mod h1:rT6SFzZ7oxADUDx58pcaKFTcZ+inxAa9fTrYx/uVYwg= @@ -636,8 +636,8 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= -golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20150829230318-ea47fc708ee3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -663,8 +663,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= +golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= +golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -719,16 +719,16 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= -golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -738,8 +738,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -759,8 +759,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From 0f5ebe70610ffc1c74e9c2c173bdbf50c29d3408 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 10:09:41 +0000 Subject: [PATCH 61/69] build(deps): bump golang.org/x/net from 0.53.0 to 0.55.0 in /litrpc Bumps [golang.org/x/net](https://github.com/golang/net) from 0.53.0 to 0.55.0. - [Commits](https://github.com/golang/net/compare/v0.53.0...v0.55.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-version: 0.55.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- litrpc/go.mod | 14 +++++++------- litrpc/go.sum | 28 ++++++++++++++-------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/litrpc/go.mod b/litrpc/go.mod index c2440e81..4b452236 100644 --- a/litrpc/go.mod +++ b/litrpc/go.mod @@ -166,16 +166,16 @@ require ( go.uber.org/multierr v1.6.0 // indirect go.uber.org/zap v1.23.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.50.0 // indirect + golang.org/x/crypto v0.51.0 // indirect golang.org/x/exp v0.0.0-20250811191247-51f88131bc50 // indirect - golang.org/x/mod v0.34.0 // indirect - golang.org/x/net v0.53.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.55.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.43.0 // indirect - golang.org/x/term v0.42.0 // indirect - golang.org/x/text v0.36.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/term v0.43.0 // indirect + golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.11.0 // indirect - golang.org/x/tools v0.43.0 // indirect + golang.org/x/tools v0.44.0 // indirect google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect diff --git a/litrpc/go.sum b/litrpc/go.sum index 208105e2..fdddaae4 100644 --- a/litrpc/go.sum +++ b/litrpc/go.sum @@ -1408,8 +1408,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.20.0/go.mod h1:Xwo95rrVNIoSMx9wa1JroENMToLWn3RNVrTBpLHgZPQ= -golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= -golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= +golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1469,8 +1469,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= -golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= golang.org/x/net v0.0.0-20150829230318-ea47fc708ee3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1541,8 +1541,8 @@ golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1690,8 +1690,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1703,8 +1703,8 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= -golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1722,8 +1722,8 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1803,8 +1803,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From fb5863e38cad955f0b42b9069884e5b05c20939a Mon Sep 17 00:00:00 2001 From: Elle Mouton Date: Tue, 21 Jul 2026 14:37:59 -0700 Subject: [PATCH 62/69] multi: wait for lnd with a configurable timeout during SQL migration The kvdb-to-SQL data migration polls lnd's ListMacaroonIDs RPC, which only becomes available once lnd reaches its "RPC active" state. On nodes with a large channel/graph state, lnd can take well over a minute to get there after the wallet is unlocked, which exceeded the previous fixed 60-second (120 x 500ms) poll budget and caused the migration - and therefore litd startup - to fail permanently, requiring a manual restart. Replace the fixed attempt cap with a wait bounded by the new --lndreadytimeout config option, defaulting to a generous 10 minutes, while still aborting early if the daemon is shutting down. The wait happens inside the migration's SQL write transaction, so it is kept bounded rather than unbounded as a safety backstop. --- config.go | 29 +++++ db/migsets/programmatic_migrations.go | 118 ++++++++++++++------- db/migsets/programmatic_migrations_test.go | 69 +++++++++++- db/migsets/sql_migrations.go | 6 +- db/migsets/sql_migrations_dev.go | 5 +- 5 files changed, 183 insertions(+), 44 deletions(-) diff --git a/config.go b/config.go index 038f39ef..a8393d96 100644 --- a/config.go +++ b/config.go @@ -115,6 +115,18 @@ const ( defaultFirstLNCConnTimeout = 10 * time.Minute + // defaultLndReadyTimeout is the default maximum time that litd + // waits for lnd's RPC server to become ready. It currently applies + // to the one-time kvdb-to-SQL data migration, which must call into + // lnd's main RPC server (ListMacaroonIDs); that only becomes + // available once lnd reaches its "RPC active" state. On nodes with a + // large channel/graph state this can take well over a minute after + // the wallet is unlocked, and timing out aborts litd startup + // entirely (requiring a manual restart), so we default to a + // deliberately generous value that comfortably covers even large + // nodes. + defaultLndReadyTimeout = 10 * time.Minute + // DatabaseBackendSqlite is the name of the SQLite database backend. DatabaseBackendSqlite = "sqlite" @@ -246,6 +258,11 @@ type Config struct { // resolved. autoMigrateKVDBApproved bool + // LndReadyTimeout is the maximum time that litd will wait for lnd's RPC + // server to become ready. This currently applies to the one-time + // kvdb-to-SQL data migration, which must call into lnd's RPC. + LndReadyTimeout time.Duration `long:"lndreadytimeout" description:"The maximum time that litd will wait for lnd's RPC server to become ready. This currently applies to the one-time migration of litd's legacy kvdb data to the configured SQL backend, which must call into lnd's RPC. On nodes with a large channel and graph state, lnd can take a while to start serving RPC calls after the wallet is unlocked; increase this value if startup fails with an error mentioning that lnd's 'RPC server is in the process of starting up'."` + // Sqlite holds the configuration options for a SQLite database // backend. Sqlite *db.SqliteConfig `group:"sqlite" namespace:"sqlite"` @@ -367,6 +384,7 @@ func (c *Config) NewStores(ctx context.Context, migsets.MakeMigrationSets( ctx, basicClient, c.MacaroonPath, c.LitDir, c.Network, clock, + c.LndReadyTimeout, ), ) if err != nil { @@ -419,6 +437,7 @@ func (c *Config) NewStores(ctx context.Context, migsets.MakeMigrationSets( ctx, basicClient, c.MacaroonPath, c.LitDir, c.Network, clock, + c.LndReadyTimeout, ), ) if err != nil { @@ -565,6 +584,7 @@ func defaultConfig() *Config { Lnd: &lndDefaultConfig, LndRPCTimeout: defaultRPCTimeout, LndConnectInterval: defaultStartupTimeout, + LndReadyTimeout: defaultLndReadyTimeout, LitDir: DefaultLitDir, LetsEncryptListen: defaultLetsEncryptListen, LetsEncryptDir: defaultLetsEncryptDir, @@ -701,6 +721,15 @@ func loadAndValidateConfig(ctx context.Context, "to avoid problems", minimumRPCTimeout) } + // The work that waits on lnd's readiness (currently the kvdb-to-SQL + // migration) cannot proceed without lnd, so a non-positive timeout + // would make it fail immediately on any node where lnd isn't + // instantly ready. Require a positive value. + if cfg.LndReadyTimeout <= 0 { + return nil, fmt.Errorf("lndreadytimeout must be positive, got "+ + "%v", cfg.LndReadyTimeout) + } + // Validate the lightning-terminal config options. litDir := lnd.CleanAndExpandPath(preCfg.LitDir) cfg.LetsEncryptDir = lncfg.CleanAndExpandPath(cfg.LetsEncryptDir) diff --git a/db/migsets/programmatic_migrations.go b/db/migsets/programmatic_migrations.go index 585bf016..5af23df5 100644 --- a/db/migsets/programmatic_migrations.go +++ b/db/migsets/programmatic_migrations.go @@ -21,12 +21,19 @@ import ( "github.com/lightningnetwork/lnd/sqldb/v2" ) +// listMacaroonIDRetryDelay is the delay between successive attempts to reach +// lnd's ListMacaroonIDs RPC while waiting for lnd to become ready. 500ms keeps +// the poll responsive (lnd is typically ready within a minute or two) without +// busy-looping against a not-yet-ready RPC server. +const listMacaroonIDRetryDelay = 500 * time.Millisecond + // Mig6ProgrammaticMigration generates and returns the programmatic migration // entry containing the kvdb to SQL migration for all of litd's database stores. func Mig6ProgrammaticMigration(ctx context.Context, basicClient lnrpc.LightningClient, db *sqldb.BaseDB, accountsDir, networkDir string, clock clock.Clock, - migVersion uint) migrate.ProgrammaticMigrEntry { + migVersion uint, + lndReadyTimeout time.Duration) migrate.ProgrammaticMigrEntry { mig6queries := sqlcmig6.NewForType(db, db.BackendType) mig6executor := sqldb.NewTransactionExecutor( @@ -49,6 +56,7 @@ func Mig6ProgrammaticMigration(ctx context.Context, return kvdbToSqlProgrammaticMigration( ctx, basicClient, accountsDir, networkDir, db, clock, q6, + lndReadyTimeout, ) }, sqldb.NoOpReset, ) @@ -87,7 +95,8 @@ func Mig6ProgrammaticMigration(ctx context.Context, func kvdbToSqlProgrammaticMigration(ctx context.Context, basicClient lnrpc.LightningClient, accountsDir, networkDir string, - _ *sqldb.BaseDB, clock clock.Clock, q *sqlcmig6.Queries) error { + _ *sqldb.BaseDB, clock clock.Clock, q *sqlcmig6.Queries, + lndReadyTimeout time.Duration) error { start := time.Now() @@ -185,43 +194,18 @@ func kvdbToSqlProgrammaticMigration(ctx context.Context, } }() - // We'll fetch the macaroonIDList from `lnd` next. Note that since lnd's - // RPC servers may not have been fully started yet if the execution of - // accounts and session migration were really quick, we poll the request - // up to 120 times with a 0.5 second delay between the attempts. This - // should be a sufficient amount of time for the wallet to have been - // loaded and for the RPC servers to started. - const ( - maxListMacaroonIDAttempts = 120 - listMacaroonIDRetryDelay = 500 * time.Millisecond + // The firewalldb migration below needs lnd's macaroon root key IDs, but + // lnd only starts serving that RPC once it has reached its "RPC active" + // state, which can take well over a minute on nodes with a large + // channel and graph state. So we cannot assume lnd is ready by the time + // the (fast) accounts and session migrations above have completed, and + // instead poll until it is. + macaroonIDList, err := listMacaroonIDsWhenLndReady( + ctx, basicClient, lndReadyTimeout, ) - - var macaroonIDList *lnrpc.ListMacaroonIDsResponse - for i := 1; i <= maxListMacaroonIDAttempts; i++ { - macaroonIDList, err = basicClient.ListMacaroonIDs( - ctx, &lnrpc.ListMacaroonIDsRequest{}, - ) - if err == nil { - break - } - - if i == maxListMacaroonIDAttempts { - return fmt.Errorf("error listing macaroon IDs when "+ - "migrating stores to SQL after %d attempts: %w", - maxListMacaroonIDAttempts, err) - } - - log.Warnf("Failed to list macaroon IDs when migrating "+ - "stores to SQL (attempt %d/%d), retrying in %v: %v", - i, maxListMacaroonIDAttempts, listMacaroonIDRetryDelay, - err) - - select { - case <-ctx.Done(): - return fmt.Errorf("context canceled while retrying "+ - "to list macaroon IDs: %w", ctx.Err()) - case <-time.After(listMacaroonIDRetryDelay): - } + if err != nil { + return fmt.Errorf("error listing macaroon IDs when migrating "+ + "stores to SQL: %w", err) } log.Infof("Successfully listed macaroon IDs during store migration.") @@ -250,6 +234,64 @@ func kvdbToSqlProgrammaticMigration(ctx context.Context, return nil } +// listMacaroonIDsWhenLndReady calls lnd's ListMacaroonIDs RPC, retrying every +// listMacaroonIDRetryDelay until it succeeds, until the lndReadyTimeout budget +// is exhausted, or until the passed context is canceled (litd shutting down). +// +// NOTE: lndReadyTimeout is meant to be a generous backstop rather than a tight +// bound (see its default in the main config). litd cannot complete the kvdb to +// SQL migration without lnd, so timing out here aborts litd startup entirely +// and forces a manual restart; waiting longer for a slow-but-healthy lnd is +// strictly preferable to that. +func listMacaroonIDsWhenLndReady(ctx context.Context, + basicClient lnrpc.LightningClient, + lndReadyTimeout time.Duration) (*lnrpc.ListMacaroonIDsResponse, error) { + + start := time.Now() + + waitCtx, cancel := context.WithTimeout(ctx, lndReadyTimeout) + defer cancel() + + for attempt := 1; ; attempt++ { + // We pass waitCtx rather than ctx so that a single hanging call + // cannot outlive the lnd-ready budget. + macaroonIDList, err := basicClient.ListMacaroonIDs( + waitCtx, &lnrpc.ListMacaroonIDsRequest{}, + ) + if err == nil { + return macaroonIDList, nil + } + + log.Warnf("Failed to list macaroon IDs when migrating stores "+ + "to SQL (attempt %d after %v): %v", attempt, + time.Since(start), err) + + select { + case <-waitCtx.Done(): + // waitCtx is derived from ctx, so it also fires when + // the daemon shuts down. Check the parent explicitly + // first so that a shutdown mid-retry is reported as + // such instead of as a readiness timeout. + if ctx.Err() != nil { + return nil, fmt.Errorf("aborted after %d "+ + "attempts over %v while waiting for "+ + "lnd's RPC server to become ready: "+ + "%w", attempt, time.Since(start), + ctx.Err()) + } + + return nil, fmt.Errorf("lnd's RPC server did not "+ + "become ready within %v (%d attempts over "+ + "%v); increase --lndreadytimeout if lnd "+ + "legitimately needs longer to start up: %w", + lndReadyTimeout, attempt, time.Since(start), + err) + + case <-time.After(listMacaroonIDRetryDelay): + } + } +} + // deprecateKVDBStores marks the old kvdb stores as deprecated after the SQL // migration committed successfully. We do this after the SQL transaction is // committed so a failed SQL migration cannot strand the user with an unusable diff --git a/db/migsets/programmatic_migrations_test.go b/db/migsets/programmatic_migrations_test.go index 49d3b110..a48f2eb4 100644 --- a/db/migsets/programmatic_migrations_test.go +++ b/db/migsets/programmatic_migrations_test.go @@ -2,6 +2,7 @@ package migsets import ( "context" + "errors" "net" "os" "path/filepath" @@ -22,6 +23,12 @@ import ( "google.golang.org/grpc/test/bufconn" ) +// testLndReadyTimeout is the lnd RPC-ready timeout used for the migration in +// these tests. The test lnd server is ready immediately, so any positive value +// works; we use a short one so a broken poll loop fails fast rather than +// hanging the test. +const testLndReadyTimeout = 5 * time.Second + // TestKVDBToSQLProgrammaticMigrationSkipsMissingStores verifies that the kvdb // to SQL migration does not create missing legacy kvdb files while scanning for // stores to migrate. @@ -39,6 +46,7 @@ func TestKVDBToSQLProgrammaticMigrationSkipsMissingStores(t *testing.T) { err := kvdbToSqlProgrammaticMigration( context.Background(), nil, accountsDir, networkDir, sqlStore.BaseDB, clock.NewDefaultClock(), queries, + testLndReadyTimeout, ) require.NoError(t, err) @@ -72,11 +80,12 @@ func TestKVDBToSQLProgrammaticMigrationRunsWithOneBBoltDBFiles(t *testing.T) { sqlStore.BaseDB, sqlStore.BackendType, ) - lndClient := newTestLightningClient(t) + lndClient := newTestLightningClient(t, nil) err = kvdbToSqlProgrammaticMigration( ctx, lndClient, accountsDir, networkDir, sqlStore.BaseDB, testClock, queries, + testLndReadyTimeout, ) require.NoError(t, err) @@ -93,6 +102,43 @@ func TestKVDBToSQLProgrammaticMigrationRunsWithOneBBoltDBFiles(t *testing.T) { require.Empty(t, dbSessions) } +// TestListMacaroonIDsWhenLndReadyTimeout asserts that we give up with a helpful +// error, pointing at the lndreadytimeout option, once the lnd-ready budget is +// exhausted without lnd ever becoming ready. +func TestListMacaroonIDsWhenLndReadyTimeout(t *testing.T) { + t.Parallel() + + // The server never becomes ready, so the only way out is the timeout. + // We use a timeout well below listMacaroonIDRetryDelay so that the + // budget is exhausted during the first retry wait. + lndClient := newTestLightningClient(t, errNotReady) + + _, err := listMacaroonIDsWhenLndReady( + context.Background(), lndClient, 50*time.Millisecond, + ) + require.ErrorContains(t, err, "did not become ready") + require.ErrorContains(t, err, "--lndreadytimeout") + require.ErrorContains(t, err, errNotReady.Error()) +} + +// TestListMacaroonIDsWhenLndReadyCancel asserts that a canceled parent context +// (litd shutting down) is surfaced as a cancellation rather than as a readiness +// timeout. +func TestListMacaroonIDsWhenLndReadyCancel(t *testing.T) { + t.Parallel() + + lndClient := newTestLightningClient(t, errNotReady) + + // Cancel the parent context up front, so that the generous timeout + // below is never the reason we stop retrying. + ctx, cancel := context.WithCancel(context.Background()) + cancel() + + _, err := listMacaroonIDsWhenLndReady(ctx, lndClient, time.Hour) + require.ErrorIs(t, err, context.Canceled) + require.NotContains(t, err.Error(), "did not become ready") +} + func requireNoFile(t *testing.T, path string) { t.Helper() @@ -107,12 +153,23 @@ func requireFileExists(t *testing.T, path string) { require.NoError(t, err) } -func newTestLightningClient(t *testing.T) lnrpc.LightningClient { +// errNotReady mimics the error lnd's RPC server returns before it has reached +// its "RPC active" state. +var errNotReady = errors.New("the RPC server is in the process of starting up") + +// newTestLightningClient returns a client backed by an in-memory lnd stub. If +// listMacaroonIDsErr is non-nil, all ListMacaroonIDs calls fail with it, +// simulating an lnd that never becomes ready. +func newTestLightningClient(t *testing.T, + listMacaroonIDsErr error) lnrpc.LightningClient { + t.Helper() lis := bufconn.Listen(1024 * 1024) server := grpc.NewServer() - lnrpc.RegisterLightningServer(server, &testLightningServer{}) + lnrpc.RegisterLightningServer(server, &testLightningServer{ + listMacaroonIDsErr: listMacaroonIDsErr, + }) go func() { _ = server.Serve(lis) @@ -143,10 +200,16 @@ func newTestLightningClient(t *testing.T) lnrpc.LightningClient { type testLightningServer struct { lnrpc.UnimplementedLightningServer + + listMacaroonIDsErr error } func (t *testLightningServer) ListMacaroonIDs(context.Context, *lnrpc.ListMacaroonIDsRequest) (*lnrpc.ListMacaroonIDsResponse, error) { + if t.listMacaroonIDsErr != nil { + return nil, t.listMacaroonIDsErr + } + return &lnrpc.ListMacaroonIDsResponse{}, nil } diff --git a/db/migsets/sql_migrations.go b/db/migsets/sql_migrations.go index 6fde04ac..f3164be5 100644 --- a/db/migsets/sql_migrations.go +++ b/db/migsets/sql_migrations.go @@ -5,6 +5,7 @@ package migsets import ( "context" "path/filepath" + "time" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/pgx/v5" @@ -16,8 +17,8 @@ import ( // MakeMigrationSets creates the migration sets for production environments. func MakeMigrationSets(ctx context.Context, basicClient lnrpc.LightningClient, - macPath, litDir, network string, - clock clock.Clock) []sqldb.MigrationSet { + macPath, litDir, network string, clock clock.Clock, + lndReadyTimeout time.Duration) []sqldb.MigrationSet { accountsDir := filepath.Dir(macPath) networkDir := filepath.Join(litDir, network) @@ -50,6 +51,7 @@ func MakeMigrationSets(ctx context.Context, basicClient lnrpc.LightningClient, res[db.KVDBtoSQLMigVersion] = Mig6ProgrammaticMigration( ctx, basicClient, baseDB, accountsDir, networkDir, clock, db.KVDBtoSQLMigVersion, + lndReadyTimeout, ) return res, nil diff --git a/db/migsets/sql_migrations_dev.go b/db/migsets/sql_migrations_dev.go index 569eae33..8d703da8 100644 --- a/db/migsets/sql_migrations_dev.go +++ b/db/migsets/sql_migrations_dev.go @@ -5,6 +5,7 @@ package migsets import ( "context" "path/filepath" + "time" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database/pgx/v5" @@ -17,7 +18,8 @@ import ( // MakeMigrationSets creates the migration sets for the dev environments. func MakeMigrationSets(ctx context.Context, basicClient lnrpc.LightningClient, macPath, litDir, network string, - clock clock.Clock) []sqldb.MigrationSet { + clock clock.Clock, + lndReadyTimeout time.Duration) []sqldb.MigrationSet { accountsDir := filepath.Dir(macPath) networkDir := filepath.Join(litDir, network) @@ -49,6 +51,7 @@ func MakeMigrationSets(ctx context.Context, res[db.KVDBtoSQLMigVersion] = Mig6ProgrammaticMigration( ctx, basicClient, baseDB, accountsDir, networkDir, clock, db.KVDBtoSQLMigVersion, + lndReadyTimeout, ) return res, nil From 970a3fb55d6ea0f33387c00c4917e4f0e156e329 Mon Sep 17 00:00:00 2001 From: Elle Mouton Date: Tue, 21 Jul 2026 14:37:59 -0700 Subject: [PATCH 63/69] docs: add release note for the lnd-ready migration timeout Document the new --lndreadytimeout option and the startup failure it fixes in the 0.17.1 release notes. --- docs/release-notes/release-notes-0.17.1.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/release-notes/release-notes-0.17.1.md b/docs/release-notes/release-notes-0.17.1.md index ec6c8366..099bf9e7 100644 --- a/docs/release-notes/release-notes-0.17.1.md +++ b/docs/release-notes/release-notes-0.17.1.md @@ -31,6 +31,17 @@ of being masked by a confusing `no request values found for request: ` error. +* [Wait longer for lnd during the kvdb-to-SQL + migration](https://github.com/lightninglabs/lightning-terminal/pull/1359): + The kvdb-to-SQL data migration polls lnd's `ListMacaroonIDs` RPC, which only + becomes available once lnd reaches its "RPC active" state. On nodes with a + large channel/graph state, lnd can take well over a minute to get there after + the wallet is unlocked, which exceeded the previous fixed 60-second poll + budget and caused the migration (and therefore litd startup) to fail + permanently, requiring a manual restart. The wait is now bounded by a + configurable, generous timeout (`--lndreadytimeout`, defaulting to 10 + minutes) instead of a fixed attempt count. + ### Functional Changes/Additions * [Add accounts payments history subcommand](https://github.com/lightninglabs/lightning-terminal/pull/1316): From ae7439243363f6dfcf56da3c0341142a6f01f197 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Mon, 3 Aug 2026 14:25:23 -0700 Subject: [PATCH 64/69] accounts: add a configurable maximum account payment size Add an opt-in cap on the total amount a single account payment may debit, including routing fees, enforced at the account interceptor for both SendPaymentV2 and SendToRouteV2. When the new accounts.max-payment-size-msat config option is set to a non-zero value, payments whose amount plus fees exceeds it are rejected with ErrPaymentExceedsMaxSize before the balance check and before any funds are reserved. For SendPaymentV2, the configured fee limit is included in the capped amount. For SendToRouteV2, the route's stated fee is included. This gives operators a guard rail against a compromised or misbehaving account macaroon draining its balance in a single large payment. The cap defaults to 0 (disabled), preserving existing behaviour, and is a first step towards the finer-grained per-account spending controls requested in the issue. --- accounts/checkers.go | 62 +++++++++--- accounts/checkers_test.go | 110 ++++++++++++++++++++- accounts/interface.go | 5 + accounts/service.go | 44 ++++++++- docs/release-notes/release-notes-0.17.1.md | 14 +++ terminal.go | 13 ++- 6 files changed, 229 insertions(+), 19 deletions(-) diff --git a/accounts/checkers.go b/accounts/checkers.go index 53eda5a1..0b14e25f 100644 --- a/accounts/checkers.go +++ b/accounts/checkers.go @@ -3,6 +3,7 @@ package accounts import ( "context" "fmt" + "math/bits" "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" @@ -79,8 +80,10 @@ type AccountChecker struct { // NewAccountChecker creates a new account checker that can keep track of all // account related requests, including invoices, payments and account balances. -func NewAccountChecker(service Service, - chainParams *chaincfg.Params) *AccountChecker { +// If maxPaymentSize is greater than zero, payments whose amount exceeds it are +// rejected. +func NewAccountChecker(service Service, chainParams *chaincfg.Params, + maxPaymentSize lnwire.MilliSatoshi) *AccountChecker { // nolint:ll checkers := CheckerMap{ @@ -162,9 +165,9 @@ func NewAccountChecker(service Service, } return checkSend( - ctx, chainParams, service, r.Amt, - r.AmtMsat, r.PaymentRequest, - r.PaymentHash, + ctx, chainParams, service, + maxPaymentSize, r.Amt, r.AmtMsat, + r.PaymentRequest, r.PaymentHash, &lnrpc.FeeLimit{ Limit: &lnrpc.FeeLimit_FixedMsat{ FixedMsat: feeLimitMsat, @@ -196,7 +199,8 @@ func NewAccountChecker(service Service, r *routerrpc.SendToRouteRequest) error { return checkSendToRoute( - ctx, service, r.PaymentHash, r.Route, + ctx, service, maxPaymentSize, + r.PaymentHash, r.Route, ) }, sendToRouteHTLCResponseHandler(service), @@ -465,11 +469,22 @@ func filterPayments(ctx context.Context, return filteredPayments, nil } +// checkMaxPaymentSize returns an error if a maximum account payment size is +// configured (non-zero) and the given total payment amount exceeds it. +func checkMaxPaymentSize(maxPaymentSize, amt lnwire.MilliSatoshi) error { + if maxPaymentSize != 0 && amt > maxPaymentSize { + return fmt.Errorf("%w: amount %v exceeds the maximum of %v", + ErrPaymentExceedsMaxSize, amt, maxPaymentSize) + } + + return nil +} + // checkSend checks if a payment can be initiated by making sure the account in // the context has enough balance to pay for it. func checkSend(ctx context.Context, chainParams *chaincfg.Params, - service Service, amt, amtMsat int64, invoice string, - paymentHash []byte, feeLimit *lnrpc.FeeLimit) error { + service Service, maxPaymentSize lnwire.MilliSatoshi, amt, amtMsat int64, + invoice string, paymentHash []byte, feeLimit *lnrpc.FeeLimit) error { log, acct, reqID, err := requestScopedValuesFromCtx(ctx) if err != nil { @@ -540,7 +555,19 @@ func checkSend(ctx context.Context, chainParams *chaincfg.Params, limit = &lnrpc.FeeLimit{} } fee := lnrpc.CalculateFeeLimit(limit, sendAmt) - sendAmt += fee + + // Add the fee explicitly and reject amounts that cannot be represented. + total, carry := bits.Add64(uint64(sendAmt), uint64(fee), 0) + if carry != 0 { + return ErrAccBalanceInsufficient + } + sendAmt = lnwire.MilliSatoshi(total) + + // Enforce the configured maximum payment size on the full amount that + // may be debited from the account. + if err := checkMaxPaymentSize(maxPaymentSize, sendAmt); err != nil { + return err + } err = service.CheckBalance(ctx, acct.ID, sendAmt) if err != nil { @@ -607,7 +634,8 @@ func checkSendResponse(ctx context.Context, service Service, // checkSendToRoute checks if a payment can be sent to the route by making sure // the account in the context has enough balance to pay for it. -func checkSendToRoute(ctx context.Context, service Service, paymentHash []byte, +func checkSendToRoute(ctx context.Context, service Service, + maxPaymentSize lnwire.MilliSatoshi, paymentHash []byte, route *lnrpc.Route) error { log, acct, reqID, err := requestScopedValuesFromCtx(ctx) @@ -640,7 +668,19 @@ func checkSendToRoute(ctx context.Context, service Service, paymentHash []byte, if lnwire.MilliSatoshi(route.TotalFeesMsat) > fee { fee = lnwire.MilliSatoshi(route.TotalFeesMsat) } - sendAmt += fee + + // Add the fee explicitly and reject amounts that cannot be represented. + total, carry := bits.Add64(uint64(sendAmt), uint64(fee), 0) + if carry != 0 { + return ErrAccBalanceInsufficient + } + sendAmt = lnwire.MilliSatoshi(total) + + // Enforce the configured maximum payment size on the full amount that + // may be debited from the account. + if err := checkMaxPaymentSize(maxPaymentSize, sendAmt); err != nil { + return err + } err = service.CheckBalance(ctx, acct.ID, sendAmt) if err != nil { diff --git a/accounts/checkers_test.go b/accounts/checkers_test.go index 8c4e294b..4399e9c4 100644 --- a/accounts/checkers_test.go +++ b/accounts/checkers_test.go @@ -144,7 +144,7 @@ var _ Service = (*mockService)(nil) func TestAccountChecker(t *testing.T) { t.Parallel() - checker := NewAccountChecker(nil, nil) + checker := NewAccountChecker(nil, nil, 0) for checkerName := range checker.checkers { t.Logf("Checker registered: %v", checkerName) } @@ -442,7 +442,7 @@ func TestAccountCheckers(t *testing.T) { tt.Parallel() service := newMockService() - checkers := NewAccountChecker(service, chainParams) + checkers := NewAccountChecker(service, chainParams, 0) acct := &OffChainBalanceAccount{ ID: testID, Type: TypeInitialBalance, @@ -923,3 +923,109 @@ func assertMessagesEqual(t *testing.T, expected, actual proto.Message) { require.Equal(t, string(expectedJSON), string(actualJSON)) } + +// TestSendPaymentV2MaxPaymentSize tests that, when a maximum account payment +// size is configured, the SendPaymentV2 checker rejects payments whose total +// amount, including the fee limit, exceeds the cap (issue #583). +func TestSendPaymentV2MaxPaymentSize(t *testing.T) { + var ( + uri = "/routerrpc.Router/SendPaymentV2" + ctx = context.Background() + requestID uint64 + ) + + nextRequestID := func() uint64 { + requestID++ + + return requestID + } + + lndMock := newMockLnd() + routerMock := newMockRouter() + errFunc := func(err error) { + lndMock.mainErrChan <- err + } + clk := clock.NewTestClock(time.Now()) + store := NewTestDB(t, clk) + service, err := NewService(store, errFunc, WithMaxPaymentSize(2000)) + require.NoError(t, err) + + err = service.Start(ctx, lndMock, routerMock, chainParams) + require.NoError(t, err) + t.Cleanup(func() { + _ = service.Stop() + }) + + acct, err := service.NewAccount( + ctx, 1_000_000, clk.Now().Add(time.Hour), "max", + ) + require.NoError(t, err) + + ctxWithAcct := AddAccountToContext(ctx, acct) + + // A payment whose total amount is exactly at the cap is allowed. + ctx1 := AddRequestIDToContext(ctxWithAcct, nextRequestID()) + err = service.checkers.checkIncomingRequest( + ctx1, uri, &routerrpc.SendPaymentRequest{ + AmtMsat: 2000, + PaymentHash: testHash[:], + }, + ) + require.NoError(t, err) + + // A payment whose amount exceeds the cap is rejected. + ctx2 := AddRequestIDToContext(ctxWithAcct, nextRequestID()) + err = service.checkers.checkIncomingRequest( + ctx2, uri, &routerrpc.SendPaymentRequest{ + AmtMsat: 2001, + PaymentHash: testHash2[:], + }, + ) + require.ErrorIs(t, err, ErrPaymentExceedsMaxSize) + + // A fee limit that brings an otherwise valid payment over the cap is + // rejected as well. + ctx3 := AddRequestIDToContext(ctxWithAcct, nextRequestID()) + err = service.checkers.checkIncomingRequest( + ctx3, uri, &routerrpc.SendPaymentRequest{ + AmtMsat: 1900, + FeeLimitMsat: 101, + PaymentHash: testHash3[:], + }, + ) + require.ErrorIs(t, err, ErrPaymentExceedsMaxSize) +} + +func TestSendToRouteV2MaxPaymentSize(t *testing.T) { + const uri = "/routerrpc.Router/SendToRouteV2" + + ctx := context.Background() + lndMock := newMockLnd() + routerMock := newMockRouter() + service, err := NewService( + NewTestDB(t, clock.NewTestClock(time.Now())), + func(err error) { lndMock.mainErrChan <- err }, + WithMaxPaymentSize(2000), + ) + require.NoError(t, err) + err = service.Start(ctx, lndMock, routerMock, chainParams) + require.NoError(t, err) + t.Cleanup(func() { _ = service.Stop() }) + + acct, err := service.NewAccount( + ctx, 1_000_000, time.Now().Add(time.Hour), "max", + ) + require.NoError(t, err) + + ctx = AddRequestIDToContext(AddAccountToContext(ctx, acct), 1) + err = service.checkers.checkIncomingRequest( + ctx, uri, &routerrpc.SendToRouteRequest{ + PaymentHash: testHash[:], + Route: &lnrpc.Route{ + TotalAmtMsat: 1900, + TotalFeesMsat: 101, + }, + }, + ) + require.ErrorIs(t, err, ErrPaymentExceedsMaxSize) +} diff --git a/accounts/interface.go b/accounts/interface.go index f78a66f7..fe7c030b 100644 --- a/accounts/interface.go +++ b/accounts/interface.go @@ -194,6 +194,11 @@ var ( // account ErrAccBalanceInsufficient = errors.New("account balance insufficient") + // ErrPaymentExceedsMaxSize is returned when a maximum account payment + // size is configured and a payment's total amount exceeds it. + ErrPaymentExceedsMaxSize = errors.New("payment amount exceeds the " + + "maximum allowed account payment size") + // ErrNotSupportedWithAccounts is the error that is returned when an RPC // is called that isn't supported to be handled by the account // interceptor. diff --git a/accounts/service.go b/accounts/service.go index 0d925a37..18417d17 100644 --- a/accounts/service.go +++ b/accounts/service.go @@ -19,9 +19,21 @@ import ( ) // Config holds the configuration options for the accounts service. +// +//nolint:ll type Config struct { // Disable will disable the accounts service if set. Disable bool `long:"disable" description:"disable the accounts service"` + + // MaxPaymentSizeMsat, when greater than zero, is the maximum value (in + // millisatoshis) that a single account payment may have. Payments whose + // amount exceeds this cap are rejected by the account interceptor. This + // provides a guard rail against a compromised or misbehaving account + // macaroon draining its balance in a single large payment. + // + // It defaults to 0, which disables the cap and preserves the historical + // behaviour of allowing payments up to the full account balance. + MaxPaymentSizeMsat uint64 `long:"max-payment-size-msat" description:"the maximum total amount in millisatoshis, including fees, that a single account payment may debit; 0 (the default value) disables the cap"` } // trackedPayment is a struct that holds all information that identifies a @@ -56,6 +68,10 @@ type InterceptorService struct { routerClient lndclient.RouterClient + // maxPaymentSize, when greater than zero, is the maximum value that a + // single account payment may have. See Config.MaxPaymentSizeMsat. + maxPaymentSize lnwire.MilliSatoshi + mainCtx context.Context contextCancel fn.Option[context.CancelFunc] @@ -77,12 +93,24 @@ type InterceptorService struct { isEnabled bool } +// ServiceOption is a functional option that can be used to modify the behaviour +// of the InterceptorService. +type ServiceOption func(*InterceptorService) + +// WithMaxPaymentSize sets the maximum value that a single account payment may +// have. A value of zero (the default) disables the cap. +func WithMaxPaymentSize(maxPaymentSize lnwire.MilliSatoshi) ServiceOption { + return func(s *InterceptorService) { + s.maxPaymentSize = maxPaymentSize + } +} + // NewService returns a service backed by the macaroon Bolt DB stored in the // passed-in directory. -func NewService(store Store, errCallback func(error)) (*InterceptorService, - error) { +func NewService(store Store, errCallback func(error), + opts ...ServiceOption) (*InterceptorService, error) { - return &InterceptorService{ + s := &InterceptorService{ store: store, invoiceToAccount: make(map[lntypes.Hash]AccountID), pendingPayments: make(map[lntypes.Hash]*trackedPayment), @@ -90,7 +118,13 @@ func NewService(store Store, errCallback func(error)) (*InterceptorService, mainErrCallback: errCallback, quit: make(chan struct{}), isEnabled: false, - }, nil + } + + for _, opt := range opts { + opt(s) + } + + return s, nil } // Start starts the account service and its interceptor capability. @@ -103,7 +137,7 @@ func (s *InterceptorService) Start(ctx context.Context, s.contextCancel = fn.Some(contextCancel) s.routerClient = routerClient - s.checkers = NewAccountChecker(s, params) + s.checkers = NewAccountChecker(s, params, s.maxPaymentSize) s.isEnabled = true diff --git a/docs/release-notes/release-notes-0.17.1.md b/docs/release-notes/release-notes-0.17.1.md index 099bf9e7..6a421cd2 100644 --- a/docs/release-notes/release-notes-0.17.1.md +++ b/docs/release-notes/release-notes-0.17.1.md @@ -59,6 +59,20 @@ sub-servers on startup. If the macaroon already exists but has different permissions, it will be automatically regenerated. +* [Add a configurable maximum account payment + size](https://github.com/lightninglabs/lightning-terminal/pull/1369): + Addresses [ + #583](https://github.com/lightninglabs/lightning-terminal/issues/583). + Added an `accounts.max-payment-size-msat` config option. When set to a + non-zero value, the account interceptor rejects any single account payment + (`SendPaymentV2`/`SendToRouteV2`) whose total amount, including fees, + exceeds the configured cap, + providing a guard rail against a compromised or misbehaving account macaroon + draining its balance in one large payment. It defaults to 0 (no cap), + preserving existing behaviour. This is a first step towards the finer-grained + per-account spending controls tracked in the issue (e.g. per-interval spend + limits). + ### Technical and Architectural Updates * [Report litd's own version for `litd diff --git a/terminal.go b/terminal.go index 36746444..69769dd3 100644 --- a/terminal.go +++ b/terminal.go @@ -58,6 +58,7 @@ import ( "github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet/btcwallet" "github.com/lightningnetwork/lnd/lnwallet/chancloser" + "github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/macaroons" "github.com/lightningnetwork/lnd/msgmux" "github.com/lightningnetwork/lnd/rpcperms" @@ -782,8 +783,18 @@ func (g *LightningTerminal) start(ctx context.Context) error { return fmt.Errorf("could not start firewall DB: %v", err) } + var accountsOpts []accounts.ServiceOption + if g.cfg.Accounts.MaxPaymentSizeMsat > 0 { + accountsOpts = append( + accountsOpts, accounts.WithMaxPaymentSize( + lnwire.MilliSatoshi( + g.cfg.Accounts.MaxPaymentSizeMsat, + ), + ), + ) + } g.accountService, err = accounts.NewService( - g.stores.accounts, accountServiceErrCallback, + g.stores.accounts, accountServiceErrCallback, accountsOpts..., ) if err != nil { return fmt.Errorf("error creating account service: %v", err) From a493b6a3d68ae740ce43e943af7cbcb070b94989 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Mon, 3 Aug 2026 14:21:03 -0700 Subject: [PATCH 65/69] accounts: optionally cap account balances at the node channel balance Add an opt-in check that prevents the sum of all account balances from exceeding the node's available local (outbound) channel balance. When enabled via the new accounts.check-channel-balance config option, the service rejects balance allocations that would over-provision the node: creating an account, an administrative credit, or an administrative balance increase now fails with ErrBalanceReservationExceeded if it would push the total allocated balance above the node's local channel balance. Note that the total channel balance may still decrease below the already allocated account balance. This can occur if the node operator decreases the total channel balance through non-account related activity. The check is a no-op by default to preserve the historical behaviour where the operator manages over-provisioning themselves (accounts can legitimately be created before channels are funded). Invoice-driven credits are unaffected, as they are backed by real inbound payments. --- accounts/interface.go | 8 + accounts/service.go | 203 ++++++++++++++++++--- accounts/service_test.go | 167 +++++++++++++++++ docs/release-notes/release-notes-0.17.1.md | 11 ++ terminal.go | 7 + 5 files changed, 375 insertions(+), 21 deletions(-) diff --git a/accounts/interface.go b/accounts/interface.go index fe7c030b..618f7d3f 100644 --- a/accounts/interface.go +++ b/accounts/interface.go @@ -199,6 +199,14 @@ var ( ErrPaymentExceedsMaxSize = errors.New("payment amount exceeds the " + "maximum allowed account payment size") + // ErrBalanceReservationExceeded is returned when the channel-balance + // check is enabled and an account balance allocation would push the sum + // of all account balances above the node's available local channel + // balance. + ErrBalanceReservationExceeded = errors.New("account balance " + + "allocation would exceed the node's available local channel " + + "balance") + // ErrNotSupportedWithAccounts is the error that is returned when an RPC // is called that isn't supported to be handled by the account // interceptor. diff --git a/accounts/service.go b/accounts/service.go index 18417d17..87c9c043 100644 --- a/accounts/service.go +++ b/accounts/service.go @@ -34,6 +34,22 @@ type Config struct { // It defaults to 0, which disables the cap and preserves the historical // behaviour of allowing payments up to the full account balance. MaxPaymentSizeMsat uint64 `long:"max-payment-size-msat" description:"the maximum total amount in millisatoshis, including fees, that a single account payment may debit; 0 (the default value) disables the cap"` + + // CheckChannelBalance, when set, makes the accounts service reject + // account balance allocations (new accounts, administrative credits and + // administrative balance increases) that would push the sum of all + // account balances above the node's available total local (outbound) + // channel balance. + // + // It defaults to false to preserve the historical behaviour, where the + // operator is trusted to manage over-provisioning themselves; accounts + // can legitimately be created before channels are opened or funded. + // + // NOTE: The total channel balance may still decrease below the already + // allocated account balance. This can occur if the node operator + // decreases the total channel balance through non-account related + // activity. + CheckChannelBalance bool `long:"check-channel-balance" description:"reject account balance allocations that would push the sum of all account balances above the node's available local channel balance. Note that the total channel balance can still decrease below the already allocated account balance. This can occur if the node operator decreases the total channel balance through non-account related activity."` } // trackedPayment is a struct that holds all information that identifies a @@ -66,7 +82,13 @@ type InterceptorService struct { store Store - routerClient lndclient.RouterClient + routerClient lndclient.RouterClient + lightningClient lndclient.LightningClient + + // checkChannelBalance, when set, makes the service reject account + // balance allocations that would exceed the node's available local + // channel balance. See Config.CheckChannelBalance. + checkChannelBalance bool // maxPaymentSize, when greater than zero, is the maximum value that a // single account payment may have. See Config.MaxPaymentSizeMsat. @@ -105,6 +127,15 @@ func WithMaxPaymentSize(maxPaymentSize lnwire.MilliSatoshi) ServiceOption { } } +// WithChannelBalanceCheck enables validation that the sum of all account +// balances never exceeds the node's available local channel balance when +// allocating account balances (new accounts, credits and balance increases). +func WithChannelBalanceCheck() ServiceOption { + return func(s *InterceptorService) { + s.checkChannelBalance = true + } +} + // NewService returns a service backed by the macaroon Bolt DB stored in the // passed-in directory. func NewService(store Store, errCallback func(error), @@ -137,6 +168,7 @@ func (s *InterceptorService) Start(ctx context.Context, s.contextCancel = fn.Some(contextCancel) s.routerClient = routerClient + s.lightningClient = lightningClient s.checkers = NewAccountChecker(s, params, s.maxPaymentSize) s.isEnabled = true @@ -325,9 +357,22 @@ func (s *InterceptorService) NewAccount(ctx context.Context, expirationDate time.Time, label string) (*OffChainBalanceAccount, error) { + availableChannelBalance, err := s.fetchChannelBalance(ctx) + if err != nil { + return nil, err + } + s.Lock() defer s.Unlock() + // Make sure allocating this account's balance doesn't over-provision + // the node's available local channel balance (no-op unless enabled). + if err := s.checkChannelBalanceReservationUnsafe( + ctx, balance, availableChannelBalance, + ); err != nil { + return nil, err + } + return s.store.NewAccount(ctx, balance, expirationDate, label) } @@ -338,6 +383,29 @@ func (s *InterceptorService) UpdateAccount(ctx context.Context, expirationDate int64, newLabel string) (*OffChainBalanceAccount, error) { + // Convert the requested account balance to millisatoshis. An empty + // option signals that the stored balance should not be updated. + var ( + balance fn.Option[int64] + availableChannelBalance lnwire.MilliSatoshi + err error + ) + + if accountBalance >= 0 { + // If the new account balance was set, parse it as + // millisatoshis. A value of -1 signals "don't update the + // balance". + balance = fn.Some(int64( + // Convert from satoshis to millisatoshis for storage. + lnwire.NewMSatFromSatoshis(accountBalance), + )) + + availableChannelBalance, err = s.fetchChannelBalance(ctx) + if err != nil { + return nil, err + } + } + s.Lock() defer s.Unlock() @@ -361,14 +429,6 @@ func (s *InterceptorService) UpdateAccount(ctx context.Context, expiry = fn.Some(time.Time{}) } - // If the new account balance was set, parse it as millisatoshis. A - // value of -1 signals "don't update the balance". - var balance fn.Option[int64] - if accountBalance >= 0 { - // Convert from satoshis to millisatoshis for storage. - balance = fn.Some(int64(accountBalance) * 1000) - } - // If a new label was provided, wrap it in an option. An empty // string is treated as "no update requested" because protobuf // cannot distinguish an absent field from the zero value "". @@ -377,10 +437,32 @@ func (s *InterceptorService) UpdateAccount(ctx context.Context, label = fn.Some(newLabel) } + // If the balance is being increased, make sure the increase doesn't + // over-provision the node's available local channel balance (no-op + // unless the `checkChannelBalance` option is enabled). + if balance.IsSome() && s.checkChannelBalance { + acct, err := s.store.Account(ctx, accountID) + if err != nil { + return nil, fmt.Errorf("fetching account: %w", err) + } + + newBalanceMsat := balance.UnwrapOr(0) + requestedBalanceIncrease := newBalanceMsat - acct.CurrentBalance + + if requestedBalanceIncrease > 0 { + err := s.checkChannelBalanceReservationUnsafe( + ctx, + lnwire.MilliSatoshi(requestedBalanceIncrease), + availableChannelBalance, + ) + if err != nil { + return nil, err + } + } + } + // Create the actual account in the macaroon account store. - err := s.store.UpdateAccount( - ctx, accountID, balance, expiry, label, - ) + err = s.store.UpdateAccount(ctx, accountID, balance, expiry, label) if err != nil { return nil, fmt.Errorf("unable to update account: %w", err) } @@ -393,6 +475,11 @@ func (s *InterceptorService) CreditAccount(ctx context.Context, accountID AccountID, amount lnwire.MilliSatoshi) (*OffChainBalanceAccount, error) { + availableChannelBalance, err := s.fetchChannelBalance(ctx) + if err != nil { + return nil, err + } + s.Lock() defer s.Unlock() @@ -404,8 +491,16 @@ func (s *InterceptorService) CreditAccount(ctx context.Context, return nil, ErrAccountServiceDisabled } + // Make sure crediting this amount doesn't over-provision the node's + // available local channel balance (no-op unless enabled). + if err := s.checkChannelBalanceReservationUnsafe( + ctx, amount, availableChannelBalance, + ); err != nil { + return nil, err + } + // Credit the account in the DB. - err := s.store.CreditAccount(ctx, accountID, amount) + err = s.store.CreditAccount(ctx, accountID, amount) if err != nil { return nil, fmt.Errorf("unable to credit account: %w", err) } @@ -502,13 +597,82 @@ func (s *InterceptorService) CheckBalance(ctx context.Context, id AccountID, } availableAmount := calcAvailableAccountBalance(account) - if availableAmount < int64(requiredBalance) { + + // Ensure that the availableAmount is greater than the requiredBalance. + if availableAmount < 0 || + lnwire.MilliSatoshi(availableAmount) < requiredBalance { + return ErrAccBalanceInsufficient } return nil } +// fetchChannelBalance fetches the node's available local channel balance. It +// returns zero without querying the Lightning client if the +// `checkChannelBalance` option is not enabled. +// +// This network call must happen before acquiring the service lock so an +// unavailable Lightning client doesn't block unrelated account operations. +func (s *InterceptorService) fetchChannelBalance(ctx context.Context) ( + lnwire.MilliSatoshi, error) { + + if !s.checkChannelBalance { + return 0, nil + } + + if s.lightningClient == nil { + return 0, errors.New("cannot check channel balance: " + + "lightning client is not available") + } + + chanBalance, err := s.lightningClient.ChannelBalance(ctx) + if err != nil { + return 0, fmt.Errorf("error querying channel balance: %w", err) + } + + return lnwire.NewMSatFromSatoshis(chanBalance.Balance), nil +} + +// checkChannelBalanceReservationUnsafe ensures that increasing the total +// allocated account balance by the requested balance increase would not push +// the sum of all account balances above the node's available local (outbound) +// channel balance. +// +// The function is a no-op if the `checkChannelBalance` config flag isn't set. +// +// NOTE: the service lock MUST be held when calling this method. +func (s *InterceptorService) checkChannelBalanceReservationUnsafe( + ctx context.Context, requestedBalanceIncrease lnwire.MilliSatoshi, + availableChannelBalance lnwire.MilliSatoshi) error { + + // If the `checkChannelBalance` config flag isn't set, the function is a + // no-op. + if !s.checkChannelBalance { + return nil + } + + accounts, err := s.store.Accounts(ctx) + if err != nil { + return fmt.Errorf("error listing accounts: %w", err) + } + + // Calculate the total account balance after applying the requested + // allocation, then ensure the node's local balance can cover it. + var allocated int64 + for _, acct := range accounts { + allocated += acct.CurrentBalance + } + + if allocated+int64(requestedBalanceIncrease) > + int64(availableChannelBalance) { + + return ErrBalanceReservationExceeded + } + + return nil +} + func calcAvailableAccountBalance(account *OffChainBalanceAccount) int64 { var inFlightAmt int64 for _, payment := range account.Payments { @@ -688,15 +852,12 @@ func (s *InterceptorService) TrackPayment(ctx context.Context, id AccountID, // option to ensure that we return an error if the payment has already // succeeded. We can then match on the ErrAlreadySucceeded error and // exit early if it is returned. + // + // Additionally, we ensure that the account's pending amount is + // preserved while the payment is in-flight. opts := []UpsertPaymentOption{ WithErrIfAlreadySucceeded(), - } - - // There is a case where the passed in fullAmt is zero but the pending - // amount is not. In that case, we should not overwrite the pending - // amount. - if fullAmt == 0 { - opts = append(opts, WithPendingAmount()) + WithPendingAmount(), } known, err := s.store.UpsertAccountPayment( diff --git a/accounts/service_test.go b/accounts/service_test.go index cfd0fb88..a1f6e886 100644 --- a/accounts/service_test.go +++ b/accounts/service_test.go @@ -6,6 +6,7 @@ import ( "testing" "time" + "github.com/btcsuite/btcd/btcutil" "github.com/lightninglabs/lndclient" "github.com/lightningnetwork/lnd/clock" invpkg "github.com/lightningnetwork/lnd/invoices" @@ -35,6 +36,29 @@ type mockLnd struct { invoiceSubscriptionErr error invoiceErrChan chan error invoiceChan chan *lndclient.Invoice + + // channelBalance is the local channel balance reported by the mocked + // ChannelBalance call. + channelBalance btcutil.Amount + + channelBalanceCalled chan struct{} + channelBalanceRelease chan struct{} +} + +// ChannelBalance returns the mocked local channel balance. +func (m *mockLnd) ChannelBalance(_ context.Context) (*lndclient.ChannelBalance, + error) { + + if m.channelBalanceCalled != nil { + m.channelBalanceCalled <- struct{}{} + } + if m.channelBalanceRelease != nil { + <-m.channelBalanceRelease + } + + return &lndclient.ChannelBalance{ + Balance: m.channelBalance, + }, nil } func newMockLnd() *mockLnd { @@ -876,3 +900,146 @@ func TestAccountService(t *testing.T) { func assertEventually(t *testing.T, predicate func() bool) { require.Eventually(t, predicate, testTimeout, testInterval) } + +// TestChannelBalanceReservationCheck tests that, when the channel-balance check +// is enabled, the accounts service rejects balance allocations that would push +// the sum of all account balances above the node's available local channel +// balance (issue #495). +func TestChannelBalanceReservationCheck(t *testing.T) { + t.Parallel() + ctx := context.Background() + + lndMock := newMockLnd() + + // The node has a 10 sat (10_000 msat) local channel balance. + lndMock.channelBalance = 10 + routerMock := newMockRouter() + errFunc := func(err error) { + lndMock.mainErrChan <- err + } + store := NewTestDB(t, clock.NewTestClock(time.Now())) + service, err := NewService(store, errFunc, WithChannelBalanceCheck()) + require.NoError(t, err) + + err = service.Start(ctx, lndMock, routerMock, chainParams) + require.NoError(t, err) + t.Cleanup(func() { + _ = service.Stop() + }) + + // Allocating an account within the node's local balance works. + acct, err := service.NewAccount(ctx, 6000, testExpiration, "a") + require.NoError(t, err) + + // A second account that would push the total allocation over the + // available balance is rejected. + _, err = service.NewAccount(ctx, 5000, testExpiration, "b") + require.ErrorIs(t, err, ErrBalanceReservationExceeded) + + // Crediting the existing account beyond the limit is rejected too. + _, err = service.CreditAccount(ctx, acct.ID, 5000) + require.ErrorIs(t, err, ErrBalanceReservationExceeded) + + // But a credit that stays within the limit succeeds. + updated, err := service.CreditAccount(ctx, acct.ID, 3000) + require.NoError(t, err) + require.EqualValues(t, 9000, updated.CurrentBalance) + + // Increasing the account balance directly is subject to the same check. + _, err = service.UpdateAccount(ctx, acct.ID, 11, -1, "") + require.ErrorIs(t, err, ErrBalanceReservationExceeded) + + updated, err = service.UpdateAccount(ctx, acct.ID, 10, -1, "") + require.NoError(t, err) + require.EqualValues(t, 10_000, updated.CurrentBalance) + + // With the check disabled (the default), over-provisioning is allowed. + plainService, err := NewService(store, errFunc) + require.NoError(t, err) + err = plainService.Start(ctx, lndMock, routerMock, chainParams) + require.NoError(t, err) + t.Cleanup(func() { + _ = plainService.Stop() + }) + + _, err = plainService.NewAccount(ctx, 999999, testExpiration, "c") + require.NoError(t, err) +} + +// TestChannelBalanceReservationRequiresLnd tests that the optional channel +// balance check fails closed if the service has no Lightning client. +func TestChannelBalanceReservationRequiresLnd(t *testing.T) { + t.Parallel() + + store := NewTestDB(t, clock.NewTestClock(time.Now())) + service, err := NewService( + store, func(error) {}, WithChannelBalanceCheck(), + ) + require.NoError(t, err) + + _, err = service.NewAccount( + context.Background(), 1000, testExpiration, "account", + ) + require.ErrorContains(t, err, "lightning client is not available") +} + +// TestChannelBalanceRequestDoesNotHoldLock tests that a slow ChannelBalance +// RPC does not block unrelated account operations. +func TestChannelBalanceRequestDoesNotHoldLock(t *testing.T) { + t.Parallel() + + ctx := context.Background() + lndMock := newMockLnd() + lndMock.channelBalance = 10 + lndMock.channelBalanceCalled = make(chan struct{}, 1) + lndMock.channelBalanceRelease = make(chan struct{}) + + store := NewTestDB(t, clock.NewTestClock(time.Now())) + service, err := NewService( + store, func(error) {}, WithChannelBalanceCheck(), + ) + require.NoError(t, err) + require.NoError(t, service.Start( + ctx, lndMock, newMockRouter(), chainParams, + )) + t.Cleanup(func() { + _ = service.Stop() + }) + + accountErr := make(chan error, 1) + go func() { + _, err := service.NewAccount( + ctx, 1000, testExpiration, "account", + ) + accountErr <- err + }() + + select { + case <-lndMock.channelBalanceCalled: + case <-time.After(testTimeout): + t.Fatal("ChannelBalance was not called") + } + + type accountsResult struct { + accounts []*OffChainBalanceAccount + err error + } + resultChan := make(chan accountsResult, 1) + go func() { + accounts, err := service.Accounts(ctx) + resultChan <- accountsResult{accounts: accounts, err: err} + }() + + select { + case result := <-resultChan: + require.NoError(t, result.err) + require.Empty(t, result.accounts) + + case <-time.After(testTimeout): + close(lndMock.channelBalanceRelease) + t.Fatal("account read blocked by ChannelBalance") + } + + close(lndMock.channelBalanceRelease) + require.NoError(t, <-accountErr) +} diff --git a/docs/release-notes/release-notes-0.17.1.md b/docs/release-notes/release-notes-0.17.1.md index 6a421cd2..1c7490b1 100644 --- a/docs/release-notes/release-notes-0.17.1.md +++ b/docs/release-notes/release-notes-0.17.1.md @@ -73,6 +73,17 @@ per-account spending controls tracked in the issue (e.g. per-interval spend limits). +* [Optionally cap total account balances at the node's channel + balance](https://github.com/lightninglabs/lightning-terminal/pull/1369): + Addresses + [#495](https://github.com/lightninglabs/lightning-terminal/issues/495). + Added an opt-in `accounts.check-channel-balance` config option. When enabled, + the accounts service rejects balance allocations (new accounts, administrative + credits and administrative balance increases) that would push the sum of all + account balances above the node's available local (outbound) channel balance, + helping operators avoid over-provisioning custodial accounts beyond what the + node can actually pay out. It defaults to off to preserve existing behaviour. + ### Technical and Architectural Updates * [Report litd's own version for `litd diff --git a/terminal.go b/terminal.go index 69769dd3..41eae880 100644 --- a/terminal.go +++ b/terminal.go @@ -793,6 +793,13 @@ func (g *LightningTerminal) start(ctx context.Context) error { ), ) } + + if g.cfg.Accounts.CheckChannelBalance { + accountsOpts = append( + accountsOpts, accounts.WithChannelBalanceCheck(), + ) + } + g.accountService, err = accounts.NewService( g.stores.accounts, accountServiceErrCallback, accountsOpts..., ) From 6bca24793ceae748c2f0387c424e3d0bfb5f14c7 Mon Sep 17 00:00:00 2001 From: Viktor Torstensson Date: Fri, 7 Aug 2026 12:25:47 +0200 Subject: [PATCH 66/69] docs: document account operator controls Document the configurable maximum account payment size and optional channel balance reservation check, including their defaults, fee handling, and operational limitations. --- docs/accounts.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/accounts.md b/docs/accounts.md index 31f5bf49..019a8e41 100644 --- a/docs/accounts.md +++ b/docs/accounts.md @@ -69,6 +69,25 @@ enforces the following rules on the RPC interface: mapped invoice is paid, the amount is credited to that account's virtual balance. +## Operator controls + +LiT provides optional account safeguards through its configuration: + +* `accounts.max-payment-size-msat` limits the total amount a single account + payment may debit, including fees. For `SendPaymentV2`, the configured fee + limit is included; for `SendToRouteV2`, the route's stated fee is included. + The default value of `0` disables this limit. +* `accounts.check-channel-balance` rejects new accounts, administrative + credits and administrative balance increases that would make the sum of all + account balances exceed the node's current local channel balance. It is + disabled by default. When enabled, allocations fail if LiT cannot query the + Lightning client for the channel balance. + + Note: The channel-balance check only applies when a balance is allocated. It + cannot prevent the node's local balance from subsequently falling below the + allocated account balance if the operator sends non-account Lightning + payments or other non-account activity. + ## Use cases The following (definitely non-exhaustive) list of use cases is made possible by From b6646d7868dffb217a0d5e83be90fa60b2099314 Mon Sep 17 00:00:00 2001 From: jamaljsr <1356600+jamaljsr@users.noreply.github.com> Date: Mon, 10 Aug 2026 15:44:18 -0500 Subject: [PATCH 67/69] app: patch vulnerable production dependencies Bumps the two production dependencies flagged by `yarn audit` that have fixes available. http-proxy-middleware goes to 2.0.10 for the Host-header routing bypass. It also needs a `resolutions` entry, otherwise yarn keeps a second copy at 2.0.9 under react-scripts > webpack-dev-server because the existing `^2.0.0` range is already satisfied. react-router-dom goes to 6.30.4 for the untrusted-path open redirect. It is pinned exactly rather than with a caret: @remix-run/router is a direct dependency at an exact version and react-router-dom pins its own copy exactly too, so a caret here would let a future patch release install a second copy of the router and hand a history built by a different module instance. That bump pulls in a few related changes: - react-router 6.4 folded the `history` package into @remix-run/router, so the store now imports `createBrowserHistory` from there. Passing our own history object is discouraged and would bundle history twice. - @remix-run/router's type declarations use accessors in interfaces, which needs TypeScript 4.3 or newer, so typescript goes to 4.9.5. TS 4.4 also began typing `catch` variables as `unknown`, so `handleError` now takes `unknown` and narrows before reading `.message`, and the five sites that read it directly narrow first as well. - @types/history and @types/react-router-dom are v5-era leftovers that now conflict with the types react-router-dom ships itself. - The new history only accepts one active listener, but RouterStore and both need one, so RouterStore subscribes once and fans updates out. It also needs `v5Compat` so listeners fire on push() and replace() rather than only on back/forward. reactour still pulls in a vulnerable lodash.pick with no patched version published. reactour 1.18.0 is the end of the v1 line and v2 is a rewrite, so that one is left alone for now. --- app/package.json | 10 ++-- app/src/__tests__/store/appView.spec.ts | 10 ++++ app/src/components/auth/AuthPage.tsx | 2 +- app/src/store/store.ts | 6 +- app/src/store/stores/authStore.ts | 4 +- app/src/store/stores/batchStore.ts | 4 +- app/src/store/stores/routerStore.ts | 29 ++++++++-- app/src/store/views/appView.ts | 4 +- app/src/util/appStorage.ts | 5 +- app/yarn.lock | 77 ++++++++----------------- 10 files changed, 80 insertions(+), 71 deletions(-) diff --git a/app/package.json b/app/package.json index 449bd22d..31b4dafe 100644 --- a/app/package.json +++ b/app/package.json @@ -22,6 +22,7 @@ "@emotion/react": "11.4.0", "@emotion/styled": "11.3.0", "@improbable-eng/grpc-web": "0.14.0", + "@remix-run/router": "1.23.3", "@types/react-collapse": "^5.0.1", "big.js": "6.1.1", "bootstrap": "4.6.1", @@ -31,7 +32,7 @@ "date-fns": "2.14.0", "debug": "4.3.1", "file-saver": "2.0.2", - "http-proxy-middleware": "2.0.9", + "http-proxy-middleware": "2.0.10", "i18next": "19.5.1", "i18next-browser-languagedetector": "5.0.0", "lodash": "4.18.1", @@ -48,7 +49,7 @@ "react-collapse": "^5.1.1", "react-dom": "17.0.2", "react-i18next": "13.5.0", - "react-router-dom": "^6.3.0", + "react-router-dom": "6.30.4", "react-toastify": "6.0.6", "react-virtualized": "9.21.2", "reactour": "1.18.0", @@ -71,13 +72,11 @@ "@types/debug": "4.1.5", "@types/file-saver": "2.0.1", "@types/google-protobuf": "3.15.10", - "@types/history": "4.7.6", "@types/jest": "27.4.1", "@types/lodash": "4.14.157", "@types/node": "14.0.14", "@types/react": "17.0.13", "@types/react-dom": "17.0.8", - "@types/react-router-dom": "^5.3.3", "@types/react-virtualized": "9.21.10", "@types/reactour": "1.17.1", "@types/semver": "^7.3.9", @@ -96,10 +95,11 @@ "sass": "1.43.4", "storybook": "7.5.3", "ts-protoc-gen": "0.15.0", - "typescript": "4.1.6", + "typescript": "4.9.5", "webpack": "5.89.0" }, "resolutions": { + "http-proxy-middleware": "2.0.10", "strip-ansi": "6.0.1", "jackspeak": "2.1.1", "wrap-ansi": "7.0.0" diff --git a/app/src/__tests__/store/appView.spec.ts b/app/src/__tests__/store/appView.spec.ts index abeaac78..a8235f4b 100644 --- a/app/src/__tests__/store/appView.spec.ts +++ b/app/src/__tests__/store/appView.spec.ts @@ -36,6 +36,16 @@ describe('AppView', () => { expect(store.alerts.size).toBe(1); }); + it('should handle values thrown that are not Errors', () => { + // Nothing in the language guarantees a thrown value is an Error, and + // showing the user an empty alert is worse than showing the raw value. + store.handleError('something went wrong', 'title'); + expect(store.alerts.size).toBe(1); + const alert = values(store.alerts)[0]; + expect(alert.message).toBe('something went wrong'); + expect(alert.title).toBe('title'); + }); + it('should handle authentication errors', () => { rootStore.authStore.authenticated = true; expect(store.alerts.size).toBe(0); diff --git a/app/src/components/auth/AuthPage.tsx b/app/src/components/auth/AuthPage.tsx index e7d04e82..34120b20 100644 --- a/app/src/components/auth/AuthPage.tsx +++ b/app/src/components/auth/AuthPage.tsx @@ -111,7 +111,7 @@ const AuthPage: React.FC = () => { try { await store.authStore.login(pass); } catch (err) { - setError(err.message); + setError(err instanceof Error ? err.message : String(err)); const errors = store.authStore.errors; setErrorDetailLit(errors.litDetail); setErrorDetailLnd(errors.lndDetail); diff --git a/app/src/store/store.ts b/app/src/store/store.ts index a68ba8ba..5e64d3d7 100644 --- a/app/src/store/store.ts +++ b/app/src/store/store.ts @@ -1,6 +1,6 @@ import { autorun, makeAutoObservable, runInAction } from 'mobx'; import { IS_DEV, IS_TEST, USE_SAMPLE_DATA } from 'config'; -import { createBrowserHistory, History } from 'history'; +import { createBrowserHistory, History } from '@remix-run/router'; import AppStorage from 'util/appStorage'; import CsvExporter from 'util/csv'; import { actionLog, Logger } from 'util/log'; @@ -217,7 +217,9 @@ export const createStore = (grpcClient?: GrpcClient, appStorage?: AppStorage) => const poolApi = new PoolApi(grpc); const litApi = new LitApi(grpc); const csv = new CsvExporter(); - const history = createBrowserHistory(); + // v5Compat is required for listeners to be notified of push() and replace() + // calls, not just browser back/forward navigation. + const history = createBrowserHistory({ v5Compat: true }); const store = new Store( lndApi, diff --git a/app/src/store/stores/authStore.ts b/app/src/store/stores/authStore.ts index 27bcc768..3a8135d6 100644 --- a/app/src/store/stores/authStore.ts +++ b/app/src/store/stores/authStore.ts @@ -126,7 +126,9 @@ export default class AuthStore { this.setCredentials(''); this._store.log.error('connection failure'); this.errors = { mainErr: '', litDetail: '', lndDetail: '' }; - throw new Error(await this.getErrMsg(error.message)); + throw new Error( + await this.getErrMsg(error instanceof Error ? error.message : String(error)), + ); } } diff --git a/app/src/store/stores/batchStore.ts b/app/src/store/stores/batchStore.ts index 1f5d96d7..655bdbd7 100644 --- a/app/src/store/stores/batchStore.ts +++ b/app/src/store/stores/batchStore.ts @@ -150,7 +150,7 @@ export default class BatchStore { this.loading = false; }); } catch (error) { - if (error.message !== 'batch snapshot not found') { + if (!(error instanceof Error) || error.message !== 'batch snapshot not found') { this._store.appView.handleError(error, `Unable to fetch batch with id ${prevId}`); } } @@ -171,7 +171,7 @@ export default class BatchStore { this._store.log.info('updated batchStore.markets', toJS(this.markets)); }); } catch (error) { - if (error.message === 'batch snapshot not found') return; + if (error instanceof Error && error.message === 'batch snapshot not found') return; this._store.appView.handleError(error, 'Unable to fetch the latest batch'); } } diff --git a/app/src/store/stores/routerStore.ts b/app/src/store/stores/routerStore.ts index 8945e937..dcff976c 100644 --- a/app/src/store/stores/routerStore.ts +++ b/app/src/store/stores/routerStore.ts @@ -1,5 +1,8 @@ import { makeAutoObservable, runInAction } from 'mobx'; -import { History, Location } from 'history'; +import { History, Location } from '@remix-run/router'; + +/** the listener callback accepted by the history object */ +type Listener = Parameters[0]; export default class RouterStore { /** the history object */ @@ -11,13 +14,31 @@ export default class RouterStore { constructor(history: History) { makeAutoObservable(this, { history: false }, { deep: false, autoBind: true }); - this.history = history; this.location = history.location; - history.listen(({ location }) => { + // The router's history implementation only accepts a single active + // listener, but both this store and the component need to + // observe navigation. Subscribe once here and fan the updates out to any + // additional listeners. + const listeners = new Set(); + history.listen(update => { runInAction(() => { - this.location = location; + this.location = update.location; }); + listeners.forEach(listener => listener(update)); + }); + + // Expose a history that hands out fan-out subscriptions instead of the + // single underlying one. A proxy is used so that the `location` and + // `action` getters continue to read through to the real history object. + this.history = new Proxy(history, { + get: (target, prop, receiver) => { + if (prop !== 'listen') return Reflect.get(target, prop, receiver); + return (listener: Listener) => { + listeners.add(listener); + return () => listeners.delete(listener); + }; + }, }); } diff --git a/app/src/store/views/appView.ts b/app/src/store/views/appView.ts index b4985d4b..e7534689 100644 --- a/app/src/store/views/appView.ts +++ b/app/src/store/views/appView.ts @@ -210,13 +210,13 @@ export default class AppView { } /** handle errors by showing a notification and/or the auth screen */ - handleError(error: Error, title?: string) { + handleError(error: unknown, title?: string) { if (error instanceof AuthenticationError) { // this will automatically redirect to the auth page this._store.authStore.authenticated = false; this.notify(l('authErrorMsg'), l('authErrorTitle')); } else { - this.notify(error.message, title); + this.notify(error instanceof Error ? error.message : String(error), title); } } } diff --git a/app/src/util/appStorage.ts b/app/src/util/appStorage.ts index 34aee850..973ce99f 100644 --- a/app/src/util/appStorage.ts +++ b/app/src/util/appStorage.ts @@ -96,7 +96,10 @@ export default class AppStorage { this.set(cacheKey, { expires, data }); log.info(`updated cache with ${keys.length} new ${cacheKey}`); } catch (error) { - log.error(`failed to fetch ${cacheKey} from the API`, error.message); + log.error( + `failed to fetch ${cacheKey} from the API`, + error instanceof Error ? error.message : String(error), + ); } } diff --git a/app/yarn.lock b/app/yarn.lock index e770fa11..744aca61 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -3177,6 +3177,11 @@ dependencies: "@babel/runtime" "^7.13.10" +"@remix-run/router@1.23.3": + version "1.23.3" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.23.3.tgz#957c098d4393d301a8aa7dccf3ef28ea5430e36a" + integrity sha512-4An71tdz9X8+3sI4Qqqd2LWd9vS39J7sqd9EU4Scw7TJE/qB10Flv/UuqbPVgfQV9XoK8Np6jNquZitnZq5i+Q== + "@rollup/plugin-babel@^5.2.0": version "5.3.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" @@ -4545,16 +4550,6 @@ dependencies: "@types/node" "*" -"@types/history@4.7.6": - version "4.7.6" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.6.tgz#ed8fc802c45b8e8f54419c2d054e55c9ea344356" - integrity sha512-GRTZLeLJ8ia00ZH8mxMO8t0aC9M1N9bN461Z2eaRurJo6Fpa+utgCwLzI4jQHcrdzuzp5WPN9jRwpsCQ1VhJ5w== - -"@types/history@^4.7.11": - version "4.7.11" - resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" - integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== - "@types/html-minifier-terser@^6.0.0": version "6.1.0" resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" @@ -4708,23 +4703,6 @@ dependencies: "@types/react" "*" -"@types/react-router-dom@^5.3.3": - version "5.3.3" - resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" - integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-router" "*" - -"@types/react-router@*": - version "5.1.18" - resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.18.tgz#c8851884b60bc23733500d86c1266e1cfbbd9ef3" - integrity sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g== - dependencies: - "@types/history" "^4.7.11" - "@types/react" "*" - "@types/react-virtualized@9.21.10": version "9.21.10" resolved "https://registry.yarnpkg.com/@types/react-virtualized/-/react-virtualized-9.21.10.tgz#cd072dc9c889291ace2c4c9de8e8c050da8738b7" @@ -9096,13 +9074,6 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -history@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/history/-/history-5.3.0.tgz#1548abaa245ba47992f063a0783db91ef201c73b" - integrity sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ== - dependencies: - "@babel/runtime" "^7.7.6" - hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -9238,10 +9209,10 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" -http-proxy-middleware@2.0.9, http-proxy-middleware@^2.0.0: - version "2.0.9" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz#e9e63d68afaa4eee3d147f39149ab84c0c2815ef" - integrity sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q== +http-proxy-middleware@2.0.10, http-proxy-middleware@^2.0.0: + version "2.0.10" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.10.tgz#b2df7b705203d7a8c269ac8450cf96b00c532f94" + integrity sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ== dependencies: "@types/http-proxy" "^1.17.8" http-proxy "^1.18.1" @@ -12811,20 +12782,20 @@ react-remove-scroll@2.5.5: use-callback-ref "^1.3.0" use-sidecar "^1.1.2" -react-router-dom@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.3.0.tgz#a0216da813454e521905b5fa55e0e5176123f43d" - integrity sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw== +react-router-dom@6.30.4: + version "6.30.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.30.4.tgz#f7167bf3da6c7d9132130ea985dd06def25e84d5" + integrity sha512-q4HvNl+mmDdkS0g+MqiBZNteQJCuimWoOyHMy4T/RQLAn9Z29+E91QXRaxOujeMl2HTzRSS0KFPd7lxX3PjV0Q== dependencies: - history "^5.2.0" - react-router "6.3.0" + "@remix-run/router" "1.23.3" + react-router "6.30.4" -react-router@6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.3.0.tgz#3970cc64b4cb4eae0c1ea5203a80334fdd175557" - integrity sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ== +react-router@6.30.4: + version "6.30.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.30.4.tgz#638f35176527bd243d96d81d35d33b757bad46c2" + integrity sha512-SVUsDe+DybHM/WmYKIVYhZh1o5Dcuf16yM6WjG02Q9XVFMZIJyHYhwrr6bFBXZkVP6z69kNkMyBCujt8FaFLJA== dependencies: - history "^5.2.0" + "@remix-run/router" "1.23.3" react-scripts@^5.0.1: version "5.0.1" @@ -14574,10 +14545,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.6.tgz#1becd85d77567c3c741172339e93ce2e69932138" - integrity sha512-pxnwLxeb/Z5SP80JDRzVjh58KsM6jZHRAOtTpS7sXLS4ogXNKC9ANxHHZqLLeVHZN35jCtI4JdmLLbLiC1kBow== +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== uglify-js@^3.1.4: version "3.15.5" From 5ed07dbf71322d80845bead0b59f6a93f1ee05d8 Mon Sep 17 00:00:00 2001 From: jamaljsr <1356600+jamaljsr@users.noreply.github.com> Date: Mon, 10 Aug 2026 16:18:38 -0500 Subject: [PATCH 68/69] app: patch vulnerable dev dependencies Sweeps the build-time dependency tree, which is where most of what `yarn audit` reports actually lives. This takes the frontend from 419 findings across 42 packages down to 16 across 9. Most of it is lockfile-only. `yarn upgrade` does not re-resolve transitive entries in yarn 1, so the affected entries were dropped from yarn.lock and reinstalled, which picks the newest version each parent's existing range already allows. That covers the four open dependabot PRs (shell-quote, websocket-driver, @babel/core and @babel/plugin-transform-modules-systemjs) along with @babel/helpers, ajv, async, brace-expansion, form-data, glob, js-yaml, json5, nanoid, terser and ws. Re-resolving express to 4.22.2 pulls patched body-parser, cookie, path-to-regexp and qs with it, and clears the stale minimatch 3.0.4 and semver 7.0.0 pins at the same time. browserslist and caniuse-lite had to move too. @babel/core 7.29 emits 'opera_mobile' as a compilation target and the pinned @babel/helper-compilation-targets 7.17.7 rejects it, which broke the production build until the whole toolchain was aligned. storybook goes to 7.6.24 and webpack to 5.109.2, both direct devDependencies pinned to vulnerable versions. The `resolutions` additions are for packages whose parent pins a range with no patched version in it. Each was verified against a build: - svgo 2.8.3 removes the svgo 1.x subtree that @svgr/plugin-svgo drags in. react-scripts sets `svgo: false`, so that plugin never runs, and the production bundle is byte for byte identical with and without it. - resolve-url-loader 5.0.0 is the only way to drop postcss 7. The emitted CSS is unchanged, same content hash. - @tootallnate/once, esbuild, nth-check, serialize-javascript, tar and uuid are straightforward version forces. What is left is either unfixable or would break the build: - protoc-gen-js pulls got, http-cache-semantics, adm-zip and decompress through the unmaintained `download` package. decompress has no published fix. None of it runs outside `yarn protos`. - webpack-dev-server 5 drops the onBeforeSetupMiddleware and onAfterSetupMiddleware hooks that react-scripts 5.0.1 calls directly, so forcing it would break `yarn start`. - ip and lodash.pick have no patched version published. - react-router needs v7, which is a separate migration. --- app/package.json | 28 +- app/yarn.lock | 4497 +++++++++++++++++++++------------------------- 2 files changed, 2113 insertions(+), 2412 deletions(-) diff --git a/app/package.json b/app/package.json index 31b4dafe..4bf782d8 100644 --- a/app/package.json +++ b/app/package.json @@ -57,13 +57,13 @@ "styled-components": "5.1.1" }, "devDependencies": { - "@storybook/addon-actions": "7.5.3", - "@storybook/addon-docs": "7.5.3", - "@storybook/addon-links": "7.5.3", - "@storybook/addons": "7.5.3", - "@storybook/preset-create-react-app": "7.5.3", - "@storybook/react": "7.5.3", - "@storybook/react-webpack5": "7.5.3", + "@storybook/addon-actions": "7.6.24", + "@storybook/addon-docs": "7.6.24", + "@storybook/addon-links": "7.6.24", + "@storybook/addons": "7.6.24", + "@storybook/preset-create-react-app": "7.6.24", + "@storybook/react": "7.6.24", + "@storybook/react-webpack5": "7.6.24", "@testing-library/jest-dom": "5.11.5", "@testing-library/react": "11.1.1", "@testing-library/user-event": "12.2.0", @@ -93,15 +93,23 @@ "protoc-gen-js": "3.21.2", "react-scripts": "^5.0.1", "sass": "1.43.4", - "storybook": "7.5.3", + "storybook": "7.6.24", "ts-protoc-gen": "0.15.0", "typescript": "4.9.5", - "webpack": "5.89.0" + "webpack": "5.109.2" }, "resolutions": { + "@tootallnate/once": "2.0.1", + "esbuild": "0.25.12", "http-proxy-middleware": "2.0.10", - "strip-ansi": "6.0.1", "jackspeak": "2.1.1", + "nth-check": "2.1.1", + "resolve-url-loader": "5.0.0", + "serialize-javascript": "7.1.0", + "strip-ansi": "6.0.1", + "svgo": "2.8.3", + "tar": "7.5.22", + "uuid": "11.1.1", "wrap-ansi": "7.0.0" }, "eslintConfig": { diff --git a/app/yarn.lock b/app/yarn.lock index 744aca61..6c4bbb54 100644 --- a/app/yarn.lock +++ b/app/yarn.lock @@ -2,21 +2,6 @@ # yarn lockfile v1 -"@ampproject/remapping@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" - integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.0" - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - "@apideck/better-ajv-errors@^0.3.1": version "0.3.3" resolved "https://registry.yarnpkg.com/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.3.tgz#ab0b1e981e1749bf59736cf7ebe25cfc9f949c15" @@ -48,60 +33,40 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/code-frame@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.4.tgz#03ae5af150be94392cb5c7ccd97db5a19a5da6aa" - integrity sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA== +"@babel/code-frame@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.7.tgz#f2fbbfea87c44a21590ec515b778b2c26d8866e7" + integrity sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw== dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" + "@babel/helper-validator-identifier" "^7.29.7" + js-tokens "^4.0.0" + picocolors "^1.1.1" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0", "@babel/compat-data@^7.17.7": +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.8", "@babel/compat-data@^7.17.0": version "7.17.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.7.tgz#078d8b833fbbcc95286613be8c716cef2b519fa2" integrity sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ== -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" - integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== +"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.7.tgz#6f0237f0f36d2e51c0570a636faed9d2d0efe629" + integrity sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg== -"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.7.2", "@babel/core@^7.7.5", "@babel/core@^7.8.0": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.8.tgz#3dac27c190ebc3a4381110d46c80e77efe172e1a" - integrity sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ== +"@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.16.0", "@babel/core@^7.18.9", "@babel/core@^7.23.0", "@babel/core@^7.23.2", "@babel/core@^7.7.2", "@babel/core@^7.8.0": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.7.tgz#80c10b17248082968b57a857b91640971f2070f7" + integrity sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA== dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.7" - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helpers" "^7.17.8" - "@babel/parser" "^7.17.8" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - -"@babel/core@^7.11.6", "@babel/core@^7.13.16", "@babel/core@^7.22.0", "@babel/core@^7.22.9": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" - integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.2" - "@babel/parser" "^7.23.3" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.3" - "@babel/types" "^7.23.3" + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helpers" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/template" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -117,25 +82,6 @@ eslint-visitor-keys "^2.1.0" semver "^6.3.0" -"@babel/generator@^7.12.11", "@babel/generator@^7.17.7", "@babel/generator@^7.7.2": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" - integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== - dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.22.9", "@babel/generator@^7.23.3", "@babel/generator@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.4.tgz#4a41377d8566ec18f807f42962a7f3551de83d1c" - integrity sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ== - dependencies: - "@babel/types" "^7.23.4" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - "@babel/generator@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" @@ -146,6 +92,26 @@ "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" +"@babel/generator@^7.29.7", "@babel/generator@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.8.tgz#4b0b887885422643339e09022148a4c4ebaa4979" + integrity sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg== + dependencies: + "@babel/parser" "^7.29.8" + "@babel/types" "^7.29.8" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/generator@^7.7.2": + version "7.17.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad" + integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w== + dependencies: + "@babel/types" "^7.17.0" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" @@ -160,6 +126,13 @@ dependencies: "@babel/types" "^7.22.5" +"@babel/helper-annotate-as-pure@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz#c70fe3c6ecbdc3fd2dd1b0f498428b88b82ce47f" + integrity sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw== + dependencies: + "@babel/types" "^7.29.7" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" @@ -168,31 +141,14 @@ "@babel/helper-explode-assignable-expression" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" - integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.28.6", "@babel/helper-compilation-targets@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz#7a1def704302401c47f64fa85589e974ae217042" + integrity sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g== dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.7": - version "7.17.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz#a3c2924f5e5f0379b356d4cfb313d1414dc30e46" - integrity sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w== - dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" - integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== - dependencies: - "@babel/compat-data" "^7.22.9" - "@babel/helper-validator-option" "^7.22.15" - browserslist "^4.21.9" + "@babel/compat-data" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" @@ -209,19 +165,17 @@ "@babel/helper-replace-supers" "^7.16.7" "@babel/helper-split-export-declaration" "^7.16.7" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" - integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== +"@babel/helper-create-class-features-plugin@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz#6eddf286f2ec418f740c91d60a83347c55838ddd" + integrity sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-member-expression-to-functions" "^7.29.7" + "@babel/helper-optimise-call-expression" "^7.29.7" + "@babel/helper-replace-supers" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + "@babel/traverse" "^7.29.7" semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.16.7": @@ -232,7 +186,7 @@ "@babel/helper-annotate-as-pure" "^7.16.7" regexpu-core "^5.0.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -241,6 +195,15 @@ regexpu-core "^5.3.1" semver "^6.3.1" +"@babel/helper-create-regexp-features-plugin@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz#5d4c3f928f315cf6c4184ea2fc3b5b38745b2430" + integrity sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.29.7" + regexpu-core "^6.3.1" + semver "^6.3.1" + "@babel/helper-define-polyfill-provider@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" @@ -255,16 +218,16 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-define-polyfill-provider@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" - integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== +"@babel/helper-define-polyfill-provider@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz#cf1e4462b613f2b54c41e6ff758d5dfcaa2c85d1" + integrity sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA== dependencies: - "@babel/helper-compilation-targets" "^7.22.6" - "@babel/helper-plugin-utils" "^7.22.5" - debug "^4.1.1" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + debug "^4.4.3" lodash.debounce "^4.0.8" - resolve "^1.14.2" + resolve "^1.22.11" "@babel/helper-environment-visitor@^7.16.7": version "7.16.7" @@ -273,7 +236,7 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": +"@babel/helper-environment-visitor@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== @@ -294,7 +257,7 @@ "@babel/template" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": +"@babel/helper-function-name@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== @@ -309,12 +272,10 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" +"@babel/helper-globals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.29.7.tgz#f04a96fbd8473241b1079243f5b3f03a3010ab7b" + integrity sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA== "@babel/helper-hoist-variables@^7.22.5": version "7.22.5" @@ -330,12 +291,13 @@ dependencies: "@babel/types" "^7.17.0" -"@babel/helper-member-expression-to-functions@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366" - integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA== +"@babel/helper-member-expression-to-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz#8dbdb3ce0b5c487e1aec10e13c9a43a500814df8" + integrity sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg== dependencies: - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.16.7": version "7.16.7" @@ -344,12 +306,13 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== +"@babel/helper-module-imports@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz#ef25048a518e828d7393fac5882ddd73921d7396" + integrity sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g== dependencies: - "@babel/types" "^7.22.15" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" "@babel/helper-module-transforms@^7.16.7", "@babel/helper-module-transforms@^7.17.7": version "7.17.7" @@ -365,16 +328,14 @@ "@babel/traverse" "^7.17.3" "@babel/types" "^7.17.0" -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== +"@babel/helper-module-transforms@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz#b062747a5997ba138637201328bbff77960574ae" + integrity sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/traverse" "^7.29.7" "@babel/helper-optimise-call-expression@^7.16.7": version "7.16.7" @@ -383,23 +344,28 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-optimise-call-expression@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" - integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== +"@babel/helper-optimise-call-expression@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz#77b0b5b94f1997fa9d6e3125f445227b1faf9d85" + integrity sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.29.7" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== -"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5": +"@babel/helper-plugin-utils@^7.18.6": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== +"@babel/helper-plugin-utils@^7.28.6", "@babel/helper-plugin-utils@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz#c0a0766f1a13617d8a17407d7ab8f9d486225ea4" + integrity sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw== + "@babel/helper-remap-async-to-generator@^7.16.8": version "7.16.8" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" @@ -409,14 +375,14 @@ "@babel/helper-wrap-function" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helper-remap-async-to-generator@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" - integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== +"@babel/helper-remap-async-to-generator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz#34b1f68dd75b86d31df781a29c3ff2df88da82e6" + integrity sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-wrap-function" "^7.22.20" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-wrap-function" "^7.29.7" + "@babel/traverse" "^7.29.7" "@babel/helper-replace-supers@^7.16.7": version "7.16.7" @@ -429,14 +395,14 @@ "@babel/traverse" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" - integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== +"@babel/helper-replace-supers@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz#bc3c3964329043c79112e513c1b198f16589ac21" + integrity sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-member-expression-to-functions" "^7.22.15" - "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.29.7" + "@babel/helper-optimise-call-expression" "^7.29.7" + "@babel/traverse" "^7.29.7" "@babel/helper-simple-access@^7.17.7": version "7.17.7" @@ -445,13 +411,6 @@ dependencies: "@babel/types" "^7.17.0" -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers@^7.16.0": version "7.16.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" @@ -459,12 +418,13 @@ dependencies: "@babel/types" "^7.16.0" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" - integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== +"@babel/helper-skip-transparent-expression-wrappers@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz#50c95c7e4c4f54936cfa0116428edc559862d551" + integrity sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ== dependencies: - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" "@babel/helper-split-export-declaration@^7.16.7": version "7.16.7" @@ -485,10 +445,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== +"@babel/helper-string-parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz#7f0871d99824d23137d60f86fcf6130fd5a1b51f" + integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== "@babel/helper-validator-identifier@^7.16.7": version "7.16.7" @@ -500,15 +460,20 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== +"@babel/helper-validator-identifier@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#bd87084ced0c796ec46bda492de6e83d29e89fc2" + integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== + "@babel/helper-validator-option@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== -"@babel/helper-validator-option@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040" - integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA== +"@babel/helper-validator-option@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz#cf315be940213b354eb4abcc0bd01ebe3f73bc2a" + integrity sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw== "@babel/helper-wrap-function@^7.16.8": version "7.16.8" @@ -520,32 +485,22 @@ "@babel/traverse" "^7.16.8" "@babel/types" "^7.16.8" -"@babel/helper-wrap-function@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569" - integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw== +"@babel/helper-wrap-function@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz#eec72163044548a0935e9d182bf2d547ec5ff483" + integrity sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw== dependencies: - "@babel/helper-function-name" "^7.22.5" - "@babel/template" "^7.22.15" - "@babel/types" "^7.22.19" + "@babel/template" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" -"@babel/helpers@^7.17.8": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.8.tgz#288450be8c6ac7e4e44df37bcc53d345e07bc106" - integrity sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw== +"@babel/helpers@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.29.7.tgz#45abfde7548997e34376c3e69feb475cffb4a607" + integrity sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg== dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - -"@babel/helpers@^7.23.2": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.4.tgz#7d2cfb969aa43222032193accd7329851facf3c1" - integrity sha512-HfcMizYz10cr3h29VqyfGL6ZWIjTwWfvYBMsBVGwpcbhNGe3wQ1ZXZRPzZoAHhd9OqHadHqjQ89iVKINXnbzuw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.4" - "@babel/types" "^7.23.4" + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.7" "@babel/highlight@^7.16.7": version "7.16.10" @@ -565,30 +520,38 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.8": +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7": version "7.17.8" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240" integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ== -"@babel/parser@^7.13.16", "@babel/parser@^7.22.7", "@babel/parser@^7.23.3", "@babel/parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.4.tgz#409fbe690c333bb70187e2de4021e1e47a026661" - integrity sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ== +"@babel/parser@^7.20.7", "@babel/parser@^7.29.7", "@babel/parser@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.8.tgz#9653716a2f10c677b98fbc63d4bfb000c302cf17" + integrity sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA== + dependencies: + "@babel/types" "^7.29.8" "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz#2b535896d933a85aa92377eaa3d51a437d54a4e3" + integrity sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz#b00711a9e52bf4fe55ef7e54b2ef4a881bf804c8" + integrity sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" @@ -596,12 +559,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" - integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz#2375328852026a3cf6bc0bcf2de7d236f2d5e701" + integrity sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz#759a857c46c4d2a6199685cf71070d81ae5f743a" + integrity sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": version "7.16.7" @@ -612,22 +583,22 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" "@babel/plugin-proposal-optional-chaining" "^7.16.7" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" - integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz#86de98dd8e03836178231ea96c27dab26016a705" + integrity sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + "@babel/plugin-transform-optional-chaining" "^7.29.7" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" - integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz#f5d892681dbf4b08753436a5e55000d5ba728d6d" + integrity sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" "@babel/plugin-proposal-async-generator-functions@^7.16.8": version "7.16.8" @@ -638,14 +609,6 @@ "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-class-properties@^7.13.0": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-proposal-class-properties@^7.16.0", "@babel/plugin-proposal-class-properties@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" @@ -706,14 +669,6 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.13.8": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" @@ -749,15 +704,6 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-proposal-optional-chaining@^7.13.12": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" - integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-proposal-optional-chaining@^7.16.0", "@babel/plugin-proposal-optional-chaining@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" @@ -854,28 +800,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-flow@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz#084564e0f3cc21ea6c70c44cff984a1c0509729a" - integrity sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== +"@babel/plugin-syntax-flow@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.29.7.tgz#3f3278c11c896c43bf8098250819785fd1231881" + integrity sha512-ajMX6QPcyomotqwpzhkYGxcK2i/us0rs1Qo9QvUpa+Fca0FTmqrzKrctoIYLMxcOhGZldGT/BAVkRGTWBiR8gQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-syntax-import-assertions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" - integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== +"@babel/plugin-syntax-import-assertions@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz#c5cd868505269126cc18882e1f01f7b0e0e24b4e" + integrity sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-syntax-import-attributes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" - integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== +"@babel/plugin-syntax-import-attributes@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz#6115264516e95ead0f35a41710906612e447f605" + integrity sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -896,12 +842,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-jsx@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== +"@babel/plugin-syntax-jsx@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz#622c16f9ad63782fe6e83dadc7e40330744b7f1e" + integrity sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" @@ -966,12 +912,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-syntax-typescript@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== +"@babel/plugin-syntax-typescript@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz#7c29388932313ed58413a0343048d75d92fb5b24" + integrity sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -988,22 +934,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-arrow-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" - integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== +"@babel/plugin-transform-arrow-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz#d651343f562c03f47951bd1802195d0e10605f27" + integrity sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-async-generator-functions@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz#93ac8e3531f347fba519b4703f9ff2a75c6ae27a" - integrity sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw== +"@babel/plugin-transform-async-generator-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz#a5365617921d82a1fee33124a1102bb38a1e677d" + integrity sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA== dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" - "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-remap-async-to-generator" "^7.29.7" + "@babel/traverse" "^7.29.7" "@babel/plugin-transform-async-to-generator@^7.16.8": version "7.16.8" @@ -1014,14 +959,14 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-remap-async-to-generator" "^7.16.8" -"@babel/plugin-transform-async-to-generator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" - integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== +"@babel/plugin-transform-async-to-generator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz#3b5e8f1fb58133cf701bcf0baaf6f01bfd1a8889" + integrity sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w== dependencies: - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.20" + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-remap-async-to-generator" "^7.29.7" "@babel/plugin-transform-block-scoped-functions@^7.16.7": version "7.16.7" @@ -1030,12 +975,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoped-functions@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" - integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== +"@babel/plugin-transform-block-scoped-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz#96d292634434082d6687bcdb81139affedf77e8c" + integrity sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-block-scoping@^7.16.7": version "7.16.7" @@ -1044,29 +989,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-block-scoping@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5" - integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw== +"@babel/plugin-transform-block-scoping@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz#baa376691ae16244cd14335422fca6900f54e17d" + integrity sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-class-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" - integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== +"@babel/plugin-transform-class-properties@^7.22.5", "@babel/plugin-transform-class-properties@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz#034897b8a21beec163332fac2de235b14409abdf" + integrity sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-class-static-block@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5" - integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ== +"@babel/plugin-transform-class-static-block@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz#fed8efd19f3dd3e1114ee390707c70912778fd7c" + integrity sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-classes@^7.16.7": version "7.16.7" @@ -1082,20 +1026,17 @@ "@babel/helper-split-export-declaration" "^7.16.7" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz#73380c632c095b03e8503c24fd38f95ad41ffacb" - integrity sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w== +"@babel/plugin-transform-classes@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz#61d3e5aaae0c838acc3204d9db7c8dc05c25815b" + integrity sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" - "@babel/helper-split-export-declaration" "^7.22.6" - globals "^11.1.0" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-globals" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-replace-supers" "^7.29.7" + "@babel/traverse" "^7.29.7" "@babel/plugin-transform-computed-properties@^7.16.7": version "7.16.7" @@ -1104,13 +1045,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-computed-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" - integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== +"@babel/plugin-transform-computed-properties@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz#95028787ca31901b9a20b5c6d9605c32346f55ad" + integrity sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.15" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/template" "^7.29.7" "@babel/plugin-transform-destructuring@^7.16.7": version "7.17.7" @@ -1119,12 +1060,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-destructuring@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" - integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== +"@babel/plugin-transform-destructuring@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz#5781ec6947852e27b64c1165f0db431f408090e4" + integrity sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" "@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.16.7" @@ -1134,13 +1076,13 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-dotall-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" - integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== +"@babel/plugin-transform-dotall-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz#b203de9740e4c7ff6b55ce436ed5313b88d70af8" + integrity sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-duplicate-keys@^7.16.7": version "7.16.7" @@ -1149,20 +1091,35 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-duplicate-keys@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" - integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== +"@babel/plugin-transform-duplicate-keys@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz#8f3fe721835cb7a433420841dae90afc962ea7ae" + integrity sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-dynamic-import@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143" - integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz#dc6c405e55c01b7657e1827a25332c4ac17e9cac" + integrity sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-dynamic-import@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz#a83a6faec5bab5b619adf9d0eac6c1c270123c2a" + integrity sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-explicit-resource-management@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz#65c8b9f76ec915b02a0e1df703125a0fca58abaa" + integrity sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-transform-destructuring" "^7.29.7" "@babel/plugin-transform-exponentiation-operator@^7.16.7": version "7.16.7" @@ -1172,21 +1129,19 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-exponentiation-operator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" - integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== +"@babel/plugin-transform-exponentiation-operator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz#00bf002fde8794356171f5d4df200f6bc0d5a303" + integrity sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-export-namespace-from@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191" - integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ== +"@babel/plugin-transform-export-namespace-from@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz#d6014f45cec61d7691335c6c9804204bee801d51" + integrity sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-flow-strip-types@^7.16.0": version "7.16.7" @@ -1196,13 +1151,13 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-flow" "^7.16.7" -"@babel/plugin-transform-flow-strip-types@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz#cfa7ca159cc3306fab526fc67091556b51af26ff" - integrity sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q== +"@babel/plugin-transform-flow-strip-types@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.29.7.tgz#911bcb31608c3576510d7e0c95ccf64f9e1812d0" + integrity sha512-wRHeUjUjCZnMHmiO5bRgjFLcoEh7JyTdByOW11ahhwNa4V0bmeGEaIvt51yq0zQp2yWIpqfxXXPyUP6GFJZHOQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.23.3" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-syntax-flow" "^7.29.7" "@babel/plugin-transform-for-of@^7.16.7": version "7.16.7" @@ -1211,12 +1166,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-for-of@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" - integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== +"@babel/plugin-transform-for-of@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz#c65a678592117717aacdb10c1b73a9cb85e830be" + integrity sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" "@babel/plugin-transform-function-name@^7.16.7": version "7.16.7" @@ -1227,22 +1183,21 @@ "@babel/helper-function-name" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-function-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" - integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== +"@babel/plugin-transform-function-name@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz#8b87f8a7504dbcd96135167e3fc4f61126a7bd86" + integrity sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg== dependencies: - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" -"@babel/plugin-transform-json-strings@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d" - integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg== +"@babel/plugin-transform-json-strings@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz#f57d63dcc05b4481c281acedcd8fc4e3e439a1d4" + integrity sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-literals@^7.16.7": version "7.16.7" @@ -1251,20 +1206,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" - integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== +"@babel/plugin-transform-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz#b90bd47463326c2a9d779e1bd5e1f88b9f421921" + integrity sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-logical-assignment-operators@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5" - integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg== +"@babel/plugin-transform-logical-assignment-operators@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz#9b29425adf5c794967aabe4b046a046a167bac2f" + integrity sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-member-expression-literals@^7.16.7": version "7.16.7" @@ -1273,12 +1227,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-member-expression-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" - integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== +"@babel/plugin-transform-member-expression-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz#1281689fa2fefc17b110d21ebafd0fe9402d5309" + integrity sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-modules-amd@^7.16.7": version "7.16.7" @@ -1289,22 +1243,13 @@ "@babel/helper-plugin-utils" "^7.16.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-amd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" - integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== +"@babel/plugin-transform-modules-amd@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz#f05ca662c8a1dc4be2f337af9c7e80369c942d6c" + integrity sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" - integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== - dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-modules-commonjs@^7.16.8": version "7.17.7" @@ -1316,26 +1261,23 @@ "@babel/helper-simple-access" "^7.17.7" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz#81fd834024fae14ea78fbe34168b042f38703859" - integrity sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw== +"@babel/plugin-transform-modules-commonjs@^7.23.0", "@babel/plugin-transform-modules-commonjs@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz#70e6835abf2663dafbe94b8ef1f51de7351ef135" + integrity sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ== dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-modules-systemjs@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" - integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== +"@babel/plugin-transform-modules-systemjs@^7.16.7", "@babel/plugin-transform-modules-systemjs@^7.29.7": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz#e60a6a42ac63a3095f9cc7264f698a100c8fe05d" + integrity sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA== dependencies: - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-identifier" "^7.22.20" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/traverse" "^7.29.8" "@babel/plugin-transform-modules-umd@^7.16.7": version "7.16.7" @@ -1345,13 +1287,13 @@ "@babel/helper-module-transforms" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-modules-umd@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" - integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== +"@babel/plugin-transform-modules-umd@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz#391d1c0215aca6307257f2f608598dfe55feb6cf" + integrity sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA== dependencies: - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": version "7.16.8" @@ -1360,13 +1302,13 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.16.7" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" - integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== +"@babel/plugin-transform-named-capturing-groups-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz#21e75d847b31189842fa7a77703722ed4b43d27d" + integrity sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-new-target@^7.16.7": version "7.16.7" @@ -1375,39 +1317,37 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-new-target@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" - integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== +"@babel/plugin-transform-new-target@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz#714147ce7947e1b49cbd84137ca2e75e92b2a067" + integrity sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-nullish-coalescing-operator@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e" - integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11", "@babel/plugin-transform-nullish-coalescing-operator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz#8a54cdf88c3f50433a6173117a286195b67714cc" + integrity sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-numeric-separator@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29" - integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q== +"@babel/plugin-transform-numeric-separator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz#0266d5cd42ab87ec40fee45a4e36483cfdcbc66a" + integrity sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-object-rest-spread@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz#2b9c2d26bf62710460bdc0d1730d4f1048361b83" - integrity sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g== +"@babel/plugin-transform-object-rest-spread@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz#e0d5060241803922c545676613cc8acbbda0d266" + integrity sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-transform-destructuring" "^7.29.7" + "@babel/plugin-transform-parameters" "^7.29.7" + "@babel/traverse" "^7.29.7" "@babel/plugin-transform-object-super@^7.16.7": version "7.16.7" @@ -1417,30 +1357,28 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-replace-supers" "^7.16.7" -"@babel/plugin-transform-object-super@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" - integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== +"@babel/plugin-transform-object-super@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz#e89283d14fa3c35817d4493ffc6bc649aa10e4eb" + integrity sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-replace-supers" "^7.29.7" -"@babel/plugin-transform-optional-catch-binding@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017" - integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A== +"@babel/plugin-transform-optional-catch-binding@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz#729664f79985be504eba112c51de9f71d009030b" + integrity sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-optional-chaining@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017" - integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA== +"@babel/plugin-transform-optional-chaining@^7.23.0", "@babel/plugin-transform-optional-chaining@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz#b84a1b574b3c73001023092567e16c492b720e51" + integrity sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" "@babel/plugin-transform-parameters@^7.16.7": version "7.16.7" @@ -1449,30 +1387,29 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-parameters@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" - integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== +"@babel/plugin-transform-parameters@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz#a5ddc3b9bfb534814cb8334cbeba47d9cf9db090" + integrity sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-private-methods@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" - integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== +"@babel/plugin-transform-private-methods@^7.22.5", "@babel/plugin-transform-private-methods@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz#cea8bd3ab99533892897a02999d5b752584ad145" + integrity sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-private-property-in-object@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5" - integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A== +"@babel/plugin-transform-private-property-in-object@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz#4a2f6be5aba47be7afbdb4cd7903c46edf3a7661" + integrity sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-property-literals@^7.16.7": version "7.16.7" @@ -1481,12 +1418,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-property-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" - integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== +"@babel/plugin-transform-property-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz#d45817cd72f9e134ab1f7fbb79264cfcb85cf636" + integrity sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-react-constant-elements@^7.12.1": version "7.17.6" @@ -1502,12 +1439,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-display-name@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" - integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== +"@babel/plugin-transform-react-display-name@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.29.7.tgz#bf161a6d750267b79db7ff6f8fb89c3369b02df3" + integrity sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-react-jsx-development@^7.16.7": version "7.16.7" @@ -1516,12 +1453,12 @@ dependencies: "@babel/plugin-transform-react-jsx" "^7.16.7" -"@babel/plugin-transform-react-jsx-development@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" - integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== +"@babel/plugin-transform-react-jsx-development@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.29.7.tgz#64e6aacb5cb43b9e80d3d5f19ddefc158a624f09" + integrity sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g== dependencies: - "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.29.7" "@babel/plugin-transform-react-jsx@^7.16.7": version "7.17.3" @@ -1534,16 +1471,16 @@ "@babel/plugin-syntax-jsx" "^7.16.7" "@babel/types" "^7.17.0" -"@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz#393f99185110cea87184ea47bcb4a7b0c2e39312" - integrity sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA== +"@babel/plugin-transform-react-jsx@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.29.7.tgz#3d16a0e5773f079400a8c82a190709cdf92ee204" + integrity sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/types" "^7.23.4" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-syntax-jsx" "^7.29.7" + "@babel/types" "^7.29.7" "@babel/plugin-transform-react-pure-annotations@^7.16.7": version "7.16.7" @@ -1553,13 +1490,13 @@ "@babel/helper-annotate-as-pure" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-react-pure-annotations@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz#fabedbdb8ee40edf5da96f3ecfc6958e3783b93c" - integrity sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ== +"@babel/plugin-transform-react-pure-annotations@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.29.7.tgz#76445c90112dd0a7371b63264563bfa9a4fcd6e3" + integrity sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-regenerator@^7.16.7": version "7.16.7" @@ -1568,13 +1505,20 @@ dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-regenerator@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" - integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== +"@babel/plugin-transform-regenerator@^7.29.7": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz#3a4a4dd7214af9d524f0503bb97c99af5f4abf26" + integrity sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.2" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-regexp-modifiers@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz#68311c0c10af2198212528863f8542843e424025" + integrity sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-reserved-words@^7.16.7": version "7.16.7" @@ -1583,12 +1527,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-reserved-words@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" - integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== +"@babel/plugin-transform-reserved-words@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz#a6feeb179b36a5f1fc6e3154c1eb727bdbe35876" + integrity sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-runtime@^7.16.4": version "7.17.0" @@ -1609,12 +1553,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-shorthand-properties@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" - integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== +"@babel/plugin-transform-shorthand-properties@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz#25c0436b98f4bd9ca4b98e1fbd662743bbaab9bf" + integrity sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-spread@^7.16.7": version "7.16.7" @@ -1624,13 +1568,13 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" -"@babel/plugin-transform-spread@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" - integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== +"@babel/plugin-transform-spread@^7.29.7": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz#c894cff38556a5dafeb412e13fc012b6df4b95a2" + integrity sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" "@babel/plugin-transform-sticky-regex@^7.16.7": version "7.16.7" @@ -1639,12 +1583,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-sticky-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" - integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== +"@babel/plugin-transform-sticky-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz#a42c0fd1fa42f7e98e1e0c7757f72a1bbca3a015" + integrity sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-template-literals@^7.16.7": version "7.16.7" @@ -1653,12 +1597,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-template-literals@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" - integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== +"@babel/plugin-transform-template-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz#ada97d8e0832bca8edb315888aa654b1570f3835" + integrity sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-typeof-symbol@^7.16.7": version "7.16.7" @@ -1667,12 +1611,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-typeof-symbol@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" - integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== +"@babel/plugin-transform-typeof-symbol@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz#d848a4677c1ee3485ab017f4018f04597798911c" + integrity sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-typescript@^7.16.7": version "7.16.8" @@ -1683,15 +1627,16 @@ "@babel/helper-plugin-utils" "^7.16.7" "@babel/plugin-syntax-typescript" "^7.16.7" -"@babel/plugin-transform-typescript@^7.23.3": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.4.tgz#da12914d17b3c4b307f32c5fd91fbfdf17d56f86" - integrity sha512-39hCCOl+YUAyMOu6B9SmUTiHUU0t/CxJNUmY3qRdJujbqi+lrQcL11ysYUsAvFWPBdhihrv1z0oRG84Yr3dODQ== +"@babel/plugin-transform-typescript@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz#f0449c3df7037bbe232043476851c38f5e4a7615" + integrity sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw== dependencies: - "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.23.3" + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + "@babel/plugin-syntax-typescript" "^7.29.7" "@babel/plugin-transform-unicode-escapes@^7.16.7": version "7.16.7" @@ -1700,20 +1645,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-escapes@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" - integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== +"@babel/plugin-transform-unicode-escapes@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz#1e99554b0cddfd650d649a9f2b996049893e5720" + integrity sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-unicode-property-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" - integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== +"@babel/plugin-transform-unicode-property-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz#44444afc73768c2190fac4d95f7716817b7f204a" + integrity sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/plugin-transform-unicode-regex@^7.16.7": version "7.16.7" @@ -1723,21 +1668,21 @@ "@babel/helper-create-regexp-features-plugin" "^7.16.7" "@babel/helper-plugin-utils" "^7.16.7" -"@babel/plugin-transform-unicode-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" - integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== +"@babel/plugin-transform-unicode-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz#c3064b293ff7f1794b71f7650eec8db9896d3e59" + integrity sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" -"@babel/plugin-transform-unicode-sets-regex@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" - integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== +"@babel/plugin-transform-unicode-sets-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz#b03ac9f27326f6197e8e574add83bbf33fc34ecd" + integrity sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" "@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4": version "7.16.11" @@ -1819,100 +1764,91 @@ core-js-compat "^3.20.2" semver "^6.3.0" -"@babel/preset-env@^7.22.9": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.3.tgz#d299e0140a7650684b95c62be2db0ef8c975143e" - integrity sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q== +"@babel/preset-env@^7.23.2": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.7.tgz#5e2ab5e764b493fdefc99c43aeaa70a9533a37fd" + integrity sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA== dependencies: - "@babel/compat-data" "^7.23.3" - "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" + "@babel/compat-data" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.29.7" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.29.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.29.7" + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array" "^7.29.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.29.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.29.7" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.23.3" - "@babel/plugin-syntax-import-attributes" "^7.23.3" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-import-assertions" "^7.29.7" + "@babel/plugin-syntax-import-attributes" "^7.29.7" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.23.3" - "@babel/plugin-transform-async-generator-functions" "^7.23.3" - "@babel/plugin-transform-async-to-generator" "^7.23.3" - "@babel/plugin-transform-block-scoped-functions" "^7.23.3" - "@babel/plugin-transform-block-scoping" "^7.23.3" - "@babel/plugin-transform-class-properties" "^7.23.3" - "@babel/plugin-transform-class-static-block" "^7.23.3" - "@babel/plugin-transform-classes" "^7.23.3" - "@babel/plugin-transform-computed-properties" "^7.23.3" - "@babel/plugin-transform-destructuring" "^7.23.3" - "@babel/plugin-transform-dotall-regex" "^7.23.3" - "@babel/plugin-transform-duplicate-keys" "^7.23.3" - "@babel/plugin-transform-dynamic-import" "^7.23.3" - "@babel/plugin-transform-exponentiation-operator" "^7.23.3" - "@babel/plugin-transform-export-namespace-from" "^7.23.3" - "@babel/plugin-transform-for-of" "^7.23.3" - "@babel/plugin-transform-function-name" "^7.23.3" - "@babel/plugin-transform-json-strings" "^7.23.3" - "@babel/plugin-transform-literals" "^7.23.3" - "@babel/plugin-transform-logical-assignment-operators" "^7.23.3" - "@babel/plugin-transform-member-expression-literals" "^7.23.3" - "@babel/plugin-transform-modules-amd" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-modules-systemjs" "^7.23.3" - "@babel/plugin-transform-modules-umd" "^7.23.3" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.23.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.3" - "@babel/plugin-transform-numeric-separator" "^7.23.3" - "@babel/plugin-transform-object-rest-spread" "^7.23.3" - "@babel/plugin-transform-object-super" "^7.23.3" - "@babel/plugin-transform-optional-catch-binding" "^7.23.3" - "@babel/plugin-transform-optional-chaining" "^7.23.3" - "@babel/plugin-transform-parameters" "^7.23.3" - "@babel/plugin-transform-private-methods" "^7.23.3" - "@babel/plugin-transform-private-property-in-object" "^7.23.3" - "@babel/plugin-transform-property-literals" "^7.23.3" - "@babel/plugin-transform-regenerator" "^7.23.3" - "@babel/plugin-transform-reserved-words" "^7.23.3" - "@babel/plugin-transform-shorthand-properties" "^7.23.3" - "@babel/plugin-transform-spread" "^7.23.3" - "@babel/plugin-transform-sticky-regex" "^7.23.3" - "@babel/plugin-transform-template-literals" "^7.23.3" - "@babel/plugin-transform-typeof-symbol" "^7.23.3" - "@babel/plugin-transform-unicode-escapes" "^7.23.3" - "@babel/plugin-transform-unicode-property-regex" "^7.23.3" - "@babel/plugin-transform-unicode-regex" "^7.23.3" - "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/plugin-transform-arrow-functions" "^7.29.7" + "@babel/plugin-transform-async-generator-functions" "^7.29.7" + "@babel/plugin-transform-async-to-generator" "^7.29.7" + "@babel/plugin-transform-block-scoped-functions" "^7.29.7" + "@babel/plugin-transform-block-scoping" "^7.29.7" + "@babel/plugin-transform-class-properties" "^7.29.7" + "@babel/plugin-transform-class-static-block" "^7.29.7" + "@babel/plugin-transform-classes" "^7.29.7" + "@babel/plugin-transform-computed-properties" "^7.29.7" + "@babel/plugin-transform-destructuring" "^7.29.7" + "@babel/plugin-transform-dotall-regex" "^7.29.7" + "@babel/plugin-transform-duplicate-keys" "^7.29.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.29.7" + "@babel/plugin-transform-dynamic-import" "^7.29.7" + "@babel/plugin-transform-explicit-resource-management" "^7.29.7" + "@babel/plugin-transform-exponentiation-operator" "^7.29.7" + "@babel/plugin-transform-export-namespace-from" "^7.29.7" + "@babel/plugin-transform-for-of" "^7.29.7" + "@babel/plugin-transform-function-name" "^7.29.7" + "@babel/plugin-transform-json-strings" "^7.29.7" + "@babel/plugin-transform-literals" "^7.29.7" + "@babel/plugin-transform-logical-assignment-operators" "^7.29.7" + "@babel/plugin-transform-member-expression-literals" "^7.29.7" + "@babel/plugin-transform-modules-amd" "^7.29.7" + "@babel/plugin-transform-modules-commonjs" "^7.29.7" + "@babel/plugin-transform-modules-systemjs" "^7.29.7" + "@babel/plugin-transform-modules-umd" "^7.29.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.29.7" + "@babel/plugin-transform-new-target" "^7.29.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.29.7" + "@babel/plugin-transform-numeric-separator" "^7.29.7" + "@babel/plugin-transform-object-rest-spread" "^7.29.7" + "@babel/plugin-transform-object-super" "^7.29.7" + "@babel/plugin-transform-optional-catch-binding" "^7.29.7" + "@babel/plugin-transform-optional-chaining" "^7.29.7" + "@babel/plugin-transform-parameters" "^7.29.7" + "@babel/plugin-transform-private-methods" "^7.29.7" + "@babel/plugin-transform-private-property-in-object" "^7.29.7" + "@babel/plugin-transform-property-literals" "^7.29.7" + "@babel/plugin-transform-regenerator" "^7.29.7" + "@babel/plugin-transform-regexp-modifiers" "^7.29.7" + "@babel/plugin-transform-reserved-words" "^7.29.7" + "@babel/plugin-transform-shorthand-properties" "^7.29.7" + "@babel/plugin-transform-spread" "^7.29.7" + "@babel/plugin-transform-sticky-regex" "^7.29.7" + "@babel/plugin-transform-template-literals" "^7.29.7" + "@babel/plugin-transform-typeof-symbol" "^7.29.7" + "@babel/plugin-transform-unicode-escapes" "^7.29.7" + "@babel/plugin-transform-unicode-property-regex" "^7.29.7" + "@babel/plugin-transform-unicode-regex" "^7.29.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.29.7" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.6" - babel-plugin-polyfill-corejs3 "^0.8.5" - babel-plugin-polyfill-regenerator "^0.5.3" - core-js-compat "^3.31.0" + babel-plugin-polyfill-corejs2 "^0.4.15" + babel-plugin-polyfill-corejs3 "^0.14.0" + babel-plugin-polyfill-regenerator "^0.6.6" + core-js-compat "^3.48.0" semver "^6.3.1" -"@babel/preset-flow@^7.13.13", "@babel/preset-flow@^7.22.5": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.23.3.tgz#8084e08b9ccec287bd077ab288b286fab96ffab1" - integrity sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA== +"@babel/preset-flow@^7.22.15": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.29.7.tgz#ae33812dc267a296bd3709843affbb2d811c4709" + integrity sha512-KYIRV0BuaN68CDdsqFkAD7MU7yipUqQNuNElwATdxaIdpTjhvtY82QvkBJs7zV3Evxj2jFAAZ1iO8nyy0nhjqA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-flow-strip-types" "^7.23.3" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + "@babel/plugin-transform-flow-strip-types" "^7.29.7" "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" @@ -1946,28 +1882,17 @@ "@babel/plugin-transform-react-jsx-development" "^7.16.7" "@babel/plugin-transform-react-pure-annotations" "^7.16.7" -"@babel/preset-react@^7.22.5": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.23.3.tgz#f73ca07e7590f977db07eb54dbe46538cc015709" - integrity sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w== +"@babel/preset-react@^7.22.15": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.29.7.tgz#2ed18366e38c2081bbf1760dc01e88fa5674eb17" + integrity sha512-C+PV1TFUPTmBQGoPBL8j2QmLpZ117YTCwxIZeJOM96GbYMFSc7/pOXU5lVykwnZxyTqQxRsvoRk6f2FktZgGHA== dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-react-display-name" "^7.23.3" - "@babel/plugin-transform-react-jsx" "^7.22.15" - "@babel/plugin-transform-react-jsx-development" "^7.22.5" - "@babel/plugin-transform-react-pure-annotations" "^7.23.3" - -"@babel/preset-typescript@^7.13.0": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" - integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.23.3" - "@babel/plugin-transform-modules-commonjs" "^7.23.3" - "@babel/plugin-transform-typescript" "^7.23.3" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + "@babel/plugin-transform-react-display-name" "^7.29.7" + "@babel/plugin-transform-react-jsx" "^7.29.7" + "@babel/plugin-transform-react-jsx-development" "^7.29.7" + "@babel/plugin-transform-react-pure-annotations" "^7.29.7" "@babel/preset-typescript@^7.16.0": version "7.16.7" @@ -1978,15 +1903,26 @@ "@babel/helper-validator-option" "^7.16.7" "@babel/plugin-transform-typescript" "^7.16.7" -"@babel/register@^7.13.16": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.22.15.tgz#c2c294a361d59f5fa7bcc8b97ef7319c32ecaec7" - integrity sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg== +"@babel/preset-typescript@^7.23.0": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.29.7.tgz#de9be1f47b785c979ec7b3a71f4cd8bae5267b62" + integrity sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + "@babel/plugin-syntax-jsx" "^7.29.7" + "@babel/plugin-transform-modules-commonjs" "^7.29.7" + "@babel/plugin-transform-typescript" "^7.29.7" + +"@babel/register@^7.22.15": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.29.7.tgz#d5bb4337065512f643b29cb565b6e8ccadcc1ec6" + integrity sha512-AMGJoWuES861riy6pcB0fphE1YXybtQnBYQMuIyPv6mKLiosfa79BKTnAOyx215c/3RJPJpdQwoHZ3earVH7AA== dependencies: clone-deep "^4.0.1" find-cache-dir "^2.0.0" make-dir "^2.1.0" - pirates "^4.0.5" + pirates "^4.0.6" source-map-support "^0.5.16" "@babel/regjsgen@^0.8.0": @@ -1995,14 +1931,13 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.10.2": - version "7.17.8" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.8.tgz#d7dd49fb812f29c61c59126da3792d8740d4e284" - integrity sha512-ZbYSUvoSF6dXZmMl/CYTMOvzIFnbGfv4W3SEHYgMvNsFTeLaF2gkGAF4K2ddmtSK4Emej+0aYcnSC6N5dPCXUQ== + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.29.7.tgz#2030fda34f3433647818660093751fb1ca2debf0" + integrity sha512-ppj9ouYku+RX0ljtgZd+KMO5mkM2bCqg8H2PYAFWnLsHEIKIdRojqbJ2i3eVHrisuxy7nOFCmngTDdWtUCdXUQ== dependencies: - core-js-pure "^3.20.2" - regenerator-runtime "^0.13.4" + core-js-pure "^3.48.0" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.22.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.22.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.26.10" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.10.tgz#a07b4d8fa27af131a633d7b3524db803eb4764c2" integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== @@ -2027,7 +1962,16 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.1.6", "@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": +"@babel/template@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.29.7.tgz#4d9d4004f645cdd304de958c725162784ecac700" + integrity sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8" integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw== @@ -2043,23 +1987,20 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/traverse@^7.22.8", "@babel/traverse@^7.23.3", "@babel/traverse@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.4.tgz#c2790f7edf106d059a0098770fe70801417f3f85" - integrity sha512-IYM8wSUwunWTB6tFC2dkKZhxbIjHoWemdK+3f8/wq8aKhbUscxD5MX72ubd90fxvFknaLPeGw5ycU84V1obHJg== +"@babel/traverse@^7.18.9", "@babel/traverse@^7.23.2", "@babel/traverse@^7.29.7", "@babel/traverse@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.8.tgz#4111014cdc71a0f95d9471907590baa0b8a6b28a" + integrity sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg== dependencies: - "@babel/code-frame" "^7.23.4" - "@babel/generator" "^7.23.4" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.4" - "@babel/types" "^7.23.4" - debug "^4.1.0" - globals "^11.1.0" + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.8" + "@babel/helper-globals" "^7.29.7" + "@babel/parser" "^7.29.8" + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.8" + debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.17.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== @@ -2067,6 +2008,14 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@babel/types@^7.18.9", "@babel/types@^7.20.7", "@babel/types@^7.28.2", "@babel/types@^7.29.7", "@babel/types@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.8.tgz#1229eef31d85156d70fa3f4cd859376d0eaf6863" + integrity sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg== + dependencies: + "@babel/helper-string-parser" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0": version "7.23.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" @@ -2076,15 +2025,6 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" -"@babel/types@^7.22.19", "@babel/types@^7.23.3", "@babel/types@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.4.tgz#7206a1810fc512a7f7f7d4dace4cb4c1c9dbfb8e" - integrity sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -2292,115 +2232,135 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@esbuild/android-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" - integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== +"@esbuild/aix-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz#80fcbe36130e58b7670511e888b8e88a259ed76c" + integrity sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA== -"@esbuild/android-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" - integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== +"@esbuild/android-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz#8aa4965f8d0a7982dc21734bf6601323a66da752" + integrity sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg== -"@esbuild/android-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" - integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== +"@esbuild/android-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz#300712101f7f50f1d2627a162e6e09b109b6767a" + integrity sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg== -"@esbuild/darwin-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" - integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== +"@esbuild/android-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz#87dfb27161202bdc958ef48bb61b09c758faee16" + integrity sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg== -"@esbuild/darwin-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" - integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== +"@esbuild/darwin-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz#79197898ec1ff745d21c071e1c7cc3c802f0c1fd" + integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg== -"@esbuild/freebsd-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" - integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== +"@esbuild/darwin-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz#146400a8562133f45c4d2eadcf37ddd09718079e" + integrity sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA== -"@esbuild/freebsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" - integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== +"@esbuild/freebsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz#1c5f9ba7206e158fd2b24c59fa2d2c8bb47ca0fe" + integrity sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg== -"@esbuild/linux-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" - integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== +"@esbuild/freebsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz#ea631f4a36beaac4b9279fa0fcc6ca29eaeeb2b3" + integrity sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ== -"@esbuild/linux-arm@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" - integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== +"@esbuild/linux-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz#e1066bce58394f1b1141deec8557a5f0a22f5977" + integrity sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ== -"@esbuild/linux-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" - integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== +"@esbuild/linux-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz#452cd66b20932d08bdc53a8b61c0e30baf4348b9" + integrity sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw== -"@esbuild/linux-loong64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" - integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== +"@esbuild/linux-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz#b24f8acc45bcf54192c7f2f3be1b53e6551eafe0" + integrity sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA== -"@esbuild/linux-mips64el@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" - integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== +"@esbuild/linux-loong64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz#f9cfffa7fc8322571fbc4c8b3268caf15bd81ad0" + integrity sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng== -"@esbuild/linux-ppc64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" - integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== +"@esbuild/linux-mips64el@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz#575a14bd74644ffab891adc7d7e60d275296f2cd" + integrity sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw== -"@esbuild/linux-riscv64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" - integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== +"@esbuild/linux-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz#75b99c70a95fbd5f7739d7692befe60601591869" + integrity sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA== -"@esbuild/linux-s390x@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" - integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== +"@esbuild/linux-riscv64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz#2e3259440321a44e79ddf7535c325057da875cd6" + integrity sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w== -"@esbuild/linux-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" - integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== +"@esbuild/linux-s390x@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz#17676cabbfe5928da5b2a0d6df5d58cd08db2663" + integrity sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg== -"@esbuild/netbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" - integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== +"@esbuild/linux-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz#0583775685ca82066d04c3507f09524d3cd7a306" + integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw== -"@esbuild/openbsd-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" - integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== +"@esbuild/netbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz#f04c4049cb2e252fe96b16fed90f70746b13f4a4" + integrity sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg== -"@esbuild/sunos-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" - integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== +"@esbuild/netbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz#77da0d0a0d826d7c921eea3d40292548b258a076" + integrity sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ== -"@esbuild/win32-arm64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" - integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== +"@esbuild/openbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz#6296f5867aedef28a81b22ab2009c786a952dccd" + integrity sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A== -"@esbuild/win32-ia32@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" - integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== +"@esbuild/openbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz#f8d23303360e27b16cf065b23bbff43c14142679" + integrity sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw== -"@esbuild/win32-x64@0.18.20": - version "0.18.20" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" - integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== +"@esbuild/openharmony-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz#49e0b768744a3924be0d7fd97dd6ce9b2923d88d" + integrity sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg== + +"@esbuild/sunos-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz#a6ed7d6778d67e528c81fb165b23f4911b9b13d6" + integrity sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w== + +"@esbuild/win32-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz#9ac14c378e1b653af17d08e7d3ce34caef587323" + integrity sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg== + +"@esbuild/win32-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz#918942dcbbb35cc14fca39afb91b5e6a3d127267" + integrity sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ== + +"@esbuild/win32-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz#9bdad8176be7811ad148d1f8772359041f46c6c5" + integrity sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA== "@eslint/eslintrc@^1.2.1": version "1.2.1" @@ -2470,6 +2430,13 @@ dependencies: browser-headers "^0.4.1" +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -2715,6 +2682,14 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/gen-mapping@^0.3.2": version "0.3.3" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" @@ -2724,6 +2699,14 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@jridgewell/resolve-uri@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" @@ -2762,13 +2745,10 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" +"@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18": version "0.3.20" @@ -2778,10 +2758,10 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@jridgewell/trace-mapping@^0.3.20": - version "0.3.25" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" - integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -2857,6 +2837,19 @@ schema-utils "^3.0.0" source-map "^0.7.3" +"@pmmmwh/react-refresh-webpack-plugin@^0.5.11": + version "0.5.17" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.17.tgz#8c2f34ca8651df74895422046e11ce5a120e7930" + integrity sha512-tXDyE1/jzFsHXjhRZQ3hMl0IVhYe5qula43LDWIhVfjp9G/nT5OQY5AORVOrkEGAUltBJOfOWeETbmhm6kHhuQ== + dependencies: + ansi-html "^0.0.9" + core-js-pure "^3.23.3" + error-stack-parser "^2.0.6" + html-entities "^2.1.0" + loader-utils "^2.0.4" + schema-utils "^4.2.0" + source-map "^0.7.3" + "@pmmmwh/react-refresh-webpack-plugin@^0.5.3": version "0.5.5" resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.5.tgz#e77aac783bd079f548daa0a7f080ab5b5a9741ca" @@ -2872,21 +2865,6 @@ schema-utils "^3.0.0" source-map "^0.7.3" -"@pmmmwh/react-refresh-webpack-plugin@^0.5.5": - version "0.5.11" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.11.tgz#7c2268cedaa0644d677e8c4f377bc8fb304f714a" - integrity sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ== - dependencies: - ansi-html-community "^0.0.8" - common-path-prefix "^3.0.0" - core-js-pure "^3.23.3" - error-stack-parser "^2.0.6" - find-up "^5.0.0" - html-entities "^2.1.0" - loader-utils "^2.0.4" - schema-utils "^3.0.0" - source-map "^0.7.3" - "@radix-ui/number@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@radix-ui/number/-/number-1.0.1.tgz#644161a3557f46ed38a042acf4a770e826021674" @@ -3253,94 +3231,77 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@storybook/addon-actions@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.5.3.tgz#e0d0d819488d1d19918b23469b3ea6610fee5f07" - integrity sha512-v3yL6Eq/jCiXfA24JjRdbEQUuorms6tmrywaKcd1tAy4Ftgof0KHB4tTcTyiajrI5bh6PVJoRBkE8IDqmNAHkA== +"@storybook/addon-actions@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-7.6.24.tgz#eb1a5219505360985f76d7f05541562d75cb46ec" + integrity sha512-w/NrsSkL/yWfqbVnpRUtYKFHAoZOw3kZFMVLm+42Y6m6rzHyrkSBZKYC4+qcLOOpbiYCJMTdg7NbkmYW+XHCFw== dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/core-events" "7.5.3" + "@storybook/core-events" "7.6.24" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" + "@types/uuid" "^9.0.1" dequal "^2.0.2" - lodash "^4.17.21" polished "^4.2.2" - prop-types "^15.7.2" - react-inspector "^6.0.0" - telejson "^7.2.0" - ts-dedent "^2.0.0" uuid "^9.0.0" -"@storybook/addon-docs@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.5.3.tgz#36c28c9a54b28e3b4b1450e821d65e07be6da45b" - integrity sha512-JVQ6iCXKESij/SbE4Wq47dkSSgBRulvA8SUf8NWL5m9qpiHrg0lPSERHfoTLiB5uC/JwF0OKIlhxoWl+zCmtYg== +"@storybook/addon-docs@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-7.6.24.tgz#2506ab62498b9652537469cbdbd8d18fdadf7e3b" + integrity sha512-wQMtzksyCDGg1o75+IrKaoBoLZlumAsOd/bUAyl/VbtzjtOtcsmuVDx8S7Q50W3q56ulJvq8png3n3ESFsZD0A== dependencies: "@jest/transform" "^29.3.1" "@mdx-js/react" "^2.1.5" - "@storybook/blocks" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/csf-plugin" "7.5.3" - "@storybook/csf-tools" "7.5.3" + "@storybook/blocks" "7.6.24" + "@storybook/client-logger" "7.6.24" + "@storybook/components" "7.6.24" + "@storybook/csf-plugin" "7.6.24" + "@storybook/csf-tools" "7.6.24" "@storybook/global" "^5.0.0" "@storybook/mdx2-csf" "^1.0.0" - "@storybook/node-logger" "7.5.3" - "@storybook/postinstall" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/react-dom-shim" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/node-logger" "7.6.24" + "@storybook/postinstall" "7.6.24" + "@storybook/preview-api" "7.6.24" + "@storybook/react-dom-shim" "7.6.24" + "@storybook/theming" "7.6.24" + "@storybook/types" "7.6.24" fs-extra "^11.1.0" remark-external-links "^8.0.0" remark-slug "^6.0.0" ts-dedent "^2.0.0" -"@storybook/addon-links@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-7.5.3.tgz#4ed55c932db0b25197a16c30723307f6d20d7141" - integrity sha512-NcigW0HX8AllZ/KJ4u1KMiK30QvjqtC+zApI6Yc3tTaa6+BldbLv06fEgHgMY0yC8R+Ly9mUN7S1HiU7LQ7Qxg== +"@storybook/addon-links@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/addon-links/-/addon-links-7.6.24.tgz#129d021f9f5e744fb4fd228db6c0f20fad75b24c" + integrity sha512-QyLNM62kMANQrwbYufvOyCyIDUrL56WM6PnAg19vF1ePeY8Qc1je8ajqW1xsVXJ/lZZMzmrpfMF2lDf49Fs8OQ== dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/csf" "^0.1.0" + "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/router" "7.5.3" - "@storybook/types" "7.5.3" - prop-types "^15.7.2" ts-dedent "^2.0.0" -"@storybook/addons@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.5.3.tgz#1a96c290a171ea97b255d9892e86f0e7c3517cd2" - integrity sha512-1JDndMZ/Pju4YJ4aXegeF0O6BVT19c+Gu7WOlsD0aHbmAsPK5qH9QvcpR04nby6VrVZYtBOEJhGsWtAytzLVZw== +"@storybook/addons@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-7.6.24.tgz#676990a57083e3c7fb4e2810051d32980bea1bc5" + integrity sha512-6o+5+oCHMLNzANfP+1DAIsPnBcvAkMK3W8nj6T70Uyo3R7y+lEQCU8s7WB4dR1WBPiTOo93zbBSA5ENXYaU40Q== dependencies: - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/manager-api" "7.6.24" + "@storybook/preview-api" "7.6.24" + "@storybook/types" "7.6.24" -"@storybook/blocks@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.5.3.tgz#be754f60a91e95b8c72cbeadf9c5c7e7ab78920f" - integrity sha512-Z8yF820v78clQWkwG5OA5qugbQn7rtutq9XCsd03NDB+IEfDaTFQAZG8gs62ZX2ZaXAJsqJSr/mL9oURzXto2A== +"@storybook/blocks@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-7.6.24.tgz#cac94f775cacfded0a210eb189869ffb1cb62e3f" + integrity sha512-0Yd2RM+hUfwiD+yvLsyNlKTApWEWWIVxhQ2DXanNGYMbAJeMOXu+Z9e5PPreg4FoQp4fze7RLB4TCy1QV27msg== dependencies: - "@storybook/channels" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/components" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/csf" "^0.1.0" - "@storybook/docs-tools" "7.5.3" + "@storybook/channels" "7.6.24" + "@storybook/client-logger" "7.6.24" + "@storybook/components" "7.6.24" + "@storybook/core-events" "7.6.24" + "@storybook/csf" "^0.1.2" + "@storybook/docs-tools" "7.6.24" "@storybook/global" "^5.0.0" - "@storybook/manager-api" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/manager-api" "7.6.24" + "@storybook/preview-api" "7.6.24" + "@storybook/theming" "7.6.24" + "@storybook/types" "7.6.24" "@types/lodash" "^4.14.167" color-convert "^2.0.1" dequal "^2.0.2" @@ -3354,15 +3315,15 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/builder-manager@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.5.3.tgz#dc667fd6d450988bc33c246686822a87c1b95558" - integrity sha512-uf4Vyj8ofHaq94m065SMvFKak1XrrxgI83VZAxc2QjiPcbRwcVOZd+wcKFdZydqqA6FlBDdJrU+k9INA4Qkfcw== +"@storybook/builder-manager@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/builder-manager/-/builder-manager-7.6.24.tgz#42e69281213bd0a36077ba40498292fc79b3f038" + integrity sha512-R/z1xqrdSqz6fkAtlelTbmXKF68rxDCBveVCGuR1oGB5APNEbB8SZyZ88tjos/iFiQwSBSRiGhdyGdMDZSwbYg== dependencies: "@fal-works/esbuild-plugin-global-externals" "^2.1.2" - "@storybook/core-common" "7.5.3" - "@storybook/manager" "7.5.3" - "@storybook/node-logger" "7.5.3" + "@storybook/core-common" "7.6.24" + "@storybook/manager" "7.6.24" + "@storybook/node-logger" "7.6.24" "@types/ejs" "^3.1.1" "@types/find-cache-dir" "^3.2.1" "@yarnpkg/esbuild-plugin-pnp" "^3.0.0-rc.10" @@ -3376,33 +3337,35 @@ process "^0.11.10" util "^0.12.4" -"@storybook/builder-webpack5@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-7.5.3.tgz#7f392cae845c9c3c7de6e04045c531f8f70048e1" - integrity sha512-a2kHXFT61AV1+OPNTqXCsYk7Wk4XSqjAOQkSxWc1HK+kyMT+lahO4U06slji6XAVuXc/KY+naNUoaOfpB1hKVw== +"@storybook/builder-webpack5@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/builder-webpack5/-/builder-webpack5-7.6.24.tgz#42b2d77cbcab73946942b8cfa5b24a9c172e6236" + integrity sha512-lvdU8FVNNyFq5qsGDFvp2wl1iIkwRTqeJp0SUffgnGnKXSCVE5qWfeNXwguk8uoTb1k9afwj8hMAuk0yQ4twJQ== dependencies: - "@babel/core" "^7.22.0" - "@storybook/channels" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/core-webpack" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/preview" "7.5.3" - "@storybook/preview-api" "7.5.3" + "@babel/core" "^7.23.2" + "@storybook/channels" "7.6.24" + "@storybook/client-logger" "7.6.24" + "@storybook/core-common" "7.6.24" + "@storybook/core-events" "7.6.24" + "@storybook/core-webpack" "7.6.24" + "@storybook/node-logger" "7.6.24" + "@storybook/preview" "7.6.24" + "@storybook/preview-api" "7.6.24" "@swc/core" "^1.3.82" "@types/node" "^18.0.0" "@types/semver" "^7.3.4" babel-loader "^9.0.0" - babel-plugin-named-exports-order "^0.0.2" browser-assert "^1.2.1" case-sensitive-paths-webpack-plugin "^2.4.0" + cjs-module-lexer "^1.2.3" constants-browserify "^1.0.0" css-loader "^6.7.1" + es-module-lexer "^1.4.1" express "^4.17.3" fork-ts-checker-webpack-plugin "^8.0.0" fs-extra "^11.1.0" html-webpack-plugin "^5.5.0" + magic-string "^0.30.5" path-browserify "^1.0.1" process "^0.11.10" semver "^7.3.7" @@ -3418,35 +3381,35 @@ webpack-hot-middleware "^2.25.1" webpack-virtual-modules "^0.5.0" -"@storybook/channels@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.5.3.tgz#cbd178b0778f3484b970d0fd0edd294db6969e0f" - integrity sha512-dhWuV2o2lmxH0RKuzND8jxYzvSQTSmpE13P0IT/k8+I1up/rSNYOBQJT6SalakcNWXFAMXguo/8E7ApmnKKcEw== +"@storybook/channels@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-7.6.24.tgz#ad6abe97a9e77ab0cd67a5b42788dd9857e8cb44" + integrity sha512-rNSifUbCjUPWQMZPptY5VTY4c4iOrCzDKmmDeBeurPH0ZiDvnJjW7v9dlXzlDNoXFUv+jBE+RjrEfNWsnJhvsQ== dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/core-events" "7.5.3" + "@storybook/client-logger" "7.6.24" + "@storybook/core-events" "7.6.24" "@storybook/global" "^5.0.0" qs "^6.10.0" telejson "^7.2.0" tiny-invariant "^1.3.1" -"@storybook/cli@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.5.3.tgz#127ae3bcad169bf8c3eb3e1e6c9d587ad5f57e81" - integrity sha512-XysHSnknZTAcTbQ0bQsbfv5J8ifHpOBsmXjk1HCA05E9WGGrn9JrQRCfpDUQJ6O6UWq0bpMqzP8gFLWXFE7hug== +"@storybook/cli@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/cli/-/cli-7.6.24.tgz#f9ec9f97ab18e05e1452404f58b4d10447ea4830" + integrity sha512-ZFnMnPiThO1GAFRQYiS177jxqmhXlWI9twphAWyYmuhVQrdplzELIRbXDUJ9ZE3ln043owN9mnh7gHLX6cAY6g== dependencies: - "@babel/core" "^7.22.9" - "@babel/preset-env" "^7.22.9" - "@babel/types" "^7.22.5" + "@babel/core" "^7.23.2" + "@babel/preset-env" "^7.23.2" + "@babel/types" "^7.23.0" "@ndelangen/get-tarball" "^3.0.7" - "@storybook/codemod" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/core-server" "7.5.3" - "@storybook/csf-tools" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/telemetry" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/codemod" "7.6.24" + "@storybook/core-common" "7.6.24" + "@storybook/core-events" "7.6.24" + "@storybook/core-server" "7.6.24" + "@storybook/csf-tools" "7.6.24" + "@storybook/node-logger" "7.6.24" + "@storybook/telemetry" "7.6.24" + "@storybook/types" "7.6.24" "@types/semver" "^7.3.4" "@yarnpkg/fslib" "2.10.3" "@yarnpkg/libzip" "2.3.0" @@ -3463,7 +3426,7 @@ get-port "^5.1.1" giget "^1.0.0" globby "^11.0.2" - jscodeshift "^0.14.0" + jscodeshift "^0.15.1" leven "^3.1.0" ora "^5.4.1" prettier "^2.8.0" @@ -3471,71 +3434,70 @@ puppeteer-core "^2.1.1" read-pkg-up "^7.0.1" semver "^7.3.7" - simple-update-notifier "^2.0.0" strip-json-comments "^3.0.1" tempy "^1.0.1" ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/client-logger@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.5.3.tgz#5a33a8a1785dbe6beff60654bc8947724c0cd62e" - integrity sha512-vUFYALypjix5FoJ5M/XUP6KmyTnQJNW1poHdW7WXUVSg+lBM6E5eAtjTm0hdxNNDH8KSrdy24nCLra5h0X0BWg== +"@storybook/client-logger@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-7.6.24.tgz#efebff417b64ccd5b8cdb46411dadafbdbf4bc3e" + integrity sha512-Xgn62FLhTzGJFl/uAMukJrfqAhiInkJ91ZwZMqEl8bdgeGO6ISkijDqQebqI0KyqB4ZpD11jVvEOQ/TowLebZw== dependencies: "@storybook/global" "^5.0.0" -"@storybook/codemod@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.5.3.tgz#8a294b8d12f304a2a9db902848977147394d451c" - integrity sha512-gzycFdqnF4drUjfzMTrLNHqi2jkw1lDeACUzQdug5uWxynZKAvMTHAgU0q9wvoYRR9Xhq8PhfKtXtYCCj2Er4Q== +"@storybook/codemod@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/codemod/-/codemod-7.6.24.tgz#cf1b9e4c74441438665d12718776e7e64b0d9af0" + integrity sha512-WmkSNe/hdJy8oP3pWu9ekl1SjP5JRRlVrD1qWklsJSU1XinSzyR+GoNNMueW/oMl/Eg12rvnX5Py3LBVIivokQ== dependencies: - "@babel/core" "^7.22.9" - "@babel/preset-env" "^7.22.9" - "@babel/types" "^7.22.5" - "@storybook/csf" "^0.1.0" - "@storybook/csf-tools" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/types" "7.5.3" + "@babel/core" "^7.23.2" + "@babel/preset-env" "^7.23.2" + "@babel/types" "^7.23.0" + "@storybook/csf" "^0.1.2" + "@storybook/csf-tools" "7.6.24" + "@storybook/node-logger" "7.6.24" + "@storybook/types" "7.6.24" "@types/cross-spawn" "^6.0.2" cross-spawn "^7.0.3" globby "^11.0.2" - jscodeshift "^0.14.0" + jscodeshift "^0.15.1" lodash "^4.17.21" prettier "^2.8.0" recast "^0.23.1" -"@storybook/components@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.5.3.tgz#3fa282252e02973ead9f537f5ae3b5aeee5be4c4" - integrity sha512-M3+cjvEsDGLUx8RvK5wyF6/13LNlUnKbMgiDE8Sxk/v/WPpyhOAIh/B8VmrU1psahS61Jd4MTkFmLf1cWau1vw== +"@storybook/components@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-7.6.24.tgz#9d1f760cb0f6b761fe5c2c116d198f1745e74f5c" + integrity sha512-yjkJXr3kYGYyMNV/IuOI220ZVAH1z+wovZfsW4h0F56hTc0pFAhC551C8hk2AvJjSAa7N4VPm42zAqNb0HNTmA== dependencies: "@radix-ui/react-select" "^1.2.2" "@radix-ui/react-toolbar" "^1.0.4" - "@storybook/client-logger" "7.5.3" - "@storybook/csf" "^0.1.0" + "@storybook/client-logger" "7.6.24" + "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/theming" "7.6.24" + "@storybook/types" "7.6.24" memoizerific "^1.11.3" use-resize-observer "^9.1.0" util-deprecate "^1.0.2" -"@storybook/core-client@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.5.3.tgz#81e2d5343401f9caab9eaed28b649073937d5190" - integrity sha512-sIviDytbhos02TVXxU8XLymzty7IAtLs5e16hv49JSdBp47iBajRaNBmBj/l+sgTH+3M+R6gP8yGFMsZSCnU2g== +"@storybook/core-client@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/core-client/-/core-client-7.6.24.tgz#395f611f0cd18c5a9414caa51f026c8060dad966" + integrity sha512-1UHiA+h//U0iIm7GAhGG5hN8GaD4rhoqm4ZjUQaCPUemBtEOPMWJk1sQLyGrhlLYDEAp69Sbi4BP/J0LD0nrjQ== dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/preview-api" "7.5.3" + "@storybook/client-logger" "7.6.24" + "@storybook/preview-api" "7.6.24" -"@storybook/core-common@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.5.3.tgz#baaf4cb8e2e29ebd74626ee8cd5971f337ac4e23" - integrity sha512-WGMwjtVUxUzFwQz7Mgs0gLuNebIGNV55dCdZgurx2/y6QOkJ2v8D0b3iL+xKMV4B5Nwoc2DsM418Y+Hy3UQd+w== +"@storybook/core-common@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/core-common/-/core-common-7.6.24.tgz#f87f175ea6ad8911f13e9152d701cd4f80142470" + integrity sha512-wgCarEWFodQaJ76uLxwHoxtGwQPymzoZHFLE2fJm04y6sdotUgattUUY5FxbhSveImj6VTLDDzstkzxxz166UQ== dependencies: - "@storybook/core-events" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/core-events" "7.6.24" + "@storybook/node-logger" "7.6.24" + "@storybook/types" "7.6.24" "@types/find-cache-dir" "^3.2.1" "@types/node" "^18.0.0" "@types/node-fetch" "^2.6.4" @@ -3557,33 +3519,33 @@ resolve-from "^5.0.0" ts-dedent "^2.0.0" -"@storybook/core-events@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.5.3.tgz#210089576844569a914cc0cd1e07119bac6eb0e4" - integrity sha512-DFOpyQ22JD5C1oeOFzL8wlqSWZzrqgDfDbUGP8xdO4wJu+FVTxnnWN6ZYLdTPB1u27DOhd7TzjQMfLDHLu7kbQ== +"@storybook/core-events@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-7.6.24.tgz#ebe6d96a2502eb22f7df393946eb0c11bfd2e67a" + integrity sha512-9mhV2grn+IYljRJSqoTec3XhoMs1Va0aYWe937siX3Fj77F6zuXmEugrJstgVYsPAgcqH9eBSCM7rwdmbo7LVg== dependencies: ts-dedent "^2.0.0" -"@storybook/core-server@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.5.3.tgz#23ea0757d6ffc0e9acc269b58efd7f75f5d781f6" - integrity sha512-Gmq1w7ulN/VIeTDboNcb6GNM+S8T0SqhJUqeoHzn0vLGnzxeuYRJ0V3ZJhGZiJfSmCNqYAjC8QUBf6uU1gLipw== +"@storybook/core-server@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/core-server/-/core-server-7.6.24.tgz#597bd0c92efd5f9d92ad327c23a62f85983d085d" + integrity sha512-x6kD7JW9hnF788xF46OtnkQqPZDS9qf52IUVF+Wuzpwo10bMj5wMYbgwT2WkiCMdktK00CQzV13jb8KRHgKZfw== dependencies: "@aw-web-design/x-default-browser" "1.4.126" "@discoveryjs/json-ext" "^0.5.3" - "@storybook/builder-manager" "7.5.3" - "@storybook/channels" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/csf" "^0.1.0" - "@storybook/csf-tools" "7.5.3" + "@storybook/builder-manager" "7.6.24" + "@storybook/channels" "7.6.24" + "@storybook/core-common" "7.6.24" + "@storybook/core-events" "7.6.24" + "@storybook/csf" "^0.1.2" + "@storybook/csf-tools" "7.6.24" "@storybook/docs-mdx" "^0.1.0" "@storybook/global" "^5.0.0" - "@storybook/manager" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/telemetry" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/manager" "7.6.24" + "@storybook/node-logger" "7.6.24" + "@storybook/preview-api" "7.6.24" + "@storybook/telemetry" "7.6.24" + "@storybook/types" "7.6.24" "@types/detect-port" "^1.3.0" "@types/node" "^18.0.0" "@types/pretty-hrtime" "^1.0.0" @@ -3596,7 +3558,6 @@ express "^4.17.3" fs-extra "^11.1.0" globby "^11.0.2" - ip "^2.0.0" lodash "^4.17.21" open "^8.4.0" pretty-hrtime "^1.0.3" @@ -3611,44 +3572,44 @@ watchpack "^2.2.0" ws "^8.2.3" -"@storybook/core-webpack@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-7.5.3.tgz#40da9419c71d6e0134a4309cf0ed6f034baf5bdd" - integrity sha512-dhC94VeLwyPtZ2gvEND6J4alMaiFDsK8lJCYPNAahUr56f3nRDyVibE7prd94sAlfrdind1g5slP9VMP8cX+uQ== +"@storybook/core-webpack@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/core-webpack/-/core-webpack-7.6.24.tgz#bdc3f374cc59ed35e33a53f3fa1eed37c63d33b3" + integrity sha512-eMVFFrbFRLzuOzXMYDhlvxTMAje8CvgkgEkIduWKsFyptdJN/sCmG5fhY/+FpTNCA4xu4gHOJFzKJ1FOZz0agw== dependencies: - "@storybook/core-common" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/core-common" "7.6.24" + "@storybook/node-logger" "7.6.24" + "@storybook/types" "7.6.24" "@types/node" "^18.0.0" ts-dedent "^2.0.0" -"@storybook/csf-plugin@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.5.3.tgz#803197a2042323323528014878e9f9f0cc50c193" - integrity sha512-yQ3S/IOT08Y7XTnlc3SPkrJKZ6Xld6liAlHn+ddjge4oZa0hUqwYLb+piXUhFMfL6Ij65cj4hu3vMbw89azIhg== +"@storybook/csf-plugin@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-7.6.24.tgz#5ced2bdba64a9dd9af965b2f1e5740c8bf47c5bb" + integrity sha512-dPCsBzgvcAQloJlKQxLgMCoZtOoVsVNPWowoduyf6VVev04h+j3UlfSPh4r9R2C6L7J+WOyucCRG5CuzoiXtEw== dependencies: - "@storybook/csf-tools" "7.5.3" + "@storybook/csf-tools" "7.6.24" unplugin "^1.3.1" -"@storybook/csf-tools@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.5.3.tgz#1b2a393b3402a4c2fdfb2eb4eb90c63463c106ae" - integrity sha512-676C3ISn7FQJKjb3DBWXhjGN2OQEv4s71dx+5D0TlmswDCOOGS8dYFjP8wVx51+mAIE8CROAw7vLHLtVKU7SwQ== +"@storybook/csf-tools@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/csf-tools/-/csf-tools-7.6.24.tgz#0cb2591085f772072745b1d970dd445d498d3ddb" + integrity sha512-jyGXjj8S2kNp3X69ZjzT+rVl2k/1Q4O4JpcwMEK0o5ByoYU2zFuefkvJyS5LFDDh1K8LCwwaCtawqF6rZhAAaw== dependencies: - "@babel/generator" "^7.22.9" - "@babel/parser" "^7.22.7" - "@babel/traverse" "^7.22.8" - "@babel/types" "^7.22.5" - "@storybook/csf" "^0.1.0" - "@storybook/types" "7.5.3" + "@babel/generator" "^7.23.0" + "@babel/parser" "^7.23.0" + "@babel/traverse" "^7.23.2" + "@babel/types" "^7.23.0" + "@storybook/csf" "^0.1.2" + "@storybook/types" "7.6.24" fs-extra "^11.1.0" recast "^0.23.1" ts-dedent "^2.0.0" -"@storybook/csf@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.1.tgz#abccc8c3e49aed0a6a7e87beb0d1c262b1921c06" - integrity sha512-4hE3AlNVxR60Wc5KSC68ASYzUobjPqtSKyhV6G+ge0FIXU55N5nTY7dXGRZHQGDBPq+XqchMkIdlkHPRs8nTHg== +"@storybook/csf@^0.1.2": + version "0.1.13" + resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.13.tgz#c8a9bea2ae518a3d9700546748fa30a8b07f7f80" + integrity sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q== dependencies: type-fest "^2.19.0" @@ -3657,15 +3618,16 @@ resolved "https://registry.yarnpkg.com/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz#33ba0e39d1461caf048b57db354b2cc410705316" integrity sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg== -"@storybook/docs-tools@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.5.3.tgz#1d1aec4a7546d70a2273ad99814a1dbecb8e80f7" - integrity sha512-f20EUQlwamcSPrOFn42fj9gpkZIDNCZkC3N19yGzLYiE4UMyaYQgRl18oLvqd3M6aBm6UW6SCoIIgeaOViBSqg== +"@storybook/docs-tools@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/docs-tools/-/docs-tools-7.6.24.tgz#957bf18a813494aee48b880b1866778753e4ce11" + integrity sha512-uvUfBZ11LuKENR1s3eRWQXiAt3F7pcCzv6mFgwWFIgxdCf6jgLnvIDclFHOZxOuazACK2DCY9cXdQsOs5R33dw== dependencies: - "@storybook/core-common" "7.5.3" - "@storybook/preview-api" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/core-common" "7.6.24" + "@storybook/preview-api" "7.6.24" + "@storybook/types" "7.6.24" "@types/doctrine" "^0.0.3" + assert "^2.1.0" doctrine "^3.0.0" lodash "^4.17.21" @@ -3674,93 +3636,93 @@ resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== -"@storybook/manager-api@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.5.3.tgz#6e9e791a8996631dc77f3a0cecc34ce4f4869647" - integrity sha512-d8mVLr/5BEG4bAS2ZeqYTy/aX4jPEpZHdcLaWoB4mAM+PAL9wcWsirUyApKtDVYLITJf/hd8bb2Dm2ok6E45gA== +"@storybook/manager-api@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-7.6.24.tgz#e50c790cd93da81cfb67179dc4b9dcb8e269df2a" + integrity sha512-afscdt9zc8wx+s0VzIlvU+pc5X6KTGHOUj6sLlJDCzzrRG2MBNdSfwOuivlC93jV+yPdgdgW46jaK4meC9jLdg== dependencies: - "@storybook/channels" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/csf" "^0.1.0" + "@storybook/channels" "7.6.24" + "@storybook/client-logger" "7.6.24" + "@storybook/core-events" "7.6.24" + "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/router" "7.5.3" - "@storybook/theming" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/router" "7.6.24" + "@storybook/theming" "7.6.24" + "@storybook/types" "7.6.24" dequal "^2.0.2" lodash "^4.17.21" memoizerific "^1.11.3" - semver "^7.3.7" store2 "^2.14.2" telejson "^7.2.0" ts-dedent "^2.0.0" -"@storybook/manager@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.5.3.tgz#e185fc056546c19d255cdc26b6f2698e04d3f8ab" - integrity sha512-3ZZrHYcXWAQXpDQZBvKyScGgQaAaBc63i+KC2mXqzTdXuJhVDUiylvqLRprBnrEprgePQLFrxGC2JSHUwH7dqg== +"@storybook/manager@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/manager/-/manager-7.6.24.tgz#4597c283930122cbc4b11af14b1eb60b9144e7df" + integrity sha512-IqQ6G6wy88nYNBzNW2bWJCabSFvKv01reDdyDmH4asgvkSuFIoNuXGmZFUmg883U9Dj/Izsn1K9PDgvHTW6DQA== "@storybook/mdx2-csf@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz#97f6df04d0bf616991cc1005a073ac004a7281e5" integrity sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw== -"@storybook/node-logger@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.5.3.tgz#23133787f5b3427cef7301e10c6caf9132969fc1" - integrity sha512-7ZZDw/q3hakBj1FngsBjaHNIBguYAWojp7R1fFTvwkeunCi21EUzZjRBcqp10kB6BP3/NLX32bIQknsCWD76rQ== +"@storybook/node-logger@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-7.6.24.tgz#adb6667671641fc2412dd595ce9c7619cebf6610" + integrity sha512-6+kuX0q4VH1Orf0Yda+dj6svMIjtN5FbXU9lgKWbO5OY2xeyEtr/+3phxfTnfd6N89kYxDx8JGeP5ldzx2alxg== -"@storybook/postinstall@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.5.3.tgz#66b9add9e315646dde2289d77c87118c3c8596a6" - integrity sha512-r+H3xGMu2A9yOSsygc3bDFhku8wpOZF3SqO19B7eAML12viHwUtYfyGL74svw4TMcKukyQ+KPn5QsSG+4bjZMg== +"@storybook/postinstall@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/postinstall/-/postinstall-7.6.24.tgz#227a3040aa57ce18f7dc4bc704698266244bc341" + integrity sha512-ohyKVd5fhdWVmO/hHMNoEGDLzqoR7bZepGGNuBJqNQjVJ4wKj31XIGYiektEL7S59g67eFPP4X86SHry332/Ew== -"@storybook/preset-create-react-app@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/preset-create-react-app/-/preset-create-react-app-7.5.3.tgz#db7b8a7c6400edeba4fe4c5db4545d16a6b96465" - integrity sha512-BxNFI/+pPR00BYkUbiMmr4TwiDJKMSpcBdEvqUddatGiN+IsFcaM6esuHfhkvwb5J49vz6SkBwvrPN1hqeWTDw== +"@storybook/preset-create-react-app@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/preset-create-react-app/-/preset-create-react-app-7.6.24.tgz#c3bfb73f77aa0a4a4c0b4b7698ea2222a6dbb40f" + integrity sha512-FJ2ETb2ApobP1U0KqCAE4iEynJvvItNYSB+7sJJzIEsoqJarypOZEISkknJy5UuPDgr3z0PivDUDWXCFZ6Ea2A== dependencies: "@pmmmwh/react-refresh-webpack-plugin" "^0.5.1" "@storybook/react-docgen-typescript-plugin" "1.0.6--canary.9.0c3f3b7.0" - "@storybook/types" "7.5.3" + "@storybook/types" "7.6.24" "@types/babel__core" "^7.1.7" - babel-plugin-react-docgen "^4.1.0" + "@types/semver" "^7.3.4" pnp-webpack-plugin "^1.7.0" semver "^7.3.5" -"@storybook/preset-react-webpack@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/preset-react-webpack/-/preset-react-webpack-7.5.3.tgz#43139d09b719dfe5624a841bfe8e57ed064fa697" - integrity sha512-/3Zsh97KpMLsx3lkkQ9LAlEVWwBGbAJTwE+ueVxVnAJgwiDCVe95IN7sVpKuwN/PVStnMRwDADUvZPfmw4m3Sg== +"@storybook/preset-react-webpack@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/preset-react-webpack/-/preset-react-webpack-7.6.24.tgz#512fd061fb8b73c6bb902126f274a7d85c8ba334" + integrity sha512-cu3BgBPaGSIbeKRGweev5BxgbdgVGvt+ay6QQJpsylXIP2Ie884wHKtyBJYdQuWO2Pmd3nzGxhSs9lk9S5n4rg== dependencies: - "@babel/preset-flow" "^7.22.5" - "@babel/preset-react" "^7.22.5" - "@pmmmwh/react-refresh-webpack-plugin" "^0.5.5" - "@storybook/core-webpack" "7.5.3" - "@storybook/docs-tools" "7.5.3" - "@storybook/node-logger" "7.5.3" - "@storybook/react" "7.5.3" + "@babel/preset-flow" "^7.22.15" + "@babel/preset-react" "^7.22.15" + "@pmmmwh/react-refresh-webpack-plugin" "^0.5.11" + "@storybook/core-webpack" "7.6.24" + "@storybook/docs-tools" "7.6.24" + "@storybook/node-logger" "7.6.24" + "@storybook/react" "7.6.24" "@storybook/react-docgen-typescript-plugin" "1.0.6--canary.9.0c3f3b7.0" "@types/node" "^18.0.0" "@types/semver" "^7.3.4" babel-plugin-add-react-displayname "^0.0.5" - babel-plugin-react-docgen "^4.2.1" fs-extra "^11.1.0" - react-refresh "^0.11.0" + magic-string "^0.30.5" + react-docgen "^7.0.0" + react-refresh "^0.14.0" semver "^7.3.7" webpack "5" -"@storybook/preview-api@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.5.3.tgz#eaf70f9b6888d0dac42ce39a296afd6acacf6156" - integrity sha512-LNmEf7oBRnZ1wG3bQ+P+TO29+NN5pSDJiAA6FabZBrtIVm+psc2lxBCDQvFYyAFzQSlt60toGKNW8+RfFNdR5Q== +"@storybook/preview-api@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-7.6.24.tgz#830f8ca6687c609f3b3841121d1a1317ae396a19" + integrity sha512-dBoHQeZk4ZdfeIZzc798Bl2wF0tjiY6fhl7QllBUIFqxvHTCM3YFa2vAIifr2bnxeTpvheKFhqNnOivJbSwTXQ== dependencies: - "@storybook/channels" "7.5.3" - "@storybook/client-logger" "7.5.3" - "@storybook/core-events" "7.5.3" - "@storybook/csf" "^0.1.0" + "@storybook/channels" "7.6.24" + "@storybook/client-logger" "7.6.24" + "@storybook/core-events" "7.6.24" + "@storybook/csf" "^0.1.2" "@storybook/global" "^5.0.0" - "@storybook/types" "7.5.3" + "@storybook/types" "7.6.24" "@types/qs" "^6.9.5" dequal "^2.0.2" lodash "^4.17.21" @@ -3770,10 +3732,10 @@ ts-dedent "^2.0.0" util-deprecate "^1.0.2" -"@storybook/preview@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.5.3.tgz#9abe434ea9fb280a7d2141b72be2958f7eb9cc5b" - integrity sha512-Hf90NlLaSrdMZXPOHDCMPjTywVrQKK0e5CtzqWx/ZQz91JDINxJD+sGj2wZU+wuBtQcTtlsXc9OewlJ+9ETwIw== +"@storybook/preview@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/preview/-/preview-7.6.24.tgz#b9ab13808cb78a96fdac62027edc886ded0672f5" + integrity sha512-8qa9OFD1XKrX0Ts7vZFSd0ugIHoQt4rBGZNG7gE17laFxMTMiNAaTEqBF44f6vslx0z8VjIPtQ8qKeurU0IQdg== "@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0": version "1.0.6--canary.9.0c3f3b7.0" @@ -3788,33 +3750,33 @@ react-docgen-typescript "^2.2.2" tslib "^2.0.0" -"@storybook/react-dom-shim@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.5.3.tgz#54fc7bda589be5f630738fd08d2a37d5bb7815fa" - integrity sha512-9aNcKdhoP36jMrcXgfzE9jVg/SpqPpWnUJM70upYoZXytG2wQSPtawLHHyC6kycvTzwncyfF3rwUnOFBB8zmig== +"@storybook/react-dom-shim@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-7.6.24.tgz#cb32906303bb95393f8a80a5d6fb13e400b630d7" + integrity sha512-l43rMU8PAT6Z33Ey20RE6BRpCl8tsM4jK1My8x3vea3WJPHOwSrt9P76nhl66MoEdDplCflDNWugHU9/ZL7g9g== -"@storybook/react-webpack5@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/react-webpack5/-/react-webpack5-7.5.3.tgz#dfef70b203a803c77ee777eb79b6ee986d6c7009" - integrity sha512-+sjYMrvmpvztdDkRE1/EkcNNxTTdDdBoXUGrGyE0ig6qEwSewRld0H8ng1jlNQ8treocy7036TXJF+qHZEz/FQ== +"@storybook/react-webpack5@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/react-webpack5/-/react-webpack5-7.6.24.tgz#4dc52271126bef5bc2993377b50e77adca873847" + integrity sha512-XnOLF9nKpiXQ6rejUXo0P0fvvl/QeG6AiCsqyYYSCDlpgDViOmmS9aihrbb958ZnfAtmv3RB5htzRADnva0Fgg== dependencies: - "@storybook/builder-webpack5" "7.5.3" - "@storybook/preset-react-webpack" "7.5.3" - "@storybook/react" "7.5.3" + "@storybook/builder-webpack5" "7.6.24" + "@storybook/preset-react-webpack" "7.6.24" + "@storybook/react" "7.6.24" "@types/node" "^18.0.0" -"@storybook/react@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.5.3.tgz#fe01ff2057826bdf55b0852deea7e76859757c01" - integrity sha512-dZILdM36xMFDjdmmy421G5X+sOIncB2qF3IPTooniG1i1Z6v/dVNo57ovdID9lDTNa+AWr2fLB9hANiISMqmjQ== +"@storybook/react@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-7.6.24.tgz#64db3cb533902a00c358b93455a70e1eeb4ef5cc" + integrity sha512-uDuO+jwFAAZMkkozKdJb3hGWXNs45WbkeZ3OnnTS/MwdLtFvu4uEqxMbA7ZkrUZ1g+ouY5vbUNbvCLaqIUrwGA== dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/core-client" "7.5.3" - "@storybook/docs-tools" "7.5.3" + "@storybook/client-logger" "7.6.24" + "@storybook/core-client" "7.6.24" + "@storybook/docs-tools" "7.6.24" "@storybook/global" "^5.0.0" - "@storybook/preview-api" "7.5.3" - "@storybook/react-dom-shim" "7.5.3" - "@storybook/types" "7.5.3" + "@storybook/preview-api" "7.6.24" + "@storybook/react-dom-shim" "7.6.24" + "@storybook/types" "7.6.24" "@types/escodegen" "^0.0.6" "@types/estree" "^0.0.51" "@types/node" "^18.0.0" @@ -3830,45 +3792,45 @@ type-fest "~2.19" util-deprecate "^1.0.2" -"@storybook/router@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.5.3.tgz#e024ad96bc4bbf7250239921a251e828729e4747" - integrity sha512-/iNYCFore7R5n6eFHbBYoB0P2/sybTVpA+uXTNUd3UEt7Ro6CEslTaFTEiH2RVQwOkceBp/NpyWon74xZuXhMg== +"@storybook/router@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-7.6.24.tgz#b4aa2795cfee3f009a1fdbe373afaa8122b2b2bc" + integrity sha512-298nfeJrcw/5o30obLxnu8YA5Mp566GIQTR1bvjglh9b2w4hJXwhGcZD8/rxrMbi7yDemGgLyyicMNvWr+cpQA== dependencies: - "@storybook/client-logger" "7.5.3" + "@storybook/client-logger" "7.6.24" memoizerific "^1.11.3" qs "^6.10.0" -"@storybook/telemetry@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.5.3.tgz#67d77c5cb33360c6f483a7cc89897fea160ca446" - integrity sha512-X6alII3o0jCb5xALuw+qcWmvyrbhlkmPeNZ6ZQXknOfB4DkwponFdWN5y6W7yGvr01xa5QBepJRV79isl97d8g== +"@storybook/telemetry@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/telemetry/-/telemetry-7.6.24.tgz#9ff7913cb591f8c886d8ed1f123c02e467b0200f" + integrity sha512-MDdg4sKrNsUSzRNBSXKBVZlE+OkOWahmjgzp9U0zJa17cpBqpLjYzRtLL9j/j1VOFhxKPpkXY0ipuPc24KJ8rw== dependencies: - "@storybook/client-logger" "7.5.3" - "@storybook/core-common" "7.5.3" - "@storybook/csf-tools" "7.5.3" + "@storybook/client-logger" "7.6.24" + "@storybook/core-common" "7.6.24" + "@storybook/csf-tools" "7.6.24" chalk "^4.1.0" detect-package-manager "^2.0.1" fetch-retry "^5.0.2" fs-extra "^11.1.0" read-pkg-up "^7.0.1" -"@storybook/theming@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.5.3.tgz#bbcf547c8b3ec1e59e641c58155a44781d5f310d" - integrity sha512-Cjmthe1MAk0z4RKCZ7m72gAD8YD0zTAH97z5ryM1Qv84QXjiCQ143fGOmYz1xEQdNFpOThPcwW6FEccLHTkVcg== +"@storybook/theming@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-7.6.24.tgz#d423956aa6d483f602139f10fb5fb61725518424" + integrity sha512-HuH7fkscjq5+qJTTWEY0xRZ9CMaBFpk+NdevA0eHCcBlo4yhMWb1PTUw9PHch4EIU7ng7l9tEPEaxLQT4vFUPg== dependencies: "@emotion/use-insertion-effect-with-fallbacks" "^1.0.0" - "@storybook/client-logger" "7.5.3" + "@storybook/client-logger" "7.6.24" "@storybook/global" "^5.0.0" memoizerific "^1.11.3" -"@storybook/types@7.5.3": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.5.3.tgz#be956805dafc09fa9a7a3dd4e0e5097ef08e4fd4" - integrity sha512-iu5W0Kdd6nysN5CPkY4GRl+0BpxRTdSfBIJak7mb6xCIHSB5t1tw4BOuqMQ5EgpikRY3MWJ4gY647QkWBX3MNQ== +"@storybook/types@7.6.24": + version "7.6.24" + resolved "https://registry.yarnpkg.com/@storybook/types/-/types-7.6.24.tgz#05812d09854b6dd04d9bf30dcfaafcb85135c539" + integrity sha512-XOhLmXnQprLRIs4dT9kmWHgETEiGdOjbJ9ULQGoKR72wia47Buzrjwg5Ym3BTQEzrtLpo/8FD3NS+Migldp+XA== dependencies: - "@storybook/channels" "7.5.3" + "@storybook/channels" "7.6.24" "@types/babel__core" "^7.0.0" "@types/express" "^4.7.0" file-system-cache "2.3.0" @@ -4108,15 +4070,10 @@ dependencies: "@babel/runtime" "^7.10.2" -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@tootallnate/once@1", "@tootallnate/once@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.1.tgz#35adc6222e3662fa2222ce123b961476a746b9ea" + integrity sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ== "@types/aria-query@^4.2.0": version "4.2.2" @@ -4134,6 +4091,17 @@ "@types/babel__template" "*" "@types/babel__traverse" "*" +"@types/babel__core@^7.18.0": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + "@types/babel__generator@*": version "7.6.4" resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" @@ -4156,6 +4124,13 @@ dependencies: "@babel/types" "^7.3.0" +"@types/babel__traverse@^7.18.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== + dependencies: + "@babel/types" "^7.28.2" + "@types/big.js@6.1.1": version "6.1.1" resolved "https://registry.yarnpkg.com/@types/big.js/-/big.js-6.1.1.tgz#c2be5e81e0cf0c1c31704e3b12f750712f647414" @@ -4423,6 +4398,11 @@ resolved "https://registry.yarnpkg.com/@types/doctrine/-/doctrine-0.0.3.tgz#e892d293c92c9c1d3f9af72c15a554fbc7e0895a" integrity sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA== +"@types/doctrine@^0.0.9": + version "0.0.9" + resolved "https://registry.yarnpkg.com/@types/doctrine/-/doctrine-0.0.9.tgz#d86a5f452a15e3e3113b99e39616a9baa0f9863f" + integrity sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA== + "@types/ejs@^3.1.1": version "3.1.5" resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.1.5.tgz#49d738257cc73bafe45c13cb8ff240683b4d5117" @@ -4438,22 +4418,6 @@ resolved "https://registry.yarnpkg.com/@types/escodegen/-/escodegen-0.0.6.tgz#5230a9ce796e042cda6f086dbf19f22ea330659c" integrity sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig== -"@types/eslint-scope@^3.7.3": - version "3.7.3" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.3.tgz#125b88504b61e3c8bc6f870882003253005c3224" - integrity sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g== - dependencies: - "@types/eslint" "*" - "@types/estree" "*" - -"@types/eslint@*": - version "8.4.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.1.tgz#c48251553e8759db9e656de3efc846954ac32304" - integrity sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - "@types/eslint@^7.28.2": version "7.29.0" resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" @@ -4472,10 +4436,10 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/estree@^1.0.0", "@types/estree@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@types/estree@^1.0.8": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.9.tgz#cf3f0e876d7bee15a93ab925b82bf570a3904a24" + integrity sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": version "4.17.28" @@ -4594,6 +4558,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -4674,11 +4643,6 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== - "@types/qs@*", "@types/qs@^6.9.5": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -4752,6 +4716,11 @@ dependencies: "@types/node" "*" +"@types/resolve@^1.20.2": + version "1.20.6" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.6.tgz#e6e60dad29c2c8c206c026e6dd8d6d1bdda850b8" + integrity sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ== + "@types/retry@^0.12.0": version "0.12.1" resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.1.tgz#d8f1c0d0dc23afad6dc16a9e993a0865774b4065" @@ -4824,6 +4793,11 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== +"@types/uuid@^9.0.1": + version "9.0.8" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== + "@types/ws@^8.2.2": version "8.5.3" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" @@ -4944,203 +4918,125 @@ "@typescript-eslint/types" "5.17.0" eslint-visitor-keys "^3.0.0" -"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" - integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== +"@webassemblyjs/ast@1.14.1", "@webassemblyjs/ast@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.14.1.tgz#a9f6a07f2b03c95c8d38c4536a1fdfb521ff55b6" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" -"@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" - integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg== +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz#fcca1eeddb1cc4e7b6eed4fc7956d6813b21b9fb" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== + +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz#e0a16152248bc38daee76dd7e21f15c5ef3ab1e7" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== + +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz#822a9bc603166531f7d5df84e67b5bf99b72b96b" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== + +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz#dbd932548e7119f4b8a7877fd5a8d20e63490b2d" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== dependencies: - "@webassemblyjs/helper-numbers" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - -"@webassemblyjs/floating-point-hex-parser@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" - integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== - -"@webassemblyjs/helper-api-error@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" - integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== - -"@webassemblyjs/helper-buffer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" - integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== - -"@webassemblyjs/helper-buffer@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6" - integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw== - -"@webassemblyjs/helper-numbers@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" - integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== - dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" - integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz#e556108758f448aae84c850e593ce18a0eb31e0b" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== -"@webassemblyjs/helper-wasm-section@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" - integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz#9629dda9c4430eab54b591053d6dc6f3ba050348" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" -"@webassemblyjs/helper-wasm-section@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf" - integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/wasm-gen" "1.12.1" - -"@webassemblyjs/ieee754@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" - integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz#1c5eaace1d606ada2c7fd7045ea9356c59ee0dba" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" - integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz#57c5c3deb0105d02ce25fa3fd74f4ebc9fd0bbb0" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" - integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz#917a20e93f71ad5602966c2d685ae0c6c21f60f1" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== -"@webassemblyjs/wasm-edit@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" - integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz#ac6689f502219b59198ddec42dcd496b1004d597" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-opt" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - "@webassemblyjs/wast-printer" "1.11.6" + "@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" -"@webassemblyjs/wasm-edit@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b" - integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g== +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz#991e7f0c090cb0bb62bbac882076e3d219da9570" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/helper-wasm-section" "1.12.1" - "@webassemblyjs/wasm-gen" "1.12.1" - "@webassemblyjs/wasm-opt" "1.12.1" - "@webassemblyjs/wasm-parser" "1.12.1" - "@webassemblyjs/wast-printer" "1.12.1" + "@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" -"@webassemblyjs/wasm-gen@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" - integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz#e6f71ed7ccae46781c206017d3c14c50efa8106b" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" -"@webassemblyjs/wasm-gen@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547" - integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w== +"@webassemblyjs/wasm-parser@1.14.1", "@webassemblyjs/wasm-parser@^1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz#b3e13f1893605ca78b52c68e54cf6a865f90b9fb" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" + "@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" -"@webassemblyjs/wasm-opt@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" - integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz#3bb3e9638a8ae5fdaf9610e7a06b4d9f9aa6fe07" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-buffer" "1.11.6" - "@webassemblyjs/wasm-gen" "1.11.6" - "@webassemblyjs/wasm-parser" "1.11.6" - -"@webassemblyjs/wasm-opt@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5" - integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-buffer" "1.12.1" - "@webassemblyjs/wasm-gen" "1.12.1" - "@webassemblyjs/wasm-parser" "1.12.1" - -"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" - integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937" - integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ== - dependencies: - "@webassemblyjs/ast" "1.12.1" - "@webassemblyjs/helper-api-error" "1.11.6" - "@webassemblyjs/helper-wasm-bytecode" "1.11.6" - "@webassemblyjs/ieee754" "1.11.6" - "@webassemblyjs/leb128" "1.11.6" - "@webassemblyjs/utf8" "1.11.6" - -"@webassemblyjs/wast-printer@1.11.6": - version "1.11.6" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" - integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== - dependencies: - "@webassemblyjs/ast" "1.11.6" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.12.1": - version "1.12.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac" - integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA== - dependencies: - "@webassemblyjs/ast" "1.12.1" + "@webassemblyjs/ast" "1.14.1" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -5181,7 +5077,7 @@ abab@^2.0.3, abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: +accepts@~1.3.4, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -5197,11 +5093,6 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" -acorn-import-assertions@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" - integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== - acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -5226,12 +5117,17 @@ acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.11.2, acorn@^8.7.1, acorn@^8.8.2: +acorn@^8.11.2: version "8.11.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== -acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.0: +acorn@^8.15.0, acorn@^8.16.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.18.0.tgz#4faf01b2d6d326bfeed97aea1f52220b5f4c1940" + integrity sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ== + +acorn@^8.2.4, acorn@^8.7.0: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== @@ -5293,7 +5189,7 @@ ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^5.0.0: +ajv-keywords@^5.0.0, ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== @@ -5301,24 +5197,24 @@ ajv-keywords@^5.0.0: fast-deep-equal "^3.1.3" ajv@^6.10.0, ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + version "6.15.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.15.0.tgz#07e982c74626167aa7a2495c53817892d7139492" + integrity sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw== dependencies: fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f" - integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== +ajv@^8.0.0, ajv@^8.6.0, ajv@^8.8.0, ajv@^8.9.0: + version "8.20.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.20.0.tgz#304b3636add88ba7d936760dd50ece006dea95f9" + integrity sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: version "4.3.2" @@ -5332,6 +5228,11 @@ ansi-html-community@0.0.8, ansi-html-community@^0.0.8: resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== +ansi-html@^0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.9.tgz#6512d02342ae2cc68131952644a129cb734cd3f0" + integrity sha512-ozbS3LuenHVxNRh/wdnN16QapUHzauqSomAl1jwwJRRsGwFwtj644lIhxfWu0Fy0acCij2+AEgHvjscq3dlVXg== + ansi-regex@^5.0.0, ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -5457,7 +5358,7 @@ asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -assert@^2.0.0: +assert@^2.0.0, assert@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/assert/-/assert-2.1.0.tgz#6d92a238d05dc02e7427c881fb8be81c8448b2dd" integrity sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw== @@ -5473,20 +5374,6 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -ast-types@0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.15.2.tgz#39ae4809393c4b16df751ee563411423e85fb49d" - integrity sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg== - dependencies: - tslib "^2.0.1" - -ast-types@^0.14.2: - version "0.14.2" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" - integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== - dependencies: - tslib "^2.0.1" - ast-types@^0.16.1: version "0.16.1" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.16.1.tgz#7a9da1617c9081bc121faafe91711b4c8bb81da2" @@ -5500,16 +5387,16 @@ async-limiter@~1.0.0: integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== dependencies: lodash "^4.17.14" async@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== asynckit@^0.4.0: version "0.4.0" @@ -5646,11 +5533,6 @@ babel-plugin-named-asset-import@^0.3.8: resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz#6b7fa43c59229685368683c28bc9734f24524cc2" integrity sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q== -babel-plugin-named-exports-order@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz#ae14909521cf9606094a2048239d69847540cb09" - integrity sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw== - babel-plugin-polyfill-corejs2@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" @@ -5660,15 +5542,23 @@ babel-plugin-polyfill-corejs2@^0.3.0: "@babel/helper-define-polyfill-provider" "^0.3.1" semver "^6.1.1" -babel-plugin-polyfill-corejs2@^0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" - integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== +babel-plugin-polyfill-corejs2@^0.4.15: + version "0.4.17" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz#198f970f1c99a856b466d1187e88ce30bd199d91" + integrity sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w== dependencies: - "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.3" + "@babel/compat-data" "^7.28.6" + "@babel/helper-define-polyfill-provider" "^0.6.8" semver "^6.3.1" +babel-plugin-polyfill-corejs3@^0.14.0: + version "0.14.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz#6ac08d2f312affb70c4c69c0fbba4cb417ee5587" + integrity sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.8" + core-js-compat "^3.48.0" + babel-plugin-polyfill-corejs3@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" @@ -5677,14 +5567,6 @@ babel-plugin-polyfill-corejs3@^0.5.0: "@babel/helper-define-polyfill-provider" "^0.3.1" core-js-compat "^3.21.0" -babel-plugin-polyfill-corejs3@^0.8.5: - version "0.8.6" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" - integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - core-js-compat "^3.33.1" - babel-plugin-polyfill-regenerator@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" @@ -5692,21 +5574,12 @@ babel-plugin-polyfill-regenerator@^0.3.0: dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" -babel-plugin-polyfill-regenerator@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" - integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== +babel-plugin-polyfill-regenerator@^0.6.6: + version "0.6.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz#8a6bfd5dd54239362b3d06ce47ac52b2d95d7721" + integrity sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.3" - -babel-plugin-react-docgen@^4.1.0, babel-plugin-react-docgen@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz#7cc8e2f94e8dc057a06e953162f0810e4e72257b" - integrity sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ== - dependencies: - ast-types "^0.14.2" - lodash "^4.17.15" - react-docgen "^5.0.0" + "@babel/helper-define-polyfill-provider" "^0.6.8" "babel-plugin-styled-components@>= 1": version "2.0.6" @@ -5795,6 +5668,11 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +baseline-browser-mapping@^2.11.12: + version "2.11.13" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz#660073103c1bee93e54df55f117b7528adf6af19" + integrity sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ== + batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" @@ -5859,23 +5737,23 @@ bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.20.3: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== +body-parser@~1.20.5: + version "1.20.6" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.6.tgz#60c789c78e0992d906da0a29d71ae01d15c1ed76" + integrity sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g== dependencies: - bytes "3.1.2" + 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.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" + destroy "~1.2.0" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + on-finished "~2.4.1" + qs "~6.15.1" + raw-body "~2.5.3" type-is "~1.6.18" - unpipe "1.0.0" + unpipe "~1.0.0" bonjour@^3.5.0: version "3.5.0" @@ -5889,7 +5767,7 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= @@ -5907,17 +5785,17 @@ bplist-parser@^0.2.0: big-integer "^1.6.44" brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + version "1.1.18" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.18.tgz#3ce74d89885136be1535341f8c3d4425c29a5cab" + integrity sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== +brace-expansion@^2.0.1, brace-expansion@^2.0.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.4.tgz#589dab11c0018d0366be64cd8bf12c8dbecc8326" + integrity sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg== dependencies: balanced-match "^1.0.0" @@ -5950,36 +5828,16 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.17.5, browserslist@^4.18.1, browserslist@^4.19.1, browserslist@^4.20.2: - version "4.20.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.2.tgz#567b41508757ecd904dab4d1c646c612cd3d4f88" - integrity sha512-CQOBCqp/9pDvDbx3xfMi+86pr4KXIf2FDkTTdeuYw8OxS9t898LA1Khq57gtufFILXpfgsSx5woNgsBgvGjpsA== +browserslist@^4.0.0, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.2, browserslist@^4.24.0, browserslist@^4.28.1, browserslist@^4.28.7: + version "4.28.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.8.tgz#a3c79ceb70028527e5da7dafc887f3200b5168c0" + integrity sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA== dependencies: - caniuse-lite "^1.0.30001317" - electron-to-chromium "^1.4.84" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - -browserslist@^4.21.10: - version "4.23.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab" - integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ== - dependencies: - caniuse-lite "^1.0.30001587" - electron-to-chromium "^1.4.668" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -browserslist@^4.21.9, browserslist@^4.22.1: - version "4.22.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" - integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== - dependencies: - caniuse-lite "^1.0.30001541" - electron-to-chromium "^1.4.535" - node-releases "^2.0.13" - update-browserslist-db "^1.0.13" + baseline-browser-mapping "^2.11.12" + caniuse-lite "^1.0.30001809" + electron-to-chromium "^1.5.402" + node-releases "^2.0.53" + update-browserslist-db "^1.3.0" bser@2.1.1: version "2.1.1" @@ -6042,34 +5900,11 @@ builtin-modules@^3.1.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.2: +bytes@3.1.2, bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -c8@^7.6.0: - version "7.11.0" - resolved "https://registry.yarnpkg.com/c8/-/c8-7.11.0.tgz#b3ab4e9e03295a102c47ce11d4ef6d735d9a9ac9" - integrity sha512-XqPyj1uvlHMr+Y1IeRndC2X5P7iJzJlEJwBpCdBbq2JocXOgJfr+JVfJkyNMGROke5LfKrhSFXGFXnwnRJAUJw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@istanbuljs/schema" "^0.1.2" - find-up "^5.0.0" - foreground-child "^2.0.0" - istanbul-lib-coverage "^3.0.1" - istanbul-lib-report "^3.0.0" - istanbul-reports "^3.0.2" - rimraf "^3.0.0" - test-exclude "^6.0.0" - v8-to-istanbul "^8.0.0" - yargs "^16.2.0" - yargs-parser "^20.2.7" - cacheable-request@^2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" @@ -6083,6 +5918,14 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -6100,16 +5943,13 @@ call-bind@^1.0.4: get-intrinsic "^1.2.1" set-function-length "^1.1.1" -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" @@ -6154,27 +5994,17 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001317: - version "1.0.30001325" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz#2b4ad19b77aa36f61f2eaf72e636d7481d55e606" - integrity sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ== - -caniuse-lite@^1.0.30001541: - version "1.0.30001563" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz#aa68a64188903e98f36eb9c56e48fba0c1fe2a32" - integrity sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw== - -caniuse-lite@^1.0.30001587: - version "1.0.30001609" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001609.tgz#fc34fad75c0c6d6d6303bdbceec2da8f203dabd6" - integrity sha512-JFPQs34lHKx1B5t1EpQpWH4c+29zIyn/haGsbpfq3suuV9v56enjFt23zqijxGTMwy1p/4H2tjnQMY+p1WoAyA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001809: + version "1.0.30001809" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz#e6cf71f14ddfe008f114dd2a846923be3c03a07b" + integrity sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ== case-sensitive-paths-webpack-plugin@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== -chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -6239,10 +6069,10 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== chrome-trace-event@^1.0.2: version "1.0.3" @@ -6259,6 +6089,11 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== +cjs-module-lexer@^1.2.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== + classnames@2.2.6: version "2.2.6" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" @@ -6351,15 +6186,6 @@ co@^4.6.0: resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -6416,7 +6242,7 @@ commander@7, commander@^7.2.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^2.19.0, commander@^2.20.0, commander@^2.8.1: +commander@^2.20.0, commander@^2.8.1: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -6446,7 +6272,7 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -compressible@~2.0.16: +compressible@~2.0.18: version "2.0.18" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== @@ -6454,16 +6280,16 @@ compressible@~2.0.16: mime-db ">= 1.43.0 < 2" compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + version "1.8.1" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" + integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" + bytes "3.1.2" + compressible "~2.0.18" debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" + negotiator "~0.6.4" + on-headers "~1.1.0" + safe-buffer "5.2.1" vary "~1.1.2" concat-map@0.0.1: @@ -6496,7 +6322,7 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -content-disposition@0.5.4, content-disposition@^0.5.2: +content-disposition@^0.5.2, content-disposition@~0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== @@ -6525,15 +6351,15 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= +cookie-signature@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== +cookie@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== copy-to-clipboard@3.3.1: version "3.3.1" @@ -6542,31 +6368,28 @@ copy-to-clipboard@3.3.1: dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.20.2, core-js-compat@^3.21.0: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.1.tgz#cac369f67c8d134ff8f9bd1623e3bc2c42068c82" - integrity sha512-gbgX5AUvMb8gwxC7FLVWYT7Kkgu/y7+h/h1X43yJkNqhlK2fuYyQimqvKGNZFAY6CKii/GFKJ2cp/1/42TN36g== +core-js-compat@^3.20.2, core-js-compat@^3.21.0, core-js-compat@^3.48.0: + version "3.50.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.50.0.tgz#d5922c2a692ab1cba6078c920e7c5567421ae08e" + integrity sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q== dependencies: - browserslist "^4.19.1" - semver "7.0.0" - -core-js-compat@^3.31.0, core-js-compat@^3.33.1: - version "3.33.3" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.3.tgz#ec678b772c5a2d8a7c60a91c3a81869aa704ae01" - integrity sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow== - dependencies: - browserslist "^4.22.1" - -core-js-pure@^3.20.2, core-js-pure@^3.8.1: - version "3.21.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51" - integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ== + browserslist "^4.28.7" core-js-pure@^3.23.3: version "3.33.3" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.33.3.tgz#cbf9180ac4c4653823d784862bfb5c77eac0bf98" integrity sha512-taJ00IDOP+XYQEA2dAe4ESkmHt1fL8wzYDo3mRWQey8uO9UojlBFMneA65kMyxfYP7106c6LzWaq7/haDT6BCQ== +core-js-pure@^3.48.0: + version "3.50.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.50.0.tgz#263313e83606cb527005885da5be36c0a28f65ef" + integrity sha512-6GP3Pxz4IKyWjAfa747vIu/jilB5z29JWROLqH/b+pXVcpgh6tM06ZIBwSuglgVqzDYURhOK6oEzTrG0bCHitA== + +core-js-pure@^3.8.1: + version "3.21.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.21.1.tgz#8c4d1e78839f5f46208de7230cebfb72bc3bdb51" + integrity sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ== + core-js@^2.4.0: version "2.6.12" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" @@ -6694,21 +6517,6 @@ css-prefers-color-scheme@^6.0.3: resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz#ca8a22e5992c10a5b9d315155e7caee625903349" integrity sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA== -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - css-select@^4.1.3: version "4.3.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" @@ -6729,14 +6537,6 @@ css-to-react-native@^3.0.0: css-color-keywords "^1.0.0" postcss-value-parser "^4.0.2" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -6745,11 +6545,6 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - css-what@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" @@ -6833,7 +6628,7 @@ cssnano@^5.0.6: lilconfig "^2.0.3" yaml "^1.10.2" -csso@^4.0.2, csso@^4.2.0: +csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== @@ -7153,6 +6948,13 @@ debug@^3.1.1, debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.1, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decimal.js@^10.2.1: version "10.3.1" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" @@ -7281,15 +7083,6 @@ define-data-property@^1.0.1, define-data-property@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - define-lazy-prop@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" @@ -7347,7 +7140,7 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -depd@2.0.0: +depd@2.0.0, depd@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -7362,7 +7155,7 @@ dequal@^2.0.2: resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== -destroy@1.2.0: +destroy@1.2.0, destroy@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== @@ -7500,14 +7293,6 @@ dom-helpers@^5.0.0, dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.3.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" @@ -7517,11 +7302,6 @@ dom-serializer@^1.0.1: domhandler "^4.2.0" entities "^2.0.0" -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" @@ -7541,14 +7321,6 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" @@ -7603,6 +7375,15 @@ download@^8.0.0: p-event "^2.1.0" pify "^4.0.1" +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexer3@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" @@ -7635,20 +7416,10 @@ ejs@^3.1.6, ejs@^3.1.8: dependencies: jake "^10.8.5" -electron-to-chromium@^1.4.535: - version "1.4.589" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.589.tgz#3fc83c284ed8f1f58e0cb3c664c8ebcb4d0b42fb" - integrity sha512-zF6y5v/YfoFIgwf2dDfAqVlPPsyQeWNpEWXbAlDUS8Ax4Z2VoiiZpAPC0Jm9hXEkJm2vIZpwB6rc4KnLTQffbQ== - -electron-to-chromium@^1.4.668: - version "1.4.735" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.735.tgz#c32914ef2cd0a3a545a3def841d253a31a8a93be" - integrity sha512-pkYpvwg8VyOTQAeBqZ7jsmpCjko1Qc6We1ZtZCjRyYbT5v4AIUKDy5cQTRotQlSSZmMr8jqpEt6JtOj5k7lR7A== - -electron-to-chromium@^1.4.84: - version "1.4.103" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.103.tgz#abfe376a4d70fa1e1b4b353b95df5d6dfd05da3a" - integrity sha512-c/uKWR1Z/W30Wy/sx3dkZoj4BijbXX85QKWu9jJfjho3LBAXNEGAEW3oWiGb+dotA6C6BzCTxL2/aLes7jlUeg== +electron-to-chromium@^1.5.402: + version "1.5.403" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.403.tgz#8a6e422bc68c5d2fa4d8c5fa2ba9a583c3d4452c" + integrity sha512-MQsYmdaLzvaCX5j+ZZBr5Fm6uCCnPQcRtlvmvRlWqrXy+BH2O4ffXIAScF+JQznQWB9brWp4lSD9Z4yNmaf2BA== emittery@^0.8.1: version "0.8.1" @@ -7670,11 +7441,6 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - encodeurl@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" @@ -7696,21 +7462,13 @@ endent@^2.0.1: fast-json-parse "^1.0.3" objectorarray "^1.0.5" -enhanced-resolve@^5.15.0: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== +enhanced-resolve@^5.24.4: + version "5.24.5" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz#b4dad3255b7545f07ba5535189868e9f85f47573" + integrity sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A== dependencies: graceful-fs "^4.2.4" - tapable "^2.2.0" - -enhanced-resolve@^5.16.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787" - integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" + tapable "^2.3.3" entities@^2.0.0: version "2.2.0" @@ -7736,7 +7494,7 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.1.1" -es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1: +es-abstract@^1.19.0, es-abstract@^1.19.1: version "1.19.2" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.2.tgz#8f7b696d8f15b167ae3640b4060670f3d054143f" integrity sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w== @@ -7762,22 +7520,42 @@ es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.19.1: string.prototype.trimstart "^1.0.4" unbox-primitive "^1.0.1" -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-module-lexer@^1.2.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" - integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== +es-module-lexer@^1.4.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.7.0.tgz#9159601561880a85f2734560a9099b2c31e5372a" + integrity sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA== + +es-module-lexer@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-2.3.1.tgz#5bf2df06999dbbe5f006a5f46a11fb9f5b7b391b" + integrity sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.2.tgz#a2d0b373205724dfa525d23b0c3e1b1ca582c99b" + integrity sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" es-to-primitive@^1.2.1: version "1.2.1" @@ -7800,39 +7578,48 @@ esbuild-register@^3.5.0: dependencies: debug "^4.3.4" -esbuild@^0.18.0: - version "0.18.20" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" - integrity sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA== +esbuild@0.25.12, esbuild@^0.18.0: + version "0.25.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" + integrity sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg== optionalDependencies: - "@esbuild/android-arm" "0.18.20" - "@esbuild/android-arm64" "0.18.20" - "@esbuild/android-x64" "0.18.20" - "@esbuild/darwin-arm64" "0.18.20" - "@esbuild/darwin-x64" "0.18.20" - "@esbuild/freebsd-arm64" "0.18.20" - "@esbuild/freebsd-x64" "0.18.20" - "@esbuild/linux-arm" "0.18.20" - "@esbuild/linux-arm64" "0.18.20" - "@esbuild/linux-ia32" "0.18.20" - "@esbuild/linux-loong64" "0.18.20" - "@esbuild/linux-mips64el" "0.18.20" - "@esbuild/linux-ppc64" "0.18.20" - "@esbuild/linux-riscv64" "0.18.20" - "@esbuild/linux-s390x" "0.18.20" - "@esbuild/linux-x64" "0.18.20" - "@esbuild/netbsd-x64" "0.18.20" - "@esbuild/openbsd-x64" "0.18.20" - "@esbuild/sunos-x64" "0.18.20" - "@esbuild/win32-arm64" "0.18.20" - "@esbuild/win32-ia32" "0.18.20" - "@esbuild/win32-x64" "0.18.20" + "@esbuild/aix-ppc64" "0.25.12" + "@esbuild/android-arm" "0.25.12" + "@esbuild/android-arm64" "0.25.12" + "@esbuild/android-x64" "0.25.12" + "@esbuild/darwin-arm64" "0.25.12" + "@esbuild/darwin-x64" "0.25.12" + "@esbuild/freebsd-arm64" "0.25.12" + "@esbuild/freebsd-x64" "0.25.12" + "@esbuild/linux-arm" "0.25.12" + "@esbuild/linux-arm64" "0.25.12" + "@esbuild/linux-ia32" "0.25.12" + "@esbuild/linux-loong64" "0.25.12" + "@esbuild/linux-mips64el" "0.25.12" + "@esbuild/linux-ppc64" "0.25.12" + "@esbuild/linux-riscv64" "0.25.12" + "@esbuild/linux-s390x" "0.25.12" + "@esbuild/linux-x64" "0.25.12" + "@esbuild/netbsd-arm64" "0.25.12" + "@esbuild/netbsd-x64" "0.25.12" + "@esbuild/openbsd-arm64" "0.25.12" + "@esbuild/openbsd-x64" "0.25.12" + "@esbuild/openharmony-arm64" "0.25.12" + "@esbuild/sunos-x64" "0.25.12" + "@esbuild/win32-arm64" "0.25.12" + "@esbuild/win32-ia32" "0.25.12" + "@esbuild/win32-x64" "0.25.12" escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -8131,15 +7918,6 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-to-babel@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/estree-to-babel/-/estree-to-babel-3.2.1.tgz#82e78315275c3ca74475fdc8ac1a5103c8a75bf5" - integrity sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg== - dependencies: - "@babel/traverse" "^7.1.6" - "@babel/types" "^7.2.0" - c8 "^7.6.0" - estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -8196,38 +7974,38 @@ expect@^27.5.1: jest-message-util "^27.5.1" express@^4.17.1, express@^4.17.3: - version "4.21.0" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.0.tgz#d57cb706d49623d4ac27833f1cbc466b668eb915" - integrity sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng== + version "4.22.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.22.2.tgz#c17ae0981e5efc24b22272f0e041c4662503b700" + integrity sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" + body-parser "~1.20.5" + content-disposition "~0.5.4" content-type "~1.0.4" - cookie "0.6.0" - cookie-signature "1.0.6" + 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" + 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" + on-finished "~2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.10" + path-to-regexp "~0.1.12" proxy-addr "~2.0.7" - qs "6.13.0" + qs "~6.15.1" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.2" + send "~0.19.0" + serve-static "~1.16.2" setprototypeof "1.2.0" - statuses "2.0.1" + statuses "~2.0.1" type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" @@ -8298,6 +8076,11 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-uri@^3.0.1: + version "3.1.5" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.5.tgz#610f37419a030270430cecd68d74e3d4d96725d0" + integrity sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw== + fastq@^1.6.0: version "1.13.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" @@ -8417,17 +8200,17 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== +finalhandler@~1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== dependencies: debug "2.6.9" encodeurl "~2.0.0" escape-html "~1.0.3" - on-finished "2.4.1" + on-finished "~2.4.1" parseurl "~1.3.3" - statuses "2.0.1" + statuses "~2.0.2" unpipe "~1.0.0" find-cache-dir@^2.0.0: @@ -8539,14 +8322,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -foreground-child@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" - integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^3.0.2" - foreground-child@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" @@ -8593,22 +8368,26 @@ fork-ts-checker-webpack-plugin@^8.0.0: tapable "^2.2.1" form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + version "3.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.5.tgz#2ea3ec24f0dcb7e0262a11efb732031240ea8e9f" + integrity sha512-j23EibVLnp4zNXGW7LjryXYa2X6U/M96yoOX+ybZxwkYajdxRNEqYY3zhh7y0i6kfISKS2jr+EJq1YTUDEv5+w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" - mime-types "^2.1.12" + es-set-tostringtag "^2.1.0" + hasown "^2.0.4" + mime-types "^2.1.35" form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.6" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.6.tgz#28e864e1b786dbebb68db1f452f9635278665827" + integrity sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" - mime-types "^2.1.12" + es-set-tostringtag "^2.1.0" + hasown "^2.0.4" + mime-types "^2.1.35" forwarded@0.2.0: version "0.2.0" @@ -8620,10 +8399,10 @@ fraction.js@^4.2.0: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== -fresh@0.5.2: +fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== from2@^2.1.1: version "2.3.0" @@ -8666,13 +8445,6 @@ fs-extra@^9.0.0, fs-extra@^9.0.1: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs-monkey@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" @@ -8737,16 +8509,21 @@ get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: has-symbols "^1.0.3" hasown "^2.0.0" -get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== 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" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" get-nonce@^1.0.0: version "1.0.1" @@ -8773,6 +8550,14 @@ get-port@^5.1.1: resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -8844,25 +8629,26 @@ glob-to-regexp@^0.4.1: integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== glob@^10.0.0: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + version "10.5.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.5.0.tgz#8ec0355919cd3338c28428a23d4f24ecc5fe738c" + integrity sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" @@ -8923,6 +8709,11 @@ gopd@^1.0.1: dependencies: get-intrinsic "^1.1.3" +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + got@^8.3.1: version "8.3.2" resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" @@ -9019,13 +8810,6 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.2.2" -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - has-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" @@ -9041,6 +8825,11 @@ has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" @@ -9055,6 +8844,13 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -9069,6 +8865,13 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" +hasown@^2.0.2, hasown@^2.0.3, hasown@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.4.tgz#8c62d8cb90beb2aad5d0a5b67581ad9854c3f003" + integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A== + dependencies: + function-bind "^1.1.2" + he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" @@ -9174,17 +8977,6 @@ http-deceiver@^1.2.7: resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" @@ -9195,6 +8987,17 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" +http-errors@~2.0.0, http-errors@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== + dependencies: + depd "~2.0.0" + inherits "~2.0.4" + setprototypeof "~1.2.0" + statuses "~2.0.2" + toidentifier "~1.0.1" + http-parser-js@>=0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" @@ -9272,7 +9075,7 @@ i18next@19.5.1: dependencies: "@babel/runtime" "^7.10.1" -iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@~0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -9352,7 +9155,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -9401,11 +9204,6 @@ ip@^1.1.0: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.9.tgz#8dfbcc99a754d07f425310b86a99546b1151e396" integrity sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ== -ip@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" - integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -9473,6 +9271,13 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.0" +is-core-module@^2.16.1: + version "2.16.2" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.2.tgz#3e07450a8080ebce3fbf0cac494f4d2ab324e082" + integrity sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA== + dependencies: + hasown "^2.0.3" + is-core-module@^2.2.0, is-core-module@^2.8.0, is-core-module@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" @@ -9718,7 +9523,7 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.1, istanbul-lib-coverage@^3.2.0: +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== @@ -9752,7 +9557,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2, istanbul-reports@^3.1.3: +istanbul-reports@^3.1.3: version "3.1.4" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== @@ -9768,7 +9573,7 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -jackspeak@2.1.1, jackspeak@^2.3.5: +jackspeak@2.1.1, jackspeak@^3.1.2: version "2.1.1" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.1.1.tgz#2a42db4cfbb7e55433c28b6f75d8b796af9669cd" integrity sha512-juf9stUEwUaILepraGOWIJTLwg48bUnBmRqd2ln2Os1sW987zeoj/hzhbvRB95oMuS2ZTpjULmdwHNX4rzZIZw== @@ -10274,34 +10079,35 @@ jest@^27.4.3: integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + version "3.15.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.15.1.tgz#24bc95028f361cdaaa84745b06a109c4486773c0" + integrity sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag== dependencies: argparse "^1.0.7" esprima "^4.0.0" js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + version "4.3.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.1.tgz#01216c001d67f48e2cd560d708c7af21090a3848" + integrity sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ== dependencies: argparse "^2.0.1" -jscodeshift@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.14.0.tgz#7542e6715d6d2e8bde0b4e883f0ccea358b46881" - integrity sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA== +jscodeshift@^0.15.1: + version "0.15.2" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.15.2.tgz#145563860360b4819a558c75c545f39683e5a0be" + integrity sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA== dependencies: - "@babel/core" "^7.13.16" - "@babel/parser" "^7.13.16" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.13.8" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" - "@babel/plugin-transform-modules-commonjs" "^7.13.8" - "@babel/preset-flow" "^7.13.13" - "@babel/preset-typescript" "^7.13.0" - "@babel/register" "^7.13.16" + "@babel/core" "^7.23.0" + "@babel/parser" "^7.23.0" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.23.0" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" + "@babel/plugin-transform-optional-chaining" "^7.23.0" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/preset-flow" "^7.22.15" + "@babel/preset-typescript" "^7.23.0" + "@babel/register" "^7.22.15" babel-core "^7.0.0-bridge.0" chalk "^4.1.2" flow-parser "0.*" @@ -10309,7 +10115,7 @@ jscodeshift@^0.14.0: micromatch "^4.0.4" neo-async "^2.5.0" node-dir "^0.1.17" - recast "^0.21.0" + recast "^0.23.3" temp "^0.8.4" write-file-atomic "^2.3.0" @@ -10351,6 +10157,11 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2, jsesc@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -10361,7 +10172,7 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== -json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -10393,12 +10204,7 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2, json5@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -json5@^2.2.3: +json5@^2.1.2, json5@^2.2.0, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -10499,11 +10305,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -loader-runner@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" - integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== - loader-utils@^2.0.0, loader-utils@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" @@ -10627,6 +10428,11 @@ lowercase-keys@^1.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -10634,18 +10440,6 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.3.tgz#b40014d7d2d16d94130b87297a04a1f24874ae7c" - integrity sha512-B7gr+F6MkqB3uzINHXNctGieGsRTMwIBgxkp0yq/5BwcuDzD4A8wQpHQW6vDAm1uKSLQghmRdD9sKqf2vJ1cEg== - lz-string@^1.4.4: version "1.4.4" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" @@ -10658,6 +10452,13 @@ magic-string@^0.25.0, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" +magic-string@^0.30.5: + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + make-dir@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" @@ -10697,6 +10498,11 @@ markdown-to-jsx@^7.1.8: resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.5.0.tgz#42ece0c71e842560a7d8bd9f81e7a34515c72150" integrity sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw== +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + mdast-util-definitions@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" @@ -10714,11 +10520,6 @@ mdn-data@2.0.14: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -10783,7 +10584,12 @@ mime-db@^1.28.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.53.0.tgz#3cb63cd820fc29896d9d4e8c32ab4fcd74ccb447" integrity sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg== -mime-types@^2.1.12, mime-types@^2.1.25, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-types@^2.1.25, mime-types@^2.1.31, mime-types@^2.1.35, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -10827,81 +10633,71 @@ minimalistic-assert@^1.0.0: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== dependencies: brace-expansion "^1.1.7" minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + version "5.1.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.9.tgz#1293ef15db0098b394540e8f9f744f9fda8dee4b" + integrity sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw== dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== +minimatch@^9.0.4: + version "9.0.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e" + integrity sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg== dependencies: - brace-expansion "^2.0.1" + brace-expansion "^2.0.2" minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: version "1.2.7" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== -minipass@^3.0.0: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== +minimizer-webpack-plugin@^5.6.1: + version "5.6.1" + resolved "https://registry.yarnpkg.com/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz#289922a4c96c4ed1ddb76b8a00bd8074e89a2f7f" + integrity sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw== dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + "@jridgewell/trace-mapping" "^0.3.25" + jest-worker "^27.4.5" + schema-utils "^4.3.0" + terser "^5.31.1" "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": version "7.0.4" resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== +minipass@^7.0.4, minipass@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.3.tgz#79389b4eb1bb2d003a9bba87d492f2bd37bdc65b" + integrity sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== + +minizlib@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c" + integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== dependencies: - minipass "^3.0.0" - yallist "^4.0.0" + minipass "^7.1.2" mkdirp-classic@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.1: +mkdirp@^0.5.4, mkdirp@^0.5.5: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: minimist "^1.2.6" -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - mobx-react-lite@3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-3.2.0.tgz#331d7365a6b053378dfe9c087315b4e41c5df69f" @@ -10939,7 +10735,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.1.1: +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -10957,10 +10753,10 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" -nanoid@^3.3.1, nanoid@^3.3.6: - version "3.3.8" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== +nanoid@^3.3.17: + version "3.3.18" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.18.tgz#f66a2de1199ffde0fcf21c8a5f13106b1c081913" + integrity sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w== natural-compare@^1.4.0: version "1.4.0" @@ -10972,7 +10768,12 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + +neo-async@^2.5.0, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -10990,7 +10791,7 @@ node-abort-controller@^3.0.1: resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== -node-dir@^0.1.10, node-dir@^0.1.17: +node-dir@^0.1.17: version "0.1.17" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= @@ -11019,20 +10820,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-releases@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" - integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -node-releases@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== +node-releases@^2.0.53: + version "2.0.53" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.53.tgz#0fe5ad8a7935e075172f574e56f0c20f07fa41af" + integrity sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ== normalize-package-data@^2.5.0: version "2.5.0" @@ -11075,17 +10866,10 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nth-check@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" - integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== +nth-check@2.1.1, nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" @@ -11109,10 +10893,10 @@ object-inspect@^1.12.0, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-is@^1.0.1, object-is@^1.1.5: version "1.1.5" @@ -11165,15 +10949,6 @@ object.fromentries@^2.0.5: define-properties "^1.1.3" es-abstract "^1.19.1" -object.getownpropertydescriptors@^2.1.0: - version "2.1.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - object.hasown@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" @@ -11182,7 +10957,7 @@ object.hasown@^1.1.0: define-properties "^1.1.3" es-abstract "^1.19.1" -object.values@^1.1.0, object.values@^1.1.5: +object.values@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== @@ -11201,17 +10976,17 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -on-finished@2.4.1: +on-finished@~2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== dependencies: ee-first "1.1.1" -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== +on-headers@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" @@ -11401,6 +11176,11 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + pako@~0.2.0: version "0.2.9" resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" @@ -11484,18 +11264,18 @@ path-parse@^1.0.6, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" - integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== +path-to-regexp@~0.1.12: + version "0.1.13" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.13.tgz#9b22ec16bc3ab88d05a0c7e369869421401ab17d" + integrity sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA== path-type@^4.0.0: version "4.0.0" @@ -11526,16 +11306,16 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picocolors@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" - integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3, picomatch@^2.3.0, picomatch@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" @@ -11573,10 +11353,10 @@ pirates@^4.0.4: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== -pirates@^4.0.5: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== +pirates@^4.0.6: + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-dir@^3.0.0: version "3.0.0" @@ -12159,31 +11939,14 @@ postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^7.0.35: - version "7.0.39" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309" - integrity sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA== +postcss@^8.2.14, postcss@^8.3.5, postcss@^8.4.21, postcss@^8.4.4, postcss@^8.4.6, postcss@^8.4.7: + version "8.5.26" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.26.tgz#6e75135780c7e10df3433bf2266c552d35c8c620" + integrity sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ== dependencies: - picocolors "^0.2.1" - source-map "^0.6.1" - -postcss@^8.3.5, postcss@^8.4.4, postcss@^8.4.6, postcss@^8.4.7: - version "8.4.12" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.12.tgz#1e7de78733b28970fa4743f7da6f3763648b1905" - integrity sha512-lg6eITwYe9v6Hr5CncVbK70SoioNQIq81nsaG86ev5hAidQvmOeETBqs7jm43K2F5/Ley3ytDtriImV6TpNiSg== - dependencies: - nanoid "^3.3.1" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -postcss@^8.4.21: - version "8.4.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d" - integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" + nanoid "^3.3.17" + picocolors "^1.1.1" + source-map-js "^1.2.1" prelude-ls@^1.2.1: version "1.2.1" @@ -12379,29 +12142,18 @@ puppeteer-core@^2.1.1: rimraf "^2.6.1" ws "^6.1.0" -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - qrcode.react@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/qrcode.react/-/qrcode.react-3.1.0.tgz#5c91ddc0340f768316fbdb8fff2765134c2aecd8" integrity sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q== -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== +qs@^6.10.0, qs@~6.15.1: + version "6.15.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.3.tgz#76852132a58ed5c7c0ef67e4441b9bb5d6061b3b" + integrity sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A== dependencies: - side-channel "^1.0.6" - -qs@^6.10.0: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== - dependencies: - side-channel "^1.0.4" + es-define-property "^1.0.1" + side-channel "^1.1.1" query-string@^5.0.1: version "5.1.1" @@ -12449,27 +12201,20 @@ ramda@0.29.0: resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.29.0.tgz#fbbb67a740a754c8a4cbb41e2a6e0eb8507f55fb" integrity sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA== -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== +raw-body@~2.5.3: + version "2.5.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" + bytes "~3.1.2" + http-errors "~2.0.1" + iconv-lite "~0.4.24" + unpipe "~1.0.0" rc-align@^4.0.0: version "4.0.11" @@ -12674,21 +12419,21 @@ react-docgen-typescript@^2.2.2: resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c" integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== -react-docgen@^5.0.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-5.4.0.tgz#2cd7236720ec2769252ef0421f23250b39a153a1" - integrity sha512-JBjVQ9cahmNlfjMGxWUxJg919xBBKAoy3hgDgKERbR+BcF4ANpDuzWAScC7j27hZfd8sJNmMPOLWo9+vB/XJEQ== +react-docgen@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-7.1.1.tgz#a7a8e6b923a945acf0b7325a889ddd74fec74a63" + integrity sha512-hlSJDQ2synMPKFZOsKo9Hi8WWZTC7POR8EmWvTSjow+VDgKzkmjQvFm2fk0tmRw+f0vTOIYKlarR0iL4996pdg== dependencies: - "@babel/core" "^7.7.5" - "@babel/generator" "^7.12.11" - "@babel/runtime" "^7.7.6" - ast-types "^0.14.2" - commander "^2.19.0" + "@babel/core" "^7.18.9" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + "@types/babel__core" "^7.18.0" + "@types/babel__traverse" "^7.18.0" + "@types/doctrine" "^0.0.9" + "@types/resolve" "^1.20.2" doctrine "^3.0.0" - estree-to-babel "^3.1.0" - neo-async "^2.6.1" - node-dir "^0.1.10" - strip-indent "^3.0.0" + resolve "^1.22.1" + strip-indent "^4.0.0" react-dom@17.0.2: version "17.0.2" @@ -12733,11 +12478,6 @@ react-i18next@13.5.0: "@babel/runtime" "^7.22.5" html-parse-stringify "^3.0.1" -react-inspector@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-6.0.2.tgz#aa3028803550cb6dbd7344816d5c80bf39d07e9d" - integrity sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ== - react-is@18.1.0: version "18.1.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.1.0.tgz#61aaed3096d30eacf2a2127118b5b41387d32a67" @@ -12763,6 +12503,11 @@ react-refresh@^0.11.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== +react-refresh@^0.14.0: + version "0.14.2" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" + integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== + react-remove-scroll-bar@^2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz#53e272d7a5cb8242990c7f144c44d8bd8ab5afd9" @@ -12985,16 +12730,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -recast@^0.21.0: - version "0.21.5" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.21.5.tgz#e8cd22bb51bcd6130e54f87955d33a2b2e57b495" - integrity sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg== - dependencies: - ast-types "0.15.2" - esprima "~4.0.0" - source-map "~0.6.1" - tslib "^2.0.1" - recast@^0.23.1: version "0.23.4" resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.4.tgz#ca1bac7bfd3011ea5a28dfecb5df678559fb1ddf" @@ -13006,12 +12741,23 @@ recast@^0.23.1: source-map "~0.6.1" tslib "^2.0.1" -recursive-readdir@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== +recast@^0.23.3: + version "0.23.21" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.21.tgz#45eed4cfcaa8ab1724fb30eb2c0bd14f3a0d797b" + integrity sha512-mFAyJq9vUbSTARLZUvAEf1z3YxlvAwswbmxMx2mPA/MSm4KmpwvwvhsH/NIrZhyOuwD60Lzyw2qh83uCbgTPYw== dependencies: - minimatch "3.0.4" + ast-types "^0.16.1" + esprima "~4.0.0" + source-map "~0.6.1" + tiny-invariant "^1.3.3" + tslib "^2.0.1" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" redent@^3.0.0: version "3.0.0" @@ -13035,6 +12781,13 @@ regenerate-unicode-properties@^10.1.0: dependencies: regenerate "^1.4.2" +regenerate-unicode-properties@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" + integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== + dependencies: + regenerate "^1.4.2" + regenerate@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -13045,7 +12798,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9: +regenerator-runtime@^0.13.9: version "0.13.9" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== @@ -13062,13 +12815,6 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" -regenerator-transform@^0.15.2: - version "0.15.2" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" - integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== - dependencies: - "@babel/runtime" "^7.8.4" - regex-parser@^2.2.11: version "2.2.11" resolved "https://registry.yarnpkg.com/regex-parser/-/regex-parser-2.2.11.tgz#3b37ec9049e19479806e878cabe7c1ca83ccfe58" @@ -13111,11 +12857,35 @@ regexpu-core@^5.3.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" +regexpu-core@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" + integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.2" + regjsgen "^0.8.0" + regjsparser "^0.13.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.2.1" + regjsgen@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.6.0.tgz#83414c5354afd7d6627b16af5f10f41c4e71808d" integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.13.0: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.2.tgz#f654734b5c588b22ba3e21693b30523417180808" + integrity sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ== + dependencies: + jsesc "~3.1.0" + regjsparser@^0.8.2: version "0.8.4" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.8.4.tgz#8a14285ffcc5de78c5b95d62bbf413b6bc132d5f" @@ -13203,15 +12973,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-url-loader@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz#d50d4ddc746bb10468443167acf800dcd6c3ad57" - integrity sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA== +resolve-url-loader@5.0.0, resolve-url-loader@^4.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz#ee3142fb1f1e0d9db9524d539cfa166e9314f795" + integrity sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg== dependencies: adjust-sourcemap-loader "^4.0.0" convert-source-map "^1.7.0" loader-utils "^2.0.0" - postcss "^7.0.35" + postcss "^8.2.14" source-map "0.6.1" resolve.exports@^1.1.0: @@ -13237,6 +13007,16 @@ resolve@^1.12.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.2 path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.1, resolve@^1.22.11: + version "1.22.12" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" + integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== + dependencies: + es-errors "^1.3.0" + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" @@ -13325,16 +13105,16 @@ rw@1: resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -13360,10 +13140,10 @@ sass@1.43.4: dependencies: chokidar ">=3.0.0 <4.0.0" -sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +sax@^1.5.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.1.tgz#4c23cf608c0b693ab54b4b5888e92cfe977b9843" + integrity sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q== saxes@^5.0.1: version "5.0.1" @@ -13407,15 +13187,6 @@ schema-utils@^3.0.0, schema-utils@^3.1.1: ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - schema-utils@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" @@ -13426,6 +13197,16 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.0.0" +schema-utils@^4.2.0, schema-utils@^4.3.0, schema-utils@^4.3.3: + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + scroll-smooth@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/scroll-smooth/-/scroll-smooth-1.1.0.tgz#467994d5bb57ffe7407e9a85bd0303b3d4524ded" @@ -13460,62 +13241,39 @@ selfsigned@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2, semver@^7.5.3: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" +semver@^7.3.2, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2: + version "7.8.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== -send@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== +send@~0.19.0, send@~0.19.1: + version "0.19.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.2.tgz#59bc0da1b4ea7ad42736fd642b1c4294e114ff29" + integrity sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== dependencies: debug "2.6.9" depd "2.0.0" destroy "1.2.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" + fresh "~0.5.2" + http-errors "~2.0.1" mime "1.6.0" ms "2.1.3" - on-finished "2.4.1" + on-finished "~2.4.1" range-parser "~1.2.1" - statuses "2.0.1" + statuses "~2.0.2" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serialize-javascript@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" - integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== - dependencies: - randombytes "^2.1.0" +serialize-javascript@7.1.0, serialize-javascript@^4.0.0, serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-7.1.0.tgz#9e462c5c6dec5dbc8b55d90c52a4ad6aff985b9f" + integrity sha512-RNEqWOyhhUQYN9V1GfHwu9AR/g+NTciH6Z5u3/no6X3/w+04J2lVDL+svFQVXgXrEGBMG2puMVN3gq2SNGuTGw== serve-index@^1.9.1: version "1.9.1" @@ -13530,15 +13288,15 @@ serve-index@^1.9.1: mime-types "~2.1.17" parseurl "~1.3.2" -serve-static@1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== +serve-static@~1.16.2: + version "1.16.3" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.3.tgz#a97b74d955778583f3862a4f0b841eb4d5d78cf9" + integrity sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== dependencies: encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.19.0" + send "~0.19.1" set-function-length@^1.1.1: version "1.1.1" @@ -13550,24 +13308,12 @@ set-function-length@^1.1.1: gopd "^1.0.1" has-property-descriptors "^1.0.0" -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== -setprototypeof@1.2.0: +setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== @@ -13597,9 +13343,38 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + version "1.10.0" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.10.0.tgz#482033e192e4f5c07151521ffa03400ec71b1b0f" + integrity sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA== + +side-channel-list@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127" + integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.4" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + 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" side-channel@^1.0.4: version "1.0.4" @@ -13610,15 +13385,16 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== +side-channel@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.1.tgz#ea02c62e05dc4bea67d4442f0fb71ee192f8e0ab" + integrity sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ== dependencies: - call-bind "^1.0.7" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + object-inspect "^1.13.4" + side-channel-list "^1.0.1" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" @@ -13630,13 +13406,6 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -simple-update-notifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" - integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== - dependencies: - semver "^7.5.3" - sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -13687,11 +13456,16 @@ source-list-map@^2.0.0, source-list-map@^2.0.1: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-js@^1.0.1, source-map-js@^1.0.2: +source-map-js@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + source-map-loader@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.1.tgz#9ae5edc7c2d42570934be4c95d1ccc6352eba52d" @@ -13727,7 +13501,7 @@ source-map@^0.5.0, source-map@^0.5.7: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.7.3, source-map@~0.7.2: +source-map@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== @@ -13820,27 +13594,27 @@ stackframe@^1.1.1: resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.1.tgz#1033a3473ee67f08e2f2fc8eba6aef4f845124e1" integrity sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg== -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +statuses@~2.0.1, statuses@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + store2@^2.14.2: version "2.14.4" resolved "https://registry.yarnpkg.com/store2/-/store2-2.14.4.tgz#81b313abaddade4dcd7570c5cc0e3264a8f7a242" integrity sha512-srTItn1GOvyvOycgxjAnPA63FZNwy0PTyUBFMHRM+hVFltAeoh0LmNBz9SZqUS9mMqGk8rfyWyXn3GH5ReJ8Zw== -storybook@7.5.3: - version "7.5.3" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.5.3.tgz#0003b072736b8b15c3b7205e9775d0c5ec898b4d" - integrity sha512-lkn9hcedNmSNCzbDIrky2LpZJqlpS7Fy1KpGBZmLY34g5Mb0+KnXaUqzY0dxsd7aFm8Oa7Du/emceMYNNL4DMA== +storybook@7.6.24: + version "7.6.24" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-7.6.24.tgz#3b6ca8c1b9d2cc63d390e350da0a095a4207d6b1" + integrity sha512-V/Tybc9AHINr0aa94aXUJV8WyyyFNQMBDKshRSqGpBYSuiHVnX7G2jgg9cFxDj2XHNYwFVk4JdZnc+t001ZCkQ== dependencies: - "@storybook/cli" "7.5.3" + "@storybook/cli" "7.6.24" stream-shift@^1.0.0: version "1.0.1" @@ -13976,6 +13750,11 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" +strip-indent@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-4.1.1.tgz#aba13de189d4ad9a17f6050e76554ac27585c7af" + integrity sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA== + strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -14061,36 +13840,17 @@ svg-parser@^2.0.2: resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -svgo@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== +svgo@2.8.3, svgo@^1.2.2, svgo@^2.7.0: + version "2.8.3" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.3.tgz#8de2fa579f3f7429dec3fb86471005cf46fb483a" + integrity sha512-5EZD0pafXX6PphdwOGCiVLDSaV1xyuQao2blHajHLsPxr07q4mmEjdtXEWgG07ae2mIz8Ex2CDXNCTiXhy3Khw== dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -svgo@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== - dependencies: - "@trysound/sax" "0.2.0" commander "^7.2.0" css-select "^4.1.3" css-tree "^1.1.3" csso "^4.2.0" picocolors "^1.0.0" + sax "^1.5.0" stable "^0.1.8" swc-loader@^0.2.3: @@ -14140,11 +13900,16 @@ tapable@^1.0.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: +tapable@^2.0.0, tapable@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== +tapable@^2.3.0, tapable@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.3.3.tgz#5da7c9992c46038221267985ab28421a8879f160" + integrity sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A== + tar-fs@^2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930" @@ -14179,17 +13944,16 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" - integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== +tar@7.5.22, tar@^6.2.0: + version "7.5.22" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.22.tgz#a696f998136e71487dc3f869a85bba2c67971ba9" + integrity sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA== dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^5.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.1.0" + yallist "^5.0.0" telejson@^7.2.0: version "7.2.0" @@ -14250,7 +14014,7 @@ terser-webpack-plugin@^5.2.5: source-map "^0.6.1" terser "^5.7.2" -terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.7: +terser-webpack-plugin@^5.3.1: version "5.3.9" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== @@ -14261,44 +14025,13 @@ terser-webpack-plugin@^5.3.1, terser-webpack-plugin@^5.3.7: serialize-javascript "^6.0.1" terser "^5.16.8" -terser-webpack-plugin@^5.3.10: - version "5.3.10" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199" - integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w== - dependencies: - "@jridgewell/trace-mapping" "^0.3.20" - jest-worker "^27.4.5" - schema-utils "^3.1.1" - serialize-javascript "^6.0.1" - terser "^5.26.0" - -terser@^5.0.0, terser@^5.10.0, terser@^5.7.2: - version "5.12.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.12.1.tgz#4cf2ebed1f5bceef5c83b9f60104ac4a78b49e9c" - integrity sha512-NXbs+7nisos5E+yXwAD+y7zrcTkMqb0dEJxIGtSKPdCBzopf7ni4odPul2aechpV7EXNvOudYOX2bb5tln1jbQ== - dependencies: - acorn "^8.5.0" - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.20" - -terser@^5.16.8: - version "5.24.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.24.0.tgz#4ae50302977bca4831ccc7b4fef63a3c04228364" - integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== +terser@^5.0.0, terser@^5.10.0, terser@^5.16.8, terser@^5.31.1, terser@^5.7.2: + version "5.49.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.49.2.tgz#cc08cfb6097e5da650bfd45c769ebd15c514fc23" + integrity sha512-rGbJiKeQ4WDe3EXlDAIaQcwftVfv2Q8o1awFNfvXolJYKkb1AuZY1RTOmqx4LJXZENbWZA7eIsYGHuEzHsi1nQ== dependencies: "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -terser@^5.26.0: - version "5.30.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.30.3.tgz#f1bb68ded42408c316b548e3ec2526d7dd03f4d2" - integrity sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" + acorn "^8.15.0" commander "^2.20.0" source-map-support "~0.5.20" @@ -14349,6 +14082,11 @@ tiny-invariant@^1.3.1: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== +tiny-invariant@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + tmpl@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" @@ -14381,7 +14119,7 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= -toidentifier@1.0.1: +toidentifier@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== @@ -14601,6 +14339,11 @@ unicode-match-property-value-ecmascript@^2.1.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== +unicode-match-property-value-ecmascript@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" + integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== + unicode-property-aliases-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" @@ -14645,7 +14388,7 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= @@ -14660,11 +14403,6 @@ unplugin@^1.3.1: webpack-sources "^3.2.3" webpack-virtual-modules "^0.6.0" -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - untildify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" @@ -14675,13 +14413,13 @@ upath@^1.2.0: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== +update-browserslist-db@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz#a71c28dd22f505481dbc4689087b18d933e90afd" + integrity sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ== dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" + escalade "^3.2.0" + picocolors "^1.1.1" uri-js@^4.2.2: version "4.4.1" @@ -14758,16 +14496,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - util@^0.12.4, util@^0.12.5: version "0.12.5" resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" @@ -14789,22 +14517,17 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== +uuid@11.1.1, uuid@^8.3.2, uuid@^9.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-11.1.1.tgz#f6d81d2e1c65d00762e5e29b16c5d2d995e208ad" + integrity sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ== v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^8.0.0, v8-to-istanbul@^8.1.0: +v8-to-istanbul@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== @@ -14859,7 +14582,7 @@ warning@^4.0.3: dependencies: loose-envify "^1.0.0" -watchpack@^2.2.0, watchpack@^2.4.0: +watchpack@^2.2.0: version "2.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== @@ -14867,12 +14590,11 @@ watchpack@^2.2.0, watchpack@^2.4.0: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -watchpack@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff" - integrity sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== +watchpack@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.5.2.tgz#e12e82d84674266fc1c6dbfe38891b92ff0522ec" + integrity sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg== dependencies: - glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" wbuf@^1.1.0, wbuf@^1.7.3: @@ -15006,6 +14728,11 @@ webpack-sources@^3.2.3: resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== +webpack-sources@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.5.1.tgz#76c2418486dcc02b2aa0694c104176c2858fe84a" + integrity sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw== + webpack-virtual-modules@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" @@ -15016,70 +14743,36 @@ webpack-virtual-modules@^0.6.0: resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.0.tgz#95eb2cb160a8cb84a73bdc2b5c806693f690ad35" integrity sha512-KnaMTE6EItz/f2q4Gwg5/rmeKVi79OR58NoYnwDJqCk9ywMtTGbBnBcfoBtN4QbYu0lWXvyMoH2Owxuhe4qI6Q== -webpack@5, webpack@^5.64.4: - version "5.91.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.91.0.tgz#ffa92c1c618d18c878f06892bbdc3373c71a01d9" - integrity sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw== +webpack@5, webpack@5.109.2, webpack@^5.64.4: + version "5.109.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.109.2.tgz#b58dc289561c3282db35c210a99379a836a4c28d" + integrity sha512-U9/cvLzxObKNEZ9+TtdqrHM5/9z3lgl2c+c4BzbqGxFQvQvBAq87yql5A8pQ+rrMbS496MZJeF5enVBndIy2hw== dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.5" - "@webassemblyjs/ast" "^1.12.1" - "@webassemblyjs/wasm-edit" "^1.12.1" - "@webassemblyjs/wasm-parser" "^1.12.1" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.21.10" + "@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.16.0" + browserslist "^4.28.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.16.0" - es-module-lexer "^1.2.1" + enhanced-resolve "^5.24.4" + es-module-lexer "^2.1.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.2.0" - mime-types "^2.1.27" + mime-db "^1.54.0" + minimizer-webpack-plugin "^5.6.1" neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.10" - watchpack "^2.4.1" - webpack-sources "^3.2.3" - -webpack@5.89.0: - version "5.89.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc" - integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== - dependencies: - "@types/eslint-scope" "^3.7.3" - "@types/estree" "^1.0.0" - "@webassemblyjs/ast" "^1.11.5" - "@webassemblyjs/wasm-edit" "^1.11.5" - "@webassemblyjs/wasm-parser" "^1.11.5" - acorn "^8.7.1" - acorn-import-assertions "^1.9.0" - browserslist "^4.14.5" - chrome-trace-event "^1.0.2" - enhanced-resolve "^5.15.0" - es-module-lexer "^1.2.1" - eslint-scope "5.1.1" - events "^3.2.0" - glob-to-regexp "^0.4.1" - graceful-fs "^4.2.9" - json-parse-even-better-errors "^2.3.1" - loader-runner "^4.2.0" - mime-types "^2.1.27" - neo-async "^2.6.2" - schema-utils "^3.2.0" - tapable "^2.1.1" - terser-webpack-plugin "^5.3.7" - watchpack "^2.4.0" - webpack-sources "^3.2.3" + schema-utils "^4.3.3" + tapable "^2.3.0" + watchpack "^2.5.2" + webpack-sources "^3.5.1" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + version "0.7.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.5.tgz#569d22764ab21f2de20af0e74b411e8ae5a0fa46" + integrity sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA== dependencies: http-parser-js ">=0.5.1" safe-buffer ">=5.1.0" @@ -15390,21 +15083,21 @@ write-file-atomic@^4.0.2: signal-exit "^3.0.7" ws@^6.1.0: - version "6.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.3.tgz#ccc96e4add5fd6fedbc491903075c85c5a11d9ee" - integrity sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA== + version "6.2.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.6.tgz#545a6a915b00b660937f7f2c3084d623fb2fc59f" + integrity sha512-XTrf1gv7kXoVf1hbC3PAyAiPgR8Wz1blcrYIjEsUmr08BLksT41R8KbjmS9408C2ERx7v1JDLD/BkpLEttjfKA== dependencies: async-limiter "~1.0.0" ws@^7.4.6: - version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + version "7.5.13" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.13.tgz#12aa507eaca76c295c278b1aebf4698ab2c1845f" + integrity sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA== ws@^8.2.3, ws@^8.4.2: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" - integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + version "8.21.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.21.3.tgz#660b4faddb6a3e575c86e078126919961f4de4fc" + integrity sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw== xml-name-validator@^3.0.0: version "3.0.0" @@ -15431,17 +15124,17 @@ yallist@^3.0.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: version "1.10.3" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.3.tgz#76e407ed95c42684fb8e14641e5de62fe65bbcb3" integrity sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA== -yargs-parser@^20.2.2, yargs-parser@^20.2.7: +yargs-parser@^20.2.2: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== From a04ecb750dc9ac2020d9feddc221e24de0e85400 Mon Sep 17 00:00:00 2001 From: jamaljsr <1356600+jamaljsr@users.noreply.github.com> Date: Mon, 10 Aug 2026 18:43:17 -0500 Subject: [PATCH 69/69] ci: run node 24 The frontend job was pinned to node 16, which is old enough that some of the packages patched in this branch refuse to install there. tar and esbuild want node 18 or newer, serialize-javascript wants 20. Node was also only pinned in the frontend job. The backend, proto-compile-check and itest jobs all reference matrix.node_version without declaring it in their matrix, so the expression resolved to an empty string and setup-node fell back to whatever the runner happened to ship. Two of those run `yarn install --frozen-lockfile`, so they need a known version too. Both are fixed by a NODE_VERSION env var, matching how GO_VERSION is already handled. It replaces the matrix entry rather than feeding it, because the env context isn't available inside strategy.matrix. --- .github/workflows/main.yml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 129705e6..6b7d4df8 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,6 +26,11 @@ env: # /dev.Dockerfile GO_VERSION: 1.25.11 + # Only applies to the CI jobs below. The note above covers GO_VERSION alone: + # /Dockerfile and /dev.Dockerfile pin their own Node version for release + # builds, and it does not have to match this one. + NODE_VERSION: 24.x + jobs: ######################## # frontend build checks @@ -36,7 +41,6 @@ jobs: strategy: matrix: - node_version: [ 16.x ] os: [ ubuntu-latest, windows-latest, macOS-latest ] steps: @@ -45,10 +49,10 @@ jobs: with: fetch-depth: 0 - - name: setup nodejs ${{ matrix.node_version }} + - name: setup nodejs ${{ env.NODE_VERSION }} uses: ./.github/actions/setup-node with: - node-version: '${{ matrix.node_version }}' + node-version: '${{ env.NODE_VERSION }}' - name: install dependencies working-directory: ./app @@ -84,10 +88,10 @@ jobs: with: fetch-depth: 0 - - name: setup nodejs ${{ matrix.node_version }} + - name: setup nodejs ${{ env.NODE_VERSION }} uses: ./.github/actions/setup-node with: - node-version: '${{ matrix.node_version }}' + node-version: '${{ env.NODE_VERSION }}' - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go @@ -144,10 +148,10 @@ jobs: with: fetch-depth: 0 - - name: setup nodejs ${{ matrix.node_version }} + - name: setup nodejs ${{ env.NODE_VERSION }} uses: ./.github/actions/setup-node with: - node-version: '${{ matrix.node_version }}' + node-version: '${{ env.NODE_VERSION }}' - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go @@ -324,10 +328,10 @@ jobs: with: fetch-depth: 0 - - name: setup nodejs ${{ matrix.node_version }} + - name: setup nodejs ${{ env.NODE_VERSION }} uses: ./.github/actions/setup-node with: - node-version: '${{ matrix.node_version }}' + node-version: '${{ env.NODE_VERSION }}' - name: setup go ${{ env.GO_VERSION }} uses: ./.github/actions/setup-go