mirror of
https://github.com/GlueOps/autoglue.git
synced 2026-02-14 21:30:05 +01:00
Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea4c625269 | ||
|
|
b4c108a5be | ||
|
|
3a1ce33bca | ||
|
|
dbb7ec398e | ||
|
|
82847e5027 | ||
|
|
4314599427 | ||
|
|
9108ee8f8f | ||
|
|
1feb3e29e1 | ||
|
|
0e9ce98624 | ||
|
|
96aef81959 | ||
|
|
62232e18f3 | ||
|
|
515327153c | ||
|
|
5f2e885a8e | ||
|
|
01b48efba0 | ||
|
|
1c87566c5b | ||
|
|
ad00a3c45d | ||
|
|
158fdce780 | ||
|
|
c4fd344364 | ||
|
|
953e724ba0 | ||
|
|
256acfd686 | ||
|
|
1dd0a39aad | ||
|
|
7ef0605c2b | ||
|
|
8a92727b88 | ||
|
|
1f9920a04c |
2
.github/workflows/docker-publish.yml
vendored
2
.github/workflows/docker-publish.yml
vendored
@@ -39,7 +39,7 @@ jobs:
|
|||||||
# https://github.com/sigstore/cosign-installer
|
# https://github.com/sigstore/cosign-installer
|
||||||
- name: Install cosign
|
- name: Install cosign
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
uses: sigstore/cosign-installer@7e8b541eb2e61bf99390e1afd4be13a184e9ebc5 # v3.10.1
|
uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
|
||||||
with:
|
with:
|
||||||
cosign-release: 'v2.2.4'
|
cosign-release: 'v2.2.4'
|
||||||
|
|
||||||
|
|||||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -137,4 +137,6 @@ notes.txt
|
|||||||
|
|
||||||
.terraform
|
.terraform
|
||||||
.terraform.lock*
|
.terraform.lock*
|
||||||
terraform.tfstate*
|
terraform.tfstate*
|
||||||
|
|
||||||
|
ui/src/sdk
|
||||||
3
Makefile
3
Makefile
@@ -310,6 +310,9 @@ doctor: ## Print environment diagnostics (shell, versions, generator availabilit
|
|||||||
$(OGC_BIN) version || true; \
|
$(OGC_BIN) version || true; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fetch-pgweb: ## Fetch PGWeb Binaries for embedding
|
||||||
|
go run ./tools/pgweb_fetch.go
|
||||||
|
|
||||||
help: ## Show this help
|
help: ## Show this help
|
||||||
@grep -hE '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | \
|
@grep -hE '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | \
|
||||||
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
||||||
|
|||||||
51
cmd/db.go
Normal file
51
cmd/db.go
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"runtime"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/glueops/autoglue/internal/config"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
var dbCmd = &cobra.Command{
|
||||||
|
Use: "db",
|
||||||
|
Short: "Database utilities",
|
||||||
|
}
|
||||||
|
|
||||||
|
var dbPsqlCmd = &cobra.Command{
|
||||||
|
Use: "psql",
|
||||||
|
Short: "Open a psql session to the app database",
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
cfg, err := config.Load()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if cfg.DbURL == "" {
|
||||||
|
return errors.New("database.url is empty")
|
||||||
|
}
|
||||||
|
psql := "psql"
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
psql = "psql.exe"
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 72*time.Hour)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
psqlCmd := exec.CommandContext(ctx, psql, cfg.DbURL)
|
||||||
|
psqlCmd.Stdin, psqlCmd.Stdout, psqlCmd.Stderr = os.Stdin, os.Stdout, os.Stderr
|
||||||
|
fmt.Println("Launching psql…")
|
||||||
|
return psqlCmd.Run()
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
dbCmd.AddCommand(dbPsqlCmd)
|
||||||
|
|
||||||
|
rootCmd.AddCommand(dbCmd)
|
||||||
|
}
|
||||||
32
cmd/serve.go
32
cmd/serve.go
@@ -18,6 +18,7 @@ import (
|
|||||||
"github.com/glueops/autoglue/internal/auth"
|
"github.com/glueops/autoglue/internal/auth"
|
||||||
"github.com/glueops/autoglue/internal/bg"
|
"github.com/glueops/autoglue/internal/bg"
|
||||||
"github.com/glueops/autoglue/internal/config"
|
"github.com/glueops/autoglue/internal/config"
|
||||||
|
"github.com/glueops/autoglue/internal/web"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
@@ -33,6 +34,8 @@ var serveCmd = &cobra.Command{
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var pgwebInst *web.Pgweb
|
||||||
|
|
||||||
jobs, err := bg.NewJobs(rt.DB, cfg.DbURL)
|
jobs, err := bg.NewJobs(rt.DB, cfg.DbURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to init background jobs: %v", err)
|
log.Fatalf("failed to init background jobs: %v", err)
|
||||||
@@ -119,7 +122,31 @@ var serveCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
r := api.NewRouter(rt.DB, jobs)
|
var studioHandler http.Handler
|
||||||
|
r := api.NewRouter(rt.DB, jobs, nil)
|
||||||
|
|
||||||
|
if cfg.DBStudioEnabled {
|
||||||
|
dbURL := cfg.DbURLRO
|
||||||
|
if dbURL == "" {
|
||||||
|
dbURL = cfg.DbURL
|
||||||
|
}
|
||||||
|
|
||||||
|
pgwebInst, err = web.StartPgweb(
|
||||||
|
dbURL,
|
||||||
|
cfg.DBStudioBind,
|
||||||
|
cfg.DBStudioPort,
|
||||||
|
true,
|
||||||
|
cfg.DBStudioUser,
|
||||||
|
cfg.DBStudioPass,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("pgweb failed to start: %v", err)
|
||||||
|
} else {
|
||||||
|
studioHandler = http.HandlerFunc(pgwebInst.Proxy())
|
||||||
|
r = api.NewRouter(rt.DB, jobs, studioHandler)
|
||||||
|
log.Printf("pgweb running on http://%s:%s (proxied at /db-studio/)", cfg.DBStudioBind, pgwebInst.Port())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
addr := fmt.Sprintf("%s:%s", cfg.Host, cfg.Port)
|
addr := fmt.Sprintf("%s:%s", cfg.Host, cfg.Port)
|
||||||
|
|
||||||
@@ -143,6 +170,9 @@ var serveCmd = &cobra.Command{
|
|||||||
|
|
||||||
<-ctx.Done()
|
<-ctx.Done()
|
||||||
fmt.Println("\n⏳ Shutting down...")
|
fmt.Println("\n⏳ Shutting down...")
|
||||||
|
if pgwebInst != nil {
|
||||||
|
_ = pgwebInst.Stop(context.Background())
|
||||||
|
}
|
||||||
shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
return srv.Shutdown(shutdownCtx)
|
return srv.Shutdown(shutdownCtx)
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ services:
|
|||||||
- postgres
|
- postgres
|
||||||
|
|
||||||
mailpit:
|
mailpit:
|
||||||
image: axllent/mailpit@sha256:6abc8e633df15eaf785cfcf38bae48e66f64beecdc03121e249d0f9ec15f0707
|
image: axllent/mailpit@sha256:e22dce5b36f93c77082e204a3942fb6b283b7896e057458400a4c88344c3df68
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "1025:1025"
|
- "1025:1025"
|
||||||
|
|||||||
26
docs/docs.go
Normal file
26
docs/docs.go
Normal file
File diff suppressed because one or more lines are too long
1
docs/swagger.json
Normal file
1
docs/swagger.json
Normal file
File diff suppressed because one or more lines are too long
4158
docs/swagger.yaml
Normal file
4158
docs/swagger.yaml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -49,6 +49,14 @@ func AuthMiddleware(db *gorm.DB, requireOrg bool) func(http.Handler) http.Handle
|
|||||||
} else if appKey := r.Header.Get("X-APP-KEY"); appKey != "" {
|
} else if appKey := r.Header.Get("X-APP-KEY"); appKey != "" {
|
||||||
secret := r.Header.Get("X-APP-SECRET")
|
secret := r.Header.Get("X-APP-SECRET")
|
||||||
user = auth.ValidateAppKeyPair(appKey, secret, db)
|
user = auth.ValidateAppKeyPair(appKey, secret, db)
|
||||||
|
} else if c, err := r.Cookie("ag_jwt"); err == nil {
|
||||||
|
tok := strings.TrimSpace(c.Value)
|
||||||
|
if strings.HasPrefix(strings.ToLower(tok), "bearer ") {
|
||||||
|
tok = tok[7:]
|
||||||
|
}
|
||||||
|
if tok != "" {
|
||||||
|
user = auth.ValidateJWT(tok, db)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if user == nil {
|
if user == nil {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import (
|
|||||||
httpSwagger "github.com/swaggo/http-swagger/v2"
|
httpSwagger "github.com/swaggo/http-swagger/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewRouter(db *gorm.DB, jobs *bg.Jobs) http.Handler {
|
func NewRouter(db *gorm.DB, jobs *bg.Jobs, studio http.Handler) http.Handler {
|
||||||
zerolog.TimeFieldFormat = time.RFC3339
|
zerolog.TimeFieldFormat = time.RFC3339
|
||||||
|
|
||||||
l := log.Output(zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: "15:04:05"})
|
l := log.Output(zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: "15:04:05"})
|
||||||
@@ -212,6 +212,17 @@ func NewRouter(db *gorm.DB, jobs *bg.Jobs) http.Handler {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if studio != nil {
|
||||||
|
r.Group(func(gr chi.Router) {
|
||||||
|
authUser := httpmiddleware.AuthMiddleware(db, false)
|
||||||
|
adminOnly := httpmiddleware.RequirePlatformAdmin()
|
||||||
|
gr.Use(authUser)
|
||||||
|
gr.Use(adminOnly)
|
||||||
|
gr.Mount("/db-studio", studio)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if config.IsDebug() {
|
if config.IsDebug() {
|
||||||
r.Route("/debug/pprof", func(pr chi.Router) {
|
r.Route("/debug/pprof", func(pr chi.Router) {
|
||||||
pr.Get("/", httpPprof.Index)
|
pr.Get("/", httpPprof.Index)
|
||||||
@@ -251,6 +262,7 @@ func NewRouter(db *gorm.DB, jobs *bg.Jobs) http.Handler {
|
|||||||
mux.Handle("/api/", r)
|
mux.Handle("/api/", r)
|
||||||
mux.Handle("/api", r)
|
mux.Handle("/api", r)
|
||||||
mux.Handle("/swagger/", r)
|
mux.Handle("/swagger/", r)
|
||||||
|
mux.Handle("/db-studio/", r)
|
||||||
mux.Handle("/debug/pprof/", r)
|
mux.Handle("/debug/pprof/", r)
|
||||||
// Everything else (/, /brand-preview, assets) → proxy (no middlewares)
|
// Everything else (/, /brand-preview, assets) → proxy (no middlewares)
|
||||||
mux.Handle("/", proxy)
|
mux.Handle("/", proxy)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import (
|
|||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
DbURL string
|
DbURL string
|
||||||
|
DbURLRO string
|
||||||
Port string
|
Port string
|
||||||
Host string
|
Host string
|
||||||
JWTIssuer string
|
JWTIssuer string
|
||||||
@@ -29,6 +30,12 @@ type Config struct {
|
|||||||
Debug bool
|
Debug bool
|
||||||
Swagger bool
|
Swagger bool
|
||||||
SwaggerHost string
|
SwaggerHost string
|
||||||
|
|
||||||
|
DBStudioEnabled bool
|
||||||
|
DBStudioBind string
|
||||||
|
DBStudioPort string
|
||||||
|
DBStudioUser string
|
||||||
|
DBStudioPass string
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -48,6 +55,12 @@ func Load() (Config, error) {
|
|||||||
v.SetDefault("bind.address", "127.0.0.1")
|
v.SetDefault("bind.address", "127.0.0.1")
|
||||||
v.SetDefault("bind.port", "8080")
|
v.SetDefault("bind.port", "8080")
|
||||||
v.SetDefault("database.url", "postgres://user:pass@localhost:5432/db?sslmode=disable")
|
v.SetDefault("database.url", "postgres://user:pass@localhost:5432/db?sslmode=disable")
|
||||||
|
v.SetDefault("database.url_ro", "")
|
||||||
|
v.SetDefault("db_studio.enabled", false)
|
||||||
|
v.SetDefault("db_studio.bind", "127.0.0.1")
|
||||||
|
v.SetDefault("db_studio.port", "0") // 0 = random
|
||||||
|
v.SetDefault("db_studio.user", "")
|
||||||
|
v.SetDefault("db_studio.pass", "")
|
||||||
|
|
||||||
v.SetDefault("ui.dev", false)
|
v.SetDefault("ui.dev", false)
|
||||||
v.SetDefault("env", "development")
|
v.SetDefault("env", "development")
|
||||||
@@ -63,6 +76,7 @@ func Load() (Config, error) {
|
|||||||
"bind.address",
|
"bind.address",
|
||||||
"bind.port",
|
"bind.port",
|
||||||
"database.url",
|
"database.url",
|
||||||
|
"database.url_ro",
|
||||||
"jwt.issuer",
|
"jwt.issuer",
|
||||||
"jwt.audience",
|
"jwt.audience",
|
||||||
"jwt.private.enc.key",
|
"jwt.private.enc.key",
|
||||||
@@ -76,6 +90,11 @@ func Load() (Config, error) {
|
|||||||
"debug",
|
"debug",
|
||||||
"swagger",
|
"swagger",
|
||||||
"swagger.host",
|
"swagger.host",
|
||||||
|
"db_studio.enabled",
|
||||||
|
"db_studio.bind",
|
||||||
|
"db_studio.port",
|
||||||
|
"db_studio.user",
|
||||||
|
"db_studio.pass",
|
||||||
}
|
}
|
||||||
for _, k := range keys {
|
for _, k := range keys {
|
||||||
_ = v.BindEnv(k)
|
_ = v.BindEnv(k)
|
||||||
@@ -84,6 +103,7 @@ func Load() (Config, error) {
|
|||||||
// Build config
|
// Build config
|
||||||
cfg := Config{
|
cfg := Config{
|
||||||
DbURL: v.GetString("database.url"),
|
DbURL: v.GetString("database.url"),
|
||||||
|
DbURLRO: v.GetString("database.url_ro"),
|
||||||
Port: v.GetString("bind.port"),
|
Port: v.GetString("bind.port"),
|
||||||
Host: v.GetString("bind.address"),
|
Host: v.GetString("bind.address"),
|
||||||
JWTIssuer: v.GetString("jwt.issuer"),
|
JWTIssuer: v.GetString("jwt.issuer"),
|
||||||
@@ -100,6 +120,12 @@ func Load() (Config, error) {
|
|||||||
Debug: v.GetBool("debug"),
|
Debug: v.GetBool("debug"),
|
||||||
Swagger: v.GetBool("swagger"),
|
Swagger: v.GetBool("swagger"),
|
||||||
SwaggerHost: v.GetString("swagger.host"),
|
SwaggerHost: v.GetString("swagger.host"),
|
||||||
|
|
||||||
|
DBStudioEnabled: v.GetBool("db_studio.enabled"),
|
||||||
|
DBStudioBind: v.GetString("db_studio.bind"),
|
||||||
|
DBStudioPort: v.GetString("db_studio.port"),
|
||||||
|
DBStudioUser: v.GetString("db_studio.user"),
|
||||||
|
DBStudioPass: v.GetString("db_studio.pass"),
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
|
|||||||
@@ -273,6 +273,21 @@ func AuthCallback(db *gorm.DB) http.HandlerFunc {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
secure := strings.HasPrefix(cfg.OAuthRedirectBase, "https://")
|
||||||
|
if xf := r.Header.Get("X-Forwarded-Proto"); xf != "" {
|
||||||
|
secure = strings.EqualFold(xf, "https")
|
||||||
|
}
|
||||||
|
|
||||||
|
http.SetCookie(w, &http.Cookie{
|
||||||
|
Name: "ag_jwt",
|
||||||
|
Value: "Bearer " + access,
|
||||||
|
Path: "/",
|
||||||
|
HttpOnly: true,
|
||||||
|
SameSite: http.SameSiteLaxMode,
|
||||||
|
Secure: secure,
|
||||||
|
MaxAge: int((time.Hour * 8).Seconds()),
|
||||||
|
})
|
||||||
|
|
||||||
// If the state indicates SPA popup mode, postMessage tokens to the opener and close
|
// If the state indicates SPA popup mode, postMessage tokens to the opener and close
|
||||||
state := r.URL.Query().Get("state")
|
state := r.URL.Query().Get("state")
|
||||||
if strings.Contains(state, "mode=spa") {
|
if strings.Contains(state, "mode=spa") {
|
||||||
@@ -377,6 +392,7 @@ func Refresh(db *gorm.DB) http.HandlerFunc {
|
|||||||
// @Router /auth/logout [post]
|
// @Router /auth/logout [post]
|
||||||
func Logout(db *gorm.DB) http.HandlerFunc {
|
func Logout(db *gorm.DB) http.HandlerFunc {
|
||||||
return func(w http.ResponseWriter, r *http.Request) {
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
cfg, _ := config.Load()
|
||||||
var req dto.LogoutRequest
|
var req dto.LogoutRequest
|
||||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||||
utils.WriteError(w, 400, "invalid_json", err.Error())
|
utils.WriteError(w, 400, "invalid_json", err.Error())
|
||||||
@@ -385,13 +401,27 @@ func Logout(db *gorm.DB) http.HandlerFunc {
|
|||||||
rec, err := auth.ValidateRefreshToken(db, req.RefreshToken)
|
rec, err := auth.ValidateRefreshToken(db, req.RefreshToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.WriteHeader(204) // already invalid/revoked
|
w.WriteHeader(204) // already invalid/revoked
|
||||||
return
|
goto clearCookie
|
||||||
}
|
}
|
||||||
if err := auth.RevokeFamily(db, rec.FamilyID); err != nil {
|
if err := auth.RevokeFamily(db, rec.FamilyID); err != nil {
|
||||||
utils.WriteError(w, 500, "revoke_failed", err.Error())
|
utils.WriteError(w, 500, "revoke_failed", err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearCookie:
|
||||||
|
http.SetCookie(w, &http.Cookie{
|
||||||
|
Name: "ag_jwt",
|
||||||
|
Value: "",
|
||||||
|
Path: "/",
|
||||||
|
HttpOnly: true,
|
||||||
|
MaxAge: -1,
|
||||||
|
Expires: time.Unix(0, 0),
|
||||||
|
SameSite: http.SameSiteLaxMode,
|
||||||
|
Secure: strings.HasPrefix(cfg.OAuthRedirectBase, "https"),
|
||||||
|
})
|
||||||
|
|
||||||
w.WriteHeader(204)
|
w.WriteHeader(204)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -106,20 +106,20 @@ func clusterToDTO(c models.Cluster) dto.ClusterResponse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return dto.ClusterResponse{
|
return dto.ClusterResponse{
|
||||||
ID: c.ID,
|
ID: c.ID,
|
||||||
Name: c.Name,
|
Name: c.Name,
|
||||||
Provider: c.Provider,
|
Provider: c.Provider,
|
||||||
Region: c.Region,
|
Region: c.Region,
|
||||||
Status: c.Status,
|
Status: c.Status,
|
||||||
CaptainDomain: c.CaptainDomain,
|
CaptainDomain: c.CaptainDomain,
|
||||||
ClusterLoadBalancer: c.ClusterLoadBalancer,
|
//ClusterLoadBalancer: c.ClusterLoadBalancer,
|
||||||
RandomToken: c.RandomToken,
|
RandomToken: c.RandomToken,
|
||||||
CertificateKey: c.CertificateKey,
|
CertificateKey: c.CertificateKey,
|
||||||
ControlLoadBalancer: c.ControlLoadBalancer,
|
//ControlLoadBalancer: c.ControlLoadBalancer,
|
||||||
NodePools: nps,
|
NodePools: nps,
|
||||||
BastionServer: bastion,
|
BastionServer: bastion,
|
||||||
CreatedAt: c.CreatedAt,
|
CreatedAt: c.CreatedAt,
|
||||||
UpdatedAt: c.UpdatedAt,
|
UpdatedAt: c.UpdatedAt,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// RawJSON is a swagger-friendly wrapper for json.RawMessage.
|
// RawJSON is a swagger-friendly wrapper for json.RawMessage.
|
||||||
type RawJSON json.RawMessage
|
type RawJSON = json.RawMessage
|
||||||
|
|
||||||
var Validate = validator.New()
|
var Validate = validator.New()
|
||||||
|
|
||||||
|
|||||||
@@ -14,17 +14,20 @@ type Cluster struct {
|
|||||||
Provider string `json:"provider"`
|
Provider string `json:"provider"`
|
||||||
Region string `json:"region"`
|
Region string `json:"region"`
|
||||||
Status string `json:"status"`
|
Status string `json:"status"`
|
||||||
CaptainDomain string `gorm:"not null" json:"captain_domain"`
|
CaptainDomain string `gorm:"not null" json:"captain_domain"` // nonprod.earth.onglueops.rocks
|
||||||
ClusterLoadBalancer string `json:"cluster_load_balancer"`
|
AppsLoadBalancer string `json:"cluster_load_balancer"` // {public_ip: 1.2.3.4, private_ip: 10.0.30.1, name: apps.CaqptainDomain}
|
||||||
ControlLoadBalancer string `json:"control_load_balancer"`
|
GlueOpsLoadBalancer string `json:"control_load_balancer"` // {public_ip: 5.6.7.8, private_ip: 10.0.22.1, name: CaptainDomain}
|
||||||
RandomToken string `json:"random_token"`
|
|
||||||
CertificateKey string `json:"certificate_key"`
|
ControlPlane string `json:"control_plane"` // <- dns cntlpn
|
||||||
EncryptedKubeconfig string `gorm:"type:text" json:"-"`
|
|
||||||
KubeIV string `json:"-"`
|
RandomToken string `json:"random_token"`
|
||||||
KubeTag string `json:"-"`
|
CertificateKey string `json:"certificate_key"`
|
||||||
NodePools []NodePool `gorm:"many2many:cluster_node_pools;constraint:OnDelete:CASCADE" json:"node_pools,omitempty"`
|
EncryptedKubeconfig string `gorm:"type:text" json:"-"`
|
||||||
BastionServerID *uuid.UUID `gorm:"type:uuid" json:"bastion_server_id,omitempty"`
|
KubeIV string `json:"-"`
|
||||||
BastionServer *Server `gorm:"foreignKey:BastionServerID" json:"bastion_server,omitempty"`
|
KubeTag string `json:"-"`
|
||||||
CreatedAt time.Time `json:"created_at,omitempty" gorm:"type:timestamptz;column:created_at;not null;default:now()"`
|
NodePools []NodePool `gorm:"many2many:cluster_node_pools;constraint:OnDelete:CASCADE" json:"node_pools,omitempty"`
|
||||||
UpdatedAt time.Time `json:"updated_at,omitempty" gorm:"type:timestamptz;autoUpdateTime;column:updated_at;not null;default:now()"`
|
BastionServerID *uuid.UUID `gorm:"type:uuid" json:"bastion_server_id,omitempty"`
|
||||||
|
BastionServer *Server `gorm:"foreignKey:BastionServerID" json:"bastion_server,omitempty"`
|
||||||
|
CreatedAt time.Time `json:"created_at,omitempty" gorm:"type:timestamptz;column:created_at;not null;default:now()"`
|
||||||
|
UpdatedAt time.Time `json:"updated_at,omitempty" gorm:"type:timestamptz;autoUpdateTime;column:updated_at;not null;default:now()"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,18 +9,18 @@ import (
|
|||||||
|
|
||||||
type Credential struct {
|
type Credential struct {
|
||||||
ID uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()"`
|
ID uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()"`
|
||||||
OrganizationID uuid.UUID `gorm:"type:uuid;not null;uniqueIndex:idx_credentials_org_provider" json:"organization_id"`
|
OrganizationID uuid.UUID `gorm:"type:uuid;not null;index" json:"organization_id"`
|
||||||
Organization Organization `gorm:"foreignKey:OrganizationID;constraint:OnDelete:CASCADE" json:"organization"`
|
Organization Organization `gorm:"foreignKey:OrganizationID;constraint:OnDelete:CASCADE" json:"organization"`
|
||||||
Provider string `gorm:"type:varchar(50);not null;index"`
|
Provider string `gorm:"type:varchar(50);not null;uniqueIndex:uniq_org_provider_scopekind_scope,priority:2;index:idx_provider_kind"`
|
||||||
Kind string `gorm:"type:varchar(50);not null;index"` // "aws_access_key", "api_token", "basic_auth", ...
|
Kind string `gorm:"type:varchar(50);not null;index:idx_provider_kind;index:idx_kind_scope"`
|
||||||
|
ScopeKind string `gorm:"type:varchar(20);not null;uniqueIndex:uniq_org_provider_scopekind_scope,priority:3"`
|
||||||
|
Scope datatypes.JSON `gorm:"type:jsonb;not null;default:'{}';index:idx_kind_scope"`
|
||||||
|
ScopeFingerprint string `gorm:"type:char(64);not null;uniqueIndex:uniq_org_provider_scopekind_scope,priority:4;index"`
|
||||||
SchemaVersion int `gorm:"not null;default:1"`
|
SchemaVersion int `gorm:"not null;default:1"`
|
||||||
Name string `gorm:"type:varchar(100);not null;default:''"` // human label, lets you have multiple for same service
|
Name string `gorm:"type:varchar(100);not null;default:''"`
|
||||||
ScopeKind string `gorm:"type:varchar(20);not null"` // "provider" | "service" | "resource"
|
|
||||||
Scope datatypes.JSON `gorm:"type:jsonb;not null;default:'{}'"` // e.g. {"service":"route53"} or {"arn":"arn:aws:s3:::my-bucket"}
|
|
||||||
ScopeVersion int `gorm:"not null;default:1"`
|
ScopeVersion int `gorm:"not null;default:1"`
|
||||||
AccountID string `gorm:"type:varchar(32)"` // AWS account ID if applicable
|
AccountID string `gorm:"type:varchar(32)"`
|
||||||
Region string `gorm:"type:varchar(32)"` // default region (non-secret)
|
Region string `gorm:"type:varchar(32)"`
|
||||||
ScopeFingerprint string `gorm:"type:char(64);not null;index"`
|
|
||||||
EncryptedData string `gorm:"not null"`
|
EncryptedData string `gorm:"not null"`
|
||||||
IV string `gorm:"not null"`
|
IV string `gorm:"not null"`
|
||||||
Tag string `gorm:"not null"`
|
Tag string `gorm:"not null"`
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
package models
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/google/uuid"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Dns struct {
|
|
||||||
ID uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()"`
|
|
||||||
OrganizationID uuid.UUID `gorm:"type:uuid;not null;uniqueIndex:idx_credentials_org_provider" json:"organization_id"`
|
|
||||||
Organization Organization `gorm:"foreignKey:OrganizationID;constraint:OnDelete:CASCADE" json:"organization"`
|
|
||||||
ClusterID *uuid.UUID `gorm:"type:uuid" json:"cluster_id,omitempty"`
|
|
||||||
Cluster *Cluster `gorm:"foreignKey:ClusterID" json:"cluster,omitempty"`
|
|
||||||
Type string `gorm:"not null" json:"type,omitempty"`
|
|
||||||
Name string `gorm:"not null" json:"name,omitempty"`
|
|
||||||
Content string `gorm:"not null" json:"content,omitempty"`
|
|
||||||
CreatedAt time.Time `json:"created_at,omitempty" gorm:"type:timestamptz;column:created_at;not null;default:now()"`
|
|
||||||
UpdatedAt time.Time `json:"updated_at,omitempty" gorm:"type:timestamptz;autoUpdateTime;column:updated_at;not null;default:now()"`
|
|
||||||
}
|
|
||||||
21
internal/models/domain.go
Normal file
21
internal/models/domain.go
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Domain struct {
|
||||||
|
ID uuid.UUID `gorm:"type:uuid;primaryKey;default:gen_random_uuid()"`
|
||||||
|
OrganizationID uuid.UUID `gorm:"type:uuid;not null;uniqueIndex:idx_credentials_org_provider" json:"organization_id"`
|
||||||
|
Organization Organization `gorm:"foreignKey:OrganizationID;constraint:OnDelete:CASCADE" json:"organization"`
|
||||||
|
ClusterID *uuid.UUID `gorm:"type:uuid" json:"cluster_id,omitempty"`
|
||||||
|
Cluster *Cluster `gorm:"foreignKey:ClusterID" json:"cluster,omitempty"`
|
||||||
|
DomainName string `gorm:"not null;index" json:"domain_name,omitempty"`
|
||||||
|
DomainID string
|
||||||
|
CredentialID uuid.UUID `gorm:"type:uuid;not null" json:"credential_id"`
|
||||||
|
Credential Credential `gorm:"foreignKey:CredentialID" json:"credential,omitempty"`
|
||||||
|
CreatedAt time.Time `json:"created_at,omitempty" gorm:"type:timestamptz;column:created_at;not null;default:now()"`
|
||||||
|
UpdatedAt time.Time `json:"updated_at,omitempty" gorm:"type:timestamptz;autoUpdateTime;column:updated_at;not null;default:now()"`
|
||||||
|
}
|
||||||
79
internal/web/dist/assets/index-52pog1DZ.js
vendored
Normal file
79
internal/web/dist/assets/index-52pog1DZ.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
internal/web/dist/assets/index-52pog1DZ.js.br
vendored
Normal file
BIN
internal/web/dist/assets/index-52pog1DZ.js.br
vendored
Normal file
Binary file not shown.
BIN
internal/web/dist/assets/index-52pog1DZ.js.gz
vendored
Normal file
BIN
internal/web/dist/assets/index-52pog1DZ.js.gz
vendored
Normal file
Binary file not shown.
1
internal/web/dist/assets/index-52pog1DZ.js.map
vendored
Normal file
1
internal/web/dist/assets/index-52pog1DZ.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
2
internal/web/dist/assets/index-tX4seA_J.css
vendored
Normal file
2
internal/web/dist/assets/index-tX4seA_J.css
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
internal/web/dist/assets/index-tX4seA_J.css.br
vendored
Normal file
BIN
internal/web/dist/assets/index-tX4seA_J.css.br
vendored
Normal file
Binary file not shown.
BIN
internal/web/dist/assets/index-tX4seA_J.css.gz
vendored
Normal file
BIN
internal/web/dist/assets/index-tX4seA_J.css.gz
vendored
Normal file
Binary file not shown.
4
internal/web/dist/assets/react-B75e6Si-.js
vendored
Normal file
4
internal/web/dist/assets/react-B75e6Si-.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
internal/web/dist/assets/react-B75e6Si-.js.br
vendored
Normal file
BIN
internal/web/dist/assets/react-B75e6Si-.js.br
vendored
Normal file
Binary file not shown.
BIN
internal/web/dist/assets/react-B75e6Si-.js.gz
vendored
Normal file
BIN
internal/web/dist/assets/react-B75e6Si-.js.gz
vendored
Normal file
Binary file not shown.
1
internal/web/dist/assets/react-B75e6Si-.js.map
vendored
Normal file
1
internal/web/dist/assets/react-B75e6Si-.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
15
internal/web/dist/index.html
vendored
Normal file
15
internal/web/dist/index.html
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>AutoGlue</title>
|
||||||
|
<script type="module" crossorigin src="/assets/index-52pog1DZ.js"></script>
|
||||||
|
<link rel="modulepreload" crossorigin href="/assets/react-B75e6Si-.js">
|
||||||
|
<link rel="stylesheet" crossorigin href="/assets/index-tX4seA_J.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="root"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
BIN
internal/web/dist/index.html.br
vendored
Normal file
BIN
internal/web/dist/index.html.br
vendored
Normal file
Binary file not shown.
BIN
internal/web/dist/index.html.gz
vendored
Normal file
BIN
internal/web/dist/index.html.gz
vendored
Normal file
Binary file not shown.
2
internal/web/dist/vite.svg
vendored
Normal file
2
internal/web/dist/vite.svg
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88"
|
||||||
|
height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
||||||
|
After Width: | Height: | Size: 1.4 KiB |
85
internal/web/pgweb_embed.go
Normal file
85
internal/web/pgweb_embed.go
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
package web
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/sha256"
|
||||||
|
"embed"
|
||||||
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
//go:embed pgwebbin/*
|
||||||
|
var pgwebFS embed.FS
|
||||||
|
|
||||||
|
type pgwebAsset struct {
|
||||||
|
Path string
|
||||||
|
SHA256 string
|
||||||
|
}
|
||||||
|
|
||||||
|
var pgwebIndex = map[string]pgwebAsset{
|
||||||
|
"linux/amd64": {Path: "pgwebbin/pgweb-linux-amd64", SHA256: ""},
|
||||||
|
"linux/arm64": {Path: "pgwebbin/pgweb-linux-arm64", SHA256: ""},
|
||||||
|
"darwin/amd64": {Path: "pgwebbin/pgweb-darwin-amd64", SHA256: ""},
|
||||||
|
"darwin/arm64": {Path: "pgwebbin/pgweb-darwin-arm64", SHA256: ""},
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExtractPgweb() (string, error) {
|
||||||
|
key := runtime.GOOS + "/" + runtime.GOARCH
|
||||||
|
as, ok := pgwebIndex[key]
|
||||||
|
if !ok {
|
||||||
|
return "", fmt.Errorf("pgweb not embedded for %s", key)
|
||||||
|
}
|
||||||
|
f, err := pgwebFS.Open(as.Path)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("embedded pgweb missing: %w", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
tmpDir, err := os.MkdirTemp("", "pgweb-*")
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
filename := "pgweb"
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
filename += ".exe"
|
||||||
|
}
|
||||||
|
outPath := filepath.Join(tmpDir, filename)
|
||||||
|
|
||||||
|
out, err := os.OpenFile(outPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o700)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer out.Close()
|
||||||
|
|
||||||
|
h := sha256.New()
|
||||||
|
if _, err = io.Copy(io.MultiWriter(out, h), f); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if as.SHA256 != "" {
|
||||||
|
got := hex.EncodeToString(h.Sum(nil))
|
||||||
|
if got != as.SHA256 {
|
||||||
|
return "", fmt.Errorf("pgweb checksum mismatch: got=%s want=%s", got, as.SHA256)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure it’s executable on Unix; Windows ignores this.
|
||||||
|
_ = os.Chmod(outPath, 0o700)
|
||||||
|
return outPath, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func CleanupPgweb(pgwebPath string) error {
|
||||||
|
if pgwebPath == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
dir := filepath.Dir(pgwebPath)
|
||||||
|
if dir == "" || dir == "/" || dir == "." {
|
||||||
|
return errors.New("refusing to remove suspicious directory")
|
||||||
|
}
|
||||||
|
return os.RemoveAll(dir)
|
||||||
|
}
|
||||||
107
internal/web/pgweb_proxy.go
Normal file
107
internal/web/pgweb_proxy.go
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
package web
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
"net/http/httputil"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Pgweb struct {
|
||||||
|
cmd *exec.Cmd
|
||||||
|
host string
|
||||||
|
port string
|
||||||
|
bin string
|
||||||
|
}
|
||||||
|
|
||||||
|
func StartPgweb(dbURL, host, port string, readonly bool, user, pass string) (*Pgweb, error) {
|
||||||
|
// pick random port if 0/empty
|
||||||
|
if port == "" || port == "0" {
|
||||||
|
l, err := net.Listen("tcp", net.JoinHostPort(host, "0"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer l.Close()
|
||||||
|
_, p, _ := net.SplitHostPort(l.Addr().String())
|
||||||
|
port = p
|
||||||
|
}
|
||||||
|
|
||||||
|
args := []string{
|
||||||
|
"--url", dbURL,
|
||||||
|
"--bind", host,
|
||||||
|
"--listen", port,
|
||||||
|
"--prefix", "/db-studio",
|
||||||
|
"--skip-open",
|
||||||
|
}
|
||||||
|
if readonly {
|
||||||
|
args = append(args, "--readonly")
|
||||||
|
}
|
||||||
|
if user != "" && pass != "" {
|
||||||
|
args = append(args, "--auth-user", user, "--auth-pass", pass)
|
||||||
|
}
|
||||||
|
|
||||||
|
pgwebBinary, err := ExtractPgweb()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("pgweb extract: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd := exec.Command(pgwebBinary, args...)
|
||||||
|
cmd.Stdout = os.Stdout
|
||||||
|
cmd.Stderr = os.Stderr
|
||||||
|
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// wait for port to be ready
|
||||||
|
deadline := time.Now().Add(4 * time.Second)
|
||||||
|
for time.Now().Before(deadline) {
|
||||||
|
c, err := net.DialTimeout("tcp", net.JoinHostPort(host, port), 200*time.Millisecond)
|
||||||
|
if err == nil {
|
||||||
|
_ = c.Close()
|
||||||
|
return &Pgweb{cmd: cmd, host: host, port: port}, nil
|
||||||
|
}
|
||||||
|
time.Sleep(120 * time.Millisecond)
|
||||||
|
}
|
||||||
|
// still return object so caller can Stop()
|
||||||
|
//return &Pgweb{cmd: cmd, host: host, port: port, bin: pgwebBinary}, nil
|
||||||
|
return nil, fmt.Errorf("pgweb did not become ready on %s:%s", host, port)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Pgweb) Proxy() http.HandlerFunc {
|
||||||
|
target, _ := url.Parse("http://" + net.JoinHostPort(p.host, p.port))
|
||||||
|
proxy := httputil.NewSingleHostReverseProxy(target)
|
||||||
|
proxy.FlushInterval = 100 * time.Millisecond
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
r.Host = target.Host
|
||||||
|
// Let pgweb handle its paths; we mount it at a prefix.
|
||||||
|
proxy.ServeHTTP(w, r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Pgweb) Stop(ctx context.Context) error {
|
||||||
|
if p == nil || p.cmd == nil || p.cmd.Process == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
_ = p.cmd.Process.Kill()
|
||||||
|
done := make(chan struct{})
|
||||||
|
go func() { _, _ = p.cmd.Process.Wait(); close(done) }()
|
||||||
|
select {
|
||||||
|
case <-done:
|
||||||
|
if p.bin != "" {
|
||||||
|
_ = CleanupPgweb(p.bin)
|
||||||
|
}
|
||||||
|
case <-ctx.Done():
|
||||||
|
return ctx.Err()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Pgweb) Port() string {
|
||||||
|
return p.port
|
||||||
|
}
|
||||||
BIN
internal/web/pgwebbin/pgweb-darwin-amd64
Executable file
BIN
internal/web/pgwebbin/pgweb-darwin-amd64
Executable file
Binary file not shown.
BIN
internal/web/pgwebbin/pgweb-darwin-arm64
Executable file
BIN
internal/web/pgwebbin/pgweb-darwin-arm64
Executable file
Binary file not shown.
BIN
internal/web/pgwebbin/pgweb-linux-amd64
Executable file
BIN
internal/web/pgwebbin/pgweb-linux-amd64
Executable file
Binary file not shown.
BIN
internal/web/pgwebbin/pgweb-linux-arm64
Executable file
BIN
internal/web/pgwebbin/pgweb-linux-arm64
Executable file
Binary file not shown.
@@ -61,6 +61,7 @@ func SPAHandler() (http.Handler, error) {
|
|||||||
if strings.HasPrefix(r.URL.Path, "/api/") ||
|
if strings.HasPrefix(r.URL.Path, "/api/") ||
|
||||||
r.URL.Path == "/api" ||
|
r.URL.Path == "/api" ||
|
||||||
strings.HasPrefix(r.URL.Path, "/swagger") ||
|
strings.HasPrefix(r.URL.Path, "/swagger") ||
|
||||||
|
strings.HasPrefix(r.URL.Path, "/db-studio") ||
|
||||||
strings.HasPrefix(r.URL.Path, "/debug/pprof") {
|
strings.HasPrefix(r.URL.Path, "/debug/pprof") {
|
||||||
http.NotFound(w, r)
|
http.NotFound(w, r)
|
||||||
return
|
return
|
||||||
|
|||||||
171
tools/pgweb_fetch.go
Normal file
171
tools/pgweb_fetch.go
Normal file
@@ -0,0 +1,171 @@
|
|||||||
|
//go:build ignore
|
||||||
|
// +build ignore
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"archive/zip"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Target struct {
|
||||||
|
Name string
|
||||||
|
URL string
|
||||||
|
SHA256 string
|
||||||
|
}
|
||||||
|
|
||||||
|
const version = "0.16.2"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
targets := []Target{
|
||||||
|
{
|
||||||
|
Name: "pgweb-linux-amd64",
|
||||||
|
URL: fmt.Sprintf("https://github.com/sosedoff/pgweb/releases/download/v%s/pgweb_linux_amd64.zip", version),
|
||||||
|
SHA256: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "pgweb-linux-arm64",
|
||||||
|
URL: fmt.Sprintf("https://github.com/sosedoff/pgweb/releases/download/v%s/pgweb_linux_arm64.zip", version),
|
||||||
|
SHA256: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "pgweb-darwin-amd64",
|
||||||
|
URL: fmt.Sprintf("https://github.com/sosedoff/pgweb/releases/download/v%s/pgweb_darwin_amd64.zip", version),
|
||||||
|
SHA256: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Name: "pgweb-darwin-arm64",
|
||||||
|
URL: fmt.Sprintf("https://github.com/sosedoff/pgweb/releases/download/v%s/pgweb_darwin_arm64.zip", version),
|
||||||
|
SHA256: "",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
outDir := filepath.Join("internal", "web", "pgwebbin")
|
||||||
|
_ = os.MkdirAll(outDir, 0o755)
|
||||||
|
|
||||||
|
for _, t := range targets {
|
||||||
|
destZip := filepath.Join(outDir, t.Name+".zip")
|
||||||
|
fmt.Printf("Downloading %s...\n", t.URL)
|
||||||
|
if err := downloadFile(destZip, t.URL); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
binPath := filepath.Join(outDir, t.Name)
|
||||||
|
if err := unzipSingle(destZip, binPath); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
_ = os.Remove(destZip)
|
||||||
|
|
||||||
|
// Make executable
|
||||||
|
if err := os.Chmod(binPath, 0o755); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
fmt.Printf("Saved %s\n", binPath)
|
||||||
|
|
||||||
|
// Compute checksum
|
||||||
|
sum, _ := fileSHA256(binPath)
|
||||||
|
fmt.Printf(" SHA256: %s\n", sum)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func downloadFile(dest, url string) error {
|
||||||
|
resp, err := http.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
if resp.StatusCode != 200 {
|
||||||
|
return fmt.Errorf("bad status: %s", resp.Status)
|
||||||
|
}
|
||||||
|
out, err := os.Create(dest)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer out.Close()
|
||||||
|
_, err = io.Copy(out, resp.Body)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func fileSHA256(path string) (string, error) {
|
||||||
|
f, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
h := sha256.New()
|
||||||
|
if _, err := io.Copy(h, f); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return hex.EncodeToString(h.Sum(nil)), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func unzipSingle(zipPath, outPath string) error {
|
||||||
|
// minimal unzip: because pgweb zip has only one binary
|
||||||
|
r, err := os.Open(zipPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
|
// use archive/zip
|
||||||
|
stat, err := os.Stat(zipPath)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return unzipFile(zipPath, outPath, stat.Size())
|
||||||
|
}
|
||||||
|
|
||||||
|
func unzipFile(zipFile, outFile string, _ int64) error {
|
||||||
|
r, err := os.Open(zipFile)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer r.Close()
|
||||||
|
fi, _ := r.Stat()
|
||||||
|
|
||||||
|
// rely on standard zip reader
|
||||||
|
data, err := io.ReadAll(r)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
tmpZip := filepath.Join(os.TempDir(), fi.Name())
|
||||||
|
if err := os.WriteFile(tmpZip, data, 0o644); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer os.Remove(tmpZip)
|
||||||
|
|
||||||
|
zr, err := os.Open(tmpZip)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer zr.Close()
|
||||||
|
// extract using standard lib
|
||||||
|
zr2, err := zip.OpenReader(tmpZip)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer zr2.Close()
|
||||||
|
for _, f := range zr2.File {
|
||||||
|
rc, err := f.Open()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer rc.Close()
|
||||||
|
out, err := os.Create(outFile)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if _, err := io.Copy(out, rc); err != nil {
|
||||||
|
out.Close()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
out.Close()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
@@ -65,8 +65,8 @@
|
|||||||
"@eslint/js": "9.39.1",
|
"@eslint/js": "9.39.1",
|
||||||
"@ianvs/prettier-plugin-sort-imports": "4.7.0",
|
"@ianvs/prettier-plugin-sort-imports": "4.7.0",
|
||||||
"@types/node": "24.10.0",
|
"@types/node": "24.10.0",
|
||||||
"@types/react": "^19.2.2",
|
"@types/react": "19.2.2",
|
||||||
"@types/react-dom": "^19.2.2",
|
"@types/react-dom": "19.2.2",
|
||||||
"@vitejs/plugin-react": "5.1.0",
|
"@vitejs/plugin-react": "5.1.0",
|
||||||
"eslint": "9.39.1",
|
"eslint": "9.39.1",
|
||||||
"eslint-plugin-react-hooks": "7.0.1",
|
"eslint-plugin-react-hooks": "7.0.1",
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import { withRefresh } from "@/api/with-refresh.ts"
|
|||||||
import type { DtoCreateLabelRequest, DtoUpdateLabelRequest } from "@/sdk"
|
import type { DtoCreateLabelRequest, DtoUpdateLabelRequest } from "@/sdk"
|
||||||
import { makeLabelsApi } from "@/sdkClient.ts"
|
import { makeLabelsApi } from "@/sdkClient.ts"
|
||||||
|
|
||||||
|
|
||||||
const labels = makeLabelsApi()
|
const labels = makeLabelsApi()
|
||||||
|
|
||||||
export const labelsApi = {
|
export const labelsApi = {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
import { type FC, useEffect, useState } from "react"
|
import { useEffect, useState, type FC } from "react"
|
||||||
import { archerAdminApi } from "@/api/archer_admin"
|
import { archerAdminApi } from "@/api/archer_admin"
|
||||||
import type { AdminListArcherJobsRequest } from "@/sdk"
|
import type { AdminListArcherJobsRequest } from "@/sdk"
|
||||||
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
|
||||||
@@ -19,8 +19,21 @@ import {
|
|||||||
} from "@/components/ui/dialog"
|
} from "@/components/ui/dialog"
|
||||||
import { Input } from "@/components/ui/input"
|
import { Input } from "@/components/ui/input"
|
||||||
import { Label } from "@/components/ui/label"
|
import { Label } from "@/components/ui/label"
|
||||||
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"
|
import {
|
||||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"
|
Select,
|
||||||
|
SelectContent,
|
||||||
|
SelectItem,
|
||||||
|
SelectTrigger,
|
||||||
|
SelectValue,
|
||||||
|
} from "@/components/ui/select"
|
||||||
|
import {
|
||||||
|
Table,
|
||||||
|
TableBody,
|
||||||
|
TableCell,
|
||||||
|
TableHead,
|
||||||
|
TableHeader,
|
||||||
|
TableRow,
|
||||||
|
} from "@/components/ui/table"
|
||||||
import { Textarea } from "@/components/ui/textarea"
|
import { Textarea } from "@/components/ui/textarea"
|
||||||
|
|
||||||
// Types (align with generated client camelCase)
|
// Types (align with generated client camelCase)
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import { useForm } from "react-hook-form"
|
|||||||
import { toast } from "sonner"
|
import { toast } from "sonner"
|
||||||
import { z } from "zod"
|
import { z } from "zod"
|
||||||
|
|
||||||
|
|
||||||
import { Button } from "@/components/ui/button.tsx"
|
import { Button } from "@/components/ui/button.tsx"
|
||||||
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card.tsx"
|
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card.tsx"
|
||||||
import {
|
import {
|
||||||
|
|||||||
@@ -1,31 +1,34 @@
|
|||||||
import path from "path"
|
import path from "path"
|
||||||
import tailwindcss from "@tailwindcss/vite"
|
import tailwindcss from "@tailwindcss/vite"
|
||||||
import { defineConfig } from 'vite'
|
import react from "@vitejs/plugin-react"
|
||||||
import react from '@vitejs/plugin-react'
|
import { defineConfig } from "vite"
|
||||||
|
|
||||||
// https://vite.dev/config/
|
// https://vite.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [react(), tailwindcss()],
|
plugins: [react(), tailwindcss()],
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
"@": path.resolve(__dirname, "./src"),
|
"@": path.resolve(__dirname, "./src"),
|
||||||
}
|
|
||||||
},
|
},
|
||||||
server: {
|
},
|
||||||
port: 5173,
|
server: {
|
||||||
proxy: {
|
port: 5173,
|
||||||
"/api": "http://localhost:8080",
|
proxy: {
|
||||||
"/swagger": "http://localhost:8080",
|
"/api": "http://localhost:8080",
|
||||||
},
|
"/swagger": "http://localhost:8080",
|
||||||
allowedHosts: ['.getexposed.io']
|
"/db-studio": "http://localhost:8080",
|
||||||
},
|
},
|
||||||
build: {
|
allowedHosts: [".getexposed.io"],
|
||||||
chunkSizeWarningLimit: 1000,
|
},
|
||||||
outDir: "../internal/web/dist",
|
build: {
|
||||||
emptyOutDir: true,
|
chunkSizeWarningLimit: 1000,
|
||||||
sourcemap: true,
|
outDir: "../internal/web/dist",
|
||||||
cssMinify: "lightningcss",
|
emptyOutDir: true,
|
||||||
rollupOptions: { output: { manualChunks: { react: ["react","react-dom","react-router-dom"] } } }
|
sourcemap: true,
|
||||||
|
cssMinify: "lightningcss",
|
||||||
|
rollupOptions: {
|
||||||
|
output: { manualChunks: { react: ["react", "react-dom", "react-router-dom"] } },
|
||||||
},
|
},
|
||||||
esbuild: { legalComments: "none" }
|
},
|
||||||
|
esbuild: { legalComments: "none" },
|
||||||
})
|
})
|
||||||
|
|||||||
346
ui/yarn.lock
346
ui/yarn.lock
@@ -584,42 +584,42 @@
|
|||||||
"@babel/types" "^7.26.0"
|
"@babel/types" "^7.26.0"
|
||||||
semver "^7.5.2"
|
semver "^7.5.2"
|
||||||
|
|
||||||
"@inquirer/ansi@^1.0.1":
|
"@inquirer/ansi@^1.0.2":
|
||||||
version "1.0.1"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.1.tgz#994f7dd16a00c547a7b110e04bf4f4eca1857929"
|
resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.2.tgz#674a4c4d81ad460695cb2a1fc69d78cd187f337e"
|
||||||
integrity sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==
|
integrity sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==
|
||||||
|
|
||||||
"@inquirer/confirm@^5.0.0":
|
"@inquirer/confirm@^5.0.0":
|
||||||
version "5.1.19"
|
version "5.1.20"
|
||||||
resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.19.tgz#bf28b420898999eb7479ab55623a3fbaf1453ff4"
|
resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.20.tgz#8e85662584f162b8b9f6a7c9edcb430fd79f56ad"
|
||||||
integrity sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==
|
integrity sha512-HDGiWh2tyRZa0M1ZnEIUCQro25gW/mN8ODByicQrbR1yHx4hT+IOpozCMi5TgBtUdklLwRI2mv14eNpftDluEw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@inquirer/core" "^10.3.0"
|
"@inquirer/core" "^10.3.1"
|
||||||
"@inquirer/type" "^3.0.9"
|
"@inquirer/type" "^3.0.10"
|
||||||
|
|
||||||
"@inquirer/core@^10.3.0":
|
"@inquirer/core@^10.3.1":
|
||||||
version "10.3.0"
|
version "10.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.0.tgz#342e4fd62cbd33ea62089364274995dbec1f2ffe"
|
resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.1.tgz#09bba1c6e0c45cfd3975c0c85c784c61b916baa8"
|
||||||
integrity sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==
|
integrity sha512-hzGKIkfomGFPgxKmnKEKeA+uCYBqC+TKtRx5LgyHRCrF6S2MliwRIjp3sUaWwVzMp7ZXVs8elB0Tfe682Rpg4w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@inquirer/ansi" "^1.0.1"
|
"@inquirer/ansi" "^1.0.2"
|
||||||
"@inquirer/figures" "^1.0.14"
|
"@inquirer/figures" "^1.0.15"
|
||||||
"@inquirer/type" "^3.0.9"
|
"@inquirer/type" "^3.0.10"
|
||||||
cli-width "^4.1.0"
|
cli-width "^4.1.0"
|
||||||
mute-stream "^2.0.0"
|
mute-stream "^3.0.0"
|
||||||
signal-exit "^4.1.0"
|
signal-exit "^4.1.0"
|
||||||
wrap-ansi "^6.2.0"
|
wrap-ansi "^6.2.0"
|
||||||
yoctocolors-cjs "^2.1.2"
|
yoctocolors-cjs "^2.1.3"
|
||||||
|
|
||||||
"@inquirer/figures@^1.0.14":
|
"@inquirer/figures@^1.0.15":
|
||||||
version "1.0.14"
|
version "1.0.15"
|
||||||
resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.14.tgz#12a7bfd344a83ae6cc5d6004b389ed11f6db6be4"
|
resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.15.tgz#dbb49ed80df11df74268023b496ac5d9acd22b3a"
|
||||||
integrity sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==
|
integrity sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==
|
||||||
|
|
||||||
"@inquirer/type@^3.0.9":
|
"@inquirer/type@^3.0.10":
|
||||||
version "3.0.9"
|
version "3.0.10"
|
||||||
resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.9.tgz#f7f9696e9276e4e1ae9332767afb9199992e31d9"
|
resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.10.tgz#11ed564ec78432a200ea2601a212d24af8150d50"
|
||||||
integrity sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==
|
integrity sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==
|
||||||
|
|
||||||
"@isaacs/balanced-match@^4.0.1":
|
"@isaacs/balanced-match@^4.0.1":
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
@@ -668,9 +668,9 @@
|
|||||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||||
|
|
||||||
"@modelcontextprotocol/sdk@^1.17.2":
|
"@modelcontextprotocol/sdk@^1.17.2":
|
||||||
version "1.21.0"
|
version "1.21.1"
|
||||||
resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.21.0.tgz#a4574443c02a8ce57e7ecbce823c6eaf04041927"
|
resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.21.1.tgz#8fba02e7581d49cc9b047aab0cfd334043321fe5"
|
||||||
integrity sha512-YFBsXJMFCyI1zP98u7gezMFKX4lgu/XpoZJk7ufI6UlFKXLj2hAMUuRlQX/nrmIPOmhRrG6tw2OQ2ZA/ZlXYpQ==
|
integrity sha512-UyLFcJLDvUuZbGnaQqXFT32CpPpGj7VS19roLut6gkQVhb439xUzYWbsUvdI3ZPL+2hnFosuugtYWE0Mcs1rmQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv "^8.17.1"
|
ajv "^8.17.1"
|
||||||
ajv-formats "^3.0.1"
|
ajv-formats "^3.0.1"
|
||||||
@@ -1370,115 +1370,115 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.43.tgz#fa8249860113711ad3c8053bc79cb07c79b77f62"
|
resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.43.tgz#fa8249860113711ad3c8053bc79cb07c79b77f62"
|
||||||
integrity sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==
|
integrity sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==
|
||||||
|
|
||||||
"@rollup/rollup-android-arm-eabi@4.52.5":
|
"@rollup/rollup-android-arm-eabi@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz#0f44a2f8668ed87b040b6fe659358ac9239da4db"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz#7131f3d364805067fd5596302aad9ebef1434b32"
|
||||||
integrity sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==
|
integrity sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==
|
||||||
|
|
||||||
"@rollup/rollup-android-arm64@4.52.5":
|
"@rollup/rollup-android-arm64@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz#25b9a01deef6518a948431564c987bcb205274f5"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz#7ede14d7fcf7c57821a2731c04b29ccc03145d82"
|
||||||
integrity sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==
|
integrity sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==
|
||||||
|
|
||||||
"@rollup/rollup-darwin-arm64@4.52.5":
|
"@rollup/rollup-darwin-arm64@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz#8a102869c88f3780c7d5e6776afd3f19084ecd7f"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz#d59bf9ed582b38838e86a17f91720c17db6575b9"
|
||||||
integrity sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==
|
integrity sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==
|
||||||
|
|
||||||
"@rollup/rollup-darwin-x64@4.52.5":
|
"@rollup/rollup-darwin-x64@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz#8e526417cd6f54daf1d0c04cf361160216581956"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz#a76278d9b9da9f84ea7909a14d93b915d5bbe01e"
|
||||||
integrity sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==
|
integrity sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==
|
||||||
|
|
||||||
"@rollup/rollup-freebsd-arm64@4.52.5":
|
"@rollup/rollup-freebsd-arm64@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz#0e7027054493f3409b1f219a3eac5efd128ef899"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz#1a94821a1f565b9eaa74187632d482e4c59a1707"
|
||||||
integrity sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==
|
integrity sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==
|
||||||
|
|
||||||
"@rollup/rollup-freebsd-x64@4.52.5":
|
"@rollup/rollup-freebsd-x64@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz#72b204a920139e9ec3d331bd9cfd9a0c248ccb10"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz#aad2274680106b2b6549b1e35e5d3a7a9f1f16af"
|
||||||
integrity sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==
|
integrity sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm-gnueabihf@4.52.5":
|
"@rollup/rollup-linux-arm-gnueabihf@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz#ab1b522ebe5b7e06c99504cc38f6cd8b808ba41c"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz#100fe4306399ffeec47318a3c9b8c0e5e8b07ddb"
|
||||||
integrity sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==
|
integrity sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm-musleabihf@4.52.5":
|
"@rollup/rollup-linux-arm-musleabihf@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz#f8cc30b638f1ee7e3d18eac24af47ea29d9beb00"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz#b84634952604b950e18fa11fddebde898c5928d8"
|
||||||
integrity sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==
|
integrity sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm64-gnu@4.52.5":
|
"@rollup/rollup-linux-arm64-gnu@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz#7af37a9e85f25db59dc8214172907b7e146c12cc"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz#dad6f2fb41c2485f29a98e40e9bd78253255dbf3"
|
||||||
integrity sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==
|
integrity sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==
|
||||||
|
|
||||||
"@rollup/rollup-linux-arm64-musl@4.52.5":
|
"@rollup/rollup-linux-arm64-musl@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz#a623eb0d3617c03b7a73716eb85c6e37b776f7e0"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz#0f3f77c8ce9fbf982f8a8378b70a73dc6704a706"
|
||||||
integrity sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==
|
integrity sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==
|
||||||
|
|
||||||
"@rollup/rollup-linux-loong64-gnu@4.52.5":
|
"@rollup/rollup-linux-loong64-gnu@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz#76ea038b549c5c6c5f0d062942627c4066642ee2"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz#870bb94e9dad28bb3124ba49bd733deaa6aa2635"
|
||||||
integrity sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==
|
integrity sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==
|
||||||
|
|
||||||
"@rollup/rollup-linux-ppc64-gnu@4.52.5":
|
"@rollup/rollup-linux-ppc64-gnu@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz#d9a4c3f0a3492bc78f6fdfe8131ac61c7359ccd5"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz#188427d11abefc6c9926e3870b3e032170f5577c"
|
||||||
integrity sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==
|
integrity sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==
|
||||||
|
|
||||||
"@rollup/rollup-linux-riscv64-gnu@4.52.5":
|
"@rollup/rollup-linux-riscv64-gnu@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz#87ab033eebd1a9a1dd7b60509f6333ec1f82d994"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz#9dec6eadbbb5abd3b76fe624dc4f006913ff4a7f"
|
||||||
integrity sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==
|
integrity sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==
|
||||||
|
|
||||||
"@rollup/rollup-linux-riscv64-musl@4.52.5":
|
"@rollup/rollup-linux-riscv64-musl@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz#bda3eb67e1c993c1ba12bc9c2f694e7703958d9f"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz#b26ba1c80b6f104dc5bd83ed83181fc0411a0c38"
|
||||||
integrity sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==
|
integrity sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==
|
||||||
|
|
||||||
"@rollup/rollup-linux-s390x-gnu@4.52.5":
|
"@rollup/rollup-linux-s390x-gnu@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz#f7bc10fbe096ab44694233dc42a2291ed5453d4b"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz#dc83647189b68ad8d56a956a6fcaa4ee9c728190"
|
||||||
integrity sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==
|
integrity sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-gnu@4.52.5":
|
"@rollup/rollup-linux-x64-gnu@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz#a151cb1234cc9b2cf5e8cfc02aa91436b8f9e278"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz#42c3b8c94e9de37bd103cb2e26fb715118ef6459"
|
||||||
integrity sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==
|
integrity sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-musl@4.52.5":
|
"@rollup/rollup-linux-x64-musl@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz#7859e196501cc3b3062d45d2776cfb4d2f3a9350"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz#d0e216ee1ea16bfafe35681b899b6a05258988e5"
|
||||||
integrity sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==
|
integrity sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==
|
||||||
|
|
||||||
"@rollup/rollup-openharmony-arm64@4.52.5":
|
"@rollup/rollup-openharmony-arm64@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz#85d0df7233734df31e547c1e647d2a5300b3bf30"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz#3acd0157cb8976f659442bfd8a99aca46f8a2931"
|
||||||
integrity sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==
|
integrity sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==
|
||||||
|
|
||||||
"@rollup/rollup-win32-arm64-msvc@4.52.5":
|
"@rollup/rollup-win32-arm64-msvc@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz#e62357d00458db17277b88adbf690bb855cac937"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz#3eb9e7d4d0e1d2e0850c4ee9aa2d0ddf89a8effa"
|
||||||
integrity sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==
|
integrity sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==
|
||||||
|
|
||||||
"@rollup/rollup-win32-ia32-msvc@4.52.5":
|
"@rollup/rollup-win32-ia32-msvc@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz#fc7cd40f44834a703c1f1c3fe8bcc27ce476cd50"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz#d69280bc6680fe19e0956e965811946d542f6365"
|
||||||
integrity sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==
|
integrity sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==
|
||||||
|
|
||||||
"@rollup/rollup-win32-x64-gnu@4.52.5":
|
"@rollup/rollup-win32-x64-gnu@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz#1a22acfc93c64a64a48c42672e857ee51774d0d3"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz#d182ce91e342bad9cbb8b284cf33ac542b126ead"
|
||||||
integrity sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==
|
integrity sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==
|
||||||
|
|
||||||
"@rollup/rollup-win32-x64-msvc@4.52.5":
|
"@rollup/rollup-win32-x64-msvc@4.53.2":
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz#1657f56326bbe0ac80eedc9f9c18fc1ddd24e107"
|
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz#d9ab606437fd072b2cb7df7e54bcdc7f1ccbe8b4"
|
||||||
integrity sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==
|
integrity sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==
|
||||||
|
|
||||||
"@sec-ant/readable-stream@^0.4.1":
|
"@sec-ant/readable-stream@^0.4.1":
|
||||||
version "0.4.1"
|
version "0.4.1"
|
||||||
@@ -1731,12 +1731,12 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
undici-types "~7.16.0"
|
undici-types "~7.16.0"
|
||||||
|
|
||||||
"@types/react-dom@^19.2.2":
|
"@types/react-dom@19.2.2":
|
||||||
version "19.2.2"
|
version "19.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.2.2.tgz#a4cc874797b7ddc9cb180ef0d5dc23f596fc2332"
|
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.2.2.tgz#a4cc874797b7ddc9cb180ef0d5dc23f596fc2332"
|
||||||
integrity sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==
|
integrity sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==
|
||||||
|
|
||||||
"@types/react@^19.2.2":
|
"@types/react@19.2.2":
|
||||||
version "19.2.2"
|
version "19.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.2.tgz#ba123a75d4c2a51158697160a4ea2ff70aa6bf36"
|
resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.2.tgz#ba123a75d4c2a51158697160a4ea2ff70aa6bf36"
|
||||||
integrity sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==
|
integrity sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==
|
||||||
@@ -1791,11 +1791,16 @@
|
|||||||
"@typescript-eslint/types" "8.46.3"
|
"@typescript-eslint/types" "8.46.3"
|
||||||
"@typescript-eslint/visitor-keys" "8.46.3"
|
"@typescript-eslint/visitor-keys" "8.46.3"
|
||||||
|
|
||||||
"@typescript-eslint/tsconfig-utils@8.46.3", "@typescript-eslint/tsconfig-utils@^8.46.3":
|
"@typescript-eslint/tsconfig-utils@8.46.3":
|
||||||
version "8.46.3"
|
version "8.46.3"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.3.tgz#cad33398c762c97fe56a8defda00c16505abefa3"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.3.tgz#cad33398c762c97fe56a8defda00c16505abefa3"
|
||||||
integrity sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==
|
integrity sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==
|
||||||
|
|
||||||
|
"@typescript-eslint/tsconfig-utils@^8.46.3":
|
||||||
|
version "8.46.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.4.tgz#989a338093b6b91b0552f1f51331d89ec6980382"
|
||||||
|
integrity sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==
|
||||||
|
|
||||||
"@typescript-eslint/type-utils@8.46.3":
|
"@typescript-eslint/type-utils@8.46.3":
|
||||||
version "8.46.3"
|
version "8.46.3"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.46.3.tgz#71188df833d7697ecff256cd1d3889a20552d78c"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.46.3.tgz#71188df833d7697ecff256cd1d3889a20552d78c"
|
||||||
@@ -1807,11 +1812,16 @@
|
|||||||
debug "^4.3.4"
|
debug "^4.3.4"
|
||||||
ts-api-utils "^2.1.0"
|
ts-api-utils "^2.1.0"
|
||||||
|
|
||||||
"@typescript-eslint/types@8.46.3", "@typescript-eslint/types@^8.46.3":
|
"@typescript-eslint/types@8.46.3":
|
||||||
version "8.46.3"
|
version "8.46.3"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.46.3.tgz#da05ea40e91359b4275dbb3a489f2f7907a02245"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.46.3.tgz#da05ea40e91359b4275dbb3a489f2f7907a02245"
|
||||||
integrity sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==
|
integrity sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==
|
||||||
|
|
||||||
|
"@typescript-eslint/types@^8.46.3":
|
||||||
|
version "8.46.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.46.4.tgz#38022bfda051be80e4120eeefcd2b6e3e630a69b"
|
||||||
|
integrity sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==
|
||||||
|
|
||||||
"@typescript-eslint/typescript-estree@8.46.3":
|
"@typescript-eslint/typescript-estree@8.46.3":
|
||||||
version "8.46.3"
|
version "8.46.3"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.3.tgz#c12406afba707f9779ce0c0151a08c33b3a96d41"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.3.tgz#c12406afba707f9779ce0c0151a08c33b3a96d41"
|
||||||
@@ -1954,7 +1964,7 @@ balanced-match@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
|
||||||
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
|
||||||
|
|
||||||
baseline-browser-mapping@^2.8.19:
|
baseline-browser-mapping@^2.8.25:
|
||||||
version "2.8.25"
|
version "2.8.25"
|
||||||
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.25.tgz#947dc6f81778e0fa0424a2ab9ea09a3033e71109"
|
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.25.tgz#947dc6f81778e0fa0424a2ab9ea09a3033e71109"
|
||||||
integrity sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==
|
integrity sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==
|
||||||
@@ -1997,14 +2007,14 @@ braces@^3.0.3:
|
|||||||
fill-range "^7.1.1"
|
fill-range "^7.1.1"
|
||||||
|
|
||||||
browserslist@^4.24.0, browserslist@^4.26.2:
|
browserslist@^4.24.0, browserslist@^4.26.2:
|
||||||
version "4.27.0"
|
version "4.28.0"
|
||||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.27.0.tgz#755654744feae978fbb123718b2f139bc0fa6697"
|
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.0.tgz#9cefece0a386a17a3cd3d22ebf67b9deca1b5929"
|
||||||
integrity sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==
|
integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
baseline-browser-mapping "^2.8.19"
|
baseline-browser-mapping "^2.8.25"
|
||||||
caniuse-lite "^1.0.30001751"
|
caniuse-lite "^1.0.30001754"
|
||||||
electron-to-chromium "^1.5.238"
|
electron-to-chromium "^1.5.249"
|
||||||
node-releases "^2.0.26"
|
node-releases "^2.0.27"
|
||||||
update-browserslist-db "^1.1.4"
|
update-browserslist-db "^1.1.4"
|
||||||
|
|
||||||
bytes@3.1.2, bytes@^3.1.2:
|
bytes@3.1.2, bytes@^3.1.2:
|
||||||
@@ -2033,7 +2043,7 @@ callsites@^3.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
|
||||||
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
|
integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
|
||||||
|
|
||||||
caniuse-lite@^1.0.30001751:
|
caniuse-lite@^1.0.30001754:
|
||||||
version "1.0.30001754"
|
version "1.0.30001754"
|
||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz#7758299d9a72cce4e6b038788a15b12b44002759"
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz#7758299d9a72cce4e6b038788a15b12b44002759"
|
||||||
integrity sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==
|
integrity sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==
|
||||||
@@ -2365,10 +2375,10 @@ ee-first@1.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||||
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
|
integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
|
||||||
|
|
||||||
electron-to-chromium@^1.5.238:
|
electron-to-chromium@^1.5.249:
|
||||||
version "1.5.245"
|
version "1.5.250"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.245.tgz#81aea81adf1e06b6f703b4b35ac6d543421d0fd9"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.250.tgz#0b40436fa41ae7cbac3d2f60ef0411a698eb72a7"
|
||||||
integrity sha512-rdmGfW47ZhL/oWEJAY4qxRtdly2B98ooTJ0pdEI4jhVLZ6tNf8fPtov2wS1IRKwFJT92le3x4Knxiwzl7cPPpQ==
|
integrity sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==
|
||||||
|
|
||||||
embla-carousel-react@^8.6.0:
|
embla-carousel-react@^8.6.0:
|
||||||
version "8.6.0"
|
version "8.6.0"
|
||||||
@@ -3464,9 +3474,9 @@ ms@^2.1.3:
|
|||||||
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
||||||
|
|
||||||
msw@^2.10.4:
|
msw@^2.10.4:
|
||||||
version "2.12.0"
|
version "2.12.1"
|
||||||
resolved "https://registry.yarnpkg.com/msw/-/msw-2.12.0.tgz#92b62b42e2b81aa843151129c513e8c94b13c165"
|
resolved "https://registry.yarnpkg.com/msw/-/msw-2.12.1.tgz#b3dee99d7692e92581234b4060b9a9250f5d998e"
|
||||||
integrity sha512-jzf2eVnd8+iWXN74dccLrHUw3i3hFVvNVQRWS4vBl2KxaUt7Tdur0Eyda/DODGFkZDu2P5MXaeLe/9Qx8PZkrg==
|
integrity sha512-arzsi9IZjjByiEw21gSUP82qHM8zkV69nNpWV6W4z72KiLvsDWoOp678ORV6cNfU/JGhlX0SsnD4oXo9gI6I2A==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@inquirer/confirm" "^5.0.0"
|
"@inquirer/confirm" "^5.0.0"
|
||||||
"@mswjs/interceptors" "^0.40.0"
|
"@mswjs/interceptors" "^0.40.0"
|
||||||
@@ -3487,10 +3497,10 @@ msw@^2.10.4:
|
|||||||
until-async "^3.0.2"
|
until-async "^3.0.2"
|
||||||
yargs "^17.7.2"
|
yargs "^17.7.2"
|
||||||
|
|
||||||
mute-stream@^2.0.0:
|
mute-stream@^3.0.0:
|
||||||
version "2.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b"
|
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-3.0.0.tgz#cd8014dd2acb72e1e91bb67c74f0019e620ba2d1"
|
||||||
integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==
|
integrity sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==
|
||||||
|
|
||||||
nanoid@^3.3.11:
|
nanoid@^3.3.11:
|
||||||
version "3.3.11"
|
version "3.3.11"
|
||||||
@@ -3526,7 +3536,7 @@ node-fetch@^3.3.2:
|
|||||||
fetch-blob "^3.1.4"
|
fetch-blob "^3.1.4"
|
||||||
formdata-polyfill "^4.0.10"
|
formdata-polyfill "^4.0.10"
|
||||||
|
|
||||||
node-releases@^2.0.26:
|
node-releases@^2.0.27:
|
||||||
version "2.0.27"
|
version "2.0.27"
|
||||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e"
|
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e"
|
||||||
integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==
|
integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==
|
||||||
@@ -3983,34 +3993,34 @@ reusify@^1.0.4:
|
|||||||
integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
|
integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
|
||||||
|
|
||||||
rollup@^4.43.0:
|
rollup@^4.43.0:
|
||||||
version "4.52.5"
|
version "4.53.2"
|
||||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.52.5.tgz#96982cdcaedcdd51b12359981f240f94304ec235"
|
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.53.2.tgz#98e73ee51e119cb9d88b07d026c959522416420a"
|
||||||
integrity sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==
|
integrity sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/estree" "1.0.8"
|
"@types/estree" "1.0.8"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@rollup/rollup-android-arm-eabi" "4.52.5"
|
"@rollup/rollup-android-arm-eabi" "4.53.2"
|
||||||
"@rollup/rollup-android-arm64" "4.52.5"
|
"@rollup/rollup-android-arm64" "4.53.2"
|
||||||
"@rollup/rollup-darwin-arm64" "4.52.5"
|
"@rollup/rollup-darwin-arm64" "4.53.2"
|
||||||
"@rollup/rollup-darwin-x64" "4.52.5"
|
"@rollup/rollup-darwin-x64" "4.53.2"
|
||||||
"@rollup/rollup-freebsd-arm64" "4.52.5"
|
"@rollup/rollup-freebsd-arm64" "4.53.2"
|
||||||
"@rollup/rollup-freebsd-x64" "4.52.5"
|
"@rollup/rollup-freebsd-x64" "4.53.2"
|
||||||
"@rollup/rollup-linux-arm-gnueabihf" "4.52.5"
|
"@rollup/rollup-linux-arm-gnueabihf" "4.53.2"
|
||||||
"@rollup/rollup-linux-arm-musleabihf" "4.52.5"
|
"@rollup/rollup-linux-arm-musleabihf" "4.53.2"
|
||||||
"@rollup/rollup-linux-arm64-gnu" "4.52.5"
|
"@rollup/rollup-linux-arm64-gnu" "4.53.2"
|
||||||
"@rollup/rollup-linux-arm64-musl" "4.52.5"
|
"@rollup/rollup-linux-arm64-musl" "4.53.2"
|
||||||
"@rollup/rollup-linux-loong64-gnu" "4.52.5"
|
"@rollup/rollup-linux-loong64-gnu" "4.53.2"
|
||||||
"@rollup/rollup-linux-ppc64-gnu" "4.52.5"
|
"@rollup/rollup-linux-ppc64-gnu" "4.53.2"
|
||||||
"@rollup/rollup-linux-riscv64-gnu" "4.52.5"
|
"@rollup/rollup-linux-riscv64-gnu" "4.53.2"
|
||||||
"@rollup/rollup-linux-riscv64-musl" "4.52.5"
|
"@rollup/rollup-linux-riscv64-musl" "4.53.2"
|
||||||
"@rollup/rollup-linux-s390x-gnu" "4.52.5"
|
"@rollup/rollup-linux-s390x-gnu" "4.53.2"
|
||||||
"@rollup/rollup-linux-x64-gnu" "4.52.5"
|
"@rollup/rollup-linux-x64-gnu" "4.53.2"
|
||||||
"@rollup/rollup-linux-x64-musl" "4.52.5"
|
"@rollup/rollup-linux-x64-musl" "4.53.2"
|
||||||
"@rollup/rollup-openharmony-arm64" "4.52.5"
|
"@rollup/rollup-openharmony-arm64" "4.53.2"
|
||||||
"@rollup/rollup-win32-arm64-msvc" "4.52.5"
|
"@rollup/rollup-win32-arm64-msvc" "4.53.2"
|
||||||
"@rollup/rollup-win32-ia32-msvc" "4.52.5"
|
"@rollup/rollup-win32-ia32-msvc" "4.53.2"
|
||||||
"@rollup/rollup-win32-x64-gnu" "4.52.5"
|
"@rollup/rollup-win32-x64-gnu" "4.53.2"
|
||||||
"@rollup/rollup-win32-x64-msvc" "4.52.5"
|
"@rollup/rollup-win32-x64-msvc" "4.53.2"
|
||||||
fsevents "~2.3.2"
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
router@^2.2.0:
|
router@^2.2.0:
|
||||||
@@ -4617,7 +4627,7 @@ yocto-queue@^0.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
|
||||||
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
|
||||||
|
|
||||||
yoctocolors-cjs@^2.1.2:
|
yoctocolors-cjs@^2.1.3:
|
||||||
version "2.1.3"
|
version "2.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa"
|
resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa"
|
||||||
integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==
|
integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==
|
||||||
|
|||||||
Reference in New Issue
Block a user