From e99d1f130c923026bdcda350764ef6c16ab7f65a Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Fri, 30 Jan 2026 09:56:15 +0200 Subject: [PATCH 001/128] Remove excessive logging --- api/pkg/middlewares/api_key_auth_middleware.go | 1 - api/pkg/middlewares/bearer_api_key_auth_middleware.go | 7 +------ api/pkg/middlewares/bearer_auth_middleware.go | 2 -- api/pkg/middlewares/http_request_logger_middleware.go | 5 ----- api/pkg/middlewares/phone_api_key_auth_middleware.go | 1 - api/pkg/repositories/gorm_phone_api_key_repository.go | 1 - api/pkg/repositories/gorm_phone_repository.go | 1 - api/pkg/repositories/gorm_user_repository.go | 1 - 8 files changed, 1 insertion(+), 18 deletions(-) diff --git a/api/pkg/middlewares/api_key_auth_middleware.go b/api/pkg/middlewares/api_key_auth_middleware.go index 17ac4335..d971c94a 100644 --- a/api/pkg/middlewares/api_key_auth_middleware.go +++ b/api/pkg/middlewares/api_key_auth_middleware.go @@ -33,7 +33,6 @@ func APIKeyAuth(logger telemetry.Logger, tracer telemetry.Tracer, userRepository } c.Locals(ContextKeyAuthUserID, authUser) - ctxLogger.Info(fmt.Sprintf("[%T] set successfully for user with ID [%s]", authUser, authUser.ID)) return c.Next() } } diff --git a/api/pkg/middlewares/bearer_api_key_auth_middleware.go b/api/pkg/middlewares/bearer_api_key_auth_middleware.go index 2b1dc1c2..1babbd25 100644 --- a/api/pkg/middlewares/bearer_api_key_auth_middleware.go +++ b/api/pkg/middlewares/bearer_api_key_auth_middleware.go @@ -15,11 +15,9 @@ func BearerAPIKeyAuth(logger telemetry.Logger, tracer telemetry.Tracer, userRepo logger = logger.WithService("middlewares.APIKeyAuth") return func(c *fiber.Ctx) error { - ctx, span := tracer.StartFromFiberCtx(c, "middlewares.APIKeyAuth") + ctx, span, _ := tracer.StartFromFiberCtxWithLogger(c, logger, "middlewares.APIKeyAuth") defer span.End() - ctxLogger := tracer.CtxLogger(logger, span) - apiKey := strings.TrimSpace(strings.Replace(c.Get(authHeaderBearer), bearerScheme, "", 1)) if len(apiKey) == 0 { span.AddEvent(fmt.Sprintf("the request header has no [%s] api key", authHeaderAPIKey)) @@ -33,9 +31,6 @@ func BearerAPIKeyAuth(logger telemetry.Logger, tracer telemetry.Tracer, userRepo } c.Locals(ContextKeyAuthUserID, authUser) - - ctxLogger.Info(fmt.Sprintf("[%T] set successfully for user with ID [%s]", authUser, authUser.ID)) - return c.Next() } } diff --git a/api/pkg/middlewares/bearer_auth_middleware.go b/api/pkg/middlewares/bearer_auth_middleware.go index 7df1ca3a..ffd29f0d 100644 --- a/api/pkg/middlewares/bearer_auth_middleware.go +++ b/api/pkg/middlewares/bearer_auth_middleware.go @@ -46,8 +46,6 @@ func BearerAuth(logger telemetry.Logger, tracer telemetry.Tracer, authClient *au } c.Locals(ContextKeyAuthUserID, authUser) - - ctxLogger.Info(fmt.Sprintf("[%T] set successfully for user with ID [%s]", authUser, authUser.ID)) return c.Next() } } diff --git a/api/pkg/middlewares/http_request_logger_middleware.go b/api/pkg/middlewares/http_request_logger_middleware.go index bc0146f0..522f0c91 100644 --- a/api/pkg/middlewares/http_request_logger_middleware.go +++ b/api/pkg/middlewares/http_request_logger_middleware.go @@ -18,11 +18,6 @@ func HTTPRequestLogger(tracer telemetry.Tracer, logger telemetry.Logger) fiber.H _, span, ctxLogger := tracer.StartFromFiberCtxWithLogger(c, logger) defer span.End() - ctxLogger.WithString("http.method", c.Method()). - WithString("http.path", c.Path()). - WithString("client.version", c.Get(clientVersionHeader)). - Trace(fmt.Sprintf("%s %s", c.Method(), c.OriginalURL())) - response := c.Next() statusCode := c.Response().StatusCode() diff --git a/api/pkg/middlewares/phone_api_key_auth_middleware.go b/api/pkg/middlewares/phone_api_key_auth_middleware.go index dc19c3b8..72bc75ae 100644 --- a/api/pkg/middlewares/phone_api_key_auth_middleware.go +++ b/api/pkg/middlewares/phone_api_key_auth_middleware.go @@ -31,7 +31,6 @@ func PhoneAPIKeyAuth(logger telemetry.Logger, tracer telemetry.Tracer, repositor } c.Locals(ContextKeyAuthUserID, authUser) - ctxLogger.Info(fmt.Sprintf("[%T] set successfully for user with ID [%s]", authUser, authUser.ID)) return c.Next() } } diff --git a/api/pkg/repositories/gorm_phone_api_key_repository.go b/api/pkg/repositories/gorm_phone_api_key_repository.go index 3b1bb306..3c306f5a 100644 --- a/api/pkg/repositories/gorm_phone_api_key_repository.go +++ b/api/pkg/repositories/gorm_phone_api_key_repository.go @@ -98,7 +98,6 @@ func (repository *gormPhoneAPIKeyRepository) LoadAuthContext(ctx context.Context defer span.End() if authContext, found := repository.cache.Get(apiKey); found { - ctxLogger.Info(fmt.Sprintf("cache hit for user with ID [%s] and phone API Key ID [%s]", authContext.ID, *authContext.PhoneAPIKeyID)) return authContext, nil } diff --git a/api/pkg/repositories/gorm_phone_repository.go b/api/pkg/repositories/gorm_phone_repository.go index 40c29d30..55b6fb3f 100644 --- a/api/pkg/repositories/gorm_phone_repository.go +++ b/api/pkg/repositories/gorm_phone_repository.go @@ -123,7 +123,6 @@ func (repository *gormPhoneRepository) Load(ctx context.Context, userID entities defer span.End() if phone, found := repository.cache.Get(repository.getCacheKey(userID, phoneNumber)); found { - ctxLogger.Info(fmt.Sprintf("cache hit for [%T] with ID [%s]", phone, userID)) return phone, nil } diff --git a/api/pkg/repositories/gorm_user_repository.go b/api/pkg/repositories/gorm_user_repository.go index 39cda887..572548c3 100644 --- a/api/pkg/repositories/gorm_user_repository.go +++ b/api/pkg/repositories/gorm_user_repository.go @@ -154,7 +154,6 @@ func (repository *gormUserRepository) LoadAuthContext(ctx context.Context, apiKe defer span.End() if authUser, found := repository.cache.Get(apiKey); found { - ctxLogger.Info(fmt.Sprintf("cache hit for user with ID [%s]", authUser.ID)) return authUser, nil } From 35866bf8a129c5e24cd475ac0a76de227ddf7ebc Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Fri, 30 Jan 2026 10:01:49 +0200 Subject: [PATCH 002/128] Cache invalid API key --- api/pkg/middlewares/http_request_logger_middleware.go | 2 +- api/pkg/repositories/gorm_user_repository.go | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/api/pkg/middlewares/http_request_logger_middleware.go b/api/pkg/middlewares/http_request_logger_middleware.go index 522f0c91..b8ee0faa 100644 --- a/api/pkg/middlewares/http_request_logger_middleware.go +++ b/api/pkg/middlewares/http_request_logger_middleware.go @@ -22,7 +22,7 @@ func HTTPRequestLogger(tracer telemetry.Tracer, logger telemetry.Logger) fiber.H statusCode := c.Response().StatusCode() span.AddEvent(fmt.Sprintf("finished handling request with traceID: [%s], statusCode: [%d]", span.SpanContext().TraceID().String(), statusCode)) - if statusCode >= 300 && len(c.Request().Body()) > 0 { + if statusCode >= 300 && len(c.Request().Body()) > 0 && statusCode != 401 { ctxLogger.Warn(stacktrace.NewError(fmt.Sprintf("http.status [%d], body [%s]", statusCode, string(c.Request().Body())))) } diff --git a/api/pkg/repositories/gorm_user_repository.go b/api/pkg/repositories/gorm_user_repository.go index 572548c3..e31b2848 100644 --- a/api/pkg/repositories/gorm_user_repository.go +++ b/api/pkg/repositories/gorm_user_repository.go @@ -154,12 +154,16 @@ func (repository *gormUserRepository) LoadAuthContext(ctx context.Context, apiKe defer span.End() if authUser, found := repository.cache.Get(apiKey); found { + if authUser.IsNoop() { + return authUser, repository.tracer.WrapErrorSpan(span, stacktrace.NewError(fmt.Sprintf("user with api key [%s] does not exist", apiKey))) + } return authUser, nil } user := new(entities.User) err := repository.db.WithContext(ctx).Where("api_key = ?", apiKey).First(user).Error if errors.Is(err, gorm.ErrRecordNotFound) { + repository.cache.SetWithTTL(apiKey, entities.AuthContext{}, 1, 2*time.Hour) msg := fmt.Sprintf("user with api key [%s] does not exist", apiKey) return entities.AuthContext{}, repository.tracer.WrapErrorSpan(span, stacktrace.PropagateWithCode(err, ErrCodeNotFound, msg)) } From b3360eed1dba51e96eeda3b3a06441b62d648a75 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Fri, 30 Jan 2026 10:12:11 +0200 Subject: [PATCH 003/128] Cache invalid API key --- api/pkg/middlewares/bearer_api_key_auth_middleware.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/pkg/middlewares/bearer_api_key_auth_middleware.go b/api/pkg/middlewares/bearer_api_key_auth_middleware.go index 1babbd25..16d9ac5e 100644 --- a/api/pkg/middlewares/bearer_api_key_auth_middleware.go +++ b/api/pkg/middlewares/bearer_api_key_auth_middleware.go @@ -15,7 +15,7 @@ func BearerAPIKeyAuth(logger telemetry.Logger, tracer telemetry.Tracer, userRepo logger = logger.WithService("middlewares.APIKeyAuth") return func(c *fiber.Ctx) error { - ctx, span, _ := tracer.StartFromFiberCtxWithLogger(c, logger, "middlewares.APIKeyAuth") + ctx, span, ctxLogger := tracer.StartFromFiberCtxWithLogger(c, logger, "middlewares.APIKeyAuth") defer span.End() apiKey := strings.TrimSpace(strings.Replace(c.Get(authHeaderBearer), bearerScheme, "", 1)) From fee6bf6a1524e09c1a6802e8d79d35d9fc71ebd9 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Fri, 30 Jan 2026 10:26:48 +0200 Subject: [PATCH 004/128] Fix warning header --- api/pkg/middlewares/http_request_logger_middleware.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/pkg/middlewares/http_request_logger_middleware.go b/api/pkg/middlewares/http_request_logger_middleware.go index b8ee0faa..75ddcae2 100644 --- a/api/pkg/middlewares/http_request_logger_middleware.go +++ b/api/pkg/middlewares/http_request_logger_middleware.go @@ -2,6 +2,7 @@ package middlewares import ( "fmt" + "slices" "github.com/NdoleStudio/httpsms/pkg/telemetry" "github.com/gofiber/fiber/v2" @@ -22,8 +23,8 @@ func HTTPRequestLogger(tracer telemetry.Tracer, logger telemetry.Logger) fiber.H statusCode := c.Response().StatusCode() span.AddEvent(fmt.Sprintf("finished handling request with traceID: [%s], statusCode: [%d]", span.SpanContext().TraceID().String(), statusCode)) - if statusCode >= 300 && len(c.Request().Body()) > 0 && statusCode != 401 { - ctxLogger.Warn(stacktrace.NewError(fmt.Sprintf("http.status [%d], body [%s]", statusCode, string(c.Request().Body())))) + if statusCode >= 300 && len(c.Request().Body()) > 0 && !slices.Contains([]int{401, 402}, statusCode) { + ctxLogger.WithString("client.version", c.Get(clientVersionHeader)).Warn(stacktrace.NewError(fmt.Sprintf("http.status [%d], body [%s]", statusCode, string(c.Request().Body())))) } return response From 5a8eea79ef745b8730d1a19526bd7027c189dcef Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Fri, 30 Jan 2026 22:26:09 +0200 Subject: [PATCH 005/128] Add clear instructions for system user --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f1d9a1b0..c992a691 100644 --- a/README.md +++ b/README.md @@ -227,8 +227,10 @@ docker compose up --build ### 6. Create the System User -- The application uses the concept of a system user to process events async. You should manually create this user in `users` table in your database. - Make sure you use the same `id` and `api_key` as the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file +- The application uses the concept of a system user to process events async. You should manually create this user in `users` table in your database. Make sure you use the same `id` and `api_key` as the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file. You can create a system user with this SQL command `INSERT INTO users (id, api_key, email ) VALUES ('your-system-user-id', 'your-system-api-key', 'system@domain.com');` + +> [!TIP] +> Restart your API docker container after setting the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file ### 7. Build the Android App. From 1c0efd78c7c0de00920f1f8544b45142e85caaf8 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Fri, 30 Jan 2026 22:27:41 +0200 Subject: [PATCH 006/128] Make it even more clear --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c992a691..438158b8 100644 --- a/README.md +++ b/README.md @@ -230,7 +230,7 @@ docker compose up --build - The application uses the concept of a system user to process events async. You should manually create this user in `users` table in your database. Make sure you use the same `id` and `api_key` as the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file. You can create a system user with this SQL command `INSERT INTO users (id, api_key, email ) VALUES ('your-system-user-id', 'your-system-api-key', 'system@domain.com');` > [!TIP] -> Restart your API docker container after setting the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file +> Restart your API docker container after setting the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file so that the httpSMS API can pick up the changes. ### 7. Build the Android App. From e1d62cf459982c2ddae424fec602d26a5a3bb75b Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Fri, 30 Jan 2026 22:28:37 +0200 Subject: [PATCH 007/128] Fix SQL script --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 438158b8..548f50a5 100644 --- a/README.md +++ b/README.md @@ -227,7 +227,10 @@ docker compose up --build ### 6. Create the System User -- The application uses the concept of a system user to process events async. You should manually create this user in `users` table in your database. Make sure you use the same `id` and `api_key` as the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file. You can create a system user with this SQL command `INSERT INTO users (id, api_key, email ) VALUES ('your-system-user-id', 'your-system-api-key', 'system@domain.com');` +- The application uses the concept of a system user to process events async. You should manually create this user in `users` table in your database. Make sure you use the same `id` and `api_key` as the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file. + ```SQL + INSERT INTO users (id, api_key, email ) VALUES ('your-system-user-id', 'your-system-api-key', 'system@domain.com'); + ``` > [!TIP] > Restart your API docker container after setting the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file so that the httpSMS API can pick up the changes. From d134873ff081476992a297d2ef080786b6fc6723 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Fri, 30 Jan 2026 22:30:40 +0200 Subject: [PATCH 008/128] Change from TIP to important --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 548f50a5..ccae7451 100644 --- a/README.md +++ b/README.md @@ -228,12 +228,13 @@ docker compose up --build ### 6. Create the System User - The application uses the concept of a system user to process events async. You should manually create this user in `users` table in your database. Make sure you use the same `id` and `api_key` as the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file. + ```SQL INSERT INTO users (id, api_key, email ) VALUES ('your-system-user-id', 'your-system-api-key', 'system@domain.com'); ``` -> [!TIP] -> Restart your API docker container after setting the `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file so that the httpSMS API can pick up the changes. +> [!IMPORTANT] +> Restart your API docker container after modifying `EVENTS_QUEUE_USER_ID`, and `EVENTS_QUEUE_USER_API_KEY` in your `.env` file so that the httpSMS API can pick up the changes. ### 7. Build the Android App. From bdb1e05f16bdfbeee31445bf8308b6e0753304a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:03:36 +0000 Subject: [PATCH 009/128] fix(deps): bump github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace Bumps [github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace](https://github.com/GoogleCloudPlatform/opentelemetry-operations-go) from 1.30.0 to 1.31.0. - [Release notes](https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/releases) - [Commits](https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/compare/detectors/gcp/v1.30.0...detectors/gcp/v1.31.0) --- updated-dependencies: - dependency-name: github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace dependency-version: 1.31.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- api/go.mod | 4 ++-- api/go.sum | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/api/go.mod b/api/go.mod index a798964a..71b2ded8 100644 --- a/api/go.mod +++ b/api/go.mod @@ -8,7 +8,7 @@ require ( cloud.google.com/go/cloudtasks v1.13.7 firebase.google.com/go v3.13.0+incompatible github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.30.0 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.31.0 github.com/NdoleStudio/go-otelroundtripper v0.0.13 github.com/NdoleStudio/lemonsqueezy-go v1.3.1 github.com/NdoleStudio/plunk-go v0.0.2 @@ -75,7 +75,7 @@ require ( github.com/ClickHouse/ch-go v0.69.0 // indirect github.com/ClickHouse/clickhouse-go/v2 v2.40.3 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect diff --git a/api/go.sum b/api/go.sum index d1685d6c..46d90258 100644 --- a/api/go.sum +++ b/api/go.sum @@ -40,12 +40,12 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 h1:lhhYARPUu3LmHysQ/igznQphfzynnqI3D75oUyw1HXk= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0/go.mod h1:l9rva3ApbBpEJxSNYnwT9N4CDLrWgtq3u8736C5hyJw= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.30.0 h1:5eCqTd9rTwMlE62z0xFdzPJ+3pji75hJrwq1jrCjo5w= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.30.0/go.mod h1:4BcvJy7WxY8X2eX49z2VO1ByhO+CcQK8lKPCH/QlZvo= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0 h1:xfK3bbi6F2RDtaZFtUdKO3osOBIhNb+xTs8lFW6yx9o= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.54.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0 h1:s0WlVbf9qpvkh1c/uDAPElam0WrL7fHRIidgZJ7UqZI= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.54.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.31.0 h1:xQMhkBXPOKe/GzC6TctwlK2aNF+9k5VwFgdE83rBK2Y= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.31.0/go.mod h1:VLoD5cAsRQXsAFXpOZrrTGzbuMsntlspIZno4xor5Zg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0 h1:7t/qx5Ost0s0wbA/VDrByOooURhp+ikYwv20i9Y07TQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 h1:0s6TxfCu2KHkkZPnBfsQ2y5qia0jl3MMrmBhu3nCOYk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= From 5f6fe6ba4eef835158adcb8d012f0fa05da24fca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:03:43 +0000 Subject: [PATCH 010/128] fix(deps): bump github.com/gofiber/fiber/v2 in /api Bumps [github.com/gofiber/fiber/v2](https://github.com/gofiber/fiber) from 2.52.10 to 2.52.11. - [Release notes](https://github.com/gofiber/fiber/releases) - [Commits](https://github.com/gofiber/fiber/compare/v2.52.10...v2.52.11) --- updated-dependencies: - dependency-name: github.com/gofiber/fiber/v2 dependency-version: 2.52.11 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- api/go.mod | 2 +- api/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/go.mod b/api/go.mod index a798964a..236c6cbd 100644 --- a/api/go.mod +++ b/api/go.mod @@ -20,7 +20,7 @@ require ( github.com/dgraph-io/ristretto/v2 v2.3.0 github.com/dustin/go-humanize v1.0.1 github.com/gofiber/contrib/otelfiber v1.0.10 - github.com/gofiber/fiber/v2 v2.52.10 + github.com/gofiber/fiber/v2 v2.52.11 github.com/gofiber/swagger v1.1.1 github.com/golang-jwt/jwt/v5 v5.3.0 github.com/google/uuid v1.6.0 diff --git a/api/go.sum b/api/go.sum index d1685d6c..cd18f0b8 100644 --- a/api/go.sum +++ b/api/go.sum @@ -150,8 +150,8 @@ github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI6 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofiber/contrib/otelfiber v1.0.10 h1:Bu28Pi4pfYmGfIc/9+sNaBbFwTHGY/zpSIK5jBxuRtM= github.com/gofiber/contrib/otelfiber v1.0.10/go.mod h1:jN6AvS1HolDHTQHFURsV+7jSX96FpXYeKH6nmkq8AIw= -github.com/gofiber/fiber/v2 v2.52.10 h1:jRHROi2BuNti6NYXmZ6gbNSfT3zj/8c0xy94GOU5elY= -github.com/gofiber/fiber/v2 v2.52.10/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= +github.com/gofiber/fiber/v2 v2.52.11 h1:5f4yzKLcBcF8ha1GQTWB+mpblWz3Vz6nSAbTL31HkWs= +github.com/gofiber/fiber/v2 v2.52.11/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= github.com/gofiber/swagger v1.1.1 h1:FZVhVQQ9s1ZKLHL/O0loLh49bYB5l1HEAgxDlcTtkRA= github.com/gofiber/swagger v1.1.1/go.mod h1:vtvY/sQAMc/lGTUCg0lqmBL7Ht9O7uzChpbvJeJQINw= github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= From 0690b482b270085cb54daeb4cb796587f363cbf9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:03:45 +0000 Subject: [PATCH 011/128] chore(deps-dev): bump @types/qrcode from 1.5.5 to 1.5.6 in /web Bumps [@types/qrcode](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/qrcode) from 1.5.5 to 1.5.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/qrcode) --- updated-dependencies: - dependency-name: "@types/qrcode" dependency-version: 1.5.6 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- web/package.json | 2 +- web/pnpm-lock.yaml | 190 ++++++++++++++++++--------------------------- 2 files changed, 78 insertions(+), 114 deletions(-) diff --git a/web/package.json b/web/package.json index dd63ade1..d79e5170 100644 --- a/web/package.json +++ b/web/package.json @@ -63,7 +63,7 @@ "@nuxtjs/eslint-module": "^4.1.0", "@nuxtjs/stylelint-module": "^5.2.0", "@nuxtjs/vuetify": "^1.12.3", - "@types/qrcode": "^1.5.5", + "@types/qrcode": "^1.5.6", "@vue/test-utils": "^1.3.6", "axios": "^0.30.2", "babel-core": "7.0.0-bridge.0", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index b2b84a8c..7f151354 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -104,7 +104,7 @@ importers: version: 7.28.5(@babel/core@7.28.4)(eslint@8.57.1) '@commitlint/cli': specifier: ^20.2.0 - version: 20.2.0(@types/node@25.0.3)(typescript@4.9.5) + version: 20.2.0(@types/node@25.1.0)(typescript@4.9.5) '@commitlint/config-conventional': specifier: ^19.8.0 version: 19.8.0 @@ -119,16 +119,16 @@ importers: version: 12.1.0(eslint@8.57.1)(typescript@4.9.5) '@nuxtjs/eslint-module': specifier: ^4.1.0 - version: 4.1.0(eslint@8.57.1)(rollup@3.29.5)(vite@4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1) + version: 4.1.0(eslint@8.57.1)(rollup@3.29.5)(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1) '@nuxtjs/stylelint-module': specifier: ^5.2.0 - version: 5.2.0(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1) + version: 5.2.0(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1) '@nuxtjs/vuetify': specifier: ^1.12.3 version: 1.12.3(vue@2.7.16)(webpack@5.104.1) '@types/qrcode': - specifier: ^1.5.5 - version: 1.5.5 + specifier: ^1.5.6 + version: 1.5.6 '@vue/test-utils': specifier: ^1.3.6 version: 1.3.6(vue-template-compiler@2.7.16)(vue@2.7.16) @@ -158,7 +158,7 @@ importers: version: 11.11.1 jest: specifier: ^30.2.0 - version: 30.2.0(@types/node@25.0.3) + version: 30.2.0(@types/node@25.1.0) lint-staged: specifier: ^16.1.4 version: 16.1.4 @@ -185,7 +185,7 @@ importers: version: 34.0.0(stylelint@15.11.0(typescript@4.9.5)) ts-jest: specifier: ^29.4.6 - version: 29.4.6(@babel/core@7.28.4)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.4))(jest-util@30.2.0)(jest@30.2.0(@types/node@25.0.3))(typescript@4.9.5) + version: 29.4.6(@babel/core@7.28.4)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.4))(jest-util@30.2.0)(jest@30.2.0(@types/node@25.1.0))(typescript@4.9.5) vue-client-only: specifier: ^2.1.0 version: 2.1.0 @@ -2357,14 +2357,11 @@ packages: '@types/node@16.18.55': resolution: {integrity: sha512-Y1zz/LIuJek01+hlPNzzXQhmq/Z2BCP96j18MSXC0S0jSu/IG4FFxmBs7W4/lI2vPJ7foVfEB0hUVtnOjnCiTg==} - '@types/node@20.8.0': - resolution: {integrity: sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==} - '@types/node@24.6.2': resolution: {integrity: sha512-d2L25Y4j+W3ZlNAeMKcy7yDsK425ibcAOO2t7aPTz6gNMH0z2GThtwENCDc0d/Pw9wgyRqE5Px1wkV7naz8ang==} - '@types/node@25.0.3': - resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} + '@types/node@25.1.0': + resolution: {integrity: sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==} '@types/normalize-package-data@2.4.2': resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==} @@ -2378,8 +2375,8 @@ packages: '@types/pug@2.0.10': resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==} - '@types/qrcode@1.5.5': - resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==} + '@types/qrcode@1.5.6': + resolution: {integrity: sha512-te7NQcV2BOvdj2b1hCAHzAoMNuj65kNBMz0KBaxM6c3VGBOhU0dURQKOtH8CFNI/dsKkwlv32p26qYQTWoB5bw==} '@types/qs@6.9.8': resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==} @@ -8337,6 +8334,7 @@ packages: tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me teeny-request@7.2.0: resolution: {integrity: sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==} @@ -10380,11 +10378,11 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@commitlint/cli@20.2.0(@types/node@25.0.3)(typescript@4.9.5)': + '@commitlint/cli@20.2.0(@types/node@25.1.0)(typescript@4.9.5)': dependencies: '@commitlint/format': 20.2.0 '@commitlint/lint': 20.2.0 - '@commitlint/load': 20.2.0(@types/node@25.0.3)(typescript@4.9.5) + '@commitlint/load': 20.2.0(@types/node@25.1.0)(typescript@4.9.5) '@commitlint/read': 20.2.0 '@commitlint/types': 20.2.0 tinyexec: 1.0.2 @@ -10431,7 +10429,7 @@ snapshots: '@commitlint/rules': 20.2.0 '@commitlint/types': 20.2.0 - '@commitlint/load@20.2.0(@types/node@25.0.3)(typescript@4.9.5)': + '@commitlint/load@20.2.0(@types/node@25.1.0)(typescript@4.9.5)': dependencies: '@commitlint/config-validator': 20.2.0 '@commitlint/execute-rule': 20.0.0 @@ -10439,7 +10437,7 @@ snapshots: '@commitlint/types': 20.2.0 chalk: 5.6.2 cosmiconfig: 9.0.0(typescript@4.9.5) - cosmiconfig-typescript-loader: 6.2.0(@types/node@25.0.3)(cosmiconfig@9.0.0(typescript@4.9.5))(typescript@4.9.5) + cosmiconfig-typescript-loader: 6.2.0(@types/node@25.1.0)(cosmiconfig@9.0.0(typescript@4.9.5))(typescript@4.9.5) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -11317,13 +11315,13 @@ snapshots: '@grpc/grpc-js@1.6.12': dependencies: '@grpc/proto-loader': 0.7.10 - '@types/node': 25.0.3 + '@types/node': 25.1.0 optional: true '@grpc/grpc-js@1.9.15': dependencies: '@grpc/proto-loader': 0.7.10 - '@types/node': 25.0.3 + '@types/node': 25.1.0 '@grpc/proto-loader@0.6.13': dependencies: @@ -11375,7 +11373,7 @@ snapshots: '@jest/console@30.2.0': dependencies: '@jest/types': 30.2.0 - '@types/node': 24.6.2 + '@types/node': 25.1.0 chalk: 4.1.2 jest-message-util: 30.2.0 jest-util: 30.2.0 @@ -11389,14 +11387,14 @@ snapshots: '@jest/test-result': 30.2.0 '@jest/transform': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.6.2 + '@types/node': 25.1.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 4.3.0 exit-x: 0.2.2 graceful-fs: 4.2.11 jest-changed-files: 30.2.0 - jest-config: 30.2.0(@types/node@24.6.2) + jest-config: 30.2.0(@types/node@25.1.0) jest-haste-map: 30.2.0 jest-message-util: 30.2.0 jest-regex-util: 30.0.1 @@ -11425,7 +11423,7 @@ snapshots: '@jest/fake-timers': 30.2.0 '@jest/types': 30.2.0 '@types/jsdom': 21.1.7 - '@types/node': 24.6.2 + '@types/node': 25.1.0 jest-mock: 30.2.0 jest-util: 30.2.0 jsdom: 26.1.0 @@ -11434,7 +11432,7 @@ snapshots: dependencies: '@jest/fake-timers': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.6.2 + '@types/node': 25.1.0 jest-mock: 30.2.0 '@jest/expect-utils@30.2.0': @@ -11452,7 +11450,7 @@ snapshots: dependencies: '@jest/types': 30.2.0 '@sinonjs/fake-timers': 13.0.5 - '@types/node': 24.6.2 + '@types/node': 25.1.0 jest-message-util: 30.2.0 jest-mock: 30.2.0 jest-util: 30.2.0 @@ -11470,7 +11468,7 @@ snapshots: '@jest/pattern@30.0.1': dependencies: - '@types/node': 24.6.2 + '@types/node': 25.1.0 jest-regex-util: 30.0.1 '@jest/reporters@30.2.0': @@ -11481,7 +11479,7 @@ snapshots: '@jest/transform': 30.2.0 '@jest/types': 30.2.0 '@jridgewell/trace-mapping': 0.3.31 - '@types/node': 24.6.2 + '@types/node': 25.1.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit-x: 0.2.2 @@ -11561,7 +11559,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 25.0.3 + '@types/node': 25.1.0 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -11571,7 +11569,7 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 24.6.2 + '@types/node': 25.1.0 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -12233,14 +12231,14 @@ snapshots: - eslint-import-resolver-webpack - supports-color - '@nuxtjs/eslint-module@4.1.0(eslint@8.57.1)(rollup@3.29.5)(vite@4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1)': + '@nuxtjs/eslint-module@4.1.0(eslint@8.57.1)(rollup@3.29.5)(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1)': dependencies: '@nuxt/kit': 3.7.4(rollup@3.29.5) chokidar: 3.5.3 eslint: 8.57.1 eslint-webpack-plugin: 4.0.1(eslint@8.57.1)(webpack@5.104.1) pathe: 1.1.1 - vite-plugin-eslint: 1.8.1(eslint@8.57.1)(vite@4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1)) + vite-plugin-eslint: 1.8.1(eslint@8.57.1)(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1)) transitivePeerDependencies: - rollup - supports-color @@ -12271,14 +12269,14 @@ snapshots: minimatch: 3.1.2 sitemap: 4.1.1 - '@nuxtjs/stylelint-module@5.2.0(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1)': + '@nuxtjs/stylelint-module@5.2.0(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1)': dependencies: '@nuxt/kit': 3.12.2(rollup@3.29.5) chokidar: 3.6.0 pathe: 1.1.2 stylelint: 15.11.0(typescript@4.9.5) stylelint-webpack-plugin: 5.0.1(stylelint@15.11.0(typescript@4.9.5))(webpack@5.104.1) - vite-plugin-stylelint: 5.3.1(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1)) + vite-plugin-stylelint: 5.3.1(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1)) transitivePeerDependencies: - '@types/stylelint' - magicast @@ -12414,7 +12412,7 @@ snapshots: '@types/body-parser@1.19.3': dependencies: '@types/connect': 3.4.38 - '@types/node': 25.0.3 + '@types/node': 25.1.0 '@types/compression@1.7.5': dependencies: @@ -12426,11 +12424,11 @@ snapshots: '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 24.6.2 + '@types/node': 25.1.0 '@types/conventional-commits-parser@5.0.2': dependencies: - '@types/node': 25.0.3 + '@types/node': 25.1.0 '@types/eslint-scope@3.7.7': dependencies: @@ -12455,7 +12453,7 @@ snapshots: '@types/express-serve-static-core@4.17.37': dependencies: - '@types/node': 25.0.3 + '@types/node': 25.1.0 '@types/qs': 6.9.8 '@types/range-parser': 1.2.5 '@types/send': 0.17.2 @@ -12489,7 +12487,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 24.6.2 + '@types/node': 25.1.0 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -12499,7 +12497,7 @@ snapshots: '@types/jsonwebtoken@8.5.9': dependencies: - '@types/node': 25.0.3 + '@types/node': 25.1.0 optional: true '@types/less@3.0.6': {} @@ -12515,13 +12513,11 @@ snapshots: '@types/node@16.18.55': {} - '@types/node@20.8.0': {} - '@types/node@24.6.2': dependencies: undici-types: 7.13.0 - '@types/node@25.0.3': + '@types/node@25.1.0': dependencies: undici-types: 7.16.0 @@ -12535,9 +12531,9 @@ snapshots: '@types/pug@2.0.10': {} - '@types/qrcode@1.5.5': + '@types/qrcode@1.5.6': dependencies: - '@types/node': 20.8.0 + '@types/node': 25.1.0 '@types/qs@6.9.8': {} @@ -12545,14 +12541,14 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 24.6.2 + '@types/node': 25.1.0 '@types/semver@7.5.3': {} '@types/send@0.17.2': dependencies: '@types/mime': 1.3.3 - '@types/node': 24.6.2 + '@types/node': 25.1.0 '@types/serve-static@1.15.7': dependencies: @@ -12592,7 +12588,7 @@ snapshots: '@types/webpack-sources@3.2.1': dependencies: - '@types/node': 24.6.2 + '@types/node': 25.1.0 '@types/source-list-map': 0.1.3 source-map: 0.7.6 @@ -14138,9 +14134,9 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@6.2.0(@types/node@25.0.3)(cosmiconfig@9.0.0(typescript@4.9.5))(typescript@4.9.5): + cosmiconfig-typescript-loader@6.2.0(@types/node@25.1.0)(cosmiconfig@9.0.0(typescript@4.9.5))(typescript@4.9.5): dependencies: - '@types/node': 25.0.3 + '@types/node': 25.1.0 cosmiconfig: 9.0.0(typescript@4.9.5) jiti: 2.6.1 typescript: 4.9.5 @@ -15368,7 +15364,7 @@ snapshots: '@fastify/busboy': 1.2.1 '@firebase/database-compat': 0.2.10(@firebase/app-types@0.9.2) '@firebase/database-types': 0.9.17 - '@types/node': 24.6.2 + '@types/node': 25.1.0 jsonwebtoken: 8.5.1 jwks-rsa: 2.1.5 node-forge: 1.3.1 @@ -16382,7 +16378,7 @@ snapshots: '@jest/expect': 30.2.0 '@jest/test-result': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 25.0.3 + '@types/node': 25.1.0 chalk: 4.1.2 co: 4.6.0 dedent: 1.7.0 @@ -16402,7 +16398,7 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@30.2.0(@types/node@25.0.3): + jest-cli@30.2.0(@types/node@25.1.0): dependencies: '@jest/core': 30.2.0 '@jest/test-result': 30.2.0 @@ -16410,7 +16406,7 @@ snapshots: chalk: 4.1.2 exit-x: 0.2.2 import-local: 3.2.0 - jest-config: 30.2.0(@types/node@25.0.3) + jest-config: 30.2.0(@types/node@25.1.0) jest-util: 30.2.0 jest-validate: 30.2.0 yargs: 17.7.2 @@ -16421,39 +16417,7 @@ snapshots: - supports-color - ts-node - jest-config@30.2.0(@types/node@24.6.2): - dependencies: - '@babel/core': 7.28.4 - '@jest/get-type': 30.1.0 - '@jest/pattern': 30.0.1 - '@jest/test-sequencer': 30.2.0 - '@jest/types': 30.2.0 - babel-jest: 30.2.0(@babel/core@7.28.4) - chalk: 4.1.2 - ci-info: 4.3.0 - deepmerge: 4.3.1 - glob: 10.4.5 - graceful-fs: 4.2.11 - jest-circus: 30.2.0 - jest-docblock: 30.2.0 - jest-environment-node: 30.2.0 - jest-regex-util: 30.0.1 - jest-resolve: 30.2.0 - jest-runner: 30.2.0 - jest-util: 30.2.0 - jest-validate: 30.2.0 - micromatch: 4.0.8 - parse-json: 5.2.0 - pretty-format: 30.2.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 24.6.2 - transitivePeerDependencies: - - babel-plugin-macros - - supports-color - - jest-config@30.2.0(@types/node@25.0.3): + jest-config@30.2.0(@types/node@25.1.0): dependencies: '@babel/core': 7.28.4 '@jest/get-type': 30.1.0 @@ -16480,7 +16444,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 25.0.3 + '@types/node': 25.1.0 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -16521,7 +16485,7 @@ snapshots: '@jest/environment': 30.2.0 '@jest/fake-timers': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 25.0.3 + '@types/node': 25.1.0 jest-mock: 30.2.0 jest-util: 30.2.0 jest-validate: 30.2.0 @@ -16529,7 +16493,7 @@ snapshots: jest-haste-map@30.2.0: dependencies: '@jest/types': 30.2.0 - '@types/node': 24.6.2 + '@types/node': 25.1.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -16568,7 +16532,7 @@ snapshots: jest-mock@30.2.0: dependencies: '@jest/types': 30.2.0 - '@types/node': 24.6.2 + '@types/node': 25.1.0 jest-util: 30.2.0 jest-pnp-resolver@1.2.3(jest-resolve@30.2.0): @@ -16602,7 +16566,7 @@ snapshots: '@jest/test-result': 30.2.0 '@jest/transform': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.6.2 + '@types/node': 25.1.0 chalk: 4.1.2 emittery: 0.13.1 exit-x: 0.2.2 @@ -16631,7 +16595,7 @@ snapshots: '@jest/test-result': 30.2.0 '@jest/transform': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.6.2 + '@types/node': 25.1.0 chalk: 4.1.2 cjs-module-lexer: 2.1.0 collect-v8-coverage: 1.0.2 @@ -16678,7 +16642,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 25.0.3 + '@types/node': 25.1.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -16687,7 +16651,7 @@ snapshots: jest-util@30.2.0: dependencies: '@jest/types': 30.2.0 - '@types/node': 24.6.2 + '@types/node': 25.1.0 chalk: 4.1.2 ci-info: 4.3.0 graceful-fs: 4.2.11 @@ -16706,7 +16670,7 @@ snapshots: dependencies: '@jest/test-result': 30.2.0 '@jest/types': 30.2.0 - '@types/node': 24.6.2 + '@types/node': 25.1.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -16715,37 +16679,37 @@ snapshots: jest-worker@26.6.2: dependencies: - '@types/node': 25.0.3 + '@types/node': 25.1.0 merge-stream: 2.0.0 supports-color: 7.2.0 jest-worker@27.5.1: dependencies: - '@types/node': 25.0.3 + '@types/node': 25.1.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 24.6.2 + '@types/node': 25.1.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@30.2.0: dependencies: - '@types/node': 25.0.3 + '@types/node': 25.1.0 '@ungap/structured-clone': 1.3.0 jest-util: 30.2.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@30.2.0(@types/node@25.0.3): + jest@30.2.0(@types/node@25.1.0): dependencies: '@jest/core': 30.2.0 '@jest/types': 30.2.0 import-local: 3.2.0 - jest-cli: 30.2.0(@types/node@25.0.3) + jest-cli: 30.2.0(@types/node@25.1.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -18664,7 +18628,7 @@ snapshots: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 25.0.3 + '@types/node': 25.1.0 long: 4.0.0 optional: true @@ -18681,7 +18645,7 @@ snapshots: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 25.0.3 + '@types/node': 25.1.0 long: 4.0.0 optional: true @@ -18697,7 +18661,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 25.0.3 + '@types/node': 25.1.0 long: 5.2.3 protocols@2.0.1: {} @@ -19817,12 +19781,12 @@ snapshots: dependencies: typescript: 4.9.5 - ts-jest@29.4.6(@babel/core@7.28.4)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.4))(jest-util@30.2.0)(jest@30.2.0(@types/node@25.0.3))(typescript@4.9.5): + ts-jest@29.4.6(@babel/core@7.28.4)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.4))(jest-util@30.2.0)(jest@30.2.0(@types/node@25.1.0))(typescript@4.9.5): dependencies: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 handlebars: 4.7.8 - jest: 30.2.0(@types/node@25.0.3) + jest: 30.2.0(@types/node@25.1.0) json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -20169,34 +20133,34 @@ snapshots: vary@1.1.2: {} - vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1)): + vite-plugin-eslint@1.8.1(eslint@8.57.1)(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1)): dependencies: '@rollup/pluginutils': 4.2.1 '@types/eslint': 8.44.3 eslint: 8.57.1 rollup: 2.79.2 - vite: 4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1) + vite: 4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1) - vite-plugin-stylelint@5.3.1(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1)): + vite-plugin-stylelint@5.3.1(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1)): dependencies: '@rollup/pluginutils': 5.1.0(rollup@3.29.5) chokidar: 3.6.0 debug: 4.4.1 stylelint: 15.11.0(typescript@4.9.5) - vite: 4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1) + vite: 4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1) optionalDependencies: postcss: 8.4.39 rollup: 3.29.5 transitivePeerDependencies: - supports-color - vite@4.5.3(@types/node@25.0.3)(sass@1.32.13)(terser@5.44.1): + vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1): dependencies: esbuild: 0.18.20 postcss: 8.5.6 rollup: 3.29.5 optionalDependencies: - '@types/node': 25.0.3 + '@types/node': 25.1.0 fsevents: 2.3.3 sass: 1.32.13 terser: 5.44.1 From d5c7a18257012b2abe9ad65ab2418b43ab827f40 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:04:16 +0000 Subject: [PATCH 012/128] fix(deps): bump github.com/lib/pq from 1.10.9 to 1.11.1 in /api Bumps [github.com/lib/pq](https://github.com/lib/pq) from 1.10.9 to 1.11.1. - [Release notes](https://github.com/lib/pq/releases) - [Changelog](https://github.com/lib/pq/blob/master/CHANGELOG.md) - [Commits](https://github.com/lib/pq/compare/v1.10.9...v1.11.1) --- updated-dependencies: - dependency-name: github.com/lib/pq dependency-version: 1.11.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- api/go.mod | 2 +- api/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/go.mod b/api/go.mod index a798964a..f0ec021c 100644 --- a/api/go.mod +++ b/api/go.mod @@ -31,7 +31,7 @@ require ( github.com/joho/godotenv v1.5.1 github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible github.com/jszwec/csvutil v1.10.0 - github.com/lib/pq v1.10.9 + github.com/lib/pq v1.11.1 github.com/matcornic/hermes v1.3.0 github.com/nyaruka/phonenumbers v1.6.7 github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 diff --git a/api/go.sum b/api/go.sum index d1685d6c..2da82b38 100644 --- a/api/go.sum +++ b/api/go.sum @@ -234,8 +234,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= -github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.11.1 h1:wuChtj2hfsGmmx3nf1m7xC2XpK6OtelS2shMY+bGMtI= +github.com/lib/pq v1.11.1/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= github.com/matcornic/hermes v1.3.0 h1:k6rih7zpUgfIF/57F3WeBi9n68XkvhC/z8eQTRIsQqc= github.com/matcornic/hermes v1.3.0/go.mod h1:X3MXWWBHjKSfgQl0xjv+NQTAGWSiNr/fZTlhAEQJ63Q= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= From af39f698bb3bd53d7f10414ce12a4dd4a61ac605 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:04:40 +0000 Subject: [PATCH 013/128] fix(deps): bump google.golang.org/api from 0.258.0 to 0.264.0 in /api Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.258.0 to 0.264.0. - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.258.0...v0.264.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-version: 0.264.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- api/go.mod | 28 ++++++++++++------------- api/go.sum | 60 +++++++++++++++++++++++++++--------------------------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/api/go.mod b/api/go.mod index a798964a..99f1b3af 100644 --- a/api/go.mod +++ b/api/go.mod @@ -51,7 +51,7 @@ require ( go.opentelemetry.io/otel/sdk v1.39.0 go.opentelemetry.io/otel/sdk/metric v1.39.0 go.opentelemetry.io/otel/trace v1.39.0 - google.golang.org/api v0.258.0 + google.golang.org/api v0.264.0 google.golang.org/protobuf v1.36.11 gorm.io/driver/postgres v1.6.0 gorm.io/gorm v1.31.1 @@ -61,10 +61,10 @@ require ( require ( cel.dev/expr v0.24.0 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.17.0 // indirect + cloud.google.com/go/auth v0.18.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/firestore v1.19.0 // indirect + cloud.google.com/go/firestore v1.20.0 // indirect cloud.google.com/go/iam v1.5.3 // indirect cloud.google.com/go/longrunning v0.7.0 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect @@ -110,8 +110,8 @@ require ( github.com/go-sql-driver/mysql v1.9.3 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect - github.com/googleapis/gax-go/v2 v2.15.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.11 // indirect + github.com/googleapis/gax-go/v2 v2.16.0 // indirect github.com/gorilla/css v1.0.1 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect @@ -171,21 +171,21 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.46.0 // indirect + golang.org/x/crypto v0.47.0 // indirect golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b // indirect - golang.org/x/mod v0.30.0 // indirect - golang.org/x/net v0.48.0 // indirect + golang.org/x/mod v0.31.0 // indirect + golang.org/x/net v0.49.0 // indirect golang.org/x/oauth2 v0.34.0 // indirect golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.39.0 // indirect - golang.org/x/text v0.32.0 // indirect + golang.org/x/sys v0.40.0 // indirect + golang.org/x/text v0.33.0 // indirect golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.39.0 // indirect + golang.org/x/tools v0.40.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20251014184007-4626949a642f // indirect + google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2 // indirect - google.golang.org/grpc v1.77.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d // indirect + google.golang.org/grpc v1.78.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gorm.io/driver/clickhouse v0.7.0 // indirect gorm.io/driver/mysql v1.6.0 // indirect diff --git a/api/go.sum b/api/go.sum index d1685d6c..c855060a 100644 --- a/api/go.sum +++ b/api/go.sum @@ -4,20 +4,20 @@ cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.17.0 h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4= -cloud.google.com/go/auth v0.17.0/go.mod h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ= +cloud.google.com/go/auth v0.18.1 h1:IwTEx92GFUo2pJ6Qea0EU3zYvKnTAeRCODxfA/G5UWs= +cloud.google.com/go/auth v0.18.1/go.mod h1:GfTYoS9G3CWpRA3Va9doKN9mjPGRS+v41jmZAhBzbrA= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/cloudtasks v1.13.7 h1:H2v8GEolNtMFfYzUpZBaZbydqU7drpyo99GtAgA+m4I= cloud.google.com/go/cloudtasks v1.13.7/go.mod h1:H0TThOUG+Ml34e2+ZtW6k6nt4i9KuH3nYAJ5mxh7OM4= 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/firestore v1.19.0 h1:E3FiRsWfZKwZ6W+Lsp1YqTzZ9H6jP+QsKW40KR21C8I= -cloud.google.com/go/firestore v1.19.0/go.mod h1:jqu4yKdBmDN5srneWzx3HlKrHFWFdlkgjgQ6BKIOFQo= +cloud.google.com/go/firestore v1.20.0 h1:JLlT12QP0fM2SJirKVyu2spBCO8leElaW0OOtPm6HEo= +cloud.google.com/go/firestore v1.20.0/go.mod h1:jqu4yKdBmDN5srneWzx3HlKrHFWFdlkgjgQ6BKIOFQo= cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= -cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= -cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= +cloud.google.com/go/logging v1.13.1 h1:O7LvmO0kGLaHY/gq8cV7T0dyp6zJhYAOtZPX4TF3QtY= +cloud.google.com/go/logging v1.13.1/go.mod h1:XAQkfkMBxQRjQek96WLPNze7vsOmay9H5PqfsNYDqvw= cloud.google.com/go/longrunning v0.7.0 h1:FV0+SYF1RIj59gyoWDRi45GiYUMM3K1qO51qoboQT1E= cloud.google.com/go/longrunning v0.7.0/go.mod h1:ySn2yXmjbK9Ba0zsQqunhDkYi0+9rlXIwnoAf+h+TPY= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= @@ -176,10 +176,10 @@ github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= 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= -github.com/googleapis/enterprise-certificate-proxy v0.3.7 h1:zrn2Ee/nWmHulBx5sAVrGgAa0f2/R35S4DJwfFaUPFQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.7/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= -github.com/googleapis/gax-go/v2 v2.15.0 h1:SyjDc1mGgZU5LncH8gimWo9lW1DtIfPibOG81vgd/bo= -github.com/googleapis/gax-go/v2 v2.15.0/go.mod h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc= +github.com/googleapis/enterprise-certificate-proxy v0.3.11 h1:vAe81Msw+8tKUxi2Dqh/NZMz7475yUvmRIkXr4oN2ao= +github.com/googleapis/enterprise-certificate-proxy v0.3.11/go.mod h1:RFV7MUdlb7AgEq2v7FmMCfeSMCllAzWxFgRdusoGks8= +github.com/googleapis/gax-go/v2 v2.16.0 h1:iHbQmKLLZrexmb0OSsNGTeSTS0HO4YvFOG8g5E4Zd0Y= +github.com/googleapis/gax-go/v2 v2.16.0/go.mod h1:o1vfQjjNZn4+dPnRdl/4ZD7S9414Y4xA+a/6Icj6l14= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= @@ -413,8 +413,8 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -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.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= +golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b h1:18qgiDvlvH7kk8Ioa8Ov+K6xCi0GMvmGfGW0sgd/SYA= golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ= @@ -426,8 +426,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -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.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI= +golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -441,8 +441,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= -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.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= +golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= 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-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -473,8 +473,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -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/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= 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= @@ -495,8 +495,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -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.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= +golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -507,26 +507,26 @@ 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.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -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.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA= +golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc= 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= -google.golang.org/api v0.258.0 h1:IKo1j5FBlN74fe5isA2PVozN3Y5pwNKriEgAXPOkDAc= -google.golang.org/api v0.258.0/go.mod h1:qhOMTQEZ6lUps63ZNq9jhODswwjkjYYguA7fA3TBFww= +google.golang.org/api v0.264.0 h1:+Fo3DQXBK8gLdf8rFZ3uLu39JpOnhvzJrLMQSoSYZJM= +google.golang.org/api v0.264.0/go.mod h1:fAU1xtNNisHgOF5JooAs8rRaTkl2rT3uaoNGo9NS3R8= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20251014184007-4626949a642f h1:vLd1CJuJOUgV6qijD7KT5Y2ZtC97ll4dxjTUappMnbo= -google.golang.org/genproto v0.0.0-20251014184007-4626949a642f/go.mod h1:PI3KrSadr00yqfv6UDvgZGFsmLqeRIwt8x4p5Oo7CdM= +google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 h1:GvESR9BIyHUahIb0NcTum6itIWtdoglGX+rnGxm2934= +google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:yJ2HH4EHEDTd3JiLmhds6NkJ17ITVYOdV3m3VKOnws0= 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-20251213004720-97cd9d5aeac2 h1:2I6GHUeJ/4shcDpoUlLs/2WPnhg7yJwvXtqcMJt9liA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251213004720-97cd9d5aeac2/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= -google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= -google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d h1:xXzuihhT3gL/ntduUZwHECzAn57E8dA6l8SOtYWdD8Q= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= +google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= From d4d8d4386049407713a3a96fa6c103aa33805afe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:04:46 +0000 Subject: [PATCH 014/128] fix(deps): bump github.com/redis/go-redis/extra/redisotel/v9 in /api Bumps [github.com/redis/go-redis/extra/redisotel/v9](https://github.com/redis/go-redis) from 9.17.2 to 9.17.3. - [Release notes](https://github.com/redis/go-redis/releases) - [Changelog](https://github.com/redis/go-redis/blob/v9.17.3/RELEASE-NOTES.md) - [Commits](https://github.com/redis/go-redis/compare/v9.17.2...v9.17.3) --- updated-dependencies: - dependency-name: github.com/redis/go-redis/extra/redisotel/v9 dependency-version: 9.17.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- api/go.mod | 6 +++--- api/go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/api/go.mod b/api/go.mod index a798964a..3d8f5ac3 100644 --- a/api/go.mod +++ b/api/go.mod @@ -38,8 +38,8 @@ require ( github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 github.com/pusher/pusher-http-go/v5 v5.1.1 - github.com/redis/go-redis/extra/redisotel/v9 v9.17.2 - github.com/redis/go-redis/v9 v9.17.2 + github.com/redis/go-redis/extra/redisotel/v9 v9.17.3 + github.com/redis/go-redis/v9 v9.17.3 github.com/rs/zerolog v1.34.0 github.com/stretchr/testify v1.11.1 github.com/swaggo/swag v1.16.6 @@ -138,7 +138,7 @@ require ( github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/redis/go-redis/extra/rediscmd/v9 v9.17.2 // indirect + github.com/redis/go-redis/extra/rediscmd/v9 v9.17.3 // indirect github.com/richardlehane/mscfb v1.0.4 // indirect github.com/richardlehane/msoleps v1.0.4 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect diff --git a/api/go.sum b/api/go.sum index d1685d6c..1764336a 100644 --- a/api/go.sum +++ b/api/go.sum @@ -282,12 +282,12 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pusher/pusher-http-go/v5 v5.1.1 h1:ZLUGdLA8yXMvByafIkS47nvuXOHrYmlh4bsQvuZnYVQ= github.com/pusher/pusher-http-go/v5 v5.1.1/go.mod h1:Ibji4SGoUDtOy7CVRhCiEpgy+n5Xv6hSL/QqYOhmWW8= -github.com/redis/go-redis/extra/rediscmd/v9 v9.17.2 h1:KYWnHK9pwzOUo3sNJlNmzRwZ5mw7opugn8njtGThKNg= -github.com/redis/go-redis/extra/rediscmd/v9 v9.17.2/go.mod h1:wsfMQVl/GFYD9Gx/tlxurlTtvHkZRAt8j1qi27eIlTk= -github.com/redis/go-redis/extra/redisotel/v9 v9.17.2 h1:wthFPRW3Y50CknMrjjJoYwXUFR4U7hMVJCMeLzDI8s4= -github.com/redis/go-redis/extra/redisotel/v9 v9.17.2/go.mod h1:iqfQX7U2o8MWSl8W+Ah8KqbQyi/UoR/MQNgvaUyA1wc= -github.com/redis/go-redis/v9 v9.17.2 h1:P2EGsA4qVIM3Pp+aPocCJ7DguDHhqrXNhVcEp4ViluI= -github.com/redis/go-redis/v9 v9.17.2/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= +github.com/redis/go-redis/extra/rediscmd/v9 v9.17.3 h1:v9RNP5ynWkruvzscrIoDyyv20c9YeyVn12L9nYnaexw= +github.com/redis/go-redis/extra/rediscmd/v9 v9.17.3/go.mod h1:gdthSemCkR3WxTmzV2XxYIxClunkUJZAhL0zPHaB0Ww= +github.com/redis/go-redis/extra/redisotel/v9 v9.17.3 h1:bF0e3fV7PL0knd1UHDtMud8wA7CZt3RSWtyTMhpnWd8= +github.com/redis/go-redis/extra/redisotel/v9 v9.17.3/go.mod h1:gR39sPK/dJZlqgIA9Nm4JFHcQJPyhsISBLj708nrD4w= +github.com/redis/go-redis/v9 v9.17.3 h1:fN29NdNrE17KttK5Ndf20buqfDZwGNgoUr9qjl1DQx4= +github.com/redis/go-redis/v9 v9.17.3/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= From a549ef30205f432a43ad922d252ad5257d207b09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:04:53 +0000 Subject: [PATCH 015/128] fix(deps): bump github.com/nyaruka/phonenumbers in /api Bumps [github.com/nyaruka/phonenumbers](https://github.com/nyaruka/phonenumbers) from 1.6.7 to 1.6.8. - [Release notes](https://github.com/nyaruka/phonenumbers/releases) - [Changelog](https://github.com/nyaruka/phonenumbers/blob/main/CHANGELOG.md) - [Commits](https://github.com/nyaruka/phonenumbers/compare/v1.6.7...v1.6.8) --- updated-dependencies: - dependency-name: github.com/nyaruka/phonenumbers dependency-version: 1.6.8 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- api/go.mod | 2 +- api/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/go.mod b/api/go.mod index a798964a..641a1305 100644 --- a/api/go.mod +++ b/api/go.mod @@ -33,7 +33,7 @@ require ( github.com/jszwec/csvutil v1.10.0 github.com/lib/pq v1.10.9 github.com/matcornic/hermes v1.3.0 - github.com/nyaruka/phonenumbers v1.6.7 + github.com/nyaruka/phonenumbers v1.6.8 github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 diff --git a/api/go.sum b/api/go.sum index d1685d6c..e99bb19d 100644 --- a/api/go.sum +++ b/api/go.sum @@ -260,8 +260,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/nyaruka/phonenumbers v1.6.7 h1:WmebT8TNEzNaui5QlrGqbccRC6dZkEkYc+MGQoILSSo= -github.com/nyaruka/phonenumbers v1.6.7/go.mod h1:7gjs+Lchqm49adhAKB5cdcng5ZXgt6x7Jgvi0ZorUtU= +github.com/nyaruka/phonenumbers v1.6.8 h1:k7HAJ/LeBkXE0vfbajITzTCZD0z0j+epdBNx43yTygk= +github.com/nyaruka/phonenumbers v1.6.8/go.mod h1:IUu45lj2bSeYXQuxDyyuzOrdV10tyRa1YSsfH8EKN5c= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 h1:nRlQD0u1871kaznCnn1EvYiMbum36v7hw1DLPEjds4o= From f8bd1df390e8a218421eda44ca87f5ec23e0c353 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:06:06 +0000 Subject: [PATCH 016/128] chore(deps-dev): bump prettier from 3.7.4 to 3.8.1 in /web Bumps [prettier](https://github.com/prettier/prettier) from 3.7.4 to 3.8.1. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.7.4...3.8.1) --- updated-dependencies: - dependency-name: prettier dependency-version: 3.8.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- web/package.json | 2 +- web/pnpm-lock.yaml | 37 +++++++++++++++++++------------------ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/web/package.json b/web/package.json index dd63ade1..d310ee53 100644 --- a/web/package.json +++ b/web/package.json @@ -77,7 +77,7 @@ "lint-staged": "^16.1.4", "node-fetch-native": "^1.6.7", "postcss-html": "^1.7.0", - "prettier": "3.7.4", + "prettier": "3.8.1", "stylelint": "^15.11.0", "stylelint-config-prettier": "^9.0.5", "stylelint-config-recommended-vue": "^1.5.0", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index b2b84a8c..64317143 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 1.4.2 '@nuxtjs/firebase': specifier: ^8.2.2 - version: 8.2.2(@firebase/app-types@0.9.2)(firebase@10.14.1)(nuxt@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.7.4)(typescript@4.9.5)(vue@2.7.16)) + version: 8.2.2(@firebase/app-types@0.9.2)(firebase@10.14.1)(nuxt@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.8.1)(typescript@4.9.5)(vue@2.7.16)) '@nuxtjs/sitemap': specifier: ^2.4.0 version: 2.4.0 @@ -52,7 +52,7 @@ importers: version: 2.30.1 nuxt: specifier: ^2.18.1 - version: 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.7.4)(typescript@4.9.5)(vue@2.7.16) + version: 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.8.1)(typescript@4.9.5)(vue@2.7.16) nuxt-highlightjs: specifier: ^1.0.3 version: 1.0.3 @@ -169,8 +169,8 @@ importers: specifier: ^1.7.0 version: 1.7.0 prettier: - specifier: 3.7.4 - version: 3.7.4 + specifier: 3.8.1 + version: 3.8.1 stylelint: specifier: ^15.11.0 version: 15.11.0(typescript@4.9.5) @@ -7425,8 +7425,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.7.4: - resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} + prettier@3.8.1: + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} engines: {node: '>=14'} hasBin: true @@ -8337,6 +8337,7 @@ packages: tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me teeny-request@7.2.0: resolution: {integrity: sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==} @@ -11691,12 +11692,12 @@ snapshots: - supports-color - vue - '@nuxt/builder@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.7.4)(typescript@4.9.5)(vue@2.7.16)': + '@nuxt/builder@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.8.1)(typescript@4.9.5)(vue@2.7.16)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/utils': 2.18.1 '@nuxt/vue-app': 2.18.1 - '@nuxt/webpack': 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.7.4)(typescript@4.9.5)(vue@2.7.16) + '@nuxt/webpack': 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.8.1)(typescript@4.9.5)(vue@2.7.16) chalk: 4.1.2 chokidar: 3.6.0 consola: 3.2.3 @@ -12082,7 +12083,7 @@ snapshots: vue-meta: 2.4.0 vue-server-renderer: 2.7.16 - '@nuxt/webpack@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.7.4)(typescript@4.9.5)(vue@2.7.16)': + '@nuxt/webpack@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.8.1)(typescript@4.9.5)(vue@2.7.16)': dependencies: '@babel/core': 7.24.7 '@nuxt/babel-preset-app': 2.18.1(vue@2.7.16) @@ -12122,7 +12123,7 @@ snapshots: ufo: 1.6.1 upath: 2.0.1 url-loader: 4.1.1(file-loader@6.2.0(webpack@5.104.1))(webpack@4.47.0) - vue-loader: 15.11.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(cache-loader@4.1.0(webpack@4.47.0))(css-loader@5.2.7(webpack@5.104.1))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.7.4)(vue-template-compiler@2.7.16)(webpack@4.47.0) + vue-loader: 15.11.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(cache-loader@4.1.0(webpack@4.47.0))(css-loader@5.2.7(webpack@5.104.1))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.8.1)(vue-template-compiler@2.7.16)(webpack@4.47.0) vue-style-loader: 4.1.3 vue-template-compiler: 2.7.16 watchpack: 2.5.0 @@ -12247,11 +12248,11 @@ snapshots: - vite - webpack - '@nuxtjs/firebase@8.2.2(@firebase/app-types@0.9.2)(firebase@10.14.1)(nuxt@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.7.4)(typescript@4.9.5)(vue@2.7.16))': + '@nuxtjs/firebase@8.2.2(@firebase/app-types@0.9.2)(firebase@10.14.1)(nuxt@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.8.1)(typescript@4.9.5)(vue@2.7.16))': dependencies: consola: 2.15.3 firebase: 10.14.1 - nuxt: 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.7.4)(typescript@4.9.5)(vue@2.7.16) + nuxt: 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.8.1)(typescript@4.9.5)(vue@2.7.16) optionalDependencies: firebase-admin: 10.3.0(@firebase/app-types@0.9.2) transitivePeerDependencies: @@ -17585,10 +17586,10 @@ snapshots: dependencies: highlight.js: 11.11.1 - nuxt@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.7.4)(typescript@4.9.5)(vue@2.7.16): + nuxt@2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(consola@3.2.3)(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.8.1)(typescript@4.9.5)(vue@2.7.16): dependencies: '@nuxt/babel-preset-app': 2.18.1(vue@2.7.16) - '@nuxt/builder': 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.7.4)(typescript@4.9.5)(vue@2.7.16) + '@nuxt/builder': 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.8.1)(typescript@4.9.5)(vue@2.7.16) '@nuxt/cli': 2.18.1 '@nuxt/components': 2.2.1(consola@3.2.3) '@nuxt/config': 2.18.1 @@ -17601,7 +17602,7 @@ snapshots: '@nuxt/utils': 2.18.1 '@nuxt/vue-app': 2.18.1 '@nuxt/vue-renderer': 2.18.1 - '@nuxt/webpack': 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.7.4)(typescript@4.9.5)(vue@2.7.16) + '@nuxt/webpack': 2.18.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(prettier@3.8.1)(typescript@4.9.5)(vue@2.7.16) transitivePeerDependencies: - '@vue/compiler-sfc' - arc-templates @@ -18607,7 +18608,7 @@ snapshots: prettier@2.8.8: optional: true - prettier@3.7.4: {} + prettier@3.8.1: {} pretty-bytes@5.6.0: {} @@ -20265,7 +20266,7 @@ snapshots: transitivePeerDependencies: - supports-color - vue-loader@15.11.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(cache-loader@4.1.0(webpack@4.47.0))(css-loader@5.2.7(webpack@5.104.1))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.7.4)(vue-template-compiler@2.7.16)(webpack@4.47.0): + vue-loader@15.11.1(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(cache-loader@4.1.0(webpack@4.47.0))(css-loader@5.2.7(webpack@5.104.1))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21)(prettier@3.8.1)(vue-template-compiler@2.7.16)(webpack@4.47.0): dependencies: '@vue/component-compiler-utils': 3.3.0(babel-core@7.0.0-bridge.0(@babel/core@7.28.4))(ejs@3.1.10)(handlebars@4.7.8)(lodash@4.17.21) css-loader: 5.2.7(webpack@5.104.1) @@ -20276,7 +20277,7 @@ snapshots: webpack: 4.47.0 optionalDependencies: cache-loader: 4.1.0(webpack@4.47.0) - prettier: 3.7.4 + prettier: 3.8.1 vue-template-compiler: 2.7.16 transitivePeerDependencies: - arc-templates From 1578a5544b986c764286cdb26018cbfe11269ba3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:07:07 +0000 Subject: [PATCH 017/128] fix(deps): bump chart.js from 4.5.0 to 4.5.1 in /web Bumps [chart.js](https://github.com/chartjs/Chart.js) from 4.5.0 to 4.5.1. - [Release notes](https://github.com/chartjs/Chart.js/releases) - [Commits](https://github.com/chartjs/Chart.js/compare/v4.5.0...v4.5.1) --- updated-dependencies: - dependency-name: chart.js dependency-version: 4.5.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- web/package.json | 2 +- web/pnpm-lock.yaml | 23 ++++++++++++----------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/web/package.json b/web/package.json index dd63ade1..04279585 100644 --- a/web/package.json +++ b/web/package.json @@ -26,7 +26,7 @@ "@nuxtjs/dotenv": "^1.4.2", "@nuxtjs/firebase": "^8.2.2", "@nuxtjs/sitemap": "^2.4.0", - "chart.js": "^4.5.0", + "chart.js": "^4.5.1", "chartjs-adapter-moment": "^1.0.1", "core-js": "^3.47.0", "date-fns": "^2.30.0", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index b2b84a8c..0b743755 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -21,11 +21,11 @@ importers: specifier: ^2.4.0 version: 2.4.0 chart.js: - specifier: ^4.5.0 - version: 4.5.0 + specifier: ^4.5.1 + version: 4.5.1 chartjs-adapter-moment: specifier: ^1.0.1 - version: 1.0.1(chart.js@4.5.0)(moment@2.30.1) + version: 1.0.1(chart.js@4.5.1)(moment@2.30.1) core-js: specifier: ^3.47.0 version: 3.47.0 @@ -70,7 +70,7 @@ importers: version: 2.7.16 vue-chartjs: specifier: ^5.3.3 - version: 5.3.3(chart.js@4.5.0)(vue@2.7.16) + version: 5.3.3(chart.js@4.5.1)(vue@2.7.16) vue-class-component: specifier: ^7.2.6 version: 7.2.6(vue@2.7.16) @@ -3336,8 +3336,8 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - chart.js@4.5.0: - resolution: {integrity: sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==} + chart.js@4.5.1: + resolution: {integrity: sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==} engines: {pnpm: '>=8'} chartjs-adapter-moment@1.0.1: @@ -8337,6 +8337,7 @@ packages: tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me teeny-request@7.2.0: resolution: {integrity: sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==} @@ -13838,13 +13839,13 @@ snapshots: chardet@0.7.0: {} - chart.js@4.5.0: + chart.js@4.5.1: dependencies: '@kurkle/color': 0.3.4 - chartjs-adapter-moment@1.0.1(chart.js@4.5.0)(moment@2.30.1): + chartjs-adapter-moment@1.0.1(chart.js@4.5.1)(moment@2.30.1): dependencies: - chart.js: 4.5.0 + chart.js: 4.5.1 moment: 2.30.1 chokidar@2.1.8: @@ -20203,9 +20204,9 @@ snapshots: vm-browserify@1.1.2: {} - vue-chartjs@5.3.3(chart.js@4.5.0)(vue@2.7.16): + vue-chartjs@5.3.3(chart.js@4.5.1)(vue@2.7.16): dependencies: - chart.js: 4.5.0 + chart.js: 4.5.1 vue: 2.7.16 vue-class-component@7.2.6(vue@2.7.16): From 88753ca998503438554caed1546303e7f1d36333 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:08:28 +0000 Subject: [PATCH 018/128] fix(deps): bump libphonenumber-js from 1.12.33 to 1.12.36 in /web Bumps [libphonenumber-js](https://gitlab.com/catamphetamine/libphonenumber-js) from 1.12.33 to 1.12.36. - [Changelog](https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/CHANGELOG.md) - [Commits](https://gitlab.com/catamphetamine/libphonenumber-js/compare/v1.12.33...v1.12.36) --- updated-dependencies: - dependency-name: libphonenumber-js dependency-version: 1.12.36 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- web/package.json | 2 +- web/pnpm-lock.yaml | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/web/package.json b/web/package.json index dd63ade1..8d755e8a 100644 --- a/web/package.json +++ b/web/package.json @@ -34,7 +34,7 @@ "firebase": "^10.14.1", "firebaseui": "^6.1.0", "jest-environment-jsdom": "^30.2.0", - "libphonenumber-js": "^1.12.33", + "libphonenumber-js": "^1.12.36", "moment": "^2.30.1", "nuxt": "^2.18.1", "nuxt-highlightjs": "^1.0.3", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index b2b84a8c..476f3468 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -45,8 +45,8 @@ importers: specifier: ^30.2.0 version: 30.2.0 libphonenumber-js: - specifier: ^1.12.33 - version: 1.12.33 + specifier: ^1.12.36 + version: 1.12.36 moment: specifier: ^2.30.1 version: 2.30.1 @@ -5932,8 +5932,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - libphonenumber-js@1.12.33: - resolution: {integrity: sha512-r9kw4OA6oDO4dPXkOrXTkArQAafIKAU71hChInV4FxZ69dxCfbwQGDPzqR5/vea94wU705/3AZroEbSoeVWrQw==} + libphonenumber-js@1.12.36: + resolution: {integrity: sha512-woWhKMAVx1fzzUnMCyOzglgSgf6/AFHLASdOBcchYCyvWSGWt12imw3iu2hdI5d4dGZRsNWAmWiz37sDKUPaRQ==} lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} @@ -8337,6 +8337,7 @@ packages: tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me teeny-request@7.2.0: resolution: {integrity: sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==} @@ -16959,7 +16960,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - libphonenumber-js@1.12.33: {} + libphonenumber-js@1.12.36: {} lilconfig@2.1.0: {} From c4922ebca9d635c1e4d6b3e53b239ad135605b34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:08:58 +0000 Subject: [PATCH 019/128] fix(deps): bump core-js from 3.47.0 to 3.48.0 in /web Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.47.0 to 3.48.0. - [Release notes](https://github.com/zloirock/core-js/releases) - [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md) - [Commits](https://github.com/zloirock/core-js/commits/v3.48.0/packages/core-js) --- updated-dependencies: - dependency-name: core-js dependency-version: 3.48.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- web/package.json | 2 +- web/pnpm-lock.yaml | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/web/package.json b/web/package.json index dd63ade1..0e9a42ed 100644 --- a/web/package.json +++ b/web/package.json @@ -28,7 +28,7 @@ "@nuxtjs/sitemap": "^2.4.0", "chart.js": "^4.5.0", "chartjs-adapter-moment": "^1.0.1", - "core-js": "^3.47.0", + "core-js": "^3.48.0", "date-fns": "^2.30.0", "dotenv": "^17.2.3", "firebase": "^10.14.1", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index b2b84a8c..724a79ed 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: ^1.0.1 version: 1.0.1(chart.js@4.5.0)(moment@2.30.1) core-js: - specifier: ^3.47.0 - version: 3.47.0 + specifier: ^3.48.0 + version: 3.48.0 date-fns: specifier: ^2.30.0 version: 2.30.0 @@ -3759,8 +3759,8 @@ packages: resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. - core-js@3.47.0: - resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==} + core-js@3.48.0: + resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -8337,6 +8337,7 @@ packages: tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me teeny-request@7.2.0: resolution: {integrity: sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==} @@ -11684,7 +11685,7 @@ snapshots: '@babel/preset-env': 7.24.7(@babel/core@7.24.7) '@babel/runtime': 7.24.7 '@vue/babel-preset-jsx': 1.4.0(@babel/core@7.24.7)(vue@2.7.16) - core-js: 3.47.0 + core-js: 3.48.0 core-js-compat: 3.37.1 regenerator-runtime: 0.14.1 transitivePeerDependencies: @@ -14134,7 +14135,7 @@ snapshots: core-js@2.6.12: {} - core-js@3.47.0: {} + core-js@3.48.0: {} core-util-is@1.0.3: {} From ff20dd5f4140926426a224f824e20124b8b4166b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:23:29 +0000 Subject: [PATCH 020/128] fix(deps): bump github.com/golang-jwt/jwt/v5 from 5.3.0 to 5.3.1 in /api Bumps [github.com/golang-jwt/jwt/v5](https://github.com/golang-jwt/jwt) from 5.3.0 to 5.3.1. - [Release notes](https://github.com/golang-jwt/jwt/releases) - [Commits](https://github.com/golang-jwt/jwt/compare/v5.3.0...v5.3.1) --- updated-dependencies: - dependency-name: github.com/golang-jwt/jwt/v5 dependency-version: 5.3.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- api/go.mod | 2 +- api/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/go.mod b/api/go.mod index 82d26c64..84b84443 100644 --- a/api/go.mod +++ b/api/go.mod @@ -22,7 +22,7 @@ require ( github.com/gofiber/contrib/otelfiber v1.0.10 github.com/gofiber/fiber/v2 v2.52.11 github.com/gofiber/swagger v1.1.1 - github.com/golang-jwt/jwt/v5 v5.3.0 + github.com/golang-jwt/jwt/v5 v5.3.1 github.com/google/uuid v1.6.0 github.com/hashicorp/go-retryablehttp v0.7.8 github.com/hirosassa/zerodriver v0.1.4 diff --git a/api/go.sum b/api/go.sum index c25980ec..426179ce 100644 --- a/api/go.sum +++ b/api/go.sum @@ -157,8 +157,8 @@ github.com/gofiber/swagger v1.1.1/go.mod h1:vtvY/sQAMc/lGTUCg0lqmBL7Ht9O7uzChpbv github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= -github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY= +github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= From 2efb6c88ecc83416c8010e669cf4b88410083590 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:23:34 +0000 Subject: [PATCH 021/128] fix(deps): bump github.com/dgraph-io/ristretto/v2 in /api Bumps [github.com/dgraph-io/ristretto/v2](https://github.com/dgraph-io/ristretto) from 2.3.0 to 2.4.0. - [Release notes](https://github.com/dgraph-io/ristretto/releases) - [Changelog](https://github.com/dgraph-io/ristretto/blob/main/CHANGELOG.md) - [Commits](https://github.com/dgraph-io/ristretto/compare/v2.3.0...v2.4.0) --- updated-dependencies: - dependency-name: github.com/dgraph-io/ristretto/v2 dependency-version: 2.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- api/go.mod | 2 +- api/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/go.mod b/api/go.mod index 82d26c64..72035cec 100644 --- a/api/go.mod +++ b/api/go.mod @@ -17,7 +17,7 @@ require ( github.com/cloudevents/sdk-go/v2 v2.16.2 github.com/cockroachdb/cockroach-go/v2 v2.4.3 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc - github.com/dgraph-io/ristretto/v2 v2.3.0 + github.com/dgraph-io/ristretto/v2 v2.4.0 github.com/dustin/go-humanize v1.0.1 github.com/gofiber/contrib/otelfiber v1.0.10 github.com/gofiber/fiber/v2 v2.52.11 diff --git a/api/go.sum b/api/go.sum index c25980ec..401dd69d 100644 --- a/api/go.sum +++ b/api/go.sum @@ -91,8 +91,8 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/ristretto/v2 v2.3.0 h1:qTQ38m7oIyd4GAed/QkUZyPFNMnvVWyazGXRwvOt5zk= -github.com/dgraph-io/ristretto/v2 v2.3.0/go.mod h1:gpoRV3VzrEY1a9dWAYV6T1U7YzfgttXdd/ZzL1s9OZM= +github.com/dgraph-io/ristretto/v2 v2.4.0 h1:I/w09yLjhdcVD2QV192UJcq8dPBaAJb9pOuMyNy0XlU= +github.com/dgraph-io/ristretto/v2 v2.4.0/go.mod h1:0KsrXtXvnv0EqnzyowllbVJB8yBonswa2lTCK2gGo9E= github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= From 9e31a45ad7d621e683f3ac7f1262e51947a0f993 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:25:08 +0000 Subject: [PATCH 022/128] fix(deps): bump github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric Bumps [github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric](https://github.com/GoogleCloudPlatform/opentelemetry-operations-go) from 0.54.0 to 0.55.0. - [Release notes](https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/releases) - [Commits](https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/compare/v0.54.0...v0.55.0) --- updated-dependencies: - dependency-name: github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric dependency-version: 0.55.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- api/go.mod | 2 +- api/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/go.mod b/api/go.mod index 5be47a0a..51120b96 100644 --- a/api/go.mod +++ b/api/go.mod @@ -7,7 +7,7 @@ toolchain go1.24.3 require ( cloud.google.com/go/cloudtasks v1.13.7 firebase.google.com/go v3.13.0+incompatible - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.31.0 github.com/NdoleStudio/go-otelroundtripper v0.0.13 github.com/NdoleStudio/lemonsqueezy-go v1.3.1 diff --git a/api/go.sum b/api/go.sum index ea13ba63..f9625a5f 100644 --- a/api/go.sum +++ b/api/go.sum @@ -38,8 +38,8 @@ github.com/ClickHouse/clickhouse-go/v2 v2.40.3 h1:46jB4kKwVDUOnECpStKMVXxvR0Cg9z github.com/ClickHouse/clickhouse-go/v2 v2.40.3/go.mod h1:qO0HwvjCnTB4BPL/k6EE3l4d9f/uF+aoimAhJX70eKA= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0 h1:lhhYARPUu3LmHysQ/igznQphfzynnqI3D75oUyw1HXk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.54.0/go.mod h1:l9rva3ApbBpEJxSNYnwT9N4CDLrWgtq3u8736C5hyJw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 h1:UnDZ/zFfG1JhH/DqxIZYU/1CUAlTUScoXD/LcM2Ykk8= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0/go.mod h1:IA1C1U7jO/ENqm/vhi7V9YYpBsp+IMyqNrEN94N7tVc= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.31.0 h1:xQMhkBXPOKe/GzC6TctwlK2aNF+9k5VwFgdE83rBK2Y= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.31.0/go.mod h1:VLoD5cAsRQXsAFXpOZrrTGzbuMsntlspIZno4xor5Zg= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0 h1:7t/qx5Ost0s0wbA/VDrByOooURhp+ikYwv20i9Y07TQ= From 728d981d1973381afb82f5479a8233a96b3a4328 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:25:49 +0000 Subject: [PATCH 023/128] chore(deps-dev): bump @commitlint/cli from 20.2.0 to 20.4.0 in /web Bumps [@commitlint/cli](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/cli) from 20.2.0 to 20.4.0. - [Release notes](https://github.com/conventional-changelog/commitlint/releases) - [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/cli/CHANGELOG.md) - [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.4.0/@commitlint/cli) --- updated-dependencies: - dependency-name: "@commitlint/cli" dependency-version: 20.4.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- web/package.json | 2 +- web/pnpm-lock.yaml | 314 ++++++++++++++++----------------------------- 2 files changed, 109 insertions(+), 207 deletions(-) diff --git a/web/package.json b/web/package.json index fe3419b9..5deaf3c2 100644 --- a/web/package.json +++ b/web/package.json @@ -55,7 +55,7 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.28.5", - "@commitlint/cli": "^20.2.0", + "@commitlint/cli": "^20.4.0", "@commitlint/config-conventional": "^19.8.0", "@nuxt/types": "^2.18.1", "@nuxt/typescript-build": "^3.0.2", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 6fe39db6..3f1bbc0c 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -103,8 +103,8 @@ importers: specifier: ^7.28.5 version: 7.28.5(@babel/core@7.28.4)(eslint@8.57.1) '@commitlint/cli': - specifier: ^20.2.0 - version: 20.2.0(@types/node@25.1.0)(typescript@4.9.5) + specifier: ^20.4.0 + version: 20.4.0(@types/node@25.1.0)(typescript@4.9.5) '@commitlint/config-conventional': specifier: ^19.8.0 version: 19.8.0 @@ -1012,8 +1012,8 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@commitlint/cli@20.2.0': - resolution: {integrity: sha512-l37HkrPZ2DZy26rKiTUvdq/LZtlMcxz+PeLv9dzK9NzoFGuJdOQyYU7IEkEQj0pO++uYue89wzOpZ0hcTtoqUA==} + '@commitlint/cli@20.4.0': + resolution: {integrity: sha512-2lqrFrYNxjKxgMqeYiO3zNM14XN9v72/5xIJyvdLw7sHEGlfg6sweW01PGNWiqZa6/AuZwsb0uzkgWJy6F4N2w==} engines: {node: '>=v18'} hasBin: true @@ -1021,68 +1021,68 @@ packages: resolution: {integrity: sha512-9I2kKJwcAPwMoAj38hwqFXG0CzS2Kj+SAByPUQ0SlHTfb7VUhYVmo7G2w2tBrqmOf7PFd6MpZ/a1GQJo8na8kw==} engines: {node: '>=v18'} - '@commitlint/config-validator@20.2.0': - resolution: {integrity: sha512-SQCBGsL9MFk8utWNSthdxd9iOD1pIVZSHxGBwYIGfd67RTjxqzFOSAYeQVXOu3IxRC3YrTOH37ThnTLjUlyF2w==} + '@commitlint/config-validator@20.4.0': + resolution: {integrity: sha512-zShmKTF+sqyNOfAE0vKcqnpvVpG0YX8F9G/ZIQHI2CoKyK+PSdladXMSns400aZ5/QZs+0fN75B//3Q5CHw++w==} engines: {node: '>=v18'} - '@commitlint/ensure@20.2.0': - resolution: {integrity: sha512-+8TgIGv89rOWyt3eC6lcR1H7hqChAKkpawytlq9P1i/HYugFRVqgoKJ8dhd89fMnlrQTLjA5E97/4sF09QwdoA==} + '@commitlint/ensure@20.4.0': + resolution: {integrity: sha512-F3qwnanJUisFWwh44GYYmMOxfgJL1FKV73FCB5zxo8pw1CHkxXadGfDfzNkN8B3iqgSGusDN2+oDH6upBmLszA==} engines: {node: '>=v18'} '@commitlint/execute-rule@20.0.0': resolution: {integrity: sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==} engines: {node: '>=v18'} - '@commitlint/format@20.2.0': - resolution: {integrity: sha512-PhNoLNhxpfIBlW/i90uZ3yG3hwSSYx7n4d9Yc+2FAorAHS0D9btYRK4ZZXX+Gm3W5tDtu911ow/eWRfcRVgNWg==} + '@commitlint/format@20.4.0': + resolution: {integrity: sha512-i3ki3WR0rgolFVX6r64poBHXM1t8qlFel1G1eCBvVgntE3fCJitmzSvH5JD/KVJN/snz6TfaX2CLdON7+s4WVQ==} engines: {node: '>=v18'} - '@commitlint/is-ignored@20.2.0': - resolution: {integrity: sha512-Lz0OGeZCo/QHUDLx5LmZc0EocwanneYJUM8z0bfWexArk62HKMLfLIodwXuKTO5y0s6ddXaTexrYHs7v96EOmw==} + '@commitlint/is-ignored@20.4.0': + resolution: {integrity: sha512-E8AHpedEfuf+lZatFvFiJXA4TtZgBZ10+A7HzFudaEmTPPE5o6MGswxbxUIGAciaHAFj/oTTmyFc6A5tcvxE3Q==} engines: {node: '>=v18'} - '@commitlint/lint@20.2.0': - resolution: {integrity: sha512-cQEEB+jlmyQbyiji/kmh8pUJSDeUmPiWq23kFV0EtW3eM+uAaMLMuoTMajbrtWYWQpPzOMDjYltQ8jxHeHgITg==} + '@commitlint/lint@20.4.0': + resolution: {integrity: sha512-W90YCbm5h3Yg+btF5/X+cxsY6vd/H3tsFt6U7WBmDQSkKV8NmitYg89zeoSQyYEiQCwAsH0dcA+99aQtLZiSnw==} engines: {node: '>=v18'} - '@commitlint/load@20.2.0': - resolution: {integrity: sha512-iAK2GaBM8sPFTSwtagI67HrLKHIUxQc2BgpgNc/UMNme6LfmtHpIxQoN1TbP+X1iz58jq32HL1GbrFTCzcMi6g==} + '@commitlint/load@20.4.0': + resolution: {integrity: sha512-Dauup/GfjwffBXRJUdlX/YRKfSVXsXZLnINXKz0VZkXdKDcaEILAi9oflHGbfydonJnJAbXEbF3nXPm9rm3G6A==} engines: {node: '>=v18'} - '@commitlint/message@20.0.0': - resolution: {integrity: sha512-gLX4YmKnZqSwkmSB9OckQUrI5VyXEYiv3J5JKZRxIp8jOQsWjZgHSG/OgEfMQBK9ibdclEdAyIPYggwXoFGXjQ==} + '@commitlint/message@20.4.0': + resolution: {integrity: sha512-B5lGtvHgiLAIsK5nLINzVW0bN5hXv+EW35sKhYHE8F7V9Uz1fR4tx3wt7mobA5UNhZKUNgB/+ldVMQE6IHZRyA==} engines: {node: '>=v18'} - '@commitlint/parse@20.2.0': - resolution: {integrity: sha512-LXStagGU1ivh07X7sM+hnEr4BvzFYn1iBJ6DRg2QsIN8lBfSzyvkUcVCDwok9Ia4PWiEgei5HQjju6xfJ1YaSQ==} + '@commitlint/parse@20.4.0': + resolution: {integrity: sha512-NcRkqo/QUnuc1RgxRCIKTqobKzF0BKJ8h3i1jRyeZ+SEy5rO9dPNOh4BqrFsSznb5mnwETYB7ph9tUcthNkwAQ==} engines: {node: '>=v18'} - '@commitlint/read@20.2.0': - resolution: {integrity: sha512-+SjF9mxm5JCbe+8grOpXCXMMRzAnE0WWijhhtasdrpJoAFJYd5UgRTj/oCq5W3HJTwbvTOsijEJ0SUGImECD7Q==} + '@commitlint/read@20.4.0': + resolution: {integrity: sha512-QfpFn6/I240ySEGv7YWqho4vxqtPpx40FS7kZZDjUJ+eHxu3azfhy7fFb5XzfTqVNp1hNoI3tEmiEPbDB44+cg==} engines: {node: '>=v18'} - '@commitlint/resolve-extends@20.2.0': - resolution: {integrity: sha512-KVoLDi9BEuqeq+G0wRABn4azLRiCC22/YHR2aCquwx6bzCHAIN8hMt3Nuf1VFxq/c8ai6s8qBxE8+ZD4HeFTlQ==} + '@commitlint/resolve-extends@20.4.0': + resolution: {integrity: sha512-ay1KM8q0t+/OnlpqXJ+7gEFQNlUtSU5Gxr8GEwnVf2TPN3+ywc5DzL3JCxmpucqxfHBTFwfRMXxPRRnR5Ki20g==} engines: {node: '>=v18'} - '@commitlint/rules@20.2.0': - resolution: {integrity: sha512-27rHGpeAjnYl/A+qUUiYDa7Yn1WIjof/dFJjYW4gA1Ug+LUGa1P0AexzGZ5NBxTbAlmDgaxSZkLLxtLVqtg8PQ==} + '@commitlint/rules@20.4.0': + resolution: {integrity: sha512-E+UoAA7WA4xrre9lDyX2vL4Df26I+vqMN4D8JoW/L2xE/VRDvn533/ibhgSlGYDltB9nm2S+1lti3PagEwO0ag==} engines: {node: '>=v18'} '@commitlint/to-lines@20.0.0': resolution: {integrity: sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==} engines: {node: '>=v18'} - '@commitlint/top-level@20.0.0': - resolution: {integrity: sha512-drXaPSP2EcopukrUXvUXmsQMu3Ey/FuJDc/5oiW4heoCfoE5BdLQyuc7veGeE3aoQaTVqZnh4D5WTWe2vefYKg==} + '@commitlint/top-level@20.4.0': + resolution: {integrity: sha512-NDzq8Q6jmFaIIBC/GG6n1OQEaHdmaAAYdrZRlMgW6glYWGZ+IeuXmiymDvQNXPc82mVxq2KiE3RVpcs+1OeDeA==} engines: {node: '>=v18'} '@commitlint/types@19.8.0': resolution: {integrity: sha512-LRjP623jPyf3Poyfb0ohMj8I3ORyBDOwXAgxxVPbSD0unJuW2mJWeiRfaQinjtccMqC5Wy1HOMfa4btKjbNxbg==} engines: {node: '>=v18'} - '@commitlint/types@20.2.0': - resolution: {integrity: sha512-KTy0OqRDLR5y/zZMnizyx09z/rPlPC/zKhYgH8o/q6PuAjoQAKlRfY4zzv0M64yybQ//6//4H1n14pxaLZfUnA==} + '@commitlint/types@20.4.0': + resolution: {integrity: sha512-aO5l99BQJ0X34ft8b0h7QFkQlqxC6e7ZPVmBKz13xM9O8obDaM1Cld4sQlJDXXU/VFuUzQ30mVtHjVz74TuStw==} engines: {node: '>=v18'} '@csstools/cascade-layer-name-parser@1.0.12': @@ -2282,9 +2282,6 @@ packages: '@types/conventional-commits-parser@5.0.1': resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} - '@types/conventional-commits-parser@5.0.2': - resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==} - '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -2761,10 +2758,6 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - abbrev@1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} @@ -3322,10 +3315,6 @@ packages: resolution: {integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -3721,17 +3710,17 @@ packages: constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - conventional-changelog-angular@7.0.0: - resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} - engines: {node: '>=16'} + conventional-changelog-angular@8.1.0: + resolution: {integrity: sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==} + engines: {node: '>=18'} conventional-changelog-conventionalcommits@7.0.2: resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} engines: {node: '>=16'} - conventional-commits-parser@5.0.0: - resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} - engines: {node: '>=16'} + conventional-commits-parser@6.2.1: + resolution: {integrity: sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==} + engines: {node: '>=18'} hasBin: true convert-source-map@2.0.0: @@ -4737,10 +4726,6 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} - firebase-admin@10.3.0: resolution: {integrity: sha512-A0wgMLEjyVyUE+heyMJYqHRkPVjpebhOYsa47RHdrTM4ltApcx8Tn86sUmjqxlfh09gNnILAm7a8q5+FmgBYpg==} engines: {node: '>=12.7.0'} @@ -5483,6 +5468,10 @@ packages: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} @@ -5523,10 +5512,6 @@ packages: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} - is-text-path@2.0.0: - resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} - engines: {node: '>=8'} - is-typed-array@1.1.12: resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} @@ -5856,10 +5841,6 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - jsonwebtoken@8.5.1: resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} engines: {node: '>=4', npm: '>=1.4.28'} @@ -5880,6 +5861,9 @@ packages: jws@4.0.0: resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + kasi@2.0.1: + resolution: {integrity: sha512-8qhiHZ1BN26ig1+jQ9fWEk6dj8T1wuxs00QRJfXIANI4scto1EuPUgqj+mxHls52WBfdTNJGQ8yYw9rDpWUcgQ==} + keyv@4.5.3: resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} @@ -5991,10 +5975,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lodash._reinterpolate@3.0.0: resolution: {integrity: sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==} @@ -6040,12 +6020,6 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - - lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - lodash.template@4.5.0: resolution: {integrity: sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==} deprecated: This package is deprecated. Use https://socket.dev/npm/package/eta instead. @@ -6062,9 +6036,6 @@ packages: lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -6198,6 +6169,10 @@ packages: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + merge-source-map@1.1.0: resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==} @@ -6631,10 +6606,6 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -6647,10 +6618,6 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} @@ -6724,10 +6691,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -6774,9 +6737,6 @@ packages: picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -8385,10 +8345,6 @@ packages: text-decoding@1.0.0: resolution: {integrity: sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==} - text-extensions@2.4.0: - resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} - engines: {node: '>=8'} - text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -9242,10 +9198,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.2.2: - resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} - engines: {node: '>=12.20'} - snapshots: '@aashutoshrathi/word-wrap@1.2.6': {} @@ -10378,13 +10330,13 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@commitlint/cli@20.2.0(@types/node@25.1.0)(typescript@4.9.5)': + '@commitlint/cli@20.4.0(@types/node@25.1.0)(typescript@4.9.5)': dependencies: - '@commitlint/format': 20.2.0 - '@commitlint/lint': 20.2.0 - '@commitlint/load': 20.2.0(@types/node@25.1.0)(typescript@4.9.5) - '@commitlint/read': 20.2.0 - '@commitlint/types': 20.2.0 + '@commitlint/format': 20.4.0 + '@commitlint/lint': 20.4.0 + '@commitlint/load': 20.4.0(@types/node@25.1.0)(typescript@4.9.5) + '@commitlint/read': 20.4.0 + '@commitlint/types': 20.4.0 tinyexec: 1.0.2 yargs: 17.7.2 transitivePeerDependencies: @@ -10396,102 +10348,97 @@ snapshots: '@commitlint/types': 19.8.0 conventional-changelog-conventionalcommits: 7.0.2 - '@commitlint/config-validator@20.2.0': + '@commitlint/config-validator@20.4.0': dependencies: - '@commitlint/types': 20.2.0 + '@commitlint/types': 20.4.0 ajv: 8.17.1 - '@commitlint/ensure@20.2.0': + '@commitlint/ensure@20.4.0': dependencies: - '@commitlint/types': 20.2.0 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.startcase: 4.4.0 - lodash.upperfirst: 4.3.1 + '@commitlint/types': 20.4.0 + kasi: 2.0.1 '@commitlint/execute-rule@20.0.0': {} - '@commitlint/format@20.2.0': + '@commitlint/format@20.4.0': dependencies: - '@commitlint/types': 20.2.0 - chalk: 5.6.2 + '@commitlint/types': 20.4.0 + picocolors: 1.1.1 - '@commitlint/is-ignored@20.2.0': + '@commitlint/is-ignored@20.4.0': dependencies: - '@commitlint/types': 20.2.0 + '@commitlint/types': 20.4.0 semver: 7.7.3 - '@commitlint/lint@20.2.0': + '@commitlint/lint@20.4.0': dependencies: - '@commitlint/is-ignored': 20.2.0 - '@commitlint/parse': 20.2.0 - '@commitlint/rules': 20.2.0 - '@commitlint/types': 20.2.0 + '@commitlint/is-ignored': 20.4.0 + '@commitlint/parse': 20.4.0 + '@commitlint/rules': 20.4.0 + '@commitlint/types': 20.4.0 - '@commitlint/load@20.2.0(@types/node@25.1.0)(typescript@4.9.5)': + '@commitlint/load@20.4.0(@types/node@25.1.0)(typescript@4.9.5)': dependencies: - '@commitlint/config-validator': 20.2.0 + '@commitlint/config-validator': 20.4.0 '@commitlint/execute-rule': 20.0.0 - '@commitlint/resolve-extends': 20.2.0 - '@commitlint/types': 20.2.0 - chalk: 5.6.2 + '@commitlint/resolve-extends': 20.4.0 + '@commitlint/types': 20.4.0 cosmiconfig: 9.0.0(typescript@4.9.5) cosmiconfig-typescript-loader: 6.2.0(@types/node@25.1.0)(cosmiconfig@9.0.0(typescript@4.9.5))(typescript@4.9.5) - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 - lodash.uniq: 4.5.0 + is-plain-obj: 4.1.0 + lodash.mergewith: 4.6.2 + picocolors: 1.1.1 transitivePeerDependencies: - '@types/node' - typescript - '@commitlint/message@20.0.0': {} + '@commitlint/message@20.4.0': {} - '@commitlint/parse@20.2.0': + '@commitlint/parse@20.4.0': dependencies: - '@commitlint/types': 20.2.0 - conventional-changelog-angular: 7.0.0 - conventional-commits-parser: 5.0.0 + '@commitlint/types': 20.4.0 + conventional-changelog-angular: 8.1.0 + conventional-commits-parser: 6.2.1 - '@commitlint/read@20.2.0': + '@commitlint/read@20.4.0': dependencies: - '@commitlint/top-level': 20.0.0 - '@commitlint/types': 20.2.0 + '@commitlint/top-level': 20.4.0 + '@commitlint/types': 20.4.0 git-raw-commits: 4.0.0 minimist: 1.2.8 tinyexec: 1.0.2 - '@commitlint/resolve-extends@20.2.0': + '@commitlint/resolve-extends@20.4.0': dependencies: - '@commitlint/config-validator': 20.2.0 - '@commitlint/types': 20.2.0 + '@commitlint/config-validator': 20.4.0 + '@commitlint/types': 20.4.0 global-directory: 4.0.1 import-meta-resolve: 4.2.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@20.2.0': + '@commitlint/rules@20.4.0': dependencies: - '@commitlint/ensure': 20.2.0 - '@commitlint/message': 20.0.0 + '@commitlint/ensure': 20.4.0 + '@commitlint/message': 20.4.0 '@commitlint/to-lines': 20.0.0 - '@commitlint/types': 20.2.0 + '@commitlint/types': 20.4.0 '@commitlint/to-lines@20.0.0': {} - '@commitlint/top-level@20.0.0': + '@commitlint/top-level@20.4.0': dependencies: - find-up: 7.0.0 + escalade: 3.2.0 '@commitlint/types@19.8.0': dependencies: '@types/conventional-commits-parser': 5.0.1 chalk: 5.5.0 - '@commitlint/types@20.2.0': + '@commitlint/types@20.4.0': dependencies: - '@types/conventional-commits-parser': 5.0.2 - chalk: 5.6.2 + conventional-commits-parser: 6.2.1 + picocolors: 1.1.1 '@csstools/cascade-layer-name-parser@1.0.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2)': dependencies: @@ -12426,10 +12373,6 @@ snapshots: dependencies: '@types/node': 25.1.0 - '@types/conventional-commits-parser@5.0.2': - dependencies: - '@types/node': 25.1.0 - '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 @@ -13080,11 +13023,6 @@ snapshots: '@xtuc/long@4.2.2': {} - JSONStream@1.3.5: - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - abbrev@1.1.1: {} abort-controller@3.0.0: @@ -13828,8 +13766,6 @@ snapshots: chalk@5.5.0: {} - chalk@5.6.2: {} - char-regex@1.0.2: {} chardet@0.7.0: {} @@ -14094,7 +14030,7 @@ snapshots: constants-browserify@1.0.0: {} - conventional-changelog-angular@7.0.0: + conventional-changelog-angular@8.1.0: dependencies: compare-func: 2.0.0 @@ -14102,12 +14038,9 @@ snapshots: dependencies: compare-func: 2.0.0 - conventional-commits-parser@5.0.0: + conventional-commits-parser@6.2.1: dependencies: - JSONStream: 1.3.5 - is-text-path: 2.0.0 - meow: 12.1.1 - split2: 4.2.0 + meow: 13.2.0 convert-source-map@2.0.0: {} @@ -15353,12 +15286,6 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - find-up@7.0.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - unicorn-magic: 0.1.0 - firebase-admin@10.3.0(@firebase/app-types@0.9.2): dependencies: '@fastify/busboy': 1.2.1 @@ -16253,6 +16180,8 @@ snapshots: is-plain-obj@1.1.0: {} + is-plain-obj@4.1.0: {} + is-plain-object@2.0.4: dependencies: isobject: 3.0.1 @@ -16289,10 +16218,6 @@ snapshots: dependencies: has-symbols: 1.1.0 - is-text-path@2.0.0: - dependencies: - text-extensions: 2.4.0 - is-typed-array@1.1.12: dependencies: which-typed-array: 1.1.11 @@ -16824,8 +16749,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsonparse@1.3.1: {} - jsonwebtoken@8.5.1: dependencies: jws: 3.2.2 @@ -16878,6 +16801,8 @@ snapshots: safe-buffer: 5.2.1 optional: true + kasi@2.0.1: {} + keyv@4.5.3: dependencies: json-buffer: 3.0.1 @@ -16994,10 +16919,6 @@ snapshots: dependencies: p-locate: 5.0.0 - locate-path@7.2.0: - dependencies: - p-locate: 6.0.0 - lodash._reinterpolate@3.0.0: {} lodash.camelcase@4.3.0: {} @@ -17019,7 +16940,8 @@ snapshots: lodash.isnumber@3.0.3: optional: true - lodash.isplainobject@4.0.6: {} + lodash.isplainobject@4.0.6: + optional: true lodash.isstring@4.0.1: optional: true @@ -17035,10 +16957,6 @@ snapshots: lodash.once@4.1.1: optional: true - lodash.snakecase@4.1.1: {} - - lodash.startcase@4.4.0: {} - lodash.template@4.5.0: dependencies: lodash._reinterpolate: 3.0.0 @@ -17054,8 +16972,6 @@ snapshots: lodash.uniq@4.5.0: {} - lodash.upperfirst@4.3.1: {} - lodash@4.17.21: {} log-update@6.1.0: @@ -17207,6 +17123,8 @@ snapshots: meow@12.1.1: {} + meow@13.2.0: {} + merge-source-map@1.1.0: dependencies: source-map: 0.6.1 @@ -17761,10 +17679,6 @@ snapshots: dependencies: yocto-queue: 0.1.0 - p-limit@4.0.0: - dependencies: - yocto-queue: 1.2.2 - p-locate@3.0.0: dependencies: p-limit: 2.3.0 @@ -17777,10 +17691,6 @@ snapshots: dependencies: p-limit: 3.1.0 - p-locate@6.0.0: - dependencies: - p-limit: 4.0.0 - p-map@4.0.0: dependencies: aggregate-error: 3.1.0 @@ -17861,8 +17771,6 @@ snapshots: path-exists@4.0.0: {} - path-exists@5.0.0: {} - path-is-absolute@1.0.1: {} path-key@3.1.1: {} @@ -17898,8 +17806,6 @@ snapshots: picocolors@1.0.0: {} - picocolors@1.0.1: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -18555,7 +18461,7 @@ snapshots: postcss@8.4.39: dependencies: nanoid: 3.3.8 - picocolors: 1.0.1 + picocolors: 1.1.1 source-map-js: 1.2.0 postcss@8.5.6: @@ -19687,8 +19593,6 @@ snapshots: text-decoding@1.0.0: optional: true - text-extensions@2.4.0: {} - text-table@0.2.0: {} thingies@1.21.0(tslib@2.6.2): @@ -20404,7 +20308,7 @@ snapshots: gzip-size: 6.0.0 html-escaper: 2.0.2 opener: 1.5.2 - picocolors: 1.0.0 + picocolors: 1.1.1 sirv: 2.0.3 ws: 7.5.10 transitivePeerDependencies: @@ -20705,5 +20609,3 @@ snapshots: yargs-parser: 21.1.1 yocto-queue@0.1.0: {} - - yocto-queue@1.2.2: {} From bdc87dfdcf759d617088efaa43e8f39048d687e5 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 1 Feb 2026 17:41:20 +0200 Subject: [PATCH 024/128] Webhook poll when SMS is received --- web/layouts/default.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/web/layouts/default.vue b/web/layouts/default.vue index 1c2049e5..69d2407e 100644 --- a/web/layouts/default.vue +++ b/web/layouts/default.vue @@ -50,6 +50,9 @@ export default class DefaultLayout extends Vue { channel.bind('phone.updated', () => { this.canPoll = true }) + channel.bind('message.phone.received', () => { + this.canPoll = true + }) this.startPoller() }, 10_000) // delay so that the auth user is present @@ -73,8 +76,9 @@ export default class DefaultLayout extends Vue { if (this.$store.getters.getAuthUser && this.$store.getters.getOwner) { setAuthHeader((await this.$fire.auth.currentUser?.getIdToken()) ?? '') promises.push( - promises.push(this.$store.dispatch('loadPhones', true)), + this.$store.dispatch('loadPhones', true), this.$store.dispatch('loadThreads'), + this.$store.dispatch('loadMessages'), this.$store.dispatch('getHeartbeat'), ) } From a0ddd5db10eeb361e0eca61c7cb04bb3d87e456a Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 1 Feb 2026 17:49:26 +0200 Subject: [PATCH 025/128] Bind phone received events --- api/pkg/listeners/websocket_listener.go | 26 ++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/api/pkg/listeners/websocket_listener.go b/api/pkg/listeners/websocket_listener.go index 02e9a36a..2c0e2c17 100644 --- a/api/pkg/listeners/websocket_listener.go +++ b/api/pkg/listeners/websocket_listener.go @@ -32,9 +32,10 @@ func NewWebsocketListener( } return l, map[string]events.EventListener{ - events.EventTypePhoneUpdated: l.onPhoneUpdated, - events.EventTypeMessagePhoneSent: l.onMessagePhoneSent, - events.EventTypeMessageSendFailed: l.onMessagePhoneFailed, + events.EventTypePhoneUpdated: l.onPhoneUpdated, + events.EventTypeMessagePhoneSent: l.onMessagePhoneSent, + events.EventTypeMessageSendFailed: l.onMessagePhoneFailed, + events.EventTypeMessagePhoneReceived: l.onMessagePhoneReceived, } } @@ -57,6 +58,25 @@ func (listener *WebsocketListener) onMessagePhoneSent(ctx context.Context, event return nil } +// onMessagePhoneReceived handles the events.EventTypeMessagePhoneReceived event +func (listener *WebsocketListener) onMessagePhoneReceived(ctx context.Context, event cloudevents.Event) error { + ctx, span, _ := listener.tracer.StartWithLogger(ctx, listener.logger) + defer span.End() + + var payload events.MessagePhoneReceivedPayload + if err := event.DataAs(&payload); err != nil { + msg := fmt.Sprintf("cannot decode [%s] into [%T]", event.Data(), payload) + return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) + } + + if err := listener.client.Trigger(payload.UserID.String(), event.Type(), event.ID()); err != nil { + msg := fmt.Sprintf("cannot trigger websocket [%s] event with ID [%s] for user with ID [%s]", event.Type(), event.ID(), payload.UserID) + return listener.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) + } + + return nil +} + // onMessagePhoneFailed handles the events.EventTypeMessageSendFailed event func (listener *WebsocketListener) onMessagePhoneFailed(ctx context.Context, event cloudevents.Event) error { ctx, span, _ := listener.tracer.StartWithLogger(ctx, listener.logger) From 355575fc9848f9f8fefb3339ef47379f8b26963b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:51:34 +0000 Subject: [PATCH 026/128] chore(deps-dev): bump @babel/eslint-parser from 7.28.5 to 7.28.6 in /web Bumps [@babel/eslint-parser](https://github.com/babel/babel/tree/HEAD/eslint/babel-eslint-parser) from 7.28.5 to 7.28.6. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.28.6/eslint/babel-eslint-parser) --- updated-dependencies: - dependency-name: "@babel/eslint-parser" dependency-version: 7.28.6 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- web/package.json | 2 +- web/pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/web/package.json b/web/package.json index 5deaf3c2..f69b1811 100644 --- a/web/package.json +++ b/web/package.json @@ -54,7 +54,7 @@ "webpack": "^5.104.1" }, "devDependencies": { - "@babel/eslint-parser": "^7.28.5", + "@babel/eslint-parser": "^7.28.6", "@commitlint/cli": "^20.4.0", "@commitlint/config-conventional": "^19.8.0", "@nuxt/types": "^2.18.1", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 3f1bbc0c..62bbf2e1 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -100,8 +100,8 @@ importers: version: 5.104.1 devDependencies: '@babel/eslint-parser': - specifier: ^7.28.5 - version: 7.28.5(@babel/core@7.28.4)(eslint@8.57.1) + specifier: ^7.28.6 + version: 7.28.6(@babel/core@7.28.4)(eslint@8.57.1) '@commitlint/cli': specifier: ^20.4.0 version: 20.4.0(@types/node@25.1.0)(typescript@4.9.5) @@ -244,8 +244,8 @@ packages: resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.28.5': - resolution: {integrity: sha512-fcdRcWahONYo+JRnJg1/AekOacGvKx12Gu0qXJXFi2WBqQA1i7+O5PaxRB7kxE/Op94dExnCiiar6T09pvdHpA==} + '@babel/eslint-parser@7.28.6': + resolution: {integrity: sha512-QGmsKi2PBO/MHSQk+AAgA9R6OHQr+VqnniFE0eMWZcVcfBZoA2dKn2hUsl3Csg/Plt9opRUWdY7//VXsrIlEiA==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 @@ -9280,7 +9280,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.5(@babel/core@7.28.4)(eslint@8.57.1)': + '@babel/eslint-parser@7.28.6(@babel/core@7.28.4)(eslint@8.57.1)': dependencies: '@babel/core': 7.28.4 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 From 4a159b4476236a53a039483b393f3a43cc992e89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:51:49 +0000 Subject: [PATCH 027/128] chore(deps-dev): bump @commitlint/config-conventional in /web Bumps [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/config-conventional) from 19.8.0 to 20.4.0. - [Release notes](https://github.com/conventional-changelog/commitlint/releases) - [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/CHANGELOG.md) - [Commits](https://github.com/conventional-changelog/commitlint/commits/v20.4.0/@commitlint/config-conventional) --- updated-dependencies: - dependency-name: "@commitlint/config-conventional" dependency-version: 20.4.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- web/package.json | 2 +- web/pnpm-lock.yaml | 38 +++++++++++--------------------------- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/web/package.json b/web/package.json index 5deaf3c2..2ca6d70c 100644 --- a/web/package.json +++ b/web/package.json @@ -56,7 +56,7 @@ "devDependencies": { "@babel/eslint-parser": "^7.28.5", "@commitlint/cli": "^20.4.0", - "@commitlint/config-conventional": "^19.8.0", + "@commitlint/config-conventional": "^20.4.0", "@nuxt/types": "^2.18.1", "@nuxt/typescript-build": "^3.0.2", "@nuxtjs/eslint-config-typescript": "^12.1.0", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 3f1bbc0c..2205189b 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -106,8 +106,8 @@ importers: specifier: ^20.4.0 version: 20.4.0(@types/node@25.1.0)(typescript@4.9.5) '@commitlint/config-conventional': - specifier: ^19.8.0 - version: 19.8.0 + specifier: ^20.4.0 + version: 20.4.0 '@nuxt/types': specifier: ^2.18.1 version: 2.18.1 @@ -1017,8 +1017,8 @@ packages: engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.8.0': - resolution: {integrity: sha512-9I2kKJwcAPwMoAj38hwqFXG0CzS2Kj+SAByPUQ0SlHTfb7VUhYVmo7G2w2tBrqmOf7PFd6MpZ/a1GQJo8na8kw==} + '@commitlint/config-conventional@20.4.0': + resolution: {integrity: sha512-nolhFe2YKIix0D4+tPXAWnnIc9WB5fOCgmm4h2EcRyEShC64oH/DpM9n++85NRdItvIhKb+Szsaeuug7KcEeIA==} engines: {node: '>=v18'} '@commitlint/config-validator@20.4.0': @@ -1077,10 +1077,6 @@ packages: resolution: {integrity: sha512-NDzq8Q6jmFaIIBC/GG6n1OQEaHdmaAAYdrZRlMgW6glYWGZ+IeuXmiymDvQNXPc82mVxq2KiE3RVpcs+1OeDeA==} engines: {node: '>=v18'} - '@commitlint/types@19.8.0': - resolution: {integrity: sha512-LRjP623jPyf3Poyfb0ohMj8I3ORyBDOwXAgxxVPbSD0unJuW2mJWeiRfaQinjtccMqC5Wy1HOMfa4btKjbNxbg==} - engines: {node: '>=v18'} - '@commitlint/types@20.4.0': resolution: {integrity: sha512-aO5l99BQJ0X34ft8b0h7QFkQlqxC6e7ZPVmBKz13xM9O8obDaM1Cld4sQlJDXXU/VFuUzQ30mVtHjVz74TuStw==} engines: {node: '>=v18'} @@ -2279,9 +2275,6 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/conventional-commits-parser@5.0.1': - resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} - '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -3714,9 +3707,9 @@ packages: resolution: {integrity: sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==} engines: {node: '>=18'} - conventional-changelog-conventionalcommits@7.0.2: - resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} - engines: {node: '>=16'} + conventional-changelog-conventionalcommits@9.1.0: + resolution: {integrity: sha512-MnbEysR8wWa8dAEvbj5xcBgJKQlX/m0lhS8DsyAAWDHdfs2faDJxTgzRYlRYpXSe7UiKrIIlB4TrBKU9q9DgkA==} + engines: {node: '>=18'} conventional-commits-parser@6.2.1: resolution: {integrity: sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==} @@ -10343,10 +10336,10 @@ snapshots: - '@types/node' - typescript - '@commitlint/config-conventional@19.8.0': + '@commitlint/config-conventional@20.4.0': dependencies: - '@commitlint/types': 19.8.0 - conventional-changelog-conventionalcommits: 7.0.2 + '@commitlint/types': 20.4.0 + conventional-changelog-conventionalcommits: 9.1.0 '@commitlint/config-validator@20.4.0': dependencies: @@ -10430,11 +10423,6 @@ snapshots: dependencies: escalade: 3.2.0 - '@commitlint/types@19.8.0': - dependencies: - '@types/conventional-commits-parser': 5.0.1 - chalk: 5.5.0 - '@commitlint/types@20.4.0': dependencies: conventional-commits-parser: 6.2.1 @@ -12369,10 +12357,6 @@ snapshots: dependencies: '@types/node': 16.18.55 - '@types/conventional-commits-parser@5.0.1': - dependencies: - '@types/node': 25.1.0 - '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 @@ -14034,7 +14018,7 @@ snapshots: dependencies: compare-func: 2.0.0 - conventional-changelog-conventionalcommits@7.0.2: + conventional-changelog-conventionalcommits@9.1.0: dependencies: compare-func: 2.0.0 From 14100a6b4a1bba801cfb7627c2e88cbd1876ba70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:51:53 +0000 Subject: [PATCH 028/128] chore(deps-dev): bump postcss-html from 1.7.0 to 1.8.1 in /web Bumps [postcss-html](https://github.com/ota-meshi/postcss-html) from 1.7.0 to 1.8.1. - [Release notes](https://github.com/ota-meshi/postcss-html/releases) - [Commits](https://github.com/ota-meshi/postcss-html/compare/v1.7.0...v1.8.1) --- updated-dependencies: - dependency-name: postcss-html dependency-version: 1.8.1 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- web/package.json | 2 +- web/pnpm-lock.yaml | 998 ++++++++++++++++++++++----------------------- 2 files changed, 487 insertions(+), 513 deletions(-) diff --git a/web/package.json b/web/package.json index 5deaf3c2..f78c4b36 100644 --- a/web/package.json +++ b/web/package.json @@ -76,7 +76,7 @@ "jest": "^30.2.0", "lint-staged": "^16.1.4", "node-fetch-native": "^1.6.7", - "postcss-html": "^1.7.0", + "postcss-html": "^1.8.1", "prettier": "3.8.1", "stylelint": "^15.11.0", "stylelint-config-prettier": "^9.0.5", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 3f1bbc0c..d1de3fe8 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -122,7 +122,7 @@ importers: version: 4.1.0(eslint@8.57.1)(rollup@3.29.5)(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1) '@nuxtjs/stylelint-module': specifier: ^5.2.0 - version: 5.2.0(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1) + version: 5.2.0(postcss@8.5.6)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1) '@nuxtjs/vuetify': specifier: ^1.12.3 version: 1.12.3(vue@2.7.16)(webpack@5.104.1) @@ -166,8 +166,8 @@ importers: specifier: ^1.6.7 version: 1.6.7 postcss-html: - specifier: ^1.7.0 - version: 1.7.0 + specifier: ^1.8.1 + version: 1.8.1 prettier: specifier: 3.8.1 version: 3.8.1 @@ -179,7 +179,7 @@ importers: version: 9.0.5(stylelint@15.11.0(typescript@4.9.5)) stylelint-config-recommended-vue: specifier: ^1.5.0 - version: 1.5.0(postcss-html@1.7.0)(stylelint@15.11.0(typescript@4.9.5)) + version: 1.5.0(postcss-html@1.8.1)(stylelint@15.11.0(typescript@4.9.5)) stylelint-config-standard: specifier: ^34.0.0 version: 34.0.0(stylelint@15.11.0(typescript@4.9.5)) @@ -4167,8 +4167,8 @@ packages: domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - domutils@3.1.0: - resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -5763,8 +5763,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.0: - resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -6969,8 +6969,8 @@ packages: peerDependencies: postcss: ^8.4 - postcss-html@1.7.0: - resolution: {integrity: sha512-MfcMpSUIaR/nNgeVS8AyvyDugXlADjN9AcV7e5rDfrF1wduIAGSkL4q2+wgrZgA3sHVAHLDO9FuauHhZYW2nBw==} + postcss-html@1.8.1: + resolution: {integrity: sha512-OLF6P7qctfAWayOhLpcVnTGqVeJzu2W3WpIYelfz2+JV5oGxfkcEvweN9U4XpeqE0P98dcD9ssusGwlF0TK0uQ==} engines: {node: ^12 || >=14} postcss-image-set-function@6.0.3: @@ -7357,14 +7357,6 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.5.6: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} @@ -7960,10 +7952,6 @@ packages: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -10506,193 +10494,193 @@ snapshots: '@csstools/css-parser-algorithms': 2.3.2(@csstools/css-tokenizer@2.2.1) '@csstools/css-tokenizer': 2.2.1 - '@csstools/postcss-cascade-layers@4.0.6(postcss@8.4.39)': + '@csstools/postcss-cascade-layers@4.0.6(postcss@8.5.6)': dependencies: '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2) - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - '@csstools/postcss-color-function@3.0.17(postcss@8.4.39)': + '@csstools/postcss-color-function@3.0.17(postcss@8.5.6)': dependencies: '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 - '@csstools/postcss-color-mix-function@2.0.17(postcss@8.4.39)': + '@csstools/postcss-color-mix-function@2.0.17(postcss@8.5.6)': dependencies: '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 - '@csstools/postcss-exponential-functions@1.0.8(postcss@8.4.39)': + '@csstools/postcss-exponential-functions@1.0.8(postcss@8.5.6)': dependencies: '@csstools/css-calc': 1.2.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - postcss: 8.4.39 + postcss: 8.5.6 - '@csstools/postcss-font-format-keywords@3.0.2(postcss@8.4.39)': + '@csstools/postcss-font-format-keywords@3.0.2(postcss@8.5.6)': dependencies: - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - '@csstools/postcss-gamut-mapping@1.0.10(postcss@8.4.39)': + '@csstools/postcss-gamut-mapping@1.0.10(postcss@8.5.6)': dependencies: '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - postcss: 8.4.39 + postcss: 8.5.6 - '@csstools/postcss-gradients-interpolation-method@4.0.18(postcss@8.4.39)': + '@csstools/postcss-gradients-interpolation-method@4.0.18(postcss@8.5.6)': dependencies: '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 - '@csstools/postcss-hwb-function@3.0.16(postcss@8.4.39)': + '@csstools/postcss-hwb-function@3.0.16(postcss@8.5.6)': dependencies: '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 - '@csstools/postcss-ic-unit@3.0.6(postcss@8.4.39)': + '@csstools/postcss-ic-unit@3.0.6(postcss@8.5.6)': dependencies: - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - '@csstools/postcss-initial@1.0.1(postcss@8.4.39)': + '@csstools/postcss-initial@1.0.1(postcss@8.5.6)': dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - '@csstools/postcss-is-pseudo-class@4.0.8(postcss@8.4.39)': + '@csstools/postcss-is-pseudo-class@4.0.8(postcss@8.5.6)': dependencies: '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2) - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - '@csstools/postcss-light-dark-function@1.0.6(postcss@8.4.39)': + '@csstools/postcss-light-dark-function@1.0.6(postcss@8.5.6)': dependencies: '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 - '@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.4.39)': + '@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.5.6)': dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - '@csstools/postcss-logical-overflow@1.0.1(postcss@8.4.39)': + '@csstools/postcss-logical-overflow@1.0.1(postcss@8.5.6)': dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - '@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.4.39)': + '@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.5.6)': dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - '@csstools/postcss-logical-resize@2.0.1(postcss@8.4.39)': + '@csstools/postcss-logical-resize@2.0.1(postcss@8.5.6)': dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - '@csstools/postcss-logical-viewport-units@2.0.10(postcss@8.4.39)': + '@csstools/postcss-logical-viewport-units@2.0.10(postcss@8.5.6)': dependencies: '@csstools/css-tokenizer': 2.3.2 - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 - '@csstools/postcss-media-minmax@1.1.7(postcss@8.4.39)': + '@csstools/postcss-media-minmax@1.1.7(postcss@8.5.6)': dependencies: '@csstools/css-calc': 1.2.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 '@csstools/media-query-list-parser': 2.1.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) - postcss: 8.4.39 + postcss: 8.5.6 - '@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.10(postcss@8.4.39)': + '@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.10(postcss@8.5.6)': dependencies: '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 '@csstools/media-query-list-parser': 2.1.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) - postcss: 8.4.39 + postcss: 8.5.6 - '@csstools/postcss-nested-calc@3.0.2(postcss@8.4.39)': + '@csstools/postcss-nested-calc@3.0.2(postcss@8.5.6)': dependencies: - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - '@csstools/postcss-normalize-display-values@3.0.2(postcss@8.4.39)': + '@csstools/postcss-normalize-display-values@3.0.2(postcss@8.5.6)': dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - '@csstools/postcss-oklab-function@3.0.17(postcss@8.4.39)': + '@csstools/postcss-oklab-function@3.0.17(postcss@8.5.6)': dependencies: '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 - '@csstools/postcss-progressive-custom-properties@3.2.0(postcss@8.4.39)': + '@csstools/postcss-progressive-custom-properties@3.2.0(postcss@8.5.6)': dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - '@csstools/postcss-relative-color-syntax@2.0.17(postcss@8.4.39)': + '@csstools/postcss-relative-color-syntax@2.0.17(postcss@8.5.6)': dependencies: '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 - '@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.4.39)': + '@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.5.6)': dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - '@csstools/postcss-stepped-value-functions@3.0.9(postcss@8.4.39)': + '@csstools/postcss-stepped-value-functions@3.0.9(postcss@8.5.6)': dependencies: '@csstools/css-calc': 1.2.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - postcss: 8.4.39 + postcss: 8.5.6 - '@csstools/postcss-text-decoration-shorthand@3.0.7(postcss@8.4.39)': + '@csstools/postcss-text-decoration-shorthand@3.0.7(postcss@8.5.6)': dependencies: '@csstools/color-helpers': 4.2.1 - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - '@csstools/postcss-trigonometric-functions@3.0.9(postcss@8.4.39)': + '@csstools/postcss-trigonometric-functions@3.0.9(postcss@8.5.6)': dependencies: '@csstools/css-calc': 1.2.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - postcss: 8.4.39 + postcss: 8.5.6 - '@csstools/postcss-unset-value@3.0.1(postcss@8.4.39)': + '@csstools/postcss-unset-value@3.0.1(postcss@8.5.6)': dependencies: - postcss: 8.4.39 + postcss: 8.5.6 '@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.1.2)': dependencies: @@ -10706,9 +10694,9 @@ snapshots: dependencies: postcss-selector-parser: 6.1.2 - '@csstools/utilities@1.0.0(postcss@8.4.39)': + '@csstools/utilities@1.0.0(postcss@8.5.6)': dependencies: - postcss: 8.4.39 + postcss: 8.5.6 '@discoveryjs/json-ext@0.5.7': {} @@ -12038,7 +12026,7 @@ snapshots: caniuse-lite: 1.0.30001639 consola: 3.2.3 css-loader: 5.2.7(webpack@4.47.0) - cssnano: 7.0.3(postcss@8.4.39) + cssnano: 7.0.3(postcss@8.5.6) eventsource-polyfill: 0.9.6 extract-css-chunks-webpack-plugin: 4.10.0(webpack@4.47.0) file-loader: 6.2.0(webpack@4.47.0) @@ -12052,12 +12040,12 @@ snapshots: optimize-css-assets-webpack-plugin: 6.0.1(webpack@4.47.0) pify: 5.0.0 pnp-webpack-plugin: 1.7.0(typescript@4.9.5) - postcss: 8.4.39 - postcss-import: 15.1.0(postcss@8.4.39) + postcss: 8.5.6 + postcss-import: 15.1.0(postcss@8.5.6) postcss-import-resolver: 2.0.0 - postcss-loader: 4.3.0(postcss@8.4.39)(webpack@4.47.0) - postcss-preset-env: 9.5.15(postcss@8.4.39) - postcss-url: 10.1.3(postcss@8.4.39) + postcss-loader: 4.3.0(postcss@8.5.6)(webpack@4.47.0) + postcss-preset-env: 9.5.15(postcss@8.5.6) + postcss-url: 10.1.3(postcss@8.5.6) semver: 7.7.3 std-env: 3.7.0 style-resources-loader: 1.5.0(webpack@4.47.0) @@ -12216,14 +12204,14 @@ snapshots: minimatch: 3.1.2 sitemap: 4.1.1 - '@nuxtjs/stylelint-module@5.2.0(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1)': + '@nuxtjs/stylelint-module@5.2.0(postcss@8.5.6)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1))(webpack@5.104.1)': dependencies: '@nuxt/kit': 3.12.2(rollup@3.29.5) chokidar: 3.6.0 pathe: 1.1.2 stylelint: 15.11.0(typescript@4.9.5) stylelint-webpack-plugin: 5.0.1(stylelint@15.11.0(typescript@4.9.5))(webpack@5.104.1) - vite-plugin-stylelint: 5.3.1(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1)) + vite-plugin-stylelint: 5.3.1(postcss@8.5.6)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1)) transitivePeerDependencies: - '@types/stylelint' - magicast @@ -12772,7 +12760,7 @@ snapshots: '@vue/compiler-sfc@2.7.16': dependencies: '@babel/parser': 7.24.0 - postcss: 8.4.35 + postcss: 8.5.6 source-map: 0.6.1 optionalDependencies: prettier: 2.8.8 @@ -13266,14 +13254,14 @@ snapshots: atob@2.1.2: {} - autoprefixer@10.4.19(postcss@8.4.39): + autoprefixer@10.4.19(postcss@8.5.6): dependencies: browserslist: 4.28.1 caniuse-lite: 1.0.30001762 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.5: {} @@ -14157,37 +14145,37 @@ snapshots: crypto-random-string@2.0.0: optional: true - css-blank-pseudo@6.0.2(postcss@8.4.39): + css-blank-pseudo@6.0.2(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - css-declaration-sorter@6.4.1(postcss@8.4.39): + css-declaration-sorter@6.4.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - css-declaration-sorter@7.2.0(postcss@8.4.39): + css-declaration-sorter@7.2.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 css-functions-list@3.2.1: {} - css-has-pseudo@6.0.5(postcss@8.4.39): + css-has-pseudo@6.0.5(postcss@8.5.6): dependencies: '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2) - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 css-loader@5.2.7(webpack@4.47.0): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) + icss-utils: 5.1.0(postcss@8.5.6) loader-utils: 2.0.4 - postcss: 8.4.39 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.39) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.39) - postcss-modules-scope: 3.0.0(postcss@8.4.39) - postcss-modules-values: 4.0.0(postcss@8.4.39) + postcss: 8.5.6 + postcss-modules-extract-imports: 3.0.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.0.3(postcss@8.5.6) + postcss-modules-scope: 3.0.0(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 schema-utils: 3.3.0 semver: 7.7.3 @@ -14195,21 +14183,21 @@ snapshots: css-loader@5.2.7(webpack@5.104.1): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) + icss-utils: 5.1.0(postcss@8.5.6) loader-utils: 2.0.4 - postcss: 8.4.39 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.39) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.39) - postcss-modules-scope: 3.0.0(postcss@8.4.39) - postcss-modules-values: 4.0.0(postcss@8.4.39) + postcss: 8.5.6 + postcss-modules-extract-imports: 3.0.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.0.3(postcss@8.5.6) + postcss-modules-scope: 3.0.0(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 schema-utils: 3.3.0 semver: 7.7.3 webpack: 5.104.1 - css-prefers-color-scheme@9.0.1(postcss@8.4.39): + css-prefers-color-scheme@9.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 css-select@4.3.0: dependencies: @@ -14224,7 +14212,7 @@ snapshots: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 nth-check: 2.1.1 css-tree@1.1.3: @@ -14235,7 +14223,7 @@ snapshots: css-tree@2.2.1: dependencies: mdn-data: 2.0.28 - source-map-js: 1.0.2 + source-map-js: 1.2.1 css-tree@2.3.1: dependencies: @@ -14255,93 +14243,93 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-default@5.2.14(postcss@8.4.39): - dependencies: - css-declaration-sorter: 6.4.1(postcss@8.4.39) - cssnano-utils: 3.1.0(postcss@8.4.39) - postcss: 8.4.39 - postcss-calc: 8.2.4(postcss@8.4.39) - postcss-colormin: 5.3.1(postcss@8.4.39) - postcss-convert-values: 5.1.3(postcss@8.4.39) - postcss-discard-comments: 5.1.2(postcss@8.4.39) - postcss-discard-duplicates: 5.1.0(postcss@8.4.39) - postcss-discard-empty: 5.1.1(postcss@8.4.39) - postcss-discard-overridden: 5.1.0(postcss@8.4.39) - postcss-merge-longhand: 5.1.7(postcss@8.4.39) - postcss-merge-rules: 5.1.4(postcss@8.4.39) - postcss-minify-font-values: 5.1.0(postcss@8.4.39) - postcss-minify-gradients: 5.1.1(postcss@8.4.39) - postcss-minify-params: 5.1.4(postcss@8.4.39) - postcss-minify-selectors: 5.2.1(postcss@8.4.39) - postcss-normalize-charset: 5.1.0(postcss@8.4.39) - postcss-normalize-display-values: 5.1.0(postcss@8.4.39) - postcss-normalize-positions: 5.1.1(postcss@8.4.39) - postcss-normalize-repeat-style: 5.1.1(postcss@8.4.39) - postcss-normalize-string: 5.1.0(postcss@8.4.39) - postcss-normalize-timing-functions: 5.1.0(postcss@8.4.39) - postcss-normalize-unicode: 5.1.1(postcss@8.4.39) - postcss-normalize-url: 5.1.0(postcss@8.4.39) - postcss-normalize-whitespace: 5.1.1(postcss@8.4.39) - postcss-ordered-values: 5.1.3(postcss@8.4.39) - postcss-reduce-initial: 5.1.2(postcss@8.4.39) - postcss-reduce-transforms: 5.1.0(postcss@8.4.39) - postcss-svgo: 5.1.0(postcss@8.4.39) - postcss-unique-selectors: 5.1.1(postcss@8.4.39) - - cssnano-preset-default@7.0.3(postcss@8.4.39): + cssnano-preset-default@5.2.14(postcss@8.5.6): + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.5.6) + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-calc: 8.2.4(postcss@8.5.6) + postcss-colormin: 5.3.1(postcss@8.5.6) + postcss-convert-values: 5.1.3(postcss@8.5.6) + postcss-discard-comments: 5.1.2(postcss@8.5.6) + postcss-discard-duplicates: 5.1.0(postcss@8.5.6) + postcss-discard-empty: 5.1.1(postcss@8.5.6) + postcss-discard-overridden: 5.1.0(postcss@8.5.6) + postcss-merge-longhand: 5.1.7(postcss@8.5.6) + postcss-merge-rules: 5.1.4(postcss@8.5.6) + postcss-minify-font-values: 5.1.0(postcss@8.5.6) + postcss-minify-gradients: 5.1.1(postcss@8.5.6) + postcss-minify-params: 5.1.4(postcss@8.5.6) + postcss-minify-selectors: 5.2.1(postcss@8.5.6) + postcss-normalize-charset: 5.1.0(postcss@8.5.6) + postcss-normalize-display-values: 5.1.0(postcss@8.5.6) + postcss-normalize-positions: 5.1.1(postcss@8.5.6) + postcss-normalize-repeat-style: 5.1.1(postcss@8.5.6) + postcss-normalize-string: 5.1.0(postcss@8.5.6) + postcss-normalize-timing-functions: 5.1.0(postcss@8.5.6) + postcss-normalize-unicode: 5.1.1(postcss@8.5.6) + postcss-normalize-url: 5.1.0(postcss@8.5.6) + postcss-normalize-whitespace: 5.1.1(postcss@8.5.6) + postcss-ordered-values: 5.1.3(postcss@8.5.6) + postcss-reduce-initial: 5.1.2(postcss@8.5.6) + postcss-reduce-transforms: 5.1.0(postcss@8.5.6) + postcss-svgo: 5.1.0(postcss@8.5.6) + postcss-unique-selectors: 5.1.1(postcss@8.5.6) + + cssnano-preset-default@7.0.3(postcss@8.5.6): dependencies: browserslist: 4.28.1 - css-declaration-sorter: 7.2.0(postcss@8.4.39) - cssnano-utils: 5.0.0(postcss@8.4.39) - postcss: 8.4.39 - postcss-calc: 10.0.0(postcss@8.4.39) - postcss-colormin: 7.0.1(postcss@8.4.39) - postcss-convert-values: 7.0.1(postcss@8.4.39) - postcss-discard-comments: 7.0.1(postcss@8.4.39) - postcss-discard-duplicates: 7.0.0(postcss@8.4.39) - postcss-discard-empty: 7.0.0(postcss@8.4.39) - postcss-discard-overridden: 7.0.0(postcss@8.4.39) - postcss-merge-longhand: 7.0.2(postcss@8.4.39) - postcss-merge-rules: 7.0.2(postcss@8.4.39) - postcss-minify-font-values: 7.0.0(postcss@8.4.39) - postcss-minify-gradients: 7.0.0(postcss@8.4.39) - postcss-minify-params: 7.0.1(postcss@8.4.39) - postcss-minify-selectors: 7.0.2(postcss@8.4.39) - postcss-normalize-charset: 7.0.0(postcss@8.4.39) - postcss-normalize-display-values: 7.0.0(postcss@8.4.39) - postcss-normalize-positions: 7.0.0(postcss@8.4.39) - postcss-normalize-repeat-style: 7.0.0(postcss@8.4.39) - postcss-normalize-string: 7.0.0(postcss@8.4.39) - postcss-normalize-timing-functions: 7.0.0(postcss@8.4.39) - postcss-normalize-unicode: 7.0.1(postcss@8.4.39) - postcss-normalize-url: 7.0.0(postcss@8.4.39) - postcss-normalize-whitespace: 7.0.0(postcss@8.4.39) - postcss-ordered-values: 7.0.1(postcss@8.4.39) - postcss-reduce-initial: 7.0.1(postcss@8.4.39) - postcss-reduce-transforms: 7.0.0(postcss@8.4.39) - postcss-svgo: 7.0.1(postcss@8.4.39) - postcss-unique-selectors: 7.0.1(postcss@8.4.39) - - cssnano-utils@3.1.0(postcss@8.4.39): - dependencies: - postcss: 8.4.39 - - cssnano-utils@5.0.0(postcss@8.4.39): - dependencies: - postcss: 8.4.39 - - cssnano@5.1.15(postcss@8.4.39): - dependencies: - cssnano-preset-default: 5.2.14(postcss@8.4.39) + css-declaration-sorter: 7.2.0(postcss@8.5.6) + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-calc: 10.0.0(postcss@8.5.6) + postcss-colormin: 7.0.1(postcss@8.5.6) + postcss-convert-values: 7.0.1(postcss@8.5.6) + postcss-discard-comments: 7.0.1(postcss@8.5.6) + postcss-discard-duplicates: 7.0.0(postcss@8.5.6) + postcss-discard-empty: 7.0.0(postcss@8.5.6) + postcss-discard-overridden: 7.0.0(postcss@8.5.6) + postcss-merge-longhand: 7.0.2(postcss@8.5.6) + postcss-merge-rules: 7.0.2(postcss@8.5.6) + postcss-minify-font-values: 7.0.0(postcss@8.5.6) + postcss-minify-gradients: 7.0.0(postcss@8.5.6) + postcss-minify-params: 7.0.1(postcss@8.5.6) + postcss-minify-selectors: 7.0.2(postcss@8.5.6) + postcss-normalize-charset: 7.0.0(postcss@8.5.6) + postcss-normalize-display-values: 7.0.0(postcss@8.5.6) + postcss-normalize-positions: 7.0.0(postcss@8.5.6) + postcss-normalize-repeat-style: 7.0.0(postcss@8.5.6) + postcss-normalize-string: 7.0.0(postcss@8.5.6) + postcss-normalize-timing-functions: 7.0.0(postcss@8.5.6) + postcss-normalize-unicode: 7.0.1(postcss@8.5.6) + postcss-normalize-url: 7.0.0(postcss@8.5.6) + postcss-normalize-whitespace: 7.0.0(postcss@8.5.6) + postcss-ordered-values: 7.0.1(postcss@8.5.6) + postcss-reduce-initial: 7.0.1(postcss@8.5.6) + postcss-reduce-transforms: 7.0.0(postcss@8.5.6) + postcss-svgo: 7.0.1(postcss@8.5.6) + postcss-unique-selectors: 7.0.1(postcss@8.5.6) + + cssnano-utils@3.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + cssnano-utils@5.0.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + cssnano@5.1.15(postcss@8.5.6): + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.5.6) lilconfig: 2.1.0 - postcss: 8.4.39 + postcss: 8.5.6 yaml: 1.10.2 - cssnano@7.0.3(postcss@8.4.39): + cssnano@7.0.3(postcss@8.5.6): dependencies: - cssnano-preset-default: 7.0.3(postcss@8.4.39) + cssnano-preset-default: 7.0.3(postcss@8.5.6) lilconfig: 3.1.3 - postcss: 8.4.39 + postcss: 8.5.6 csso@4.2.0: dependencies: @@ -14537,7 +14525,7 @@ snapshots: domelementtype: 2.3.0 domhandler: 4.3.1 - domutils@3.1.0: + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 @@ -15922,7 +15910,7 @@ snapshots: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.1.0 + domutils: 3.2.2 entities: 4.5.0 http-errors@2.0.0: @@ -15981,9 +15969,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.39): + icss-utils@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 idb@7.1.1: {} @@ -16666,7 +16654,7 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.0: {} + js-tokens@9.0.1: {} js-yaml@3.14.1: dependencies: @@ -17653,9 +17641,9 @@ snapshots: optimize-css-assets-webpack-plugin@6.0.1(webpack@4.47.0): dependencies: - cssnano: 5.1.15(postcss@8.4.39) + cssnano: 5.1.15(postcss@8.5.6) last-call-webpack-plugin: 3.0.0 - postcss: 8.4.39 + postcss: 8.5.6 webpack: 4.47.0 optionator@0.9.3: @@ -17856,533 +17844,533 @@ snapshots: posix-character-classes@0.1.1: {} - postcss-attribute-case-insensitive@6.0.3(postcss@8.4.39): + postcss-attribute-case-insensitive@6.0.3(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-calc@10.0.0(postcss@8.4.39): + postcss-calc@10.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-calc@8.2.4(postcss@8.4.39): + postcss-calc@8.2.4(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-clamp@4.1.0(postcss@8.4.39): + postcss-clamp@4.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-color-functional-notation@6.0.12(postcss@8.4.39): + postcss-color-functional-notation@6.0.12(postcss@8.5.6): dependencies: '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 - postcss-color-hex-alpha@9.0.4(postcss@8.4.39): + postcss-color-hex-alpha@9.0.4(postcss@8.5.6): dependencies: - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-color-rebeccapurple@9.0.3(postcss@8.4.39): + postcss-color-rebeccapurple@9.0.3(postcss@8.5.6): dependencies: - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-colormin@5.3.1(postcss@8.4.39): + postcss-colormin@5.3.1(postcss@8.5.6): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-colormin@7.0.1(postcss@8.4.39): + postcss-colormin@7.0.1(postcss@8.5.6): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-convert-values@5.1.3(postcss@8.4.39): + postcss-convert-values@5.1.3(postcss@8.5.6): dependencies: browserslist: 4.28.1 - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-convert-values@7.0.1(postcss@8.4.39): + postcss-convert-values@7.0.1(postcss@8.5.6): dependencies: browserslist: 4.28.1 - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-custom-media@10.0.7(postcss@8.4.39): + postcss-custom-media@10.0.7(postcss@8.5.6): dependencies: '@csstools/cascade-layer-name-parser': 1.0.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 '@csstools/media-query-list-parser': 2.1.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) - postcss: 8.4.39 + postcss: 8.5.6 - postcss-custom-properties@13.3.11(postcss@8.4.39): + postcss-custom-properties@13.3.11(postcss@8.5.6): dependencies: '@csstools/cascade-layer-name-parser': 1.0.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-custom-selectors@7.1.11(postcss@8.4.39): + postcss-custom-selectors@7.1.11(postcss@8.5.6): dependencies: '@csstools/cascade-layer-name-parser': 1.0.12(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-dir-pseudo-class@8.0.1(postcss@8.4.39): + postcss-dir-pseudo-class@8.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-discard-comments@5.1.2(postcss@8.4.39): + postcss-discard-comments@5.1.2(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-discard-comments@7.0.1(postcss@8.4.39): + postcss-discard-comments@7.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-discard-duplicates@5.1.0(postcss@8.4.39): + postcss-discard-duplicates@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-discard-duplicates@7.0.0(postcss@8.4.39): + postcss-discard-duplicates@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-discard-empty@5.1.1(postcss@8.4.39): + postcss-discard-empty@5.1.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-discard-empty@7.0.0(postcss@8.4.39): + postcss-discard-empty@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-discard-overridden@5.1.0(postcss@8.4.39): + postcss-discard-overridden@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-discard-overridden@7.0.0(postcss@8.4.39): + postcss-discard-overridden@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-double-position-gradients@5.0.6(postcss@8.4.39): + postcss-double-position-gradients@5.0.6(postcss@8.5.6): dependencies: - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-focus-visible@9.0.1(postcss@8.4.39): + postcss-focus-visible@9.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-focus-within@8.0.1(postcss@8.4.39): + postcss-focus-within@8.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-font-variant@5.0.0(postcss@8.4.39): + postcss-font-variant@5.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-gap-properties@5.0.1(postcss@8.4.39): + postcss-gap-properties@5.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-html@1.7.0: + postcss-html@1.8.1: dependencies: htmlparser2: 8.0.2 - js-tokens: 9.0.0 - postcss: 8.4.35 - postcss-safe-parser: 6.0.0(postcss@8.4.35) + js-tokens: 9.0.1 + postcss: 8.5.6 + postcss-safe-parser: 6.0.0(postcss@8.5.6) - postcss-image-set-function@6.0.3(postcss@8.4.39): + postcss-image-set-function@6.0.3(postcss@8.5.6): dependencies: - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 postcss-import-resolver@2.0.0: dependencies: enhanced-resolve: 4.5.0 - postcss-import@15.1.0(postcss@8.4.39): + postcss-import@15.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.6 - postcss-lab-function@6.0.17(postcss@8.4.39): + postcss-lab-function@6.0.17(postcss@8.5.6): dependencies: '@csstools/css-color-parser': 2.0.3(@csstools/css-parser-algorithms@2.7.0(@csstools/css-tokenizer@2.3.2))(@csstools/css-tokenizer@2.3.2) '@csstools/css-parser-algorithms': 2.7.0(@csstools/css-tokenizer@2.3.2) '@csstools/css-tokenizer': 2.3.2 - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/utilities': 1.0.0(postcss@8.4.39) - postcss: 8.4.39 + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/utilities': 1.0.0(postcss@8.5.6) + postcss: 8.5.6 - postcss-loader@4.3.0(postcss@8.4.39)(webpack@4.47.0): + postcss-loader@4.3.0(postcss@8.5.6)(webpack@4.47.0): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 loader-utils: 2.0.4 - postcss: 8.4.39 + postcss: 8.5.6 schema-utils: 3.3.0 semver: 7.7.3 webpack: 4.47.0 - postcss-logical@7.0.1(postcss@8.4.39): + postcss-logical@7.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-merge-longhand@5.1.7(postcss@8.4.39): + postcss-merge-longhand@5.1.7(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.4.39) + stylehacks: 5.1.1(postcss@8.5.6) - postcss-merge-longhand@7.0.2(postcss@8.4.39): + postcss-merge-longhand@7.0.2(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - stylehacks: 7.0.2(postcss@8.4.39) + stylehacks: 7.0.2(postcss@8.5.6) - postcss-merge-rules@5.1.4(postcss@8.4.39): + postcss-merge-rules@5.1.4(postcss@8.5.6): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-merge-rules@7.0.2(postcss@8.4.39): + postcss-merge-rules@7.0.2(postcss@8.5.6): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 - cssnano-utils: 5.0.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-minify-font-values@5.1.0(postcss@8.4.39): + postcss-minify-font-values@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-font-values@7.0.0(postcss@8.4.39): + postcss-minify-font-values@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-gradients@5.1.1(postcss@8.4.39): + postcss-minify-gradients@5.1.1(postcss@8.5.6): dependencies: colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-gradients@7.0.0(postcss@8.4.39): + postcss-minify-gradients@7.0.0(postcss@8.5.6): dependencies: colord: 2.9.3 - cssnano-utils: 5.0.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-params@5.1.4(postcss@8.4.39): + postcss-minify-params@5.1.4(postcss@8.5.6): dependencies: browserslist: 4.28.1 - cssnano-utils: 3.1.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-params@7.0.1(postcss@8.4.39): + postcss-minify-params@7.0.1(postcss@8.5.6): dependencies: browserslist: 4.28.1 - cssnano-utils: 5.0.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-minify-selectors@5.2.1(postcss@8.4.39): + postcss-minify-selectors@5.2.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-minify-selectors@7.0.2(postcss@8.4.39): + postcss-minify-selectors@7.0.2(postcss@8.5.6): dependencies: cssesc: 3.0.0 - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-modules-extract-imports@3.0.0(postcss@8.4.39): + postcss-modules-extract-imports@3.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-modules-local-by-default@4.0.3(postcss@8.4.39): + postcss-modules-local-by-default@4.0.3(postcss@8.5.6): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.0.0(postcss@8.4.39): + postcss-modules-scope@3.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-modules-values@4.0.0(postcss@8.4.39): + postcss-modules-values@4.0.0(postcss@8.5.6): dependencies: - icss-utils: 5.1.0(postcss@8.4.39) - postcss: 8.4.39 + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 - postcss-nesting@12.1.5(postcss@8.4.39): + postcss-nesting@12.1.5(postcss@8.5.6): dependencies: '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.1.2) '@csstools/selector-specificity': 3.1.1(postcss-selector-parser@6.1.2) - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-normalize-charset@5.1.0(postcss@8.4.39): + postcss-normalize-charset@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-normalize-charset@7.0.0(postcss@8.4.39): + postcss-normalize-charset@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-normalize-display-values@5.1.0(postcss@8.4.39): + postcss-normalize-display-values@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-display-values@7.0.0(postcss@8.4.39): + postcss-normalize-display-values@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-positions@5.1.1(postcss@8.4.39): + postcss-normalize-positions@5.1.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-positions@7.0.0(postcss@8.4.39): + postcss-normalize-positions@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@5.1.1(postcss@8.4.39): + postcss-normalize-repeat-style@5.1.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@7.0.0(postcss@8.4.39): + postcss-normalize-repeat-style@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-string@5.1.0(postcss@8.4.39): + postcss-normalize-string@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-string@7.0.0(postcss@8.4.39): + postcss-normalize-string@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@5.1.0(postcss@8.4.39): + postcss-normalize-timing-functions@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@7.0.0(postcss@8.4.39): + postcss-normalize-timing-functions@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@5.1.1(postcss@8.4.39): + postcss-normalize-unicode@5.1.1(postcss@8.5.6): dependencies: browserslist: 4.28.1 - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@7.0.1(postcss@8.4.39): + postcss-normalize-unicode@7.0.1(postcss@8.5.6): dependencies: browserslist: 4.28.1 - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-url@5.1.0(postcss@8.4.39): + postcss-normalize-url@5.1.0(postcss@8.5.6): dependencies: normalize-url: 6.1.0 - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-url@7.0.0(postcss@8.4.39): + postcss-normalize-url@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@5.1.1(postcss@8.4.39): + postcss-normalize-whitespace@5.1.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@7.0.0(postcss@8.4.39): + postcss-normalize-whitespace@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-opacity-percentage@2.0.0(postcss@8.4.39): + postcss-opacity-percentage@2.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-ordered-values@5.1.3(postcss@8.4.39): + postcss-ordered-values@5.1.3(postcss@8.5.6): dependencies: - cssnano-utils: 3.1.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-ordered-values@7.0.1(postcss@8.4.39): + postcss-ordered-values@7.0.1(postcss@8.5.6): dependencies: - cssnano-utils: 5.0.0(postcss@8.4.39) - postcss: 8.4.39 + cssnano-utils: 5.0.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-overflow-shorthand@5.0.1(postcss@8.4.39): + postcss-overflow-shorthand@5.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-page-break@3.0.4(postcss@8.4.39): + postcss-page-break@3.0.4(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 - postcss-place@9.0.1(postcss@8.4.39): + postcss-place@9.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-preset-env@9.5.15(postcss@8.4.39): - dependencies: - '@csstools/postcss-cascade-layers': 4.0.6(postcss@8.4.39) - '@csstools/postcss-color-function': 3.0.17(postcss@8.4.39) - '@csstools/postcss-color-mix-function': 2.0.17(postcss@8.4.39) - '@csstools/postcss-exponential-functions': 1.0.8(postcss@8.4.39) - '@csstools/postcss-font-format-keywords': 3.0.2(postcss@8.4.39) - '@csstools/postcss-gamut-mapping': 1.0.10(postcss@8.4.39) - '@csstools/postcss-gradients-interpolation-method': 4.0.18(postcss@8.4.39) - '@csstools/postcss-hwb-function': 3.0.16(postcss@8.4.39) - '@csstools/postcss-ic-unit': 3.0.6(postcss@8.4.39) - '@csstools/postcss-initial': 1.0.1(postcss@8.4.39) - '@csstools/postcss-is-pseudo-class': 4.0.8(postcss@8.4.39) - '@csstools/postcss-light-dark-function': 1.0.6(postcss@8.4.39) - '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.4.39) - '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.4.39) - '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.4.39) - '@csstools/postcss-logical-resize': 2.0.1(postcss@8.4.39) - '@csstools/postcss-logical-viewport-units': 2.0.10(postcss@8.4.39) - '@csstools/postcss-media-minmax': 1.1.7(postcss@8.4.39) - '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.10(postcss@8.4.39) - '@csstools/postcss-nested-calc': 3.0.2(postcss@8.4.39) - '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.4.39) - '@csstools/postcss-oklab-function': 3.0.17(postcss@8.4.39) - '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.4.39) - '@csstools/postcss-relative-color-syntax': 2.0.17(postcss@8.4.39) - '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.4.39) - '@csstools/postcss-stepped-value-functions': 3.0.9(postcss@8.4.39) - '@csstools/postcss-text-decoration-shorthand': 3.0.7(postcss@8.4.39) - '@csstools/postcss-trigonometric-functions': 3.0.9(postcss@8.4.39) - '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.39) - autoprefixer: 10.4.19(postcss@8.4.39) + postcss-preset-env@9.5.15(postcss@8.5.6): + dependencies: + '@csstools/postcss-cascade-layers': 4.0.6(postcss@8.5.6) + '@csstools/postcss-color-function': 3.0.17(postcss@8.5.6) + '@csstools/postcss-color-mix-function': 2.0.17(postcss@8.5.6) + '@csstools/postcss-exponential-functions': 1.0.8(postcss@8.5.6) + '@csstools/postcss-font-format-keywords': 3.0.2(postcss@8.5.6) + '@csstools/postcss-gamut-mapping': 1.0.10(postcss@8.5.6) + '@csstools/postcss-gradients-interpolation-method': 4.0.18(postcss@8.5.6) + '@csstools/postcss-hwb-function': 3.0.16(postcss@8.5.6) + '@csstools/postcss-ic-unit': 3.0.6(postcss@8.5.6) + '@csstools/postcss-initial': 1.0.1(postcss@8.5.6) + '@csstools/postcss-is-pseudo-class': 4.0.8(postcss@8.5.6) + '@csstools/postcss-light-dark-function': 1.0.6(postcss@8.5.6) + '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.5.6) + '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.5.6) + '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.5.6) + '@csstools/postcss-logical-resize': 2.0.1(postcss@8.5.6) + '@csstools/postcss-logical-viewport-units': 2.0.10(postcss@8.5.6) + '@csstools/postcss-media-minmax': 1.1.7(postcss@8.5.6) + '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.10(postcss@8.5.6) + '@csstools/postcss-nested-calc': 3.0.2(postcss@8.5.6) + '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.5.6) + '@csstools/postcss-oklab-function': 3.0.17(postcss@8.5.6) + '@csstools/postcss-progressive-custom-properties': 3.2.0(postcss@8.5.6) + '@csstools/postcss-relative-color-syntax': 2.0.17(postcss@8.5.6) + '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.5.6) + '@csstools/postcss-stepped-value-functions': 3.0.9(postcss@8.5.6) + '@csstools/postcss-text-decoration-shorthand': 3.0.7(postcss@8.5.6) + '@csstools/postcss-trigonometric-functions': 3.0.9(postcss@8.5.6) + '@csstools/postcss-unset-value': 3.0.1(postcss@8.5.6) + autoprefixer: 10.4.19(postcss@8.5.6) browserslist: 4.28.1 - css-blank-pseudo: 6.0.2(postcss@8.4.39) - css-has-pseudo: 6.0.5(postcss@8.4.39) - css-prefers-color-scheme: 9.0.1(postcss@8.4.39) + css-blank-pseudo: 6.0.2(postcss@8.5.6) + css-has-pseudo: 6.0.5(postcss@8.5.6) + css-prefers-color-scheme: 9.0.1(postcss@8.5.6) cssdb: 8.0.2 - postcss: 8.4.39 - postcss-attribute-case-insensitive: 6.0.3(postcss@8.4.39) - postcss-clamp: 4.1.0(postcss@8.4.39) - postcss-color-functional-notation: 6.0.12(postcss@8.4.39) - postcss-color-hex-alpha: 9.0.4(postcss@8.4.39) - postcss-color-rebeccapurple: 9.0.3(postcss@8.4.39) - postcss-custom-media: 10.0.7(postcss@8.4.39) - postcss-custom-properties: 13.3.11(postcss@8.4.39) - postcss-custom-selectors: 7.1.11(postcss@8.4.39) - postcss-dir-pseudo-class: 8.0.1(postcss@8.4.39) - postcss-double-position-gradients: 5.0.6(postcss@8.4.39) - postcss-focus-visible: 9.0.1(postcss@8.4.39) - postcss-focus-within: 8.0.1(postcss@8.4.39) - postcss-font-variant: 5.0.0(postcss@8.4.39) - postcss-gap-properties: 5.0.1(postcss@8.4.39) - postcss-image-set-function: 6.0.3(postcss@8.4.39) - postcss-lab-function: 6.0.17(postcss@8.4.39) - postcss-logical: 7.0.1(postcss@8.4.39) - postcss-nesting: 12.1.5(postcss@8.4.39) - postcss-opacity-percentage: 2.0.0(postcss@8.4.39) - postcss-overflow-shorthand: 5.0.1(postcss@8.4.39) - postcss-page-break: 3.0.4(postcss@8.4.39) - postcss-place: 9.0.1(postcss@8.4.39) - postcss-pseudo-class-any-link: 9.0.2(postcss@8.4.39) - postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.39) - postcss-selector-not: 7.0.2(postcss@8.4.39) - - postcss-pseudo-class-any-link@9.0.2(postcss@8.4.39): - dependencies: - postcss: 8.4.39 + postcss: 8.5.6 + postcss-attribute-case-insensitive: 6.0.3(postcss@8.5.6) + postcss-clamp: 4.1.0(postcss@8.5.6) + postcss-color-functional-notation: 6.0.12(postcss@8.5.6) + postcss-color-hex-alpha: 9.0.4(postcss@8.5.6) + postcss-color-rebeccapurple: 9.0.3(postcss@8.5.6) + postcss-custom-media: 10.0.7(postcss@8.5.6) + postcss-custom-properties: 13.3.11(postcss@8.5.6) + postcss-custom-selectors: 7.1.11(postcss@8.5.6) + postcss-dir-pseudo-class: 8.0.1(postcss@8.5.6) + postcss-double-position-gradients: 5.0.6(postcss@8.5.6) + postcss-focus-visible: 9.0.1(postcss@8.5.6) + postcss-focus-within: 8.0.1(postcss@8.5.6) + postcss-font-variant: 5.0.0(postcss@8.5.6) + postcss-gap-properties: 5.0.1(postcss@8.5.6) + postcss-image-set-function: 6.0.3(postcss@8.5.6) + postcss-lab-function: 6.0.17(postcss@8.5.6) + postcss-logical: 7.0.1(postcss@8.5.6) + postcss-nesting: 12.1.5(postcss@8.5.6) + postcss-opacity-percentage: 2.0.0(postcss@8.5.6) + postcss-overflow-shorthand: 5.0.1(postcss@8.5.6) + postcss-page-break: 3.0.4(postcss@8.5.6) + postcss-place: 9.0.1(postcss@8.5.6) + postcss-pseudo-class-any-link: 9.0.2(postcss@8.5.6) + postcss-replace-overflow-wrap: 4.0.0(postcss@8.5.6) + postcss-selector-not: 7.0.2(postcss@8.5.6) + + postcss-pseudo-class-any-link@9.0.2(postcss@8.5.6): + dependencies: + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-reduce-initial@5.1.2(postcss@8.4.39): + postcss-reduce-initial@5.1.2(postcss@8.5.6): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 - postcss: 8.4.39 + postcss: 8.5.6 - postcss-reduce-initial@7.0.1(postcss@8.4.39): + postcss-reduce-initial@7.0.1(postcss@8.5.6): dependencies: browserslist: 4.28.1 caniuse-api: 3.0.0 - postcss: 8.4.39 + postcss: 8.5.6 - postcss-reduce-transforms@5.1.0(postcss@8.4.39): + postcss-reduce-transforms@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-reduce-transforms@7.0.0(postcss@8.4.39): + postcss-reduce-transforms@7.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - postcss-replace-overflow-wrap@4.0.0(postcss@8.4.39): + postcss-replace-overflow-wrap@4.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-resolve-nested-selector@0.1.1: {} @@ -18390,13 +18378,13 @@ snapshots: dependencies: postcss: 8.4.31 - postcss-safe-parser@6.0.0(postcss@8.4.35): + postcss-safe-parser@6.0.0(postcss@8.5.6): dependencies: - postcss: 8.4.35 + postcss: 8.5.6 - postcss-selector-not@7.0.2(postcss@8.4.39): + postcss-selector-not@7.0.2(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.0.13: @@ -18409,34 +18397,34 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-svgo@5.1.0(postcss@8.4.39): + postcss-svgo@5.1.0(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 svgo: 2.8.0 - postcss-svgo@7.0.1(postcss@8.4.39): + postcss-svgo@7.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-value-parser: 4.2.0 svgo: 3.3.2 - postcss-unique-selectors@5.1.1(postcss@8.4.39): + postcss-unique-selectors@5.1.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-unique-selectors@7.0.1(postcss@8.4.39): + postcss-unique-selectors@7.0.1(postcss@8.5.6): dependencies: - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - postcss-url@10.1.3(postcss@8.4.39): + postcss-url@10.1.3(postcss@8.5.6): dependencies: make-dir: 3.1.0 mime: 2.5.2 minimatch: 3.0.8 - postcss: 8.4.39 + postcss: 8.5.6 xxhashjs: 0.2.2 postcss-value-parser@4.2.0: {} @@ -18452,18 +18440,6 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.0.2 - postcss@8.4.35: - dependencies: - nanoid: 3.3.8 - picocolors: 1.0.0 - source-map-js: 1.0.2 - - postcss@8.4.39: - dependencies: - nanoid: 3.3.8 - picocolors: 1.1.1 - source-map-js: 1.2.0 - postcss@8.5.6: dependencies: nanoid: 3.3.11 @@ -19139,8 +19115,6 @@ snapshots: source-map-js@1.0.2: {} - source-map-js@1.2.0: {} - source-map-js@1.2.1: {} source-map-resolve@0.5.3: @@ -19342,7 +19316,7 @@ snapshots: strip-literal@2.1.0: dependencies: - js-tokens: 9.0.0 + js-tokens: 9.0.1 stubs@3.0.0: optional: true @@ -19357,33 +19331,33 @@ snapshots: style-search@0.1.0: {} - stylehacks@5.1.1(postcss@8.4.39): + stylehacks@5.1.1(postcss@8.5.6): dependencies: browserslist: 4.28.1 - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - stylehacks@7.0.2(postcss@8.4.39): + stylehacks@7.0.2(postcss@8.5.6): dependencies: browserslist: 4.28.1 - postcss: 8.4.39 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 - stylelint-config-html@1.1.0(postcss-html@1.7.0)(stylelint@15.11.0(typescript@4.9.5)): + stylelint-config-html@1.1.0(postcss-html@1.8.1)(stylelint@15.11.0(typescript@4.9.5)): dependencies: - postcss-html: 1.7.0 + postcss-html: 1.8.1 stylelint: 15.11.0(typescript@4.9.5) stylelint-config-prettier@9.0.5(stylelint@15.11.0(typescript@4.9.5)): dependencies: stylelint: 15.11.0(typescript@4.9.5) - stylelint-config-recommended-vue@1.5.0(postcss-html@1.7.0)(stylelint@15.11.0(typescript@4.9.5)): + stylelint-config-recommended-vue@1.5.0(postcss-html@1.8.1)(stylelint@15.11.0(typescript@4.9.5)): dependencies: - postcss-html: 1.7.0 + postcss-html: 1.8.1 semver: 7.5.4 stylelint: 15.11.0(typescript@4.9.5) - stylelint-config-html: 1.1.0(postcss-html@1.7.0)(stylelint@15.11.0(typescript@4.9.5)) + stylelint-config-html: 1.1.0(postcss-html@1.8.1)(stylelint@15.11.0(typescript@4.9.5)) stylelint-config-recommended: 13.0.0(stylelint@15.11.0(typescript@4.9.5)) stylelint-config-recommended@13.0.0(stylelint@15.11.0(typescript@4.9.5)): @@ -20045,7 +20019,7 @@ snapshots: rollup: 2.79.2 vite: 4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1) - vite-plugin-stylelint@5.3.1(postcss@8.4.39)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1)): + vite-plugin-stylelint@5.3.1(postcss@8.5.6)(rollup@3.29.5)(stylelint@15.11.0(typescript@4.9.5))(vite@4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1)): dependencies: '@rollup/pluginutils': 5.1.0(rollup@3.29.5) chokidar: 3.6.0 @@ -20053,7 +20027,7 @@ snapshots: stylelint: 15.11.0(typescript@4.9.5) vite: 4.5.3(@types/node@25.1.0)(sass@1.32.13)(terser@5.44.1) optionalDependencies: - postcss: 8.4.39 + postcss: 8.5.6 rollup: 3.29.5 transitivePeerDependencies: - supports-color From b42b993a9748faa86379ef1f91d628c1b25aa54c Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 1 Feb 2026 18:02:41 +0200 Subject: [PATCH 029/128] Reload messages on received --- web/layouts/default.vue | 4 ---- web/pages/threads/_id/index.vue | 5 +++++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/web/layouts/default.vue b/web/layouts/default.vue index 69d2407e..cff2bd34 100644 --- a/web/layouts/default.vue +++ b/web/layouts/default.vue @@ -50,9 +50,6 @@ export default class DefaultLayout extends Vue { channel.bind('phone.updated', () => { this.canPoll = true }) - channel.bind('message.phone.received', () => { - this.canPoll = true - }) this.startPoller() }, 10_000) // delay so that the auth user is present @@ -78,7 +75,6 @@ export default class DefaultLayout extends Vue { promises.push( this.$store.dispatch('loadPhones', true), this.$store.dispatch('loadThreads'), - this.$store.dispatch('loadMessages'), this.$store.dispatch('getHeartbeat'), ) } diff --git a/web/pages/threads/_id/index.vue b/web/pages/threads/_id/index.vue index a9216a9f..06042a45 100644 --- a/web/pages/threads/_id/index.vue +++ b/web/pages/threads/_id/index.vue @@ -427,6 +427,11 @@ export default Vue.extend({ this.loadMessages(false) } }) + this.webhookChannel.bind('message.phone.received', () => { + if (!this.loadingMessages) { + this.loadMessages(false) + } + }) }, beforeDestroy() { From 75f93f1a1f41a7fff3386b7ba1be820597df7249 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 8 Feb 2026 21:52:16 +0200 Subject: [PATCH 030/128] Add support for SQLITE for dedicated DB --- api/go.mod | 5 +++++ api/go.sum | 6 ++++++ api/main.go | 1 + api/pkg/di/container.go | 14 +++++++++++++- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/api/go.mod b/api/go.mod index 51120b96..844b8e14 100644 --- a/api/go.mod +++ b/api/go.mod @@ -44,6 +44,7 @@ require ( github.com/stretchr/testify v1.11.1 github.com/swaggo/swag v1.16.6 github.com/thedevsaddam/govalidator v1.9.10 + github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc github.com/uptrace/uptrace-go v1.39.0 github.com/xuri/excelize/v2 v2.10.0 go.opentelemetry.io/otel v1.39.0 @@ -54,6 +55,7 @@ require ( google.golang.org/api v0.264.0 google.golang.org/protobuf v1.36.11 gorm.io/driver/postgres v1.6.0 + gorm.io/driver/sqlite v1.6.0 gorm.io/gorm v1.31.1 gorm.io/plugin/opentelemetry v0.1.16 ) @@ -83,10 +85,12 @@ require ( github.com/PuerkitoBio/goquery v1.10.3 // indirect github.com/andybalholm/brotli v1.2.0 // indirect github.com/andybalholm/cascadia v1.3.3 // indirect + github.com/antlr4-go/antlr/v4 v4.13.0 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/clipperhouse/uax29/v2 v2.2.0 // indirect github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f // indirect + github.com/coder/websocket v1.8.12 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/envoyproxy/go-control-plane/envoy v1.35.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect @@ -129,6 +133,7 @@ require ( github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.19 // indirect + github.com/mattn/go-sqlite3 v1.14.22 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect diff --git a/api/go.sum b/api/go.sum index f9625a5f..bcef44d0 100644 --- a/api/go.sum +++ b/api/go.sum @@ -66,6 +66,8 @@ github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwTo github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= +github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= +github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHSxpiH9JdtuBj0= github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= @@ -86,6 +88,8 @@ github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f h1:Y8xYupdHxryycyPlc9Y github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f/go.mod h1:HlzOvOjVBOfTGSRXRyY0OiCS/3J1akRGQQpRO/7zyF4= github.com/cockroachdb/cockroach-go/v2 v2.4.3 h1:LJO3K3jC5WXvMePRQSJE1NsIGoFGcEx1LW83W6RAlhw= github.com/cockroachdb/cockroach-go/v2 v2.4.3/go.mod h1:9U179XbCx4qFWtNhc7BiWLPfuyMVQ7qdAhfrwLz1vH0= +github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= +github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -323,6 +327,8 @@ github.com/thedevsaddam/govalidator v1.9.10/go.mod h1:Ilx8u7cg5g3LXbSS943cx5kczy github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tiendc/go-deepcopy v1.7.1 h1:LnubftI6nYaaMOcaz0LphzwraqN8jiWTwm416sitff4= github.com/tiendc/go-deepcopy v1.7.1/go.mod h1:4bKjNC2r7boYOkD2IOuZpYjmlDdzjbpTRyCx+goBCJQ= +github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc h1:lzi/5fg2EfinRlh3v//YyIhnc4tY7BTqazQGwb1ar+0= +github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc/go.mod h1:08inkKyguB6CGGssc/JzhmQWwBgFQBgjlYFjxjRh7nU= github.com/uptrace/uptrace-go v1.39.0 h1:MszuE3eX/z86xzYywN2JBtYcmsS4ofdo1VMDhRvkWrI= github.com/uptrace/uptrace-go v1.39.0/go.mod h1:FquipEqgTMXPbhdhenjbiLHG1R5WYdxVH6zgwHeMzzA= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= diff --git a/api/main.go b/api/main.go index 5b7539c9..b85c9d66 100644 --- a/api/main.go +++ b/api/main.go @@ -7,6 +7,7 @@ import ( "github.com/NdoleStudio/httpsms/docs" "github.com/NdoleStudio/httpsms/pkg/di" + _ "github.com/tursodatabase/libsql-client-go/libsql" ) // Version is injected at runtime diff --git a/api/pkg/di/container.go b/api/pkg/di/container.go index d9a912f4..0025cecb 100644 --- a/api/pkg/di/container.go +++ b/api/pkg/di/container.go @@ -7,10 +7,12 @@ import ( "net/http" "os" "strconv" + "strings" "time" plunk "github.com/NdoleStudio/plunk-go" "github.com/pusher/pusher-http-go/v5" + "gorm.io/driver/sqlite" "github.com/NdoleStudio/httpsms/docs" @@ -228,6 +230,16 @@ func (container *Container) GormLogger() gormLogger.Interface { ) } +func (container *Container) connect(dsn string, config *gorm.Config) (db *gorm.DB, err error) { + if strings.HasPrefix(dsn, "postgres://") { + return gorm.Open(postgres.Open(dsn), config) + } + return gorm.Open(sqlite.New(sqlite.Config{ + DriverName: "libsql", + DSN: dsn, + }), config) +} + // DedicatedDB creates an instance of gorm.DB if it has not been created already func (container *Container) DedicatedDB() (db *gorm.DB) { container.logger.Debug(fmt.Sprintf("creating %T", db)) @@ -242,7 +254,7 @@ func (container *Container) DedicatedDB() (db *gorm.DB) { config = &gorm.Config{Logger: container.GormLogger()} } - db, err := gorm.Open(postgres.Open(os.Getenv("DATABASE_URL_DEDICATED")), config) + db, err := container.connect(os.Getenv("DATABASE_URL_DEDICATED"), config) if err != nil { container.logger.Fatal(err) } From d5721b6cf3f4906b25076ce6c035893a325966dd Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 8 Feb 2026 22:14:08 +0200 Subject: [PATCH 031/128] Upgraded packages --- api/go.mod | 138 +++++++++++++------------- api/go.sum | 286 ++++++++++++++++++++++++++++------------------------- 2 files changed, 221 insertions(+), 203 deletions(-) diff --git a/api/go.mod b/api/go.mod index 844b8e14..7160e3dc 100644 --- a/api/go.mod +++ b/api/go.mod @@ -1,8 +1,6 @@ module github.com/NdoleStudio/httpsms -go 1.24.2 - -toolchain go1.24.3 +go 1.24.6 require ( cloud.google.com/go/cloudtasks v1.13.7 @@ -47,12 +45,12 @@ require ( github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc github.com/uptrace/uptrace-go v1.39.0 github.com/xuri/excelize/v2 v2.10.0 - go.opentelemetry.io/otel v1.39.0 - go.opentelemetry.io/otel/metric v1.39.0 - go.opentelemetry.io/otel/sdk v1.39.0 - go.opentelemetry.io/otel/sdk/metric v1.39.0 - go.opentelemetry.io/otel/trace v1.39.0 - google.golang.org/api v0.264.0 + go.opentelemetry.io/otel v1.40.0 + go.opentelemetry.io/otel/metric v1.40.0 + go.opentelemetry.io/otel/sdk v1.40.0 + go.opentelemetry.io/otel/sdk/metric v1.40.0 + go.opentelemetry.io/otel/trace v1.40.0 + google.golang.org/api v0.265.0 google.golang.org/protobuf v1.36.11 gorm.io/driver/postgres v1.6.0 gorm.io/driver/sqlite v1.6.0 @@ -61,39 +59,41 @@ require ( ) require ( - cel.dev/expr v0.24.0 // indirect + cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect cloud.google.com/go/auth v0.18.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/firestore v1.20.0 // indirect + cloud.google.com/go/firestore v1.21.0 // indirect cloud.google.com/go/iam v1.5.3 // indirect - cloud.google.com/go/longrunning v0.7.0 // indirect + cloud.google.com/go/longrunning v0.8.0 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect - cloud.google.com/go/storage v1.57.0 // indirect + cloud.google.com/go/storage v1.59.2 // indirect cloud.google.com/go/trace v1.11.7 // indirect dario.cat/mergo v1.0.2 // indirect filippo.io/edwards25519 v1.1.0 // indirect - github.com/ClickHouse/ch-go v0.69.0 // indirect - github.com/ClickHouse/clickhouse-go/v2 v2.40.3 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 // indirect + github.com/ClickHouse/ch-go v0.71.0 // indirect + github.com/ClickHouse/clickhouse-go/v2 v2.43.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/Masterminds/sprig v2.22.0+incompatible // indirect - github.com/PuerkitoBio/goquery v1.10.3 // indirect + github.com/PuerkitoBio/goquery v1.11.0 // indirect github.com/andybalholm/brotli v1.2.0 // indirect github.com/andybalholm/cascadia v1.3.3 // indirect - github.com/antlr4-go/antlr/v4 v4.13.0 // indirect + github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/clipperhouse/uax29/v2 v2.2.0 // indirect - github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f // indirect - github.com/coder/websocket v1.8.12 // indirect + github.com/clipperhouse/displaywidth v0.9.0 // indirect + github.com/clipperhouse/stringish v0.1.1 // indirect + github.com/clipperhouse/uax29/v2 v2.6.0 // indirect + github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect + github.com/coder/websocket v1.8.14 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/envoyproxy/go-control-plane/envoy v1.35.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-faster/city v1.0.1 // indirect @@ -101,95 +101,99 @@ require ( github.com/go-jose/go-jose/v4 v4.1.3 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-openapi/jsonpointer v0.22.1 // indirect - github.com/go-openapi/jsonreference v0.21.2 // indirect - github.com/go-openapi/spec v0.22.0 // indirect - github.com/go-openapi/swag/conv v0.25.1 // indirect - github.com/go-openapi/swag/jsonname v0.25.1 // indirect - github.com/go-openapi/swag/jsonutils v0.25.1 // indirect - github.com/go-openapi/swag/loading v0.25.1 // indirect - github.com/go-openapi/swag/stringutils v0.25.1 // indirect - github.com/go-openapi/swag/typeutils v0.25.1 // indirect - github.com/go-openapi/swag/yamlutils v0.25.1 // indirect + github.com/go-openapi/jsonpointer v0.22.4 // indirect + github.com/go-openapi/jsonreference v0.21.4 // indirect + github.com/go-openapi/spec v0.22.3 // indirect + github.com/go-openapi/swag/conv v0.25.4 // indirect + github.com/go-openapi/swag/jsonname v0.25.4 // indirect + github.com/go-openapi/swag/jsonutils v0.25.4 // indirect + github.com/go-openapi/swag/loading v0.25.4 // indirect + github.com/go-openapi/swag/stringutils v0.25.4 // indirect + github.com/go-openapi/swag/typeutils v0.25.4 // indirect + github.com/go-openapi/swag/yamlutils v0.25.4 // indirect github.com/go-sql-driver/mysql v1.9.3 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.11 // indirect - github.com/googleapis/gax-go/v2 v2.16.0 // indirect + github.com/googleapis/gax-go/v2 v2.17.0 // indirect github.com/gorilla/css v1.0.1 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-version v1.7.0 // indirect + github.com/hashicorp/go-version v1.8.0 // indirect github.com/huandu/xstrings v1.5.0 // indirect github.com/imdario/mergo v0.3.16 // indirect + github.com/inbucket/html2text v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.7.6 // indirect + github.com/jackc/pgx/v5 v5.8.0 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/compress v1.18.3 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.19 // indirect - github.com/mattn/go-sqlite3 v1.14.22 // indirect + github.com/mattn/go-sqlite3 v1.14.33 // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect + github.com/olekukonko/errors v1.2.0 // indirect + github.com/olekukonko/ll v0.1.4 // indirect + github.com/olekukonko/tablewriter v1.1.3 // indirect github.com/paulmach/orb v0.12.0 // indirect - github.com/pierrec/lz4/v4 v4.1.22 // indirect + github.com/pierrec/lz4/v4 v4.1.25 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/redis/go-redis/extra/rediscmd/v9 v9.17.3 // indirect - github.com/richardlehane/mscfb v1.0.4 // indirect - github.com/richardlehane/msoleps v1.0.4 // indirect + github.com/richardlehane/mscfb v1.0.6 // indirect + github.com/richardlehane/msoleps v1.0.6 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/segmentio/asm v1.2.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf // indirect github.com/swaggo/files/v2 v2.0.2 // indirect - github.com/tiendc/go-deepcopy v1.7.1 // indirect + github.com/tiendc/go-deepcopy v1.7.2 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasthttp v1.67.0 // indirect + github.com/valyala/fasthttp v1.69.0 // indirect github.com/vanng822/css v1.0.1 // indirect - github.com/vanng822/go-premailer v1.25.0 // indirect + github.com/vanng822/go-premailer v1.30.0 // indirect github.com/xuri/efp v0.0.1 // indirect github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib v1.38.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.38.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 // indirect - go.opentelemetry.io/contrib/instrumentation/runtime v0.64.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.15.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.39.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.39.0 // indirect - go.opentelemetry.io/otel/log v0.15.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.15.0 // indirect + go.opentelemetry.io/contrib v1.40.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.40.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect + go.opentelemetry.io/contrib/instrumentation/runtime v0.65.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.40.0 // indirect + go.opentelemetry.io/otel/log v0.16.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.16.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.27.0 // indirect + go.uber.org/zap v1.27.1 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/crypto v0.47.0 // indirect - golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b // indirect - golang.org/x/mod v0.31.0 // indirect + golang.org/x/exp v0.0.0-20260112195511-716be5621a96 // indirect + golang.org/x/mod v0.32.0 // indirect golang.org/x/net v0.49.0 // indirect - golang.org/x/oauth2 v0.34.0 // indirect + golang.org/x/oauth2 v0.35.0 // indirect golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.40.0 // indirect + golang.org/x/sys v0.41.0 // indirect golang.org/x/text v0.33.0 // indirect golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.40.0 // indirect + golang.org/x/tools v0.41.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d // indirect + google.golang.org/genproto v0.0.0-20260203192932-546029d2fa20 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 // indirect google.golang.org/grpc v1.78.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gorm.io/driver/clickhouse v0.7.0 // indirect diff --git a/api/go.sum b/api/go.sum index bcef44d0..f09c7cbb 100644 --- a/api/go.sum +++ b/api/go.sum @@ -1,7 +1,7 @@ bou.ke/monkey v1.0.2 h1:kWcnsrCNUatbxncxR/ThdYqbytgOIArtYWqcQLQzKLI= bou.ke/monkey v1.0.2/go.mod h1:OqickVX3tNx6t33n1xvtTtu85YN5s6cKwVug+oHMaIA= -cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY= -cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= +cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= +cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= cloud.google.com/go/auth v0.18.1 h1:IwTEx92GFUo2pJ6Qea0EU3zYvKnTAeRCODxfA/G5UWs= @@ -12,18 +12,18 @@ cloud.google.com/go/cloudtasks v1.13.7 h1:H2v8GEolNtMFfYzUpZBaZbydqU7drpyo99GtAg cloud.google.com/go/cloudtasks v1.13.7/go.mod h1:H0TThOUG+Ml34e2+ZtW6k6nt4i9KuH3nYAJ5mxh7OM4= 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/firestore v1.20.0 h1:JLlT12QP0fM2SJirKVyu2spBCO8leElaW0OOtPm6HEo= -cloud.google.com/go/firestore v1.20.0/go.mod h1:jqu4yKdBmDN5srneWzx3HlKrHFWFdlkgjgQ6BKIOFQo= +cloud.google.com/go/firestore v1.21.0 h1:BhopUsx7kh6NFx77ccRsHhrtkbJUmDAxNY3uapWdjcM= +cloud.google.com/go/firestore v1.21.0/go.mod h1:1xH6HNcnkf/gGyR8udd6pFO4Z7GWJSwLKQMx/u6UrP4= cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= cloud.google.com/go/logging v1.13.1 h1:O7LvmO0kGLaHY/gq8cV7T0dyp6zJhYAOtZPX4TF3QtY= cloud.google.com/go/logging v1.13.1/go.mod h1:XAQkfkMBxQRjQek96WLPNze7vsOmay9H5PqfsNYDqvw= -cloud.google.com/go/longrunning v0.7.0 h1:FV0+SYF1RIj59gyoWDRi45GiYUMM3K1qO51qoboQT1E= -cloud.google.com/go/longrunning v0.7.0/go.mod h1:ySn2yXmjbK9Ba0zsQqunhDkYi0+9rlXIwnoAf+h+TPY= +cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= +cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.57.0 h1:4g7NB7Ta7KetVbOMpCqy89C+Vg5VE8scqlSHUPm7Rds= -cloud.google.com/go/storage v1.57.0/go.mod h1:329cwlpzALLgJuu8beyJ/uvQznDHpa2U5lGjWednkzg= +cloud.google.com/go/storage v1.59.2 h1:gmOAuG1opU8YvycMNpP+DvHfT9BfzzK5Cy+arP+Nocw= +cloud.google.com/go/storage v1.59.2/go.mod h1:cMWbtM+anpC74gn6qjLh+exqYcfmB9Hqe5z6adx+CLI= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= @@ -32,12 +32,12 @@ filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= firebase.google.com/go v3.13.0+incompatible h1:3TdYC3DDi6aHn20qoRkxwGqNgdjtblwVAyRLQwGn/+4= firebase.google.com/go v3.13.0+incompatible/go.mod h1:xlah6XbEyW6tbfSklcfe5FHJIwjt8toICdV5Wh9ptHs= -github.com/ClickHouse/ch-go v0.69.0 h1:nO0OJkpxOlN/eaXFj0KzjTz5p7vwP1/y3GN4qc5z/iM= -github.com/ClickHouse/ch-go v0.69.0/go.mod h1:9XeZpSAT4S0kVjOpaJ5186b7PY/NH/hhF8R6u0WIjwg= -github.com/ClickHouse/clickhouse-go/v2 v2.40.3 h1:46jB4kKwVDUOnECpStKMVXxvR0Cg9zeV9vdbPjtn6po= -github.com/ClickHouse/clickhouse-go/v2 v2.40.3/go.mod h1:qO0HwvjCnTB4BPL/k6EE3l4d9f/uF+aoimAhJX70eKA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= +github.com/ClickHouse/ch-go v0.71.0 h1:bUdZ/EZj/LcVHsMqaRUP2holqygrPWQKeMjc6nZoyRM= +github.com/ClickHouse/ch-go v0.71.0/go.mod h1:NwbNc+7jaqfY58dmdDUbG4Jl22vThgx1cYjBw0vtgXw= +github.com/ClickHouse/clickhouse-go/v2 v2.43.0 h1:fUR05TrF1GyvLDa/mAQjkx7KbgwdLRffs2n9O3WobtE= +github.com/ClickHouse/clickhouse-go/v2 v2.43.0/go.mod h1:o6jf7JM/zveWC/PP277BLxjHy5KjnGX/jfljhM4s34g= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 h1:UnDZ/zFfG1JhH/DqxIZYU/1CUAlTUScoXD/LcM2Ykk8= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0/go.mod h1:IA1C1U7jO/ENqm/vhi7V9YYpBsp+IMyqNrEN94N7tVc= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.31.0 h1:xQMhkBXPOKe/GzC6TctwlK2aNF+9k5VwFgdE83rBK2Y= @@ -60,14 +60,14 @@ github.com/NdoleStudio/lemonsqueezy-go v1.3.1 h1:lMUVgdAx2onbOUJIVPR05xAANYuCMXB github.com/NdoleStudio/lemonsqueezy-go v1.3.1/go.mod h1:xKRsRX1jSI6mLrVXyWh2sF/1isxTioZrSjWy6HpA3xQ= github.com/NdoleStudio/plunk-go v0.0.2 h1:afPW7MHK4Z3rsybpJBnmTmxKCLKF1M7sPI+BNGPf35A= github.com/NdoleStudio/plunk-go v0.0.2/go.mod h1:pqG3zKhpn/A2bL1K+WsWzvfTpOeSkYgXhNk5H65uEc8= -github.com/PuerkitoBio/goquery v1.10.3 h1:pFYcNSqHxBD06Fpj/KsbStFRsgRATgnf3LeXiUkhzPo= -github.com/PuerkitoBio/goquery v1.10.3/go.mod h1:tMUX0zDMHXYlAQk6p35XxQMqMweEKB7iK7iLNd4RH4Y= +github.com/PuerkitoBio/goquery v1.11.0 h1:jZ7pwMQXIITcUXNH83LLk+txlaEy6NVOfTuP43xxfqw= +github.com/PuerkitoBio/goquery v1.11.0/go.mod h1:wQHgxUOU3JGuj3oD/QFfxUdlzW6xPHfqyHre6VMY4DQ= github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= -github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI= -github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g= +github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= +github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHSxpiH9JdtuBj0= github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= @@ -80,16 +80,20 @@ github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1x github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/clipperhouse/uax29/v2 v2.2.0 h1:ChwIKnQN3kcZteTXMgb1wztSgaU+ZemkgWdohwgs8tY= -github.com/clipperhouse/uax29/v2 v2.2.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= +github.com/clipperhouse/displaywidth v0.9.0 h1:Qb4KOhYwRiN3viMv1v/3cTBlz3AcAZX3+y9OLhMtAtA= +github.com/clipperhouse/displaywidth v0.9.0/go.mod h1:aCAAqTlh4GIVkhQnJpbL0T/WfcrJXHcj8C0yjYcjOZA= +github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= +github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= +github.com/clipperhouse/uax29/v2 v2.6.0 h1:z0cDbUV+aPASdFb2/ndFnS9ts/WNXgTNNGFoKXuhpos= +github.com/clipperhouse/uax29/v2 v2.6.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= github.com/cloudevents/sdk-go/v2 v2.16.2 h1:ZYDFrYke4FD+jM8TZTJJO6JhKHzOQl2oqpFK1D+NnQM= github.com/cloudevents/sdk-go/v2 v2.16.2/go.mod h1:laOcGImm4nVJEU+PHnUrKL56CKmRL65RlQF0kRmW/kg= -github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f h1:Y8xYupdHxryycyPlc9Y+bSQAYZnetRJ70VMVKm5CKI0= -github.com/cncf/xds/go v0.0.0-20251022180443-0feb69152e9f/go.mod h1:HlzOvOjVBOfTGSRXRyY0OiCS/3J1akRGQQpRO/7zyF4= +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/cockroach-go/v2 v2.4.3 h1:LJO3K3jC5WXvMePRQSJE1NsIGoFGcEx1LW83W6RAlhw= github.com/cockroachdb/cockroach-go/v2 v2.4.3/go.mod h1:9U179XbCx4qFWtNhc7BiWLPfuyMVQ7qdAhfrwLz1vH0= -github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= -github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= +github.com/coder/websocket v1.8.14 h1:9L0p0iKiNOibykf283eHkKUHHrpG7f65OE3BhhO7v9g= +github.com/coder/websocket v1.8.14/go.mod h1:NX3SzP+inril6yawo5CQXx8+fk145lPDC6pumgx0mVg= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -105,12 +109,12 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329 h1:K+fnvUM0VZ7ZFJf0n4L/BRlnsb9pL/GuDG6FqaH+PwM= github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329/go.mod h1:Alz8LEClvR7xKsrq3qzoc4N0guvVNSS8KmSChGYr9hs= -github.com/envoyproxy/go-control-plane/envoy v1.35.0 h1:ixjkELDE+ru6idPxcHLj8LBVc2bFP7iBytj353BoHUo= -github.com/envoyproxy/go-control-plane/envoy v1.35.0/go.mod h1:09qwbGVuSWWAyN5t/b3iyVfz5+z8QWGrzkoqm/8SbEs= +github.com/envoyproxy/go-control-plane/envoy v1.36.0 h1:yg/JjO5E7ubRyKX3m07GF3reDNEnfOboJ0QySbH736g= +github.com/envoyproxy/go-control-plane/envoy v1.36.0/go.mod h1:ty89S1YCCVruQAm9OtKeEkQLTb+Lkz0k8v9W0Oxsv98= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= -github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= -github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +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/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= @@ -126,29 +130,33 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-openapi/jsonpointer v0.22.1 h1:sHYI1He3b9NqJ4wXLoJDKmUmHkWy/L7rtEo92JUxBNk= -github.com/go-openapi/jsonpointer v0.22.1/go.mod h1:pQT9OsLkfz1yWoMgYFy4x3U5GY5nUlsOn1qSBH5MkCM= -github.com/go-openapi/jsonreference v0.21.2 h1:Wxjda4M/BBQllegefXrY/9aq1fxBA8sI5M/lFU6tSWU= -github.com/go-openapi/jsonreference v0.21.2/go.mod h1:pp3PEjIsJ9CZDGCNOyXIQxsNuroxm8FAJ/+quA0yKzQ= -github.com/go-openapi/spec v0.22.0 h1:xT/EsX4frL3U09QviRIZXvkh80yibxQmtoEvyqug0Tw= -github.com/go-openapi/spec v0.22.0/go.mod h1:K0FhKxkez8YNS94XzF8YKEMULbFrRw4m15i2YUht4L0= +github.com/go-openapi/jsonpointer v0.22.4 h1:dZtK82WlNpVLDW2jlA1YCiVJFVqkED1MegOUy9kR5T4= +github.com/go-openapi/jsonpointer v0.22.4/go.mod h1:elX9+UgznpFhgBuaMQ7iu4lvvX1nvNsesQ3oxmYTw80= +github.com/go-openapi/jsonreference v0.21.4 h1:24qaE2y9bx/q3uRK/qN+TDwbok1NhbSmGjjySRCHtC8= +github.com/go-openapi/jsonreference v0.21.4/go.mod h1:rIENPTjDbLpzQmQWCj5kKj3ZlmEh+EFVbz3RTUh30/4= +github.com/go-openapi/spec v0.22.3 h1:qRSmj6Smz2rEBxMnLRBMeBWxbbOvuOoElvSvObIgwQc= +github.com/go-openapi/spec v0.22.3/go.mod h1:iIImLODL2loCh3Vnox8TY2YWYJZjMAKYyLH2Mu8lOZs= github.com/go-openapi/swag v0.19.15 h1:D2NRCBzS9/pEY3gP9Nl8aDqGUcPFrwG2p+CNFrLyrCM= -github.com/go-openapi/swag/conv v0.25.1 h1:+9o8YUg6QuqqBM5X6rYL/p1dpWeZRhoIt9x7CCP+he0= -github.com/go-openapi/swag/conv v0.25.1/go.mod h1:Z1mFEGPfyIKPu0806khI3zF+/EUXde+fdeksUl2NiDs= -github.com/go-openapi/swag/jsonname v0.25.1 h1:Sgx+qbwa4ej6AomWC6pEfXrA6uP2RkaNjA9BR8a1RJU= -github.com/go-openapi/swag/jsonname v0.25.1/go.mod h1:71Tekow6UOLBD3wS7XhdT98g5J5GR13NOTQ9/6Q11Zo= -github.com/go-openapi/swag/jsonutils v0.25.1 h1:AihLHaD0brrkJoMqEZOBNzTLnk81Kg9cWr+SPtxtgl8= -github.com/go-openapi/swag/jsonutils v0.25.1/go.mod h1:JpEkAjxQXpiaHmRO04N1zE4qbUEg3b7Udll7AMGTNOo= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.1 h1:DSQGcdB6G0N9c/KhtpYc71PzzGEIc/fZ1no35x4/XBY= -github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.1/go.mod h1:kjmweouyPwRUEYMSrbAidoLMGeJ5p6zdHi9BgZiqmsg= -github.com/go-openapi/swag/loading v0.25.1 h1:6OruqzjWoJyanZOim58iG2vj934TysYVptyaoXS24kw= -github.com/go-openapi/swag/loading v0.25.1/go.mod h1:xoIe2EG32NOYYbqxvXgPzne989bWvSNoWoyQVWEZicc= -github.com/go-openapi/swag/stringutils v0.25.1 h1:Xasqgjvk30eUe8VKdmyzKtjkVjeiXx1Iz0zDfMNpPbw= -github.com/go-openapi/swag/stringutils v0.25.1/go.mod h1:JLdSAq5169HaiDUbTvArA2yQxmgn4D6h4A+4HqVvAYg= -github.com/go-openapi/swag/typeutils v0.25.1 h1:rD/9HsEQieewNt6/k+JBwkxuAHktFtH3I3ysiFZqukA= -github.com/go-openapi/swag/typeutils v0.25.1/go.mod h1:9McMC/oCdS4BKwk2shEB7x17P6HmMmA6dQRtAkSnNb8= -github.com/go-openapi/swag/yamlutils v0.25.1 h1:mry5ez8joJwzvMbaTGLhw8pXUnhDK91oSJLDPF1bmGk= -github.com/go-openapi/swag/yamlutils v0.25.1/go.mod h1:cm9ywbzncy3y6uPm/97ysW8+wZ09qsks+9RS8fLWKqg= +github.com/go-openapi/swag/conv v0.25.4 h1:/Dd7p0LZXczgUcC/Ikm1+YqVzkEeCc9LnOWjfkpkfe4= +github.com/go-openapi/swag/conv v0.25.4/go.mod h1:3LXfie/lwoAv0NHoEuY1hjoFAYkvlqI/Bn5EQDD3PPU= +github.com/go-openapi/swag/jsonname v0.25.4 h1:bZH0+MsS03MbnwBXYhuTttMOqk+5KcQ9869Vye1bNHI= +github.com/go-openapi/swag/jsonname v0.25.4/go.mod h1:GPVEk9CWVhNvWhZgrnvRA6utbAltopbKwDu8mXNUMag= +github.com/go-openapi/swag/jsonutils v0.25.4 h1:VSchfbGhD4UTf4vCdR2F4TLBdLwHyUDTd1/q4i+jGZA= +github.com/go-openapi/swag/jsonutils v0.25.4/go.mod h1:7OYGXpvVFPn4PpaSdPHJBtF0iGnbEaTk8AvBkoWnaAY= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.4 h1:IACsSvBhiNJwlDix7wq39SS2Fh7lUOCJRmx/4SN4sVo= +github.com/go-openapi/swag/jsonutils/fixtures_test v0.25.4/go.mod h1:Mt0Ost9l3cUzVv4OEZG+WSeoHwjWLnarzMePNDAOBiM= +github.com/go-openapi/swag/loading v0.25.4 h1:jN4MvLj0X6yhCDduRsxDDw1aHe+ZWoLjW+9ZQWIKn2s= +github.com/go-openapi/swag/loading v0.25.4/go.mod h1:rpUM1ZiyEP9+mNLIQUdMiD7dCETXvkkC30z53i+ftTE= +github.com/go-openapi/swag/stringutils v0.25.4 h1:O6dU1Rd8bej4HPA3/CLPciNBBDwZj9HiEpdVsb8B5A8= +github.com/go-openapi/swag/stringutils v0.25.4/go.mod h1:GTsRvhJW5xM5gkgiFe0fV3PUlFm0dr8vki6/VSRaZK0= +github.com/go-openapi/swag/typeutils v0.25.4 h1:1/fbZOUN472NTc39zpa+YGHn3jzHWhv42wAJSN91wRw= +github.com/go-openapi/swag/typeutils v0.25.4/go.mod h1:Ou7g//Wx8tTLS9vG0UmzfCsjZjKhpjxayRKTHXf2pTE= +github.com/go-openapi/swag/yamlutils v0.25.4 h1:6jdaeSItEUb7ioS9lFoCZ65Cne1/RZtPBZ9A56h92Sw= +github.com/go-openapi/swag/yamlutils v0.25.4/go.mod h1:MNzq1ulQu+yd8Kl7wPOut/YHAAU/H6hL91fF+E2RFwc= +github.com/go-openapi/testify/enable/yaml/v2 v2.0.2 h1:0+Y41Pz1NkbTHz8NngxTuAXxEodtNSI1WG1c/m5Akw4= +github.com/go-openapi/testify/enable/yaml/v2 v2.0.2/go.mod h1:kme83333GCtJQHXQ8UKX3IBZu6z8T5Dvy5+CW3NLUUg= +github.com/go-openapi/testify/v2 v2.0.2 h1:X999g3jeLcoY8qctY/c/Z8iBHTbwLz7R2WXd6Ub6wls= +github.com/go-openapi/testify/v2 v2.0.2/go.mod h1:HCPmvFFnheKK2BuwSA0TbbdxJ3I16pjwMkYkP4Ywn54= github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1aweo= github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -182,32 +190,34 @@ 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= github.com/googleapis/enterprise-certificate-proxy v0.3.11 h1:vAe81Msw+8tKUxi2Dqh/NZMz7475yUvmRIkXr4oN2ao= github.com/googleapis/enterprise-certificate-proxy v0.3.11/go.mod h1:RFV7MUdlb7AgEq2v7FmMCfeSMCllAzWxFgRdusoGks8= -github.com/googleapis/gax-go/v2 v2.16.0 h1:iHbQmKLLZrexmb0OSsNGTeSTS0HO4YvFOG8g5E4Zd0Y= -github.com/googleapis/gax-go/v2 v2.16.0/go.mod h1:o1vfQjjNZn4+dPnRdl/4ZD7S9414Y4xA+a/6Icj6l14= +github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= +github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48= github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw= -github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= -github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= +github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hirosassa/zerodriver v0.1.4 h1:8bzamKUOHHq03aEk12qi/lnji2dM+IhFOe+RpKpIZFM= github.com/hirosassa/zerodriver v0.1.4/go.mod h1:hHOOAQvVGwBV1iVVYujM6vwOBBqQcBIFpJxCD9mJU7Y= github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/inbucket/html2text v1.0.0 h1:N5kza++4uBBDJ2Z3KUnTRyPNoBcW+YfOgNiNmNB+sgs= +github.com/inbucket/html2text v1.0.0/go.mod h1:5TrhXQKGU+LXurODaSm55Y9eXoPBRnYiOz4x2XfUoJU= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.7.6 h1:rWQc5FwZSPX58r1OQmkuaNicxdmExaEz5A2DO2hUuTk= -github.com/jackc/pgx/v5 v5.7.6/go.mod h1:aruU7o91Tc2q2cFp5h4uP3f6ztExVpyVv88Xl/8Vl8M= +github.com/jackc/pgx/v5 v5.8.0 h1:TYPDoleBBme0xGSAX3/+NujXXtpZn9HBONkQC7IEZSo= +github.com/jackc/pgx/v5 v5.8.0/go.mod h1:QVeDInX2m9VyzvNeiCJVjCkNFqzsNb43204HshNSZKw= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jaswdr/faker/v2 v2.9.1 h1:J0Rjqb2/FquZnoZplzkGVL5LmhNkeIpvsSMoJKzn+8E= @@ -229,8 +239,8 @@ github.com/jszwec/csvutil v1.10.0/go.mod h1:/E4ONrmGkwmWsk9ae9jpXnv9QT8pLHEPcCir github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= -github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/compress v1.18.3 h1:9PJRvfbmTabkOX8moIpXPbMMbYN60bWImDDU7L+/6zw= +github.com/klauspost/compress v1.18.3/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -249,11 +259,10 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= -github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= -github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.33 h1:A5blZ5ulQo2AtayQ9/limgHEkFreKj1Dv226a1K73s0= +github.com/mattn/go-sqlite3 v1.14.33/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= @@ -266,8 +275,14 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/nyaruka/phonenumbers v1.6.8 h1:k7HAJ/LeBkXE0vfbajITzTCZD0z0j+epdBNx43yTygk= github.com/nyaruka/phonenumbers v1.6.8/go.mod h1:IUu45lj2bSeYXQuxDyyuzOrdV10tyRa1YSsfH8EKN5c= -github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 h1:zrbMGy9YXpIeTnGj4EljqMiZsIcE09mmF8XsD5AYOJc= +github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0= +github.com/olekukonko/errors v1.2.0 h1:10Zcn4GeV59t/EGqJc8fUjtFT/FuUh5bTMzZ1XwmCRo= +github.com/olekukonko/errors v1.2.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= +github.com/olekukonko/ll v0.1.4 h1:QcDaO9quz213xqHZr0gElOcYeOSnFeq7HTQ9Wu4O1wE= +github.com/olekukonko/ll v0.1.4/go.mod h1:b52bVQRRPObe+yyBl0TxNfhesL0nedD4Cht0/zx55Ew= +github.com/olekukonko/tablewriter v1.1.3 h1:VSHhghXxrP0JHl+0NnKid7WoEmd9/urKRJLysb70nnA= +github.com/olekukonko/tablewriter v1.1.3/go.mod h1:9VU0knjhmMkXjnMKrZ3+L2JhhtsQ/L38BbL3CRNE8tM= github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 h1:nRlQD0u1871kaznCnn1EvYiMbum36v7hw1DLPEjds4o= github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177/go.mod h1:ao5zGxj8Z4x60IOVYZUbDSmt3R8Ddo080vEgPosHpak= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= @@ -275,8 +290,8 @@ github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTK github.com/paulmach/orb v0.12.0 h1:z+zOwjmG3MyEEqzv92UN49Lg1JFYx0L9GpGKNVDKk1s= github.com/paulmach/orb v0.12.0/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU= github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY= -github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= -github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.25 h1:kocOqRffaIbU5djlIBr7Wh+cx82C0vtFb0fOurZHqD0= +github.com/pierrec/lz4/v4 v4.1.25/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= @@ -292,11 +307,10 @@ github.com/redis/go-redis/extra/redisotel/v9 v9.17.3 h1:bF0e3fV7PL0knd1UHDtMud8w github.com/redis/go-redis/extra/redisotel/v9 v9.17.3/go.mod h1:gR39sPK/dJZlqgIA9Nm4JFHcQJPyhsISBLj708nrD4w= github.com/redis/go-redis/v9 v9.17.3 h1:fN29NdNrE17KttK5Ndf20buqfDZwGNgoUr9qjl1DQx4= github.com/redis/go-redis/v9 v9.17.3/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= -github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM= -github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk= -github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= -github.com/richardlehane/msoleps v1.0.4 h1:WuESlvhX3gH2IHcd8UqyCuFY5yiq/GR/yqaSM/9/g00= -github.com/richardlehane/msoleps v1.0.4/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/richardlehane/mscfb v1.0.6 h1:eN3bvvZCp00bs7Zf52bxNwAx5lJDBK1tCuH19qq5aC8= +github.com/richardlehane/mscfb v1.0.6/go.mod h1:pe0+IUIc0AHh0+teNzBlJCtSyZdFOGgV4ZK9bsoV+Jo= +github.com/richardlehane/msoleps v1.0.6 h1:9BvkpjvD+iUBalUY4esMwv6uBkfOip/Lzvd93jvR9gg= +github.com/richardlehane/msoleps v1.0.6/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= @@ -325,20 +339,20 @@ github.com/swaggo/swag v1.16.6/go.mod h1:ngP2etMK5a0P3QBizic5MEwpRmluJZPHjXcMoj4 github.com/thedevsaddam/govalidator v1.9.10 h1:m3dLRbSZ5Hts3VUWYe+vxLMG+FdyQuWOjzTeQRiMCvU= github.com/thedevsaddam/govalidator v1.9.10/go.mod h1:Ilx8u7cg5g3LXbSS943cx5kczyNuUn7LH/cK5MYuE90= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tiendc/go-deepcopy v1.7.1 h1:LnubftI6nYaaMOcaz0LphzwraqN8jiWTwm416sitff4= -github.com/tiendc/go-deepcopy v1.7.1/go.mod h1:4bKjNC2r7boYOkD2IOuZpYjmlDdzjbpTRyCx+goBCJQ= +github.com/tiendc/go-deepcopy v1.7.2 h1:Ut2yYR7W9tWjTQitganoIue4UGxZwCcJy3orjrrIj44= +github.com/tiendc/go-deepcopy v1.7.2/go.mod h1:4bKjNC2r7boYOkD2IOuZpYjmlDdzjbpTRyCx+goBCJQ= github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc h1:lzi/5fg2EfinRlh3v//YyIhnc4tY7BTqazQGwb1ar+0= github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc/go.mod h1:08inkKyguB6CGGssc/JzhmQWwBgFQBgjlYFjxjRh7nU= github.com/uptrace/uptrace-go v1.39.0 h1:MszuE3eX/z86xzYywN2JBtYcmsS4ofdo1VMDhRvkWrI= github.com/uptrace/uptrace-go v1.39.0/go.mod h1:FquipEqgTMXPbhdhenjbiLHG1R5WYdxVH6zgwHeMzzA= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.67.0 h1:tqKlJMUP6iuNG8hGjK/s9J4kadH7HLV4ijEcPGsezac= -github.com/valyala/fasthttp v1.67.0/go.mod h1:qYSIpqt/0XNmShgo/8Aq8E3UYWVVwNS2QYmzd8WIEPM= +github.com/valyala/fasthttp v1.69.0 h1:fNLLESD2SooWeh2cidsuFtOcrEi4uB4m1mPrkJMZyVI= +github.com/valyala/fasthttp v1.69.0/go.mod h1:4wA4PfAraPlAsJ5jMSqCE2ug5tqUPwKXxVj8oNECGcw= github.com/vanng822/css v1.0.1 h1:10yiXc4e8NI8ldU6mSrWmSWMuyWgPr9DZ63RSlsgDw8= github.com/vanng822/css v1.0.1/go.mod h1:tcnB1voG49QhCrwq1W0w5hhGasvOg+VQp9i9H1rCM1w= -github.com/vanng822/go-premailer v1.25.0 h1:hGHKfroCXrCDTyGVR8o4HCON5/HWvc7C1uocS+VnaZs= -github.com/vanng822/go-premailer v1.25.0/go.mod h1:8WJKIPZtegxqSOA8+eDFx7QNesKmMYfGEIodLTJqrtM= +github.com/vanng822/go-premailer v1.30.0 h1:9oAp2PrJm4rvPnBgP57J/K1sJ1fQvSrU8TxamFvvwGU= +github.com/vanng822/go-premailer v1.30.0/go.mod h1:1okMIRBIcWIK1g5vJKaXi2ytD1ulsIc9wUGwK7UD3/I= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= @@ -357,56 +371,56 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= 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 v1.38.0 h1:msaHYZ13HfLIbqXsGwZZQBg5zgxwumlZ1mCkXn3E7LM= -go.opentelemetry.io/contrib v1.38.0/go.mod h1:4Vp7Az5Dez02V1lCi9OqLvSmSz0lbZu/O2r4XZsqwB0= -go.opentelemetry.io/contrib/detectors/gcp v1.38.0 h1:ZoYbqX7OaA/TAikspPl3ozPI6iY6LiIY9I8cUfm+pJs= -go.opentelemetry.io/contrib/detectors/gcp v1.38.0/go.mod h1:SU+iU7nu5ud4oCb3LQOhIZ3nRLj6FNVrKgtflbaf2ts= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg= -go.opentelemetry.io/contrib/instrumentation/runtime v0.64.0 h1:/+/+UjlXjFcdDlXxKL1PouzX8Z2Vl0OxolRKeBEgYDw= -go.opentelemetry.io/contrib/instrumentation/runtime v0.64.0/go.mod h1:Ldm/PDuzY2DP7IypudopCR3OCOW42NJlN9+mNEroevo= +go.opentelemetry.io/contrib v1.40.0 h1:Vv1qG9EIHpJWl2EFxOlhv0WgGNYQD9s0U/z3xkEonl8= +go.opentelemetry.io/contrib v1.40.0/go.mod h1:8z64gUE9jZgMGFCiGyF7NZnN5N0xaVaxdnV2DXBmTkE= +go.opentelemetry.io/contrib/detectors/gcp v1.40.0 h1:Awaf8gmW99tZTOWqkLCOl6aw1/rxAWVlHsHIZ3fT2sA= +go.opentelemetry.io/contrib/detectors/gcp v1.40.0/go.mod h1:99OY9ZCqyLkzJLTh5XhECpLRSxcZl+ZDKBEO+jMBFR4= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0 h1:XmiuHzgJt067+a6kwyAzkhXooYVv3/TOw9cM2VfJgUM= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0/go.mod h1:KDgtbWKTQs4bM+VPUr6WlL9m/WXcmkCcBlIzqxPGzmI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb7sGddAr30RRS6xjKy7AZ2JtTOPA3oolgVSw8= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0= +go.opentelemetry.io/contrib/instrumentation/runtime v0.65.0 h1:n8qdwrebNEHF/zHpueuZ4OacdJ8CdSaP7xef9WRZXTQ= +go.opentelemetry.io/contrib/instrumentation/runtime v0.65.0/go.mod h1:Z1pjGxUL3nJ/IbDDfL6rBD0Xbz7ZOViRqrIUg4l1CYE= go.opentelemetry.io/contrib/propagators/b3 v1.19.0 h1:ulz44cpm6V5oAeg5Aw9HyqGFMS6XM7untlMEhD7YzzA= go.opentelemetry.io/contrib/propagators/b3 v1.19.0/go.mod h1:OzCmE2IVS+asTI+odXQstRGVfXQ4bXv9nMBRK0nNyqQ= -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/exporters/otlp/otlplog/otlploghttp v0.15.0 h1:EKpiGphOYq3CYnIe2eX9ftUkyU+Y8Dtte8OaWyHJ4+I= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.15.0/go.mod h1:nWFP7C+T8TygkTjJ7mAyEaFaE7wNfms3nV/vexZ6qt0= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.39.0 h1:nKP4Z2ejtHn3yShBb+2KawiXgpn8In5cT7aO2wXuOTE= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.39.0/go.mod h1:NwjeBbNigsO4Aj9WgM0C+cKIrxsZUaRmZUO7A8I7u8o= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0 h1:Ckwye2FpXkYgiHX7fyVrN1uA/UYd9ounqqTuSNAv0k4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0/go.mod h1:teIFJh5pW2y+AN7riv6IBPX2DuesS3HgP39mwOspKwU= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.39.0 h1:8UPA4IbVZxpsD76ihGOQiFml99GPAEZLohDXvqHdi6U= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.39.0/go.mod h1:MZ1T/+51uIVKlRzGw1Fo46KEWThjlCBZKl2LzY5nv4g= -go.opentelemetry.io/otel/log v0.15.0 h1:0VqVnc3MgyYd7QqNVIldC3dsLFKgazR6P3P3+ypkyDY= -go.opentelemetry.io/otel/log v0.15.0/go.mod h1:9c/G1zbyZfgu1HmQD7Qj84QMmwTp2QCQsZH1aeoWDE4= -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 v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= +go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0 h1:djrxvDxAe44mJUrKataUbOhCKhR3F8QCyWucO16hTQs= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0/go.mod h1:dt3nxpQEiSoKvfTVxp3TUg5fHPLhKtbcnN3Z1I1ePD0= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.40.0 h1:9y5sHvAxWzft1WQ4BwqcvA+IFVUJ1Ya75mSAUnFEVwE= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.40.0/go.mod h1:eQqT90eR3X5Dbs1g9YSM30RavwLF725Ris5/XSXWvqE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.40.0 h1:MzfofMZN8ulNqobCmCAVbqVL5syHw+eB2qPRkCMA/fQ= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.40.0/go.mod h1:E73G9UFtKRXrxhBsHtG00TB5WxX57lpsQzogDkqBTz8= +go.opentelemetry.io/otel/log v0.16.0 h1:DeuBPqCi6pQwtCK0pO4fvMB5eBq6sNxEnuTs88pjsN4= +go.opentelemetry.io/otel/log v0.16.0/go.mod h1:rWsmqNVTLIA8UnwYVOItjyEZDbKIkMxdQunsIhpUMes= +go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= +go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= go.opentelemetry.io/otel/oteltest v1.0.0-RC3 h1:MjaeegZTaX0Bv9uB9CrdVjOFM/8slRjReoWoV9xDCpY= go.opentelemetry.io/otel/oteltest v1.0.0-RC3/go.mod h1:xpzajI9JBRr7gX63nO6kAmImmYIAtuQblZ36Z+LfCjE= -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/log v0.15.0 h1:WgMEHOUt5gjJE93yqfqJOkRflApNif84kxoHWS9VVHE= -go.opentelemetry.io/otel/sdk/log v0.15.0/go.mod h1:qDC/FlKQCXfH5hokGsNg9aUBGMJQsrUyeOiW5u+dKBQ= -go.opentelemetry.io/otel/sdk/log/logtest v0.14.0 h1:Ijbtz+JKXl8T2MngiwqBlPaHqc4YCaP/i13Qrow6gAM= -go.opentelemetry.io/otel/sdk/log/logtest v0.14.0/go.mod h1:dCU8aEL6q+L9cYTqcVOk8rM9Tp8WdnHOPLiBgp0SGOA= -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= +go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= +go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= +go.opentelemetry.io/otel/sdk/log v0.16.0 h1:e/b4bdlQwC5fnGtG3dlXUrNOnP7c8YLVSpSfEBIkTnI= +go.opentelemetry.io/otel/sdk/log v0.16.0/go.mod h1:JKfP3T6ycy7QEuv3Hj8oKDy7KItrEkus8XJE6EoSzw4= +go.opentelemetry.io/otel/sdk/log/logtest v0.16.0 h1:/XVkpZ41rVRTP4DfMgYv1nEtNmf65XPPyAdqV90TMy4= +go.opentelemetry.io/otel/sdk/log/logtest v0.16.0/go.mod h1:iOOPgQr5MY9oac/F5W86mXdeyWZGleIx3uXO98X2R6Y= +go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= +go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= +go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= +go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= -go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= +go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -421,8 +435,8 @@ golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= 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/exp v0.0.0-20251009144603-d2f985daa21b h1:18qgiDvlvH7kk8Ioa8Ov+K6xCi0GMvmGfGW0sgd/SYA= -golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= +golang.org/x/exp v0.0.0-20260112195511-716be5621a96 h1:Z/6YuSHTLOHfNFdb8zVZomZr7cqNgTJvA8+Qz75D8gU= +golang.org/x/exp v0.0.0-20260112195511-716be5621a96/go.mod h1:nzimsREAkjBCIEFtHiYkrJyT+2uy9YZJB7H1k68CXZU= golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ= golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -432,8 +446,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -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.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= +golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -449,8 +463,8 @@ golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= 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/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= -golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= +golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -479,8 +493,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= -golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= 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= @@ -513,24 +527,24 @@ 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.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -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.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= +golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= 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= -google.golang.org/api v0.264.0 h1:+Fo3DQXBK8gLdf8rFZ3uLu39JpOnhvzJrLMQSoSYZJM= -google.golang.org/api v0.264.0/go.mod h1:fAU1xtNNisHgOF5JooAs8rRaTkl2rT3uaoNGo9NS3R8= +google.golang.org/api v0.265.0 h1:FZvfUdI8nfmuNrE34aOWFPmLC+qRBEiNm3JdivTvAAU= +google.golang.org/api v0.265.0/go.mod h1:uAvfEl3SLUj/7n6k+lJutcswVojHPp2Sp08jWCu8hLY= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 h1:GvESR9BIyHUahIb0NcTum6itIWtdoglGX+rnGxm2934= -google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:yJ2HH4EHEDTd3JiLmhds6NkJ17ITVYOdV3m3VKOnws0= -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-20260122232226-8e98ce8d340d h1:xXzuihhT3gL/ntduUZwHECzAn57E8dA6l8SOtYWdD8Q= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260122232226-8e98ce8d340d/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/genproto v0.0.0-20260203192932-546029d2fa20 h1:/CU1zrxTpGylJJbe3Ru94yy6sZRbzALq2/oxl3pGB3U= +google.golang.org/genproto v0.0.0-20260203192932-546029d2fa20/go.mod h1:Tt+08/KdKEt3l8x3Pby3HLQxMB3uk/MzaQ4ZIv0ORTs= +google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= +google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20/go.mod h1:ZdbssH/1SOVnjnDlXzxDHK2MCidiqXtbYccJNzNYPEE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 h1:Jr5R2J6F6qWyzINc+4AM8t5pfUz6beZpHp678GNrMbE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= From bb98f3d7b98bace5aa5efd404872a6d19581fe42 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 8 Feb 2026 22:51:06 +0200 Subject: [PATCH 032/128] Change hermes package --- api/go.mod | 23 +++++---- api/go.sum | 26 +++++----- api/pkg/emails/hermes_mailer.go | 2 +- .../hermes_notification_email_factory.go | 48 +++++++++---------- api/pkg/emails/hermes_theme.go | 6 ++- api/pkg/emails/hermes_user_email_factory.go | 2 +- 6 files changed, 58 insertions(+), 49 deletions(-) diff --git a/api/go.mod b/api/go.mod index 7160e3dc..076b10e5 100644 --- a/api/go.mod +++ b/api/go.mod @@ -17,6 +17,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/dgraph-io/ristretto/v2 v2.4.0 github.com/dustin/go-humanize v1.0.1 + github.com/go-hermes/hermes/v2 v2.6.2 github.com/gofiber/contrib/otelfiber v1.0.10 github.com/gofiber/fiber/v2 v2.52.11 github.com/gofiber/swagger v1.1.1 @@ -30,7 +31,6 @@ require ( github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible github.com/jszwec/csvutil v1.10.0 github.com/lib/pq v1.11.1 - github.com/matcornic/hermes v1.3.0 github.com/nyaruka/phonenumbers v1.6.8 github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 github.com/patrickmn/go-cache v2.1.0+incompatible @@ -58,6 +58,18 @@ require ( gorm.io/plugin/opentelemetry v0.1.16 ) +require ( + github.com/Masterminds/semver/v3 v3.4.0 // indirect + github.com/Masterminds/sprig/v3 v3.3.0 // indirect + github.com/inbucket/html2text v1.0.0 // indirect + github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect + github.com/olekukonko/errors v1.2.0 // indirect + github.com/olekukonko/ll v0.1.4 // indirect + github.com/sirupsen/logrus v1.9.4 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/yuin/goldmark v1.7.16 // indirect +) + require ( cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect @@ -78,8 +90,6 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/Masterminds/goutils v1.1.1 // indirect - github.com/Masterminds/semver v1.5.0 // indirect - github.com/Masterminds/sprig v2.22.0+incompatible // indirect github.com/PuerkitoBio/goquery v1.11.0 // indirect github.com/andybalholm/brotli v1.2.0 // indirect github.com/andybalholm/cascadia v1.3.3 // indirect @@ -121,13 +131,10 @@ require ( github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-version v1.8.0 // indirect github.com/huandu/xstrings v1.5.0 // indirect - github.com/imdario/mergo v0.3.16 // indirect - github.com/inbucket/html2text v1.0.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect github.com/jackc/pgx/v5 v5.8.0 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect - github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/compress v1.18.3 // indirect @@ -139,9 +146,6 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect - github.com/olekukonko/errors v1.2.0 // indirect - github.com/olekukonko/ll v0.1.4 // indirect github.com/olekukonko/tablewriter v1.1.3 // indirect github.com/paulmach/orb v0.12.0 // indirect github.com/pierrec/lz4/v4 v4.1.25 // indirect @@ -150,7 +154,6 @@ require ( github.com/redis/go-redis/extra/rediscmd/v9 v9.17.3 // indirect github.com/richardlehane/mscfb v1.0.6 // indirect github.com/richardlehane/msoleps v1.0.6 // indirect - github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/segmentio/asm v1.2.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect diff --git a/api/go.sum b/api/go.sum index f09c7cbb..5da59ad3 100644 --- a/api/go.sum +++ b/api/go.sum @@ -50,10 +50,10 @@ github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= +github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/Masterminds/sprig/v3 v3.3.0 h1:mQh0Yrg1XPo6vjYXgtf5OtijNAKJRNcTdOOGZe3tPhs= +github.com/Masterminds/sprig/v3 v3.3.0/go.mod h1:Zy1iXRYNqNLUolqCpL4uhk6SHUMAOSCzdgBfDb35Lz0= github.com/NdoleStudio/go-otelroundtripper v0.0.13 h1:fDgdxcNJov4LTrMhXqJnF/E3jO4HJVczj90wkxh5PSc= github.com/NdoleStudio/go-otelroundtripper v0.0.13/go.mod h1:UIUQ22ErFoBUyLuPDrVNRRKmBHBTfzQO9GF1ztqDvqo= github.com/NdoleStudio/lemonsqueezy-go v1.3.1 h1:lMUVgdAx2onbOUJIVPR05xAANYuCMXBRaGWpAdA4LiM= @@ -119,10 +119,14 @@ github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw= github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw= github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg= github.com/go-faster/errors v0.7.1/go.mod h1:5ySTjWFiphBs07IKuiL69nxdfd5+fzh1u7FPGZP2quo= +github.com/go-hermes/hermes/v2 v2.6.2 h1:RuGQlICVtIHixfxtYwN7hAoqGyGxr+D3kE42oE6emcw= +github.com/go-hermes/hermes/v2 v2.6.2/go.mod h1:RLVNk31/1KqF35vK3mAaQVuJvMH+K5//6OTGJk+j/80= github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -208,8 +212,6 @@ github.com/hirosassa/zerodriver v0.1.4 h1:8bzamKUOHHq03aEk12qi/lnji2dM+IhFOe+RpK github.com/hirosassa/zerodriver v0.1.4/go.mod h1:hHOOAQvVGwBV1iVVYujM6vwOBBqQcBIFpJxCD9mJU7Y= github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= -github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inbucket/html2text v1.0.0 h1:N5kza++4uBBDJ2Z3KUnTRyPNoBcW+YfOgNiNmNB+sgs= github.com/inbucket/html2text v1.0.0/go.mod h1:5TrhXQKGU+LXurODaSm55Y9eXoPBRnYiOz4x2XfUoJU= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= @@ -222,8 +224,6 @@ github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jaswdr/faker/v2 v2.9.1 h1:J0Rjqb2/FquZnoZplzkGVL5LmhNkeIpvsSMoJKzn+8E= github.com/jaswdr/faker/v2 v2.9.1/go.mod h1:jZq+qzNQr8/P+5fHd9t3txe2GNPnthrTfohtnJ7B+68= -github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 h1:iCHtR9CQyktQ5+f3dMVZfwD2KWJUgm7M0gdL9NGr8KA= -github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056/go.mod h1:CVKlgaMiht+LXvHG173ujK6JUhZXKb2u/BQtjPDIvyk= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= @@ -250,8 +250,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/lib/pq v1.11.1 h1:wuChtj2hfsGmmx3nf1m7xC2XpK6OtelS2shMY+bGMtI= github.com/lib/pq v1.11.1/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= -github.com/matcornic/hermes v1.3.0 h1:k6rih7zpUgfIF/57F3WeBi9n68XkvhC/z8eQTRIsQqc= -github.com/matcornic/hermes v1.3.0/go.mod h1:X3MXWWBHjKSfgQl0xjv+NQTAGWSiNr/fZTlhAEQJ63Q= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= @@ -316,12 +314,14 @@ github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7 github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0= github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= +github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= +github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= github.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo= github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs= github.com/ssor/bom v0.0.0-20170718123548-6386211fdfcf h1:pvbZ0lM0XWPBqUKqFU8cmavspvIl9nulOYwdy6IFRRo= @@ -368,6 +368,8 @@ github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7Jul github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.7.16 h1:n+CJdUxaFMiDUNnWC3dMWCIQJSkxH4uz3ZwQBkAlVNE= +github.com/yuin/goldmark v1.7.16/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= 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= diff --git a/api/pkg/emails/hermes_mailer.go b/api/pkg/emails/hermes_mailer.go index 0afce49d..7efe0f8a 100644 --- a/api/pkg/emails/hermes_mailer.go +++ b/api/pkg/emails/hermes_mailer.go @@ -5,7 +5,7 @@ import ( "strconv" "time" - "github.com/matcornic/hermes" + "github.com/go-hermes/hermes/v2" ) // HermesGeneratorConfig contains details for the generator diff --git a/api/pkg/emails/hermes_notification_email_factory.go b/api/pkg/emails/hermes_notification_email_factory.go index 0447997d..7c4b7bc5 100644 --- a/api/pkg/emails/hermes_notification_email_factory.go +++ b/api/pkg/emails/hermes_notification_email_factory.go @@ -7,7 +7,7 @@ import ( "github.com/NdoleStudio/httpsms/pkg/events" "github.com/NdoleStudio/httpsms/pkg/entities" - "github.com/matcornic/hermes" + "github.com/go-hermes/hermes/v2" "github.com/palantir/stacktrace" ) @@ -33,11 +33,11 @@ func (factory *hermesNotificationEmailFactory) DiscordSendFailed(user *entities. fmt.Sprintf("We ran into an error while fowarding an incoming SMS to your discord server at %s", user.UserTimeString(time.Now())), }, Dictionary: []hermes.Entry{ - {"Discord Channel ID", payload.DiscordChannelID}, - {"Event Name", payload.EventType}, - {"Phone Number", factory.formatPhoneNumber(payload.Owner)}, - {"HTTP Response Code", factory.formatHTTPResponseCode(payload.HTTPResponseStatusCode)}, - {"Error Message / HTTP Response", payload.ErrorMessage}, + {Key: "Discord Channel ID", Value: payload.DiscordChannelID}, + {Key: "Event Name", Value: payload.EventType}, + {Key: "Phone Number", Value: factory.formatPhoneNumber(payload.Owner)}, + {Key: "HTTP Response Code", Value: factory.formatHTTPResponseCode(payload.HTTPResponseStatusCode)}, + {Key: "Error Message / HTTP Response", Value: payload.ErrorMessage}, }, Actions: []hermes.Action{ { @@ -83,13 +83,13 @@ func (factory *hermesNotificationEmailFactory) WebhookSendFailed(user *entities. fmt.Sprintf("We ran into an error while fowarding a webhook event from httpSMS to your webserver at %s", user.UserTimeString(time.Now())), }, Dictionary: []hermes.Entry{ - {"Server URL", payload.WebhookURL}, - {"Event Name", payload.EventType}, - {"Event ID", payload.EventID}, - {"Phone Number", factory.formatPhoneNumber(payload.Owner)}, - {"HTTP Response Code", factory.formatHTTPResponseCode(payload.HTTPResponseStatusCode)}, - {"Error Message / HTTP Response", payload.ErrorMessage}, - {"Event Payload", payload.EventPayload}, + {Key: "Server URL", Value: payload.WebhookURL}, + {Key: "Event Name", Value: payload.EventType}, + {Key: "Event ID", Value: payload.EventID}, + {Key: "Phone Number", Value: factory.formatPhoneNumber(payload.Owner)}, + {Key: "HTTP Response Code", Value: factory.formatHTTPResponseCode(payload.HTTPResponseStatusCode)}, + {Key: "Error Message / HTTP Response", Value: payload.ErrorMessage}, + {Key: "Event Payload", Value: payload.EventPayload}, }, Actions: []hermes.Action{ { @@ -135,11 +135,11 @@ func (factory *hermesNotificationEmailFactory) MessageExpired(user *entities.Use fmt.Sprintf("The SMS message which you sent to %s has expired at %s and you will need to resend this message.", factory.formatPhoneNumber(payload.Contact), user.UserTimeString(time.Now())), }, Dictionary: []hermes.Entry{ - {"ID", payload.MessageID.String()}, - {"From", factory.formatPhoneNumber(payload.Owner)}, - {"To", factory.formatPhoneNumber(payload.Contact)}, - {"Message", payload.Content}, - {"Encrypted", factory.formatBool(payload.Encrypted)}, + {Key: "ID", Value: payload.MessageID.String()}, + {Key: "From", Value: factory.formatPhoneNumber(payload.Owner)}, + {Key: "To", Value: factory.formatPhoneNumber(payload.Contact)}, + {Key: "Message", Value: payload.Content}, + {Key: "Encrypted", Value: factory.formatBool(payload.Encrypted)}, }, Actions: []hermes.Action{ { @@ -185,12 +185,12 @@ func (factory *hermesNotificationEmailFactory) MessageFailed(user *entities.User fmt.Sprintf("The SMS message which you sent to %s has failed at %s and you will need to resend this message.", factory.formatPhoneNumber(payload.Contact), user.UserTimeString(time.Now())), }, Dictionary: []hermes.Entry{ - {"ID", payload.ID.String()}, - {"From", factory.formatPhoneNumber(payload.Owner)}, - {"To", factory.formatPhoneNumber(payload.Contact)}, - {"Message", payload.Content}, - {"Encrypted", factory.formatBool(payload.Encrypted)}, - {"Failure Reason", payload.ErrorMessage}, + {Key: "ID", Value: payload.ID.String()}, + {Key: "From", Value: factory.formatPhoneNumber(payload.Owner)}, + {Key: "To", Value: factory.formatPhoneNumber(payload.Contact)}, + {Key: "Message", Value: payload.Content}, + {Key: "Encrypted", Value: factory.formatBool(payload.Encrypted)}, + {Key: "Failure Reason", Value: payload.ErrorMessage}, }, Actions: []hermes.Action{ { diff --git a/api/pkg/emails/hermes_theme.go b/api/pkg/emails/hermes_theme.go index 56b49759..9d8cc471 100644 --- a/api/pkg/emails/hermes_theme.go +++ b/api/pkg/emails/hermes_theme.go @@ -1,10 +1,14 @@ package emails -import "github.com/matcornic/hermes" +import "github.com/go-hermes/hermes/v2" // hermesTheme is the theme by default type hermesTheme struct{} +func (dt *hermesTheme) Styles() hermes.StylesDefinition { + return hermes.Default{}.Styles() +} + func newHermesTheme() hermes.Theme { return &hermesTheme{} } diff --git a/api/pkg/emails/hermes_user_email_factory.go b/api/pkg/emails/hermes_user_email_factory.go index 3d50f6cc..9ec5754a 100644 --- a/api/pkg/emails/hermes_user_email_factory.go +++ b/api/pkg/emails/hermes_user_email_factory.go @@ -5,7 +5,7 @@ import ( "time" "github.com/NdoleStudio/httpsms/pkg/entities" - "github.com/matcornic/hermes" + "github.com/go-hermes/hermes/v2" "github.com/palantir/stacktrace" ) From 5a296c210f148860fba549ac6552a2a1c9abbb73 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Mon, 9 Feb 2026 00:15:08 +0200 Subject: [PATCH 033/128] increase max open connection count --- api/go.mod | 4 ++++ api/go.sum | 10 ++++++++++ api/pkg/di/container.go | 2 +- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/api/go.mod b/api/go.mod index 076b10e5..32dfa281 100644 --- a/api/go.mod +++ b/api/go.mod @@ -39,6 +39,7 @@ require ( github.com/redis/go-redis/extra/redisotel/v9 v9.17.3 github.com/redis/go-redis/v9 v9.17.3 github.com/rs/zerolog v1.34.0 + github.com/schollz/progressbar/v3 v3.19.0 github.com/stretchr/testify v1.11.1 github.com/swaggo/swag v1.16.6 github.com/thedevsaddam/govalidator v1.9.10 @@ -142,6 +143,7 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.19 // indirect github.com/mattn/go-sqlite3 v1.14.33 // indirect + github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -154,6 +156,7 @@ require ( github.com/redis/go-redis/extra/rediscmd/v9 v9.17.3 // indirect github.com/richardlehane/mscfb v1.0.6 // indirect github.com/richardlehane/msoleps v1.0.6 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/segmentio/asm v1.2.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect @@ -190,6 +193,7 @@ require ( golang.org/x/oauth2 v0.35.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect + golang.org/x/term v0.39.0 // indirect golang.org/x/text v0.33.0 // indirect golang.org/x/time v0.14.0 // indirect golang.org/x/tools v0.41.0 // indirect diff --git a/api/go.sum b/api/go.sum index 5da59ad3..6ea97382 100644 --- a/api/go.sum +++ b/api/go.sum @@ -80,6 +80,8 @@ github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1x github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= +github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= github.com/clipperhouse/displaywidth v0.9.0 h1:Qb4KOhYwRiN3viMv1v/3cTBlz3AcAZX3+y9OLhMtAtA= github.com/clipperhouse/displaywidth v0.9.0/go.mod h1:aCAAqTlh4GIVkhQnJpbL0T/WfcrJXHcj8C0yjYcjOZA= github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= @@ -261,6 +263,8 @@ github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byF github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mattn/go-sqlite3 v1.14.33 h1:A5blZ5ulQo2AtayQ9/limgHEkFreKj1Dv226a1K73s0= github.com/mattn/go-sqlite3 v1.14.33/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= @@ -309,11 +313,15 @@ github.com/richardlehane/mscfb v1.0.6 h1:eN3bvvZCp00bs7Zf52bxNwAx5lJDBK1tCuH19qq github.com/richardlehane/mscfb v1.0.6/go.mod h1:pe0+IUIc0AHh0+teNzBlJCtSyZdFOGgV4ZK9bsoV+Jo= github.com/richardlehane/msoleps v1.0.6 h1:9BvkpjvD+iUBalUY4esMwv6uBkfOip/Lzvd93jvR9gg= github.com/richardlehane/msoleps v1.0.6/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= +github.com/schollz/progressbar/v3 v3.19.0 h1:Ea18xuIRQXLAUidVDox3AbwfUhD0/1IvohyTutOIFoc= +github.com/schollz/progressbar/v3 v3.19.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0= github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= @@ -506,6 +514,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= +golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/api/pkg/di/container.go b/api/pkg/di/container.go index 0025cecb..d5315ed7 100644 --- a/api/pkg/di/container.go +++ b/api/pkg/di/container.go @@ -264,7 +264,7 @@ func (container *Container) DedicatedDB() (db *gorm.DB) { container.logger.Fatal(stacktrace.Propagate(err, "cannot get sql.DB from GORM")) } - sqlDB.SetMaxOpenConns(2) + sqlDB.SetMaxOpenConns(3) sqlDB.SetConnMaxLifetime(time.Hour) if err = db.Use(tracing.NewPlugin()); err != nil { From c30755b643fdf6084d72147006c579d6aab54d1b Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Tue, 10 Feb 2026 13:08:24 +0200 Subject: [PATCH 034/128] Get a message by ID --- api/go.mod | 14 +++++----- api/go.sum | 28 +++++++++---------- api/pkg/handlers/message_handler.go | 43 +++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 21 deletions(-) diff --git a/api/go.mod b/api/go.mod index 32dfa281..6e06d04c 100644 --- a/api/go.mod +++ b/api/go.mod @@ -186,17 +186,17 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.1 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/crypto v0.47.0 // indirect - golang.org/x/exp v0.0.0-20260112195511-716be5621a96 // indirect - golang.org/x/mod v0.32.0 // indirect - golang.org/x/net v0.49.0 // indirect + golang.org/x/crypto v0.48.0 // indirect + golang.org/x/exp v0.0.0-20260209203927-2842357ff358 // indirect + golang.org/x/mod v0.33.0 // indirect + golang.org/x/net v0.50.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect - golang.org/x/term v0.39.0 // indirect - golang.org/x/text v0.33.0 // indirect + golang.org/x/term v0.40.0 // indirect + golang.org/x/text v0.34.0 // indirect golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.41.0 // indirect + golang.org/x/tools v0.42.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20260203192932-546029d2fa20 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect diff --git a/api/go.sum b/api/go.sum index 6ea97382..b0884184 100644 --- a/api/go.sum +++ b/api/go.sum @@ -443,10 +443,10 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -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/exp v0.0.0-20260112195511-716be5621a96 h1:Z/6YuSHTLOHfNFdb8zVZomZr7cqNgTJvA8+Qz75D8gU= -golang.org/x/exp v0.0.0-20260112195511-716be5621a96/go.mod h1:nzimsREAkjBCIEFtHiYkrJyT+2uy9YZJB7H1k68CXZU= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/exp v0.0.0-20260209203927-2842357ff358 h1:kpfSV7uLwKJbFSEgNhWzGSL47NDSF/5pYYQw1V0ub6c= +golang.org/x/exp v0.0.0-20260209203927-2842357ff358/go.mod h1:R3t0oliuryB5eenPWl3rrQxwnNM3WTwnsRZZiXLAAW8= golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ= golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -456,8 +456,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c= -golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU= +golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= +golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -471,8 +471,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= -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.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -514,8 +514,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= -golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= -golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -527,8 +527,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -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.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -539,8 +539,8 @@ 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.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= -golang.org/x/tools v0.41.0/go.mod h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg= +golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= +golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= 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= diff --git a/api/pkg/handlers/message_handler.go b/api/pkg/handlers/message_handler.go index f0ec9de2..f3c10895 100644 --- a/api/pkg/handlers/message_handler.go +++ b/api/pkg/handlers/message_handler.go @@ -54,6 +54,7 @@ func (h *MessageHandler) RegisterRoutes(router fiber.Router, middlewares ...fibe router.Post("/v1/messages/bulk-send", h.computeRoute(middlewares, h.BulkSend)...) router.Get("/v1/messages", h.computeRoute(middlewares, h.Index)...) router.Get("/v1/messages/search", h.computeRoute(middlewares, h.Search)...) + router.Get("/v1/messages/:messageID", h.computeRoute(middlewares, h.Get)...) router.Delete("/v1/messages/:messageID", h.computeRoute(middlewares, h.Delete)...) } @@ -443,6 +444,48 @@ func (h *MessageHandler) Delete(c *fiber.Ctx) error { return h.responseNoContent(c, "message deleted successfully") } +// Get a message +// @Summary Get a message from the database. +// @Description Get a message from the database by the message ID. +// @Security ApiKeyAuth +// @Tags Messages +// @Accept json +// @Produce json +// @Param messageID path string true "ID of the message" default(32343a19-da5e-4b1b-a767-3298a73703ca) +// @Success 204 {object} responses.MessageResponse +// @Failure 400 {object} responses.BadRequest +// @Failure 401 {object} responses.Unauthorized +// @Failure 404 {object} responses.NotFound +// @Failure 422 {object} responses.UnprocessableEntity +// @Failure 500 {object} responses.InternalServerError +// @Router /messages/{messageID} [get] +func (h *MessageHandler) Get(c *fiber.Ctx) error { + ctx, span := h.tracer.StartFromFiberCtx(c) + defer span.End() + + ctxLogger := h.tracer.CtxLogger(h.logger, span) + + messageID := c.Params("messageID") + if errors := h.validator.ValidateUUID(messageID, "messageID"); len(errors) != 0 { + msg := fmt.Sprintf("validation errors [%s], while deleting a message with ID [%s]", spew.Sdump(errors), messageID) + ctxLogger.Warn(stacktrace.NewError(msg)) + return h.responseUnprocessableEntity(c, errors, "validation errors while storing event") + } + + message, err := h.service.GetMessage(ctx, h.userIDFomContext(c), uuid.MustParse(messageID)) + if stacktrace.GetCode(err) == repositories.ErrCodeNotFound { + return h.responseNotFound(c, fmt.Sprintf("cannot find message with ID [%s]", messageID)) + } + + if err != nil { + msg := fmt.Sprintf("cannot find message with id [%s]", messageID) + ctxLogger.Error(h.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))) + return h.responseInternalServerError(c) + } + + return h.responseNoContent(c, "message fetched successfully") +} + // PostCallMissed registers a missed phone call // @Summary Register a missed call event on the mobile phone // @Description This endpoint is called by the httpSMS android app to register a missed call event on the mobile phone. From ac51c7c6939c47a71b35c6cc101522ff86e43458 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Tue, 10 Feb 2026 11:29:31 +0000 Subject: [PATCH 035/128] Change response from no content to OK with message --- api/pkg/handlers/message_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/pkg/handlers/message_handler.go b/api/pkg/handlers/message_handler.go index f3c10895..935e9ba4 100644 --- a/api/pkg/handlers/message_handler.go +++ b/api/pkg/handlers/message_handler.go @@ -483,7 +483,7 @@ func (h *MessageHandler) Get(c *fiber.Ctx) error { return h.responseInternalServerError(c) } - return h.responseNoContent(c, "message fetched successfully") + return h.responseOK(c, "message fetched successfully", message) } // PostCallMissed registers a missed phone call From d32a7358ad631e3fd0f2477e45e7c5338c8f93d5 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Tue, 10 Feb 2026 14:56:11 +0200 Subject: [PATCH 036/128] Fix route order --- api/pkg/di/container.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/pkg/di/container.go b/api/pkg/di/container.go index d5315ed7..5d7bec4f 100644 --- a/api/pkg/di/container.go +++ b/api/pkg/di/container.go @@ -1449,8 +1449,8 @@ func (container *Container) NotificationService() (service *services.PhoneNotifi // RegisterMessageRoutes registers routes for the /messages prefix func (container *Container) RegisterMessageRoutes() { container.logger.Debug(fmt.Sprintf("registering %T routes", &handlers.MessageHandler{})) - container.MessageHandler().RegisterRoutes(container.App(), container.AuthenticatedMiddleware()) container.MessageHandler().RegisterPhoneAPIKeyRoutes(container.App(), container.PhoneAPIKeyMiddleware(), container.AuthenticatedMiddleware()) + container.MessageHandler().RegisterRoutes(container.App(), container.AuthenticatedMiddleware()) } // RegisterBulkMessageRoutes registers routes for the /bulk-messages prefix From 50f9cf6d29294a840bdfcc8cb45e4ae2acdfd849 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 15 Feb 2026 23:43:01 +0200 Subject: [PATCH 037/128] Reduce max connection lifetime to 1 minute --- api/pkg/di/container.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/pkg/di/container.go b/api/pkg/di/container.go index 5d7bec4f..1b31935a 100644 --- a/api/pkg/di/container.go +++ b/api/pkg/di/container.go @@ -265,7 +265,7 @@ func (container *Container) DedicatedDB() (db *gorm.DB) { } sqlDB.SetMaxOpenConns(3) - sqlDB.SetConnMaxLifetime(time.Hour) + sqlDB.SetConnMaxLifetime(time.Minute) if err = db.Use(tracing.NewPlugin()); err != nil { container.logger.Fatal(stacktrace.Propagate(err, "cannot use GORM tracing plugin")) From e2d10add403b44d4a8ffc354a018f7300befe5ed Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Tue, 17 Feb 2026 14:19:31 +0200 Subject: [PATCH 038/128] Use only 1 DB connection --- api/pkg/di/container.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/pkg/di/container.go b/api/pkg/di/container.go index 1b31935a..d2b48b33 100644 --- a/api/pkg/di/container.go +++ b/api/pkg/di/container.go @@ -264,8 +264,9 @@ func (container *Container) DedicatedDB() (db *gorm.DB) { container.logger.Fatal(stacktrace.Propagate(err, "cannot get sql.DB from GORM")) } - sqlDB.SetMaxOpenConns(3) - sqlDB.SetConnMaxLifetime(time.Minute) + sqlDB.SetMaxOpenConns(1) + sqlDB.SetMaxIdleConns(0) + sqlDB.SetConnMaxLifetime(-1) if err = db.Use(tracing.NewPlugin()); err != nil { container.logger.Fatal(stacktrace.Propagate(err, "cannot use GORM tracing plugin")) From abf54daa39904aee52b8521785774597925c1003 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Tue, 17 Feb 2026 23:36:40 +0200 Subject: [PATCH 039/128] Add retry for SQLite DB operations --- api/pkg/di/container.go | 2 +- .../gorm_heartbeat_monitor_repository.go | 116 ++++++++++-------- .../repositories/gorm_heartbeat_repository.go | 24 ++-- api/pkg/repositories/repository.go | 20 +++ 4 files changed, 101 insertions(+), 61 deletions(-) diff --git a/api/pkg/di/container.go b/api/pkg/di/container.go index d2b48b33..7f88251a 100644 --- a/api/pkg/di/container.go +++ b/api/pkg/di/container.go @@ -266,7 +266,7 @@ func (container *Container) DedicatedDB() (db *gorm.DB) { sqlDB.SetMaxOpenConns(1) sqlDB.SetMaxIdleConns(0) - sqlDB.SetConnMaxLifetime(-1) + sqlDB.SetConnMaxLifetime(10 * time.Second) if err = db.Use(tracing.NewPlugin()); err != nil { container.logger.Fatal(stacktrace.Propagate(err, "cannot use GORM tracing plugin")) diff --git a/api/pkg/repositories/gorm_heartbeat_monitor_repository.go b/api/pkg/repositories/gorm_heartbeat_monitor_repository.go index b88c15e2..fb892d87 100644 --- a/api/pkg/repositories/gorm_heartbeat_monitor_repository.go +++ b/api/pkg/repositories/gorm_heartbeat_monitor_repository.go @@ -22,16 +22,30 @@ type gormHeartbeatMonitorRepository struct { db *gorm.DB } +// NewGormHeartbeatMonitorRepository creates the GORM version of the HeartbeatMonitorRepository +func NewGormHeartbeatMonitorRepository( + logger telemetry.Logger, + tracer telemetry.Tracer, + db *gorm.DB, +) HeartbeatMonitorRepository { + return &gormHeartbeatMonitorRepository{ + logger: logger.WithService(fmt.Sprintf("%T", &gormHeartbeatRepository{})), + tracer: tracer, + db: db, + } +} + func (repository *gormHeartbeatMonitorRepository) DeleteAllForUser(ctx context.Context, userID entities.UserID) error { ctx, span := repository.tracer.Start(ctx) defer span.End() - if err := repository.db.WithContext(ctx).Where("user_id = ?", userID).Delete(&entities.HeartbeatMonitor{}).Error; err != nil { - msg := fmt.Sprintf("cannot delete all [%T] for user with ID [%s]", &entities.HeartbeatMonitor{}, userID) - return repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) - } - - return nil + return executeWithRetry(func() error { + if err := repository.db.WithContext(ctx).Where("user_id = ?", userID).Delete(&entities.HeartbeatMonitor{}).Error; err != nil { + msg := fmt.Sprintf("cannot delete all [%T] for user with ID [%s]", &entities.HeartbeatMonitor{}, userID) + return repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) + } + return nil + }) } // UpdatePhoneOnline updates the online status of a phone @@ -42,14 +56,16 @@ func (repository *gormHeartbeatMonitorRepository) UpdatePhoneOnline(ctx context. ctx, cancel := context.WithTimeout(ctx, dbOperationDuration) defer cancel() - err := repository.db. - Model(&entities.HeartbeatMonitor{}). - Where("id = ?", monitorID). - Where("user_id = ?", userID). - Updates(map[string]any{ - "phone_online": isOnline, - "updated_at": time.Now().UTC(), - }).Error + err := executeWithRetry(func() error { + return repository.db. + Model(&entities.HeartbeatMonitor{}). + Where("id = ?", monitorID). + Where("user_id = ?", userID). + Updates(map[string]any{ + "phone_online": isOnline, + "updated_at": time.Now().UTC(), + }).Error + }) if err != nil { msg := fmt.Sprintf("cannot update heartbeat monitor ID [%s] for user [%s]", monitorID, userID) return repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) @@ -65,13 +81,15 @@ func (repository *gormHeartbeatMonitorRepository) UpdateQueueID(ctx context.Cont ctx, cancel := context.WithTimeout(ctx, dbOperationDuration) defer cancel() - err := repository.db. - Model(&entities.HeartbeatMonitor{}). - Where("id = ?", monitorID). - Updates(map[string]any{ - "queue_id": queueID, - "updated_at": time.Now().UTC(), - }).Error + err := executeWithRetry(func() error { + return repository.db. + Model(&entities.HeartbeatMonitor{}). + Where("id = ?", monitorID). + Updates(map[string]any{ + "queue_id": queueID, + "updated_at": time.Now().UTC(), + }).Error + }) if err != nil { msg := fmt.Sprintf("cannot update heartbeat monitor ID [%s]", monitorID) return repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) @@ -86,10 +104,12 @@ func (repository *gormHeartbeatMonitorRepository) Delete(ctx context.Context, us ctx, cancel := context.WithTimeout(ctx, dbOperationDuration) defer cancel() - err := repository.db.WithContext(ctx). - Where("user_id = ?", userID). - Where("owner = ?", owner). - Delete(&entities.HeartbeatMonitor{}).Error + err := executeWithRetry(func() error { + return repository.db.WithContext(ctx). + Where("user_id = ?", userID). + Where("owner = ?", owner). + Delete(&entities.HeartbeatMonitor{}).Error + }) if err != nil { msg := fmt.Sprintf("cannot delete heartbeat monitor with owner [%s] and userID [%s]", owner, userID) return repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) @@ -98,19 +118,6 @@ func (repository *gormHeartbeatMonitorRepository) Delete(ctx context.Context, us return nil } -// NewGormHeartbeatMonitorRepository creates the GORM version of the HeartbeatMonitorRepository -func NewGormHeartbeatMonitorRepository( - logger telemetry.Logger, - tracer telemetry.Tracer, - db *gorm.DB, -) HeartbeatMonitorRepository { - return &gormHeartbeatMonitorRepository{ - logger: logger.WithService(fmt.Sprintf("%T", &gormHeartbeatRepository{})), - tracer: tracer, - db: db, - } -} - // Index entities.Message between 2 parties func (repository *gormHeartbeatMonitorRepository) Index(ctx context.Context, userID entities.UserID, owner string, params IndexParams) (*[]entities.Heartbeat, error) { ctx, span := repository.tracer.Start(ctx) @@ -121,7 +128,9 @@ func (repository *gormHeartbeatMonitorRepository) Index(ctx context.Context, use query := repository.db.WithContext(ctx).Where("user_id = ?", userID).Where("owner = ?", owner) heartbeats := new([]entities.Heartbeat) - if err := query.Order("timestamp DESC").Limit(params.Limit).Offset(params.Skip).Find(&heartbeats).Error; err != nil { + if err := executeWithRetry(func() error { + return query.Order("timestamp DESC").Limit(params.Limit).Offset(params.Skip).Find(&heartbeats).Error + }); err != nil { msg := fmt.Sprintf("cannot fetch heartbeats with owner [%s] and params [%+#v]", owner, params) return nil, repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) } @@ -137,7 +146,7 @@ func (repository *gormHeartbeatMonitorRepository) Store(ctx context.Context, hea ctx, cancel := context.WithTimeout(ctx, dbOperationDuration) defer cancel() - if err := repository.db.WithContext(ctx).Create(heartbeatMonitor).Error; err != nil { + if err := executeWithRetry(func() error { return repository.db.WithContext(ctx).Create(heartbeatMonitor).Error }); err != nil { msg := fmt.Sprintf("cannot save heartbeatMonitor monitor with ID [%s]", heartbeatMonitor.ID) return repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) } @@ -154,11 +163,12 @@ func (repository *gormHeartbeatMonitorRepository) Load(ctx context.Context, user defer cancel() phone := new(entities.HeartbeatMonitor) - err := repository.db.WithContext(ctx). - Where("user_id = ?", userID). - Where("owner = ?", owner). - First(&phone).Error - + err := executeWithRetry(func() error { + return repository.db.WithContext(ctx). + Where("user_id = ?", userID). + Where("owner = ?", owner). + First(&phone).Error + }) if errors.Is(err, gorm.ErrRecordNotFound) { msg := fmt.Sprintf("heartbeat monitor with userID [%s] and owner [%s] does not exist", userID, owner) return nil, repository.tracer.WrapErrorSpan(span, stacktrace.PropagateWithCode(err, ErrCodeNotFound, msg)) @@ -181,14 +191,16 @@ func (repository *gormHeartbeatMonitorRepository) Exists(ctx context.Context, us defer cancel() var exists bool - err := repository.db.WithContext(ctx). - Model(&entities.HeartbeatMonitor{}). - Select("count(*) > 0"). - Where("user_id = ?", userID). - Where("id = ?", monitorID). - Find(&exists).Error + err := executeWithRetry(func() error { + return repository.db.WithContext(ctx). + Model(&entities.HeartbeatMonitor{}). + Select("count(*) > 0"). + Where("user_id = ?", userID). + Where("id = ?", monitorID). + Find(&exists).Error + }) if err != nil { - msg := fmt.Sprintf("cannot check if heartbeat monitor exists with userID [%s] and montiorID [%s]", userID, monitorID) + msg := fmt.Sprintf("cannot check if heartbeat monitor exists with userID [%s] and montior ID [%s]", userID, monitorID) return exists, repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) } diff --git a/api/pkg/repositories/gorm_heartbeat_repository.go b/api/pkg/repositories/gorm_heartbeat_repository.go index 8e763f60..5b7794e9 100644 --- a/api/pkg/repositories/gorm_heartbeat_repository.go +++ b/api/pkg/repositories/gorm_heartbeat_repository.go @@ -36,7 +36,10 @@ func (repository *gormHeartbeatRepository) DeleteAllForUser(ctx context.Context, ctx, span := repository.tracer.Start(ctx) defer span.End() - if err := repository.db.WithContext(ctx).Where("user_id = ?", userID).Delete(&entities.Heartbeat{}).Error; err != nil { + err := executeWithRetry(func() error { + return repository.db.WithContext(ctx).Where("user_id = ?", userID).Delete(&entities.Heartbeat{}).Error + }) + if err != nil { msg := fmt.Sprintf("cannot delete all [%T] for user with ID [%s]", &entities.Heartbeat{}, userID) return repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) } @@ -52,11 +55,13 @@ func (repository *gormHeartbeatRepository) Last(ctx context.Context, userID enti defer cancel() heartbeat := new(entities.Heartbeat) - err := repository.db.WithContext(ctx). - Where("user_id = ?", userID). - Where("owner = ?", owner). - Order("timestamp DESC"). - First(&heartbeat).Error + err := executeWithRetry(func() error { + return repository.db.WithContext(ctx). + Where("user_id = ?", userID). + Where("owner = ?", owner). + Order("timestamp DESC"). + First(&heartbeat).Error + }) if errors.Is(err, gorm.ErrRecordNotFound) { msg := fmt.Sprintf("heartbeat with userID [%s] and owner [%s] does not exist", userID, owner) return nil, repository.tracer.WrapErrorSpan(span, stacktrace.PropagateWithCode(err, ErrCodeNotFound, msg)) @@ -85,7 +90,10 @@ func (repository *gormHeartbeatRepository) Index(ctx context.Context, userID ent } heartbeats := new([]entities.Heartbeat) - if err := query.Order("timestamp DESC").Limit(params.Limit).Offset(params.Skip).Find(&heartbeats).Error; err != nil { + err := executeWithRetry(func() error { + return query.Order("timestamp DESC").Limit(params.Limit).Offset(params.Skip).Find(&heartbeats).Error + }) + if err != nil { msg := fmt.Sprintf("cannot fetch heartbeats with owner [%s] and params [%+#v]", owner, params) return nil, repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) } @@ -101,7 +109,7 @@ func (repository *gormHeartbeatRepository) Store(ctx context.Context, heartbeat ctx, cancel := context.WithTimeout(ctx, dbOperationDuration) defer cancel() - if err := repository.db.WithContext(ctx).Create(heartbeat).Error; err != nil { + if err := executeWithRetry(func() error { return repository.db.WithContext(ctx).Create(heartbeat).Error }); err != nil { msg := fmt.Sprintf("cannot save heartbeat with ID [%s]", heartbeat.ID) return repository.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg)) } diff --git a/api/pkg/repositories/repository.go b/api/pkg/repositories/repository.go index 32ba4337..558e5249 100644 --- a/api/pkg/repositories/repository.go +++ b/api/pkg/repositories/repository.go @@ -1,8 +1,10 @@ package repositories import ( + "strings" "time" + "github.com/avast/retry-go" "github.com/palantir/stacktrace" ) @@ -21,3 +23,21 @@ const ( dbOperationDuration = 5 * time.Second ) + +// isRetryableError checks if the error is a retryable connection error +func isRetryableError(err error) bool { + msg := err.Error() + return strings.Contains(msg, "bad connection") || + strings.Contains(msg, "stream is closed") || + strings.Contains(msg, "driver: bad connection") +} + +// executeWithRetry executes a GORM query with retry logic for transient connection errors +func executeWithRetry(fn func() error) (err error) { + return retry.Do( + fn, + retry.Attempts(3), + retry.Delay(100*time.Millisecond), + retry.RetryIf(isRetryableError), + ) +} From d6ec13e21ce39a5308665e3639f1927049d447a0 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Tue, 17 Feb 2026 23:52:55 +0200 Subject: [PATCH 040/128] Returns the last error only --- api/pkg/repositories/repository.go | 1 + 1 file changed, 1 insertion(+) diff --git a/api/pkg/repositories/repository.go b/api/pkg/repositories/repository.go index 558e5249..14285dc4 100644 --- a/api/pkg/repositories/repository.go +++ b/api/pkg/repositories/repository.go @@ -36,6 +36,7 @@ func isRetryableError(err error) bool { func executeWithRetry(fn func() error) (err error) { return retry.Do( fn, + retry.LastErrorOnly(true), retry.Attempts(3), retry.Delay(100*time.Millisecond), retry.RetryIf(isRetryableError), From 1ac1dd50b4efd15fb7ab06ff090727f0df508881 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Wed, 18 Feb 2026 00:21:52 +0200 Subject: [PATCH 041/128] Update dependenceis --- api/go.mod | 54 ++++---- api/go.sum | 120 +++++++++--------- api/pkg/repositories/repository.go | 7 +- .../google_cloud_push_queue_service.go | 6 +- api/pkg/services/webhook_service.go | 6 +- 5 files changed, 98 insertions(+), 95 deletions(-) diff --git a/api/go.mod b/api/go.mod index 6e06d04c..d342b5e0 100644 --- a/api/go.mod +++ b/api/go.mod @@ -1,6 +1,6 @@ module github.com/NdoleStudio/httpsms -go 1.24.6 +go 1.25.0 require ( cloud.google.com/go/cloudtasks v1.13.7 @@ -10,7 +10,7 @@ require ( github.com/NdoleStudio/go-otelroundtripper v0.0.13 github.com/NdoleStudio/lemonsqueezy-go v1.3.1 github.com/NdoleStudio/plunk-go v0.0.2 - github.com/avast/retry-go v3.0.0+incompatible + github.com/avast/retry-go/v5 v5.0.0 github.com/carlmjohnson/requests v0.25.1 github.com/cloudevents/sdk-go/v2 v2.16.2 github.com/cockroachdb/cockroach-go/v2 v2.4.3 @@ -30,14 +30,14 @@ require ( github.com/joho/godotenv v1.5.1 github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible github.com/jszwec/csvutil v1.10.0 - github.com/lib/pq v1.11.1 - github.com/nyaruka/phonenumbers v1.6.8 + github.com/lib/pq v1.11.2 + github.com/nyaruka/phonenumbers v1.6.9 github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 github.com/pusher/pusher-http-go/v5 v5.1.1 - github.com/redis/go-redis/extra/redisotel/v9 v9.17.3 - github.com/redis/go-redis/v9 v9.17.3 + github.com/redis/go-redis/extra/redisotel/v9 v9.18.0 + github.com/redis/go-redis/v9 v9.18.0 github.com/rs/zerolog v1.34.0 github.com/schollz/progressbar/v3 v3.19.0 github.com/stretchr/testify v1.11.1 @@ -51,7 +51,7 @@ require ( go.opentelemetry.io/otel/sdk v1.40.0 go.opentelemetry.io/otel/sdk/metric v1.40.0 go.opentelemetry.io/otel/trace v1.40.0 - google.golang.org/api v0.265.0 + google.golang.org/api v0.267.0 google.golang.org/protobuf v1.36.11 gorm.io/driver/postgres v1.6.0 gorm.io/driver/sqlite v1.6.0 @@ -65,7 +65,7 @@ require ( github.com/inbucket/html2text v1.0.0 // indirect github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect github.com/olekukonko/errors v1.2.0 // indirect - github.com/olekukonko/ll v0.1.4 // indirect + github.com/olekukonko/ll v0.1.6 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/spf13/cast v1.10.0 // indirect github.com/yuin/goldmark v1.7.16 // indirect @@ -74,17 +74,17 @@ require ( require ( cel.dev/expr v0.25.1 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.18.1 // indirect + cloud.google.com/go/auth v0.18.2 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/firestore v1.21.0 // indirect cloud.google.com/go/iam v1.5.3 // indirect cloud.google.com/go/longrunning v0.8.0 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect - cloud.google.com/go/storage v1.59.2 // indirect + cloud.google.com/go/storage v1.60.0 // indirect cloud.google.com/go/trace v1.11.7 // indirect dario.cat/mergo v1.0.2 // indirect - filippo.io/edwards25519 v1.1.0 // indirect + filippo.io/edwards25519 v1.2.0 // indirect github.com/ClickHouse/ch-go v0.71.0 // indirect github.com/ClickHouse/clickhouse-go/v2 v2.43.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect @@ -97,13 +97,12 @@ require ( github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/clipperhouse/displaywidth v0.9.0 // indirect - github.com/clipperhouse/stringish v0.1.1 // indirect - github.com/clipperhouse/uax29/v2 v2.6.0 // indirect + github.com/clipperhouse/displaywidth v0.10.0 // indirect + github.com/clipperhouse/uax29/v2 v2.7.0 // indirect github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect github.com/coder/websocket v1.8.14 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect @@ -125,10 +124,10 @@ require ( github.com/go-sql-driver/mysql v1.9.3 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.11 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.12 // indirect github.com/googleapis/gax-go/v2 v2.17.0 // indirect github.com/gorilla/css v1.0.1 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-version v1.8.0 // indirect github.com/huandu/xstrings v1.5.0 // indirect @@ -138,11 +137,11 @@ require ( github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.18.3 // indirect + github.com/klauspost/compress v1.18.4 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-runewidth v0.0.19 // indirect - github.com/mattn/go-sqlite3 v1.14.33 // indirect + github.com/mattn/go-runewidth v0.0.20 // indirect + github.com/mattn/go-sqlite3 v1.14.34 // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect @@ -153,7 +152,7 @@ require ( github.com/pierrec/lz4/v4 v4.1.25 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/redis/go-redis/extra/rediscmd/v9 v9.17.3 // indirect + github.com/redis/go-redis/extra/rediscmd/v9 v9.18.0 // indirect github.com/richardlehane/mscfb v1.0.6 // indirect github.com/richardlehane/msoleps v1.0.6 // indirect github.com/rivo/uniseg v0.4.7 // indirect @@ -166,7 +165,7 @@ require ( github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.69.0 // indirect github.com/vanng822/css v1.0.1 // indirect - github.com/vanng822/go-premailer v1.30.0 // indirect + github.com/vanng822/go-premailer v1.31.0 // indirect github.com/xuri/efp v0.0.1 // indirect github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect @@ -183,11 +182,12 @@ require ( go.opentelemetry.io/otel/log v0.16.0 // indirect go.opentelemetry.io/otel/sdk/log v0.16.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect + go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.1 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/crypto v0.48.0 // indirect - golang.org/x/exp v0.0.0-20260209203927-2842357ff358 // indirect + golang.org/x/exp v0.0.0-20260212183809-81e46e3db34a // indirect golang.org/x/mod v0.33.0 // indirect golang.org/x/net v0.50.0 // indirect golang.org/x/oauth2 v0.35.0 // indirect @@ -198,10 +198,10 @@ require ( golang.org/x/time v0.14.0 // indirect golang.org/x/tools v0.42.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20260203192932-546029d2fa20 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 // indirect - google.golang.org/grpc v1.78.0 // indirect + google.golang.org/genproto v0.0.0-20260217200457-a2cb2272a1e9 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260217200457-a2cb2272a1e9 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d // indirect + google.golang.org/grpc v1.79.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gorm.io/driver/clickhouse v0.7.0 // indirect gorm.io/driver/mysql v1.6.0 // indirect diff --git a/api/go.sum b/api/go.sum index b0884184..429077da 100644 --- a/api/go.sum +++ b/api/go.sum @@ -4,8 +4,8 @@ cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.18.1 h1:IwTEx92GFUo2pJ6Qea0EU3zYvKnTAeRCODxfA/G5UWs= -cloud.google.com/go/auth v0.18.1/go.mod h1:GfTYoS9G3CWpRA3Va9doKN9mjPGRS+v41jmZAhBzbrA= +cloud.google.com/go/auth v0.18.2 h1:+Nbt5Ev0xEqxlNjd6c+yYUeosQ5TtEUaNcN/3FozlaM= +cloud.google.com/go/auth v0.18.2/go.mod h1:xD+oY7gcahcu7G2SG2DsBerfFxgPAJz17zz2joOFF3M= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/cloudtasks v1.13.7 h1:H2v8GEolNtMFfYzUpZBaZbydqU7drpyo99GtAgA+m4I= @@ -16,20 +16,20 @@ cloud.google.com/go/firestore v1.21.0 h1:BhopUsx7kh6NFx77ccRsHhrtkbJUmDAxNY3uapW cloud.google.com/go/firestore v1.21.0/go.mod h1:1xH6HNcnkf/gGyR8udd6pFO4Z7GWJSwLKQMx/u6UrP4= cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= -cloud.google.com/go/logging v1.13.1 h1:O7LvmO0kGLaHY/gq8cV7T0dyp6zJhYAOtZPX4TF3QtY= -cloud.google.com/go/logging v1.13.1/go.mod h1:XAQkfkMBxQRjQek96WLPNze7vsOmay9H5PqfsNYDqvw= +cloud.google.com/go/logging v1.13.2 h1:qqlHCBvieJT9Cdq4QqYx1KPadCQ2noD4FK02eNqHAjA= +cloud.google.com/go/logging v1.13.2/go.mod h1:zaybliM3yun1J8mU2dVQ1/qDzjbOqEijZCn6hSBtKak= cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.59.2 h1:gmOAuG1opU8YvycMNpP+DvHfT9BfzzK5Cy+arP+Nocw= -cloud.google.com/go/storage v1.59.2/go.mod h1:cMWbtM+anpC74gn6qjLh+exqYcfmB9Hqe5z6adx+CLI= +cloud.google.com/go/storage v1.60.0 h1:oBfZrSOCimggVNz9Y/bXY35uUcts7OViubeddTTVzQ8= +cloud.google.com/go/storage v1.60.0/go.mod h1:q+5196hXfejkctrnx+VYU8RKQr/L3c0cBIlrjmiAKE0= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= -filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= -filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= firebase.google.com/go v3.13.0+incompatible h1:3TdYC3DDi6aHn20qoRkxwGqNgdjtblwVAyRLQwGn/+4= firebase.google.com/go v3.13.0+incompatible/go.mod h1:xlah6XbEyW6tbfSklcfe5FHJIwjt8toICdV5Wh9ptHs= github.com/ClickHouse/ch-go v0.71.0 h1:bUdZ/EZj/LcVHsMqaRUP2holqygrPWQKeMjc6nZoyRM= @@ -68,8 +68,8 @@ github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kk github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ= github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw= -github.com/avast/retry-go v3.0.0+incompatible h1:4SOWQ7Qs+oroOTQOYnAHqelpCO0biHSxpiH9JdtuBj0= -github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY= +github.com/avast/retry-go/v5 v5.0.0 h1:kf1Qc2UsTZ4qq8elDymqfbISvkyMuhgRxuJqX2NHP7k= +github.com/avast/retry-go/v5 v5.0.0/go.mod h1://d+usmKWio1agtZfS1H/ltTqwtIfBnRq9zEwjc3eH8= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= @@ -82,12 +82,10 @@ 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/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= -github.com/clipperhouse/displaywidth v0.9.0 h1:Qb4KOhYwRiN3viMv1v/3cTBlz3AcAZX3+y9OLhMtAtA= -github.com/clipperhouse/displaywidth v0.9.0/go.mod h1:aCAAqTlh4GIVkhQnJpbL0T/WfcrJXHcj8C0yjYcjOZA= -github.com/clipperhouse/stringish v0.1.1 h1:+NSqMOr3GR6k1FdRhhnXrLfztGzuG+VuFDfatpWHKCs= -github.com/clipperhouse/stringish v0.1.1/go.mod h1:v/WhFtE1q0ovMta2+m+UbpZ+2/HEXNWYXQgCt4hdOzA= -github.com/clipperhouse/uax29/v2 v2.6.0 h1:z0cDbUV+aPASdFb2/ndFnS9ts/WNXgTNNGFoKXuhpos= -github.com/clipperhouse/uax29/v2 v2.6.0/go.mod h1:Wn1g7MK6OoeDT0vL+Q0SQLDz/KpfsVRgg6W7ihQeh4g= +github.com/clipperhouse/displaywidth v0.10.0 h1:GhBG8WuerxjFQQYeuZAeVTuyxuX+UraiZGD4HJQ3Y8g= +github.com/clipperhouse/displaywidth v0.10.0/go.mod h1:XqJajYsaiEwkxOj4bowCTMcT1SgvHo9flfF3jQasdbs= +github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= +github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= github.com/cloudevents/sdk-go/v2 v2.16.2 h1:ZYDFrYke4FD+jM8TZTJJO6JhKHzOQl2oqpFK1D+NnQM= github.com/cloudevents/sdk-go/v2 v2.16.2/go.mod h1:laOcGImm4nVJEU+PHnUrKL56CKmRL65RlQF0kRmW/kg= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= @@ -109,10 +107,10 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329 h1:K+fnvUM0VZ7ZFJf0n4L/BRlnsb9pL/GuDG6FqaH+PwM= -github.com/envoyproxy/go-control-plane v0.13.5-0.20251024222203-75eaa193e329/go.mod h1:Alz8LEClvR7xKsrq3qzoc4N0guvVNSS8KmSChGYr9hs= -github.com/envoyproxy/go-control-plane/envoy v1.36.0 h1:yg/JjO5E7ubRyKX3m07GF3reDNEnfOboJ0QySbH736g= -github.com/envoyproxy/go-control-plane/envoy v1.36.0/go.mod h1:ty89S1YCCVruQAm9OtKeEkQLTb+Lkz0k8v9W0Oxsv98= +github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= +github.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU= +github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ= +github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= @@ -194,14 +192,14 @@ github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= 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= -github.com/googleapis/enterprise-certificate-proxy v0.3.11 h1:vAe81Msw+8tKUxi2Dqh/NZMz7475yUvmRIkXr4oN2ao= -github.com/googleapis/enterprise-certificate-proxy v0.3.11/go.mod h1:RFV7MUdlb7AgEq2v7FmMCfeSMCllAzWxFgRdusoGks8= +github.com/googleapis/enterprise-certificate-proxy v0.3.12 h1:Fg+zsqzYEs1ZnvmcztTYxhgCBsx3eEhEwQ1W/lHq/sQ= +github.com/googleapis/enterprise-certificate-proxy v0.3.12/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8= github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7/go.mod h1:lW34nIZuQ8UDPdkon5fmfp2l3+ZkQ2me/+oecHYLOII= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= @@ -241,8 +239,10 @@ github.com/jszwec/csvutil v1.10.0/go.mod h1:/E4ONrmGkwmWsk9ae9jpXnv9QT8pLHEPcCir github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.18.3 h1:9PJRvfbmTabkOX8moIpXPbMMbYN60bWImDDU7L+/6zw= -github.com/klauspost/compress v1.18.3/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= +github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -250,8 +250,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lib/pq v1.11.1 h1:wuChtj2hfsGmmx3nf1m7xC2XpK6OtelS2shMY+bGMtI= -github.com/lib/pq v1.11.1/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= +github.com/lib/pq v1.11.2 h1:x6gxUeu39V0BHZiugWe8LXZYZ+Utk7hSJGThs8sdzfs= +github.com/lib/pq v1.11.2/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= @@ -259,10 +259,10 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/ github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw= -github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= -github.com/mattn/go-sqlite3 v1.14.33 h1:A5blZ5ulQo2AtayQ9/limgHEkFreKj1Dv226a1K73s0= -github.com/mattn/go-sqlite3 v1.14.33/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-runewidth v0.0.20 h1:WcT52H91ZUAwy8+HUkdM3THM6gXqXuLJi9O3rjcQQaQ= +github.com/mattn/go-runewidth v0.0.20/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= +github.com/mattn/go-sqlite3 v1.14.34 h1:3NtcvcUnFBPsuRcno8pUtupspG/GM+9nZ88zgJcp6Zk= +github.com/mattn/go-sqlite3 v1.14.34/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= @@ -275,14 +275,14 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/nyaruka/phonenumbers v1.6.8 h1:k7HAJ/LeBkXE0vfbajITzTCZD0z0j+epdBNx43yTygk= -github.com/nyaruka/phonenumbers v1.6.8/go.mod h1:IUu45lj2bSeYXQuxDyyuzOrdV10tyRa1YSsfH8EKN5c= +github.com/nyaruka/phonenumbers v1.6.9 h1:LUmsIr+WKyBhWTzxm/9j+kGC9JclO+hBOHc18PSo9iM= +github.com/nyaruka/phonenumbers v1.6.9/go.mod h1:IUu45lj2bSeYXQuxDyyuzOrdV10tyRa1YSsfH8EKN5c= github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 h1:zrbMGy9YXpIeTnGj4EljqMiZsIcE09mmF8XsD5AYOJc= github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0= github.com/olekukonko/errors v1.2.0 h1:10Zcn4GeV59t/EGqJc8fUjtFT/FuUh5bTMzZ1XwmCRo= github.com/olekukonko/errors v1.2.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= -github.com/olekukonko/ll v0.1.4 h1:QcDaO9quz213xqHZr0gElOcYeOSnFeq7HTQ9Wu4O1wE= -github.com/olekukonko/ll v0.1.4/go.mod h1:b52bVQRRPObe+yyBl0TxNfhesL0nedD4Cht0/zx55Ew= +github.com/olekukonko/ll v0.1.6 h1:lGVTHO+Qc4Qm+fce/2h2m5y9LvqaW+DCN7xW9hsU3uA= +github.com/olekukonko/ll v0.1.6/go.mod h1:NVUmjBb/aCtUpjKk75BhWrOlARz3dqsM+OtszpY4o88= github.com/olekukonko/tablewriter v1.1.3 h1:VSHhghXxrP0JHl+0NnKid7WoEmd9/urKRJLysb70nnA= github.com/olekukonko/tablewriter v1.1.3/go.mod h1:9VU0knjhmMkXjnMKrZ3+L2JhhtsQ/L38BbL3CRNE8tM= github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 h1:nRlQD0u1871kaznCnn1EvYiMbum36v7hw1DLPEjds4o= @@ -303,12 +303,12 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pusher/pusher-http-go/v5 v5.1.1 h1:ZLUGdLA8yXMvByafIkS47nvuXOHrYmlh4bsQvuZnYVQ= github.com/pusher/pusher-http-go/v5 v5.1.1/go.mod h1:Ibji4SGoUDtOy7CVRhCiEpgy+n5Xv6hSL/QqYOhmWW8= -github.com/redis/go-redis/extra/rediscmd/v9 v9.17.3 h1:v9RNP5ynWkruvzscrIoDyyv20c9YeyVn12L9nYnaexw= -github.com/redis/go-redis/extra/rediscmd/v9 v9.17.3/go.mod h1:gdthSemCkR3WxTmzV2XxYIxClunkUJZAhL0zPHaB0Ww= -github.com/redis/go-redis/extra/redisotel/v9 v9.17.3 h1:bF0e3fV7PL0knd1UHDtMud8wA7CZt3RSWtyTMhpnWd8= -github.com/redis/go-redis/extra/redisotel/v9 v9.17.3/go.mod h1:gR39sPK/dJZlqgIA9Nm4JFHcQJPyhsISBLj708nrD4w= -github.com/redis/go-redis/v9 v9.17.3 h1:fN29NdNrE17KttK5Ndf20buqfDZwGNgoUr9qjl1DQx4= -github.com/redis/go-redis/v9 v9.17.3/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= +github.com/redis/go-redis/extra/rediscmd/v9 v9.18.0 h1:QY4nmPHLFAJjtT5O4OMUEOxP8WVaRNOFpcbmxT2NLZU= +github.com/redis/go-redis/extra/rediscmd/v9 v9.18.0/go.mod h1:WH8cY/0fT41Bsf341qzo8v4nx0GCE8FykAA23IVbVmo= +github.com/redis/go-redis/extra/redisotel/v9 v9.18.0 h1:2dKdoEYBJ0CZCLPiCdvvc7luz3DPwY6hKdzjL6m1eHE= +github.com/redis/go-redis/extra/redisotel/v9 v9.18.0/go.mod h1:WzkrVG9ro9BwCQD0eJOWn6AGL4Z1CleGflM45w1hu10= +github.com/redis/go-redis/v9 v9.18.0 h1:pMkxYPkEbMPwRdenAzUNyFNrDgHx9U+DrBabWNfSRQs= +github.com/redis/go-redis/v9 v9.18.0/go.mod h1:k3ufPphLU5YXwNTUcCRXGxUoF1fqxnhFQmscfkCoDA0= github.com/richardlehane/mscfb v1.0.6 h1:eN3bvvZCp00bs7Zf52bxNwAx5lJDBK1tCuH19qq5aC8= github.com/richardlehane/mscfb v1.0.6/go.mod h1:pe0+IUIc0AHh0+teNzBlJCtSyZdFOGgV4ZK9bsoV+Jo= github.com/richardlehane/msoleps v1.0.6 h1:9BvkpjvD+iUBalUY4esMwv6uBkfOip/Lzvd93jvR9gg= @@ -359,8 +359,8 @@ github.com/valyala/fasthttp v1.69.0 h1:fNLLESD2SooWeh2cidsuFtOcrEi4uB4m1mPrkJMZy github.com/valyala/fasthttp v1.69.0/go.mod h1:4wA4PfAraPlAsJ5jMSqCE2ug5tqUPwKXxVj8oNECGcw= github.com/vanng822/css v1.0.1 h1:10yiXc4e8NI8ldU6mSrWmSWMuyWgPr9DZ63RSlsgDw8= github.com/vanng822/css v1.0.1/go.mod h1:tcnB1voG49QhCrwq1W0w5hhGasvOg+VQp9i9H1rCM1w= -github.com/vanng822/go-premailer v1.30.0 h1:9oAp2PrJm4rvPnBgP57J/K1sJ1fQvSrU8TxamFvvwGU= -github.com/vanng822/go-premailer v1.30.0/go.mod h1:1okMIRBIcWIK1g5vJKaXi2ytD1ulsIc9wUGwK7UD3/I= +github.com/vanng822/go-premailer v1.31.0 h1:r1a1WH2I5NnGMhrmjVZyYhY0ThvaamKBkS2UuM91Fuo= +github.com/vanng822/go-premailer v1.31.0/go.mod h1:hzI26/YvzUADrxqifxGLJvNvn3tWBU6VMHRvxsskpuo= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= @@ -378,6 +378,8 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.7.16 h1:n+CJdUxaFMiDUNnWC3dMWCIQJSkxH4uz3ZwQBkAlVNE= github.com/yuin/goldmark v1.7.16/go.mod h1:ip/1k0VRfGynBgxOz0yCqHrbZXhcjxyuS66Brc7iBKg= +github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g= 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= @@ -403,8 +405,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQg go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0 h1:5gn2urDL/FBnK8OkCfD1j3/ER79rUuTYmCvlXBKeYL8= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0/go.mod h1:0fBG6ZJxhqByfFZDwSwpZGzJU671HkwpWaNe2t4VUPI= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.40.0 h1:MzfofMZN8ulNqobCmCAVbqVL5syHw+eB2qPRkCMA/fQ= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.40.0/go.mod h1:E73G9UFtKRXrxhBsHtG00TB5WxX57lpsQzogDkqBTz8= go.opentelemetry.io/otel/log v0.16.0 h1:DeuBPqCi6pQwtCK0pO4fvMB5eBq6sNxEnuTs88pjsN4= @@ -425,6 +427,8 @@ go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZY go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -445,8 +449,8 @@ golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= -golang.org/x/exp v0.0.0-20260209203927-2842357ff358 h1:kpfSV7uLwKJbFSEgNhWzGSL47NDSF/5pYYQw1V0ub6c= -golang.org/x/exp v0.0.0-20260209203927-2842357ff358/go.mod h1:R3t0oliuryB5eenPWl3rrQxwnNM3WTwnsRZZiXLAAW8= +golang.org/x/exp v0.0.0-20260212183809-81e46e3db34a h1:ovFr6Z0MNmU7nH8VaX5xqw+05ST2uO1exVfZPVqRC5o= +golang.org/x/exp v0.0.0-20260212183809-81e46e3db34a/go.mod h1:K79w1Vqn7PoiZn+TkNpx3BUWUQksGO3JcVX6qIjytmA= golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ= golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -547,18 +551,18 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T 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= -google.golang.org/api v0.265.0 h1:FZvfUdI8nfmuNrE34aOWFPmLC+qRBEiNm3JdivTvAAU= -google.golang.org/api v0.265.0/go.mod h1:uAvfEl3SLUj/7n6k+lJutcswVojHPp2Sp08jWCu8hLY= +google.golang.org/api v0.267.0 h1:w+vfWPMPYeRs8qH1aYYsFX68jMls5acWl/jocfLomwE= +google.golang.org/api v0.267.0/go.mod h1:Jzc0+ZfLnyvXma3UtaTl023TdhZu6OMBP9tJ+0EmFD0= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20260203192932-546029d2fa20 h1:/CU1zrxTpGylJJbe3Ru94yy6sZRbzALq2/oxl3pGB3U= -google.golang.org/genproto v0.0.0-20260203192932-546029d2fa20/go.mod h1:Tt+08/KdKEt3l8x3Pby3HLQxMB3uk/MzaQ4ZIv0ORTs= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20/go.mod h1:ZdbssH/1SOVnjnDlXzxDHK2MCidiqXtbYccJNzNYPEE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20 h1:Jr5R2J6F6qWyzINc+4AM8t5pfUz6beZpHp678GNrMbE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260203192932-546029d2fa20/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= -google.golang.org/grpc v1.78.0 h1:K1XZG/yGDJnzMdd/uZHAkVqJE+xIDOcmdSFZkBUicNc= -google.golang.org/grpc v1.78.0/go.mod h1:I47qjTo4OKbMkjA/aOOwxDIiPSBofUtQUI5EfpWvW7U= +google.golang.org/genproto v0.0.0-20260217200457-a2cb2272a1e9 h1:MzLVemxGdOBt2uziz9LnuYRQQFw1FDV0s0af4GVYE1A= +google.golang.org/genproto v0.0.0-20260217200457-a2cb2272a1e9/go.mod h1:9mSgs6f8tLwHSr6EzFWG+naa04gb1Zpt4IumYKsRDs0= +google.golang.org/genproto/googleapis/api v0.0.0-20260217200457-a2cb2272a1e9 h1:yt1EUx2U7D7a0Myzkt7z+RR5hnl6mCdzcUfYHx7LEls= +google.golang.org/genproto/googleapis/api v0.0.0-20260217200457-a2cb2272a1e9/go.mod h1:S3ojYC5GRm/7ewOSg8Rh+iqeqxS3BLlLKFhVlbYwHuU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d h1:t/LOSXPJ9R0B6fnZNyALBRfZBH0Uy0gT+uR+SJ6syqQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= +google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= diff --git a/api/pkg/repositories/repository.go b/api/pkg/repositories/repository.go index 14285dc4..c63d3fbb 100644 --- a/api/pkg/repositories/repository.go +++ b/api/pkg/repositories/repository.go @@ -4,7 +4,7 @@ import ( "strings" "time" - "github.com/avast/retry-go" + "github.com/avast/retry-go/v5" "github.com/palantir/stacktrace" ) @@ -34,11 +34,10 @@ func isRetryableError(err error) bool { // executeWithRetry executes a GORM query with retry logic for transient connection errors func executeWithRetry(fn func() error) (err error) { - return retry.Do( - fn, + return retry.New( retry.LastErrorOnly(true), retry.Attempts(3), retry.Delay(100*time.Millisecond), retry.RetryIf(isRetryableError), - ) + ).Do(fn) } diff --git a/api/pkg/services/google_cloud_push_queue_service.go b/api/pkg/services/google_cloud_push_queue_service.go index 194ab296..d22dac83 100644 --- a/api/pkg/services/google_cloud_push_queue_service.go +++ b/api/pkg/services/google_cloud_push_queue_service.go @@ -6,7 +6,7 @@ import ( "net/http" "time" - "github.com/avast/retry-go" + "github.com/avast/retry-go/v5" cloudtasks "cloud.google.com/go/cloudtasks/apiv2" "cloud.google.com/go/cloudtasks/apiv2/cloudtaskspb" @@ -39,10 +39,10 @@ func NewGooglePushQueue( // Enqueue a task to the queue func (queue *googlePushQueue) Enqueue(ctx context.Context, task *PushQueueTask, timeout time.Duration) (queueID string, err error) { - err = retry.Do(func() error { + err = retry.New(retry.Attempts(3)).Do(func() error { queueID, err = queue.enqueueImpl(ctx, task, timeout) return err - }, retry.Attempts(3)) + }) return queueID, err } diff --git a/api/pkg/services/webhook_service.go b/api/pkg/services/webhook_service.go index 2e94cc06..e4dd0a7b 100644 --- a/api/pkg/services/webhook_service.go +++ b/api/pkg/services/webhook_service.go @@ -11,7 +11,7 @@ import ( "sync" "time" - "github.com/avast/retry-go" + "github.com/avast/retry-go/v5" "github.com/pkg/errors" "github.com/gofiber/fiber/v2" @@ -212,7 +212,7 @@ func (service *WebhookService) sendNotification(ctx context.Context, event cloud defer span.End() attempts := 0 - err := retry.Do(func() error { + err := retry.New(retry.Attempts(2)).Do(func() error { attempts++ requestCtx, cancel := context.WithTimeout(ctx, 5*time.Second) @@ -252,7 +252,7 @@ func (service *WebhookService) sendNotification(ctx context.Context, event cloud ctxLogger.Info(fmt.Sprintf("sent webhook to url [%s] for event [%s] with ID [%s] and response code [%d]", webhook.URL, event.Type(), event.ID(), response.StatusCode)) return nil - }, retry.Attempts(2)) + }) if err != nil { msg := fmt.Sprintf("cannot handle [%s] event to webhook [%s] for user [%s] after [%d] attempts", event.Type(), webhook.URL, webhook.UserID, attempts) ctxLogger.Error(service.tracer.WrapErrorSpan(span, stacktrace.Propagate(err, msg))) From 7f48412ae995c38aed712f7bcdd3d39d34e0e90f Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Thu, 19 Feb 2026 20:01:51 +0200 Subject: [PATCH 042/128] Add logic for skipping migrations --- api/pkg/di/container.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/api/pkg/di/container.go b/api/pkg/di/container.go index 7f88251a..632e4706 100644 --- a/api/pkg/di/container.go +++ b/api/pkg/di/container.go @@ -333,8 +333,12 @@ func (container *Container) DB() (db *gorm.DB) { container.logger.Fatal(stacktrace.Propagate(err, "cannot use GORM tracing plugin")) } - container.logger.Debug(fmt.Sprintf("Running migrations for %T", db)) + if os.Getenv("DATABASE_MIGRATION_SKIP") != "" { + container.logger.Debug(fmt.Sprintf("skipping migrations for [%T]", db)) + return container.db + } + container.logger.Debug(fmt.Sprintf("Running migrations for %T", db)) // This prevents a bug in the Gorm AutoMigrate where it tries to delete this no existent constraints db.Exec(` ALTER TABLE users ADD CONSTRAINT IF NOT EXISTS uni_users_api_key CHECK (api_key IS NOT NULL); From 7a6a0c539d91a845b402bb4e74d0e202355d3114 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Feb 2026 19:22:11 +0000 Subject: [PATCH 043/128] chore(deps-dev): bump axios from 0.30.2 to 0.30.3 in /web Bumps [axios](https://github.com/axios/axios) from 0.30.2 to 0.30.3. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.30.2...v0.30.3) --- updated-dependencies: - dependency-name: axios dependency-version: 0.30.3 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- web/package.json | 2 +- web/pnpm-lock.yaml | 33 +++++++++++++++++---------------- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/web/package.json b/web/package.json index c15cbdcb..61cf0770 100644 --- a/web/package.json +++ b/web/package.json @@ -65,7 +65,7 @@ "@nuxtjs/vuetify": "^1.12.3", "@types/qrcode": "^1.5.6", "@vue/test-utils": "^1.3.6", - "axios": "^0.30.2", + "axios": "^0.30.3", "babel-core": "7.0.0-bridge.0", "babel-jest": "^30.2.0", "eslint": "^8.57.1", diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml index 1b0382dc..7c170173 100644 --- a/web/pnpm-lock.yaml +++ b/web/pnpm-lock.yaml @@ -133,8 +133,8 @@ importers: specifier: ^1.3.6 version: 1.3.6(vue-template-compiler@2.7.16)(vue@2.7.16) axios: - specifier: ^0.30.2 - version: 0.30.2 + specifier: ^0.30.3 + version: 0.30.3 babel-core: specifier: 7.0.0-bridge.0 version: 7.0.0-bridge.0(@babel/core@7.28.4) @@ -3009,8 +3009,8 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - axios@0.30.2: - resolution: {integrity: sha512-0pE4RQ4UQi1jKY6p7u6i1Tkzqmu+d+/tHS7Q7rKunWLB9WyilBTpHHpXzPNMDj5hTbK0B0PTLSz07yqMBiF6xg==} + axios@0.30.3: + resolution: {integrity: sha512-5/tmEb6TmE/ax3mdXBc/Mi6YdPGxQsv+0p5YlciXWt3PHIn0VamqCXhRMtScnwY3lbgSXLneOuXAKUhgmSRpwg==} babel-code-frame@6.26.0: resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} @@ -4779,8 +4779,8 @@ packages: vue-template-compiler: optional: true - form-data@4.0.4: - resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} fraction.js@4.3.7: @@ -4949,16 +4949,17 @@ packages: glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} @@ -8275,7 +8276,7 @@ packages: tar@6.2.0: resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} engines: {node: '>=10'} - deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exhorbitant rates) by contacting i@izs.me + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me teeny-request@7.2.0: resolution: {integrity: sha512-SyY0pek1zWsi0LRVAALem+avzMLc33MKW/JLLakdP4s9+D7+jHcy5x6P+h94g2QNZsAqQNfX5lsbd3WSeJXrrw==} @@ -13250,10 +13251,10 @@ snapshots: available-typed-arrays@1.0.5: {} - axios@0.30.2: + axios@0.30.3: dependencies: follow-redirects: 1.15.11 - form-data: 4.0.4 + form-data: 4.0.5 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -15365,7 +15366,7 @@ snapshots: eslint: 8.57.1 vue-template-compiler: 2.7.16 - form-data@4.0.4: + form-data@4.0.5: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -17557,7 +17558,7 @@ snapshots: dependencies: call-bind: 1.0.2 define-properties: 1.2.1 - has-symbols: 1.0.3 + has-symbols: 1.1.0 object-keys: 1.1.1 object.fromentries@2.0.7: @@ -18844,7 +18845,7 @@ snapshots: dependencies: call-bind: 1.0.2 get-intrinsic: 1.3.0 - has-symbols: 1.0.3 + has-symbols: 1.1.0 isarray: 2.0.5 safe-buffer@5.1.2: {} @@ -19767,7 +19768,7 @@ snapshots: dependencies: call-bind: 1.0.2 has-bigints: 1.0.2 - has-symbols: 1.0.3 + has-symbols: 1.1.0 which-boxed-primitive: 1.0.2 uncrypto@0.1.3: {} @@ -20412,7 +20413,7 @@ snapshots: available-typed-arrays: 1.0.5 call-bind: 1.0.2 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-tostringtag: 1.0.2 which@1.3.1: From eb0a4c9815b9d8134bb029842bb1af29854d961f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 00:11:52 +0000 Subject: [PATCH 044/128] fix(deps): bump github.com/gofiber/fiber/v2 in /api Bumps [github.com/gofiber/fiber/v2](https://github.com/gofiber/fiber) from 2.52.11 to 2.52.12. - [Release notes](https://github.com/gofiber/fiber/releases) - [Commits](https://github.com/gofiber/fiber/compare/v2.52.11...v2.52.12) --- updated-dependencies: - dependency-name: github.com/gofiber/fiber/v2 dependency-version: 2.52.12 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- api/go.mod | 6 +----- api/go.sum | 14 ++------------ 2 files changed, 3 insertions(+), 17 deletions(-) diff --git a/api/go.mod b/api/go.mod index d342b5e0..3a1c6701 100644 --- a/api/go.mod +++ b/api/go.mod @@ -19,7 +19,7 @@ require ( github.com/dustin/go-humanize v1.0.1 github.com/go-hermes/hermes/v2 v2.6.2 github.com/gofiber/contrib/otelfiber v1.0.10 - github.com/gofiber/fiber/v2 v2.52.11 + github.com/gofiber/fiber/v2 v2.52.12 github.com/gofiber/swagger v1.1.1 github.com/golang-jwt/jwt/v5 v5.3.1 github.com/google/uuid v1.6.0 @@ -39,7 +39,6 @@ require ( github.com/redis/go-redis/extra/redisotel/v9 v9.18.0 github.com/redis/go-redis/v9 v9.18.0 github.com/rs/zerolog v1.34.0 - github.com/schollz/progressbar/v3 v3.19.0 github.com/stretchr/testify v1.11.1 github.com/swaggo/swag v1.16.6 github.com/thedevsaddam/govalidator v1.9.10 @@ -142,7 +141,6 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.20 // indirect github.com/mattn/go-sqlite3 v1.14.34 // indirect - github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/mitchellh/copystructure v1.2.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -155,7 +153,6 @@ require ( github.com/redis/go-redis/extra/rediscmd/v9 v9.18.0 // indirect github.com/richardlehane/mscfb v1.0.6 // indirect github.com/richardlehane/msoleps v1.0.6 // indirect - github.com/rivo/uniseg v0.4.7 // indirect github.com/segmentio/asm v1.2.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect @@ -193,7 +190,6 @@ require ( golang.org/x/oauth2 v0.35.0 // indirect golang.org/x/sync v0.19.0 // indirect golang.org/x/sys v0.41.0 // indirect - golang.org/x/term v0.40.0 // indirect golang.org/x/text v0.34.0 // indirect golang.org/x/time v0.14.0 // indirect golang.org/x/tools v0.42.0 // indirect diff --git a/api/go.sum b/api/go.sum index 429077da..26dba3ad 100644 --- a/api/go.sum +++ b/api/go.sum @@ -80,8 +80,6 @@ github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1x github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= -github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= github.com/clipperhouse/displaywidth v0.10.0 h1:GhBG8WuerxjFQQYeuZAeVTuyxuX+UraiZGD4HJQ3Y8g= github.com/clipperhouse/displaywidth v0.10.0/go.mod h1:XqJajYsaiEwkxOj4bowCTMcT1SgvHo9flfF3jQasdbs= github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= @@ -166,8 +164,8 @@ github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI6 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofiber/contrib/otelfiber v1.0.10 h1:Bu28Pi4pfYmGfIc/9+sNaBbFwTHGY/zpSIK5jBxuRtM= github.com/gofiber/contrib/otelfiber v1.0.10/go.mod h1:jN6AvS1HolDHTQHFURsV+7jSX96FpXYeKH6nmkq8AIw= -github.com/gofiber/fiber/v2 v2.52.11 h1:5f4yzKLcBcF8ha1GQTWB+mpblWz3Vz6nSAbTL31HkWs= -github.com/gofiber/fiber/v2 v2.52.11/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= +github.com/gofiber/fiber/v2 v2.52.12 h1:0LdToKclcPOj8PktUdIKo9BUohjjwfnQl42Dhw8/WUw= +github.com/gofiber/fiber/v2 v2.52.12/go.mod h1:YEcBbO/FB+5M1IZNBP9FO3J9281zgPAreiI1oqg8nDw= github.com/gofiber/swagger v1.1.1 h1:FZVhVQQ9s1ZKLHL/O0loLh49bYB5l1HEAgxDlcTtkRA= github.com/gofiber/swagger v1.1.1/go.mod h1:vtvY/sQAMc/lGTUCg0lqmBL7Ht9O7uzChpbvJeJQINw= github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E= @@ -263,8 +261,6 @@ github.com/mattn/go-runewidth v0.0.20 h1:WcT52H91ZUAwy8+HUkdM3THM6gXqXuLJi9O3rjc github.com/mattn/go-runewidth v0.0.20/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/mattn/go-sqlite3 v1.14.34 h1:3NtcvcUnFBPsuRcno8pUtupspG/GM+9nZ88zgJcp6Zk= github.com/mattn/go-sqlite3 v1.14.34/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= -github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= -github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= @@ -313,15 +309,11 @@ github.com/richardlehane/mscfb v1.0.6 h1:eN3bvvZCp00bs7Zf52bxNwAx5lJDBK1tCuH19qq github.com/richardlehane/mscfb v1.0.6/go.mod h1:pe0+IUIc0AHh0+teNzBlJCtSyZdFOGgV4ZK9bsoV+Jo= github.com/richardlehane/msoleps v1.0.6 h1:9BvkpjvD+iUBalUY4esMwv6uBkfOip/Lzvd93jvR9gg= github.com/richardlehane/msoleps v1.0.6/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg= -github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= -github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= -github.com/schollz/progressbar/v3 v3.19.0 h1:Ea18xuIRQXLAUidVDox3AbwfUhD0/1IvohyTutOIFoc= -github.com/schollz/progressbar/v3 v3.19.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0= github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= @@ -518,8 +510,6 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= -golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= -golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= From 072be0caf97c4eda54660df2cfb97828e07118f5 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 00:33:50 -0800 Subject: [PATCH 045/128] Added Attachment to Message entity --- api/pkg/entities/message.go | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/api/pkg/entities/message.go b/api/pkg/entities/message.go index bf846c0b..eb71f51b 100644 --- a/api/pkg/entities/message.go +++ b/api/pkg/entities/message.go @@ -81,17 +81,23 @@ func (s SIM) String() string { return string(s) } +type MessageAttachment struct { + ContentType string `json:"content_type" example:"image/jpeg"` + URL string `json:"url" example:"https://example.com/image.jpg"` +} + // Message represents a message sent between 2 phone numbers type Message struct { - ID uuid.UUID `json:"id" gorm:"primaryKey;type:uuid;" example:"32343a19-da5e-4b1b-a767-3298a73703cb"` - RequestID *string `json:"request_id" example:"153554b5-ae44-44a0-8f4f-7bbac5657ad4" validate:"optional"` - Owner string `json:"owner" example:"+18005550199"` - UserID UserID `json:"user_id" gorm:"index:idx_messages__user_id" example:"WB7DRDWrJZRGbYrv2CKGkqbzvqdC"` - Contact string `json:"contact" example:"+18005550100"` - Content string `json:"content" example:"This is a sample text message"` - Encrypted bool `json:"encrypted" example:"false" gorm:"default:false"` - Type MessageType `json:"type" example:"mobile-terminated"` - Status MessageStatus `json:"status" example:"pending"` + ID uuid.UUID `json:"id" gorm:"primaryKey;type:uuid;" example:"32343a19-da5e-4b1b-a767-3298a73703cb"` + RequestID *string `json:"request_id" example:"153554b5-ae44-44a0-8f4f-7bbac5657ad4" validate:"optional"` + Owner string `json:"owner" example:"+18005550199"` + UserID UserID `json:"user_id" gorm:"index:idx_messages__user_id" example:"WB7DRDWrJZRGbYrv2CKGkqbzvqdC"` + Contact string `json:"contact" example:"+18005550100"` + Content string `json:"content" example:"This is a sample text message"` + Attachments []MessageAttachment `json:"attachments,omitempty" gorm:"type:json;serializer:json"` + Encrypted bool `json:"encrypted" example:"false" gorm:"default:false"` + Type MessageType `json:"type" example:"mobile-terminated"` + Status MessageStatus `json:"status" example:"pending"` // SIM is the SIM card to use to send the message // * SMS1: use the SIM card in slot 1 // * SMS2: use the SIM card in slot 2 From 09cf30b4812b65141df74c07dd2ab557dbc25030 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 00:36:53 -0800 Subject: [PATCH 046/128] Added Attachments to APISentPayload & send request --- api/pkg/events/message_api_sent_event.go | 23 ++++++++++++----------- api/pkg/requests/message_send_request.go | 8 +++++--- api/pkg/services/message_service.go | 3 +++ 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/api/pkg/events/message_api_sent_event.go b/api/pkg/events/message_api_sent_event.go index 7abea843..9aeabd90 100644 --- a/api/pkg/events/message_api_sent_event.go +++ b/api/pkg/events/message_api_sent_event.go @@ -13,15 +13,16 @@ const EventTypeMessageAPISent = "message.api.sent" // MessageAPISentPayload is the payload of the EventTypeMessageSent event type MessageAPISentPayload struct { - MessageID uuid.UUID `json:"message_id"` - UserID entities.UserID `json:"user_id"` - Owner string `json:"owner"` - RequestID *string `json:"request_id"` - MaxSendAttempts uint `json:"max_send_attempts"` - Contact string `json:"contact"` - ScheduledSendTime *time.Time `json:"scheduled_send_time"` - RequestReceivedAt time.Time `json:"request_received_at"` - Content string `json:"content"` - Encrypted bool `json:"encrypted"` - SIM entities.SIM `json:"sim"` + MessageID uuid.UUID `json:"message_id"` + UserID entities.UserID `json:"user_id"` + Owner string `json:"owner"` + RequestID *string `json:"request_id"` + MaxSendAttempts uint `json:"max_send_attempts"` + Contact string `json:"contact"` + ScheduledSendTime *time.Time `json:"scheduled_send_time"` + RequestReceivedAt time.Time `json:"request_received_at"` + Content string `json:"content"` + Attachments []entities.MessageAttachment `json:"attachments"` + Encrypted bool `json:"encrypted"` + SIM entities.SIM `json:"sim"` } diff --git a/api/pkg/requests/message_send_request.go b/api/pkg/requests/message_send_request.go index 3301691d..1a1d6830 100644 --- a/api/pkg/requests/message_send_request.go +++ b/api/pkg/requests/message_send_request.go @@ -14,9 +14,10 @@ import ( // MessageSend is the payload for sending and SMS message type MessageSend struct { request - From string `json:"from" example:"+18005550199"` - To string `json:"to" example:"+18005550100"` - Content string `json:"content" example:"This is a sample text message"` + From string `json:"from" example:"+18005550199"` + To string `json:"to" example:"+18005550100"` + Content string `json:"content" example:"This is a sample text message"` + Attachments []entities.MessageAttachment `json:"attachments" validate:"optional"` // Encrypted is an optional parameter used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app Encrypted bool `json:"encrypted" example:"false" validate:"optional"` @@ -47,5 +48,6 @@ func (input *MessageSend) ToMessageSendParams(userID entities.UserID, source str RequestReceivedAt: time.Now().UTC(), Contact: input.sanitizeAddress(input.To), Content: input.Content, + Attachments: input.Attachments, } } diff --git a/api/pkg/services/message_service.go b/api/pkg/services/message_service.go index 5a95b265..eca2334c 100644 --- a/api/pkg/services/message_service.go +++ b/api/pkg/services/message_service.go @@ -430,6 +430,7 @@ type MessageSendParams struct { Contact string Encrypted bool Content string + Attachments []entities.MessageAttachment Source string SendAt *time.Time RequestID *string @@ -456,6 +457,7 @@ func (service *MessageService) SendMessage(ctx context.Context, params MessageSe Contact: params.Contact, RequestReceivedAt: params.RequestReceivedAt, Content: params.Content, + Attachments: params.Attachments, ScheduledSendTime: params.SendAt, SIM: sim, } @@ -968,6 +970,7 @@ func (service *MessageService) storeSentMessage(ctx context.Context, payload eve Contact: payload.Contact, UserID: payload.UserID, Content: payload.Content, + Attachments: payload.Attachments, RequestID: payload.RequestID, SIM: payload.SIM, Encrypted: payload.Encrypted, From 69ecce11ff420d331765e500ad88f83d56df1e42 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 00:45:08 -0800 Subject: [PATCH 047/128] Added validator for attachment urls --- .../validators/message_handler_validator.go | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/api/pkg/validators/message_handler_validator.go b/api/pkg/validators/message_handler_validator.go index 33ab4dfe..fd690e26 100644 --- a/api/pkg/validators/message_handler_validator.go +++ b/api/pkg/validators/message_handler_validator.go @@ -106,6 +106,28 @@ func (validator MessageHandlerValidator) ValidateMessageSend(ctx context.Context return result } + if len(request.Attachments) > 10 { + result.Add("attachments", "you cannot attach more than 10 files to a single message") + } + + for i, attachment := range request.Attachments { + if strings.TrimSpace(attachment.ContentType) == "" { + result.Add("attachments", fmt.Sprintf("attachment at index %d is missing content_type", i)) + } + + if strings.TrimSpace(attachment.URL) == "" { + result.Add("attachments", fmt.Sprintf("attachment at index %d is missing url", i)) + } else { + // Basic URL validation + parsedURL, err := url.ParseRequestURI(attachment.URL) + if err != nil || parsedURL.Scheme == "" || parsedURL.Host == "" { + result.Add("attachments", fmt.Sprintf("attachment at index %d has an invalid url format", i)) + } else if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { + result.Add("attachments", fmt.Sprintf("attachment at index %d must use http or https scheme", i)) + } + } + } + if request.SendAt != nil && request.SendAt.After(time.Now().Add(480*time.Hour)) { result.Add("send_at", "the scheduled time cannot be more than 20 days (480 hours) in the future") } From b5bfdb45587b6a5d595c397288f21d84d37767bb Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 00:45:48 -0800 Subject: [PATCH 048/128] Added attachment to bulk message struct --- api/pkg/requests/message_bulk_send_request.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/pkg/requests/message_bulk_send_request.go b/api/pkg/requests/message_bulk_send_request.go index a21570bb..47c2af7d 100644 --- a/api/pkg/requests/message_bulk_send_request.go +++ b/api/pkg/requests/message_bulk_send_request.go @@ -16,6 +16,7 @@ type MessageBulkSend struct { From string `json:"from" example:"+18005550199"` To []string `json:"to" example:"+18005550100,+18005550100"` Content string `json:"content" example:"This is a sample text message"` + Attachments []entities.MessageAttachment `json:"attachments" validate:"optional"` // Encrypted is used to determine if the content is end-to-end encrypted. Make sure to set the encryption key on the httpSMS mobile app Encrypted bool `json:"encrypted" example:"false"` @@ -52,6 +53,7 @@ func (input *MessageBulkSend) ToMessageSendParams(userID entities.UserID, source Contact: to, SendAt: &sendAt, Content: input.Content, + Attachments: input.Attachments, }) } From 53112cbf3d32149b38975e6f873c6e1dc63fa70d Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 00:47:15 -0800 Subject: [PATCH 049/128] Added same validation to bulk message --- .../validators/message_handler_validator.go | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/api/pkg/validators/message_handler_validator.go b/api/pkg/validators/message_handler_validator.go index fd690e26..20a8ed9f 100644 --- a/api/pkg/validators/message_handler_validator.go +++ b/api/pkg/validators/message_handler_validator.go @@ -114,11 +114,10 @@ func (validator MessageHandlerValidator) ValidateMessageSend(ctx context.Context if strings.TrimSpace(attachment.ContentType) == "" { result.Add("attachments", fmt.Sprintf("attachment at index %d is missing content_type", i)) } - + if strings.TrimSpace(attachment.URL) == "" { result.Add("attachments", fmt.Sprintf("attachment at index %d is missing url", i)) } else { - // Basic URL validation parsedURL, err := url.ParseRequestURI(attachment.URL) if err != nil || parsedURL.Scheme == "" || parsedURL.Host == "" { result.Add("attachments", fmt.Sprintf("attachment at index %d has an invalid url format", i)) @@ -178,6 +177,27 @@ func (validator MessageHandlerValidator) ValidateMessageBulkSend(ctx context.Con return result } + if len(request.Attachments) > 10 { + result.Add("attachments", "you cannot attach more than 10 files to a single message") + } + + for i, attachment := range request.Attachments { + if strings.TrimSpace(attachment.ContentType) == "" { + result.Add("attachments", fmt.Sprintf("attachment at index %d is missing content_type", i)) + } + + if strings.TrimSpace(attachment.URL) == "" { + result.Add("attachments", fmt.Sprintf("attachment at index %d is missing url", i)) + } else { + parsedURL, err := url.ParseRequestURI(attachment.URL) + if err != nil || parsedURL.Scheme == "" || parsedURL.Host == "" { + result.Add("attachments", fmt.Sprintf("attachment at index %d has an invalid url format", i)) + } else if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { + result.Add("attachments", fmt.Sprintf("attachment at index %d must use http or https scheme", i)) + } + } + } + _, err := validator.phoneService.Load(ctx, userID, request.From) if stacktrace.GetCode(err) == repositories.ErrCodeNotFound { result.Add("from", fmt.Sprintf("no phone found with with 'from' number [%s]. Install the android app on your phone to start sending messages", request.From)) From 34b2cfb5d67ff3913731b2eabf955e520c4b088e Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 00:54:09 -0800 Subject: [PATCH 050/128] Added attachmenturls to the BulkMessage struct for csv support and a basic file type check --- api/pkg/requests/bulk_message_request.go | 33 ++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/api/pkg/requests/bulk_message_request.go b/api/pkg/requests/bulk_message_request.go index ffb3f35c..0ab6c024 100644 --- a/api/pkg/requests/bulk_message_request.go +++ b/api/pkg/requests/bulk_message_request.go @@ -18,6 +18,7 @@ type BulkMessage struct { ToPhoneNumber string `csv:"ToPhoneNumber"` Content string `csv:"Content"` SendTime *time.Time `csv:"SendTime(optional)"` + AttachmentURLs string `csv:"AttachmentURLs(optional)" validate:"optional"` // Comma separated list of URLs } // Sanitize sets defaults to BulkMessage @@ -25,12 +26,43 @@ func (input *BulkMessage) Sanitize() *BulkMessage { input.ToPhoneNumber = input.sanitizeAddress(input.ToPhoneNumber) input.Content = strings.TrimSpace(input.Content) input.FromPhoneNumber = input.sanitizeAddress(input.FromPhoneNumber) + input.AttachmentURLs = strings.TrimSpace(input.AttachmentURLs) return input } // ToMessageSendParams converts BulkMessage to services.MessageSendParams func (input *BulkMessage) ToMessageSendParams(userID entities.UserID, requestID uuid.UUID, source string) services.MessageSendParams { from, _ := phonenumbers.Parse(input.FromPhoneNumber, phonenumbers.UNKNOWN_REGION) + + var attachments []entities.MessageAttachment + if input.AttachmentURLs != "" { + urls := strings.Split(input.AttachmentURLs, ",") + for _, u := range urls { + cleanURL := strings.TrimSpace(u) + if cleanURL == "" { + continue + } + + // Since there's no easy way to set a type in the CSV, defaulting to octet-stream and then just checking the file extension in the URL + contentType := "application/octet-stream" + lowerURL := strings.ToLower(cleanURL) + if strings.HasSuffix(lowerURL, ".jpg") || strings.HasSuffix(lowerURL, ".jpeg") { + contentType = "image/jpeg" + } else if strings.HasSuffix(lowerURL, ".png") { + contentType = "image/png" + } else if strings.HasSuffix(lowerURL, ".gif") { + contentType = "image/gif" + } else if strings.HasSuffix(lowerURL, ".mp4") { + contentType = "video/mp4" + } + + attachments = append(attachments, entities.MessageAttachment{ + ContentType: contentType, + URL: cleanURL, + }) + } + } + return services.MessageSendParams{ Source: source, Owner: from, @@ -40,5 +72,6 @@ func (input *BulkMessage) ToMessageSendParams(userID entities.UserID, requestID RequestReceivedAt: time.Now().UTC(), Contact: input.sanitizeAddress(input.ToPhoneNumber), Content: input.Content, + Attachments: attachments, } } From bc5faf1c42ccf218378aaebfe63f04ae86940b97 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 00:56:01 -0800 Subject: [PATCH 051/128] Added attachment parsing to the xlsx parser --- api/pkg/validators/bulk_message_handler_validator.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/api/pkg/validators/bulk_message_handler_validator.go b/api/pkg/validators/bulk_message_handler_validator.go index 9881c53f..acabcbba 100644 --- a/api/pkg/validators/bulk_message_handler_validator.go +++ b/api/pkg/validators/bulk_message_handler_validator.go @@ -143,11 +143,17 @@ func (v *BulkMessageHandlerValidator) parseXlsx(ctxLogger telemetry.Logger, user } } + var attachmentURLs string + if len(row) > 4 && strings.TrimSpace(row[4]) != "" { + attachmentURLs = strings.TrimSpace(row[4]) + } + messages = append(messages, &requests.BulkMessage{ FromPhoneNumber: strings.TrimSpace(row[0]), ToPhoneNumber: strings.TrimSpace(row[1]), Content: row[2], SendTime: sendAt, + AttachmentURLs: attachmentURLs, }) } From 84974984f017cc03fa4af9db1d90aed19e720d39 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 00:59:10 -0800 Subject: [PATCH 052/128] Added validation to csv based bulk messages --- .../bulk_message_handler_validator.go | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/api/pkg/validators/bulk_message_handler_validator.go b/api/pkg/validators/bulk_message_handler_validator.go index acabcbba..84844392 100644 --- a/api/pkg/validators/bulk_message_handler_validator.go +++ b/api/pkg/validators/bulk_message_handler_validator.go @@ -218,6 +218,29 @@ func (v *BulkMessageHandlerValidator) parseCSV(ctxLogger telemetry.Logger, user func (v *BulkMessageHandlerValidator) validateMessages(messages []*requests.BulkMessage) url.Values { result := url.Values{} for index, message := range messages { + + if message.AttachmentURLs != "" { + urls := strings.Split(message.AttachmentURLs, ",") + + if len(urls) > 10 { + result.Add("document", fmt.Sprintf("Row [%d]: You cannot attach more than 10 files per message.", index+2)) + } + + for _, u := range urls { + cleanURL := strings.TrimSpace(u) + if cleanURL == "" { + continue + } + + parsedURL, err := url.ParseRequestURI(cleanURL) + if err != nil || parsedURL.Scheme == "" || parsedURL.Host == "" { + result.Add("document", fmt.Sprintf("Row [%d]: The attachment URL [%s] has an invalid url format.", index+2, cleanURL)) + } else if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { + result.Add("document", fmt.Sprintf("Row [%d]: The attachment URL [%s] must use http or https.", index+2, cleanURL)) + } + } + } + if _, err := phonenumbers.Parse(message.FromPhoneNumber, phonenumbers.UNKNOWN_REGION); err != nil { result.Add("document", fmt.Sprintf("Row [%d]: The FromPhoneNumber [%s] is not a valid E.164 phone number", index+2, message.FromPhoneNumber)) } From 569b56da2b129e712ce329c12a40cb4bfc6fbfb3 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:02:28 -0800 Subject: [PATCH 053/128] Added attachment_urls to discord slash command --- api/pkg/services/discord_service.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/api/pkg/services/discord_service.go b/api/pkg/services/discord_service.go index 059231b9..8c608e9f 100644 --- a/api/pkg/services/discord_service.go +++ b/api/pkg/services/discord_service.go @@ -169,6 +169,12 @@ func (service *DiscordService) createSlashCommand(ctx context.Context, serverID Type: 3, Required: true, }, + { + Name: "attachment_urls", + Description: "Comma-separated list of media URLs to attach", + Type: 3, + Required: false, + }, }, }) if err != nil { From a0fc868569bca37fd8628993b92a3b19ef866011 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:05:01 -0800 Subject: [PATCH 054/128] Added attachment file type check to CreateRequest --- api/pkg/handlers/discord_handler.go | 40 ++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/api/pkg/handlers/discord_handler.go b/api/pkg/handlers/discord_handler.go index 95591c2b..d556dc45 100644 --- a/api/pkg/handlers/discord_handler.go +++ b/api/pkg/handlers/discord_handler.go @@ -8,9 +8,11 @@ import ( "encoding/json" "fmt" "os" + "strings" "github.com/google/uuid" + "github.com/NdoleStudio/httpsms/pkg/entities" "github.com/NdoleStudio/httpsms/pkg/repositories" "github.com/NdoleStudio/httpsms/pkg/requests" "github.com/NdoleStudio/httpsms/pkg/services" @@ -290,10 +292,42 @@ func (h *DiscordHandler) createRequest(payload map[string]any) requests.MessageS } return "" } + var attachments []entities.MessageAttachment + attachmentURLsStr := getOption("attachment_urls") + + if attachmentURLsStr != "" { + urls := strings.Split(attachmentURLsStr, ",") + for _, u := range urls { + cleanURL := strings.TrimSpace(u) + if cleanURL == "" { + continue + } + + // Same as with bulk CSV attachments, can't easily ask for the MIME type so + // just inferring based on the file extension + contentType := "application/octet-stream" + lowerURL := strings.ToLower(cleanURL) + if strings.HasSuffix(lowerURL, ".jpg") || strings.HasSuffix(lowerURL, ".jpeg") { + contentType = "image/jpeg" + } else if strings.HasSuffix(lowerURL, ".png") { + contentType = "image/png" + } else if strings.HasSuffix(lowerURL, ".gif") { + contentType = "image/gif" + } else if strings.HasSuffix(lowerURL, ".mp4") { + contentType = "video/mp4" + } + + attachments = append(attachments, entities.MessageAttachment{ + ContentType: contentType, + URL: cleanURL, + }) + } + } return requests.MessageSend{ - From: getOption("from"), - To: getOption("to"), - Content: getOption("message"), + From: getOption("from"), + To: getOption("to"), + Content: getOption("message"), + Attachments: attachments, } } From 2f6c94a2406ec9c797cb3498f5b198d8e54ace4d Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:08:03 -0800 Subject: [PATCH 055/128] Added embed for discord confirmation --- api/pkg/handlers/discord_handler.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/api/pkg/handlers/discord_handler.go b/api/pkg/handlers/discord_handler.go index d556dc45..7be60f3b 100644 --- a/api/pkg/handlers/discord_handler.go +++ b/api/pkg/handlers/discord_handler.go @@ -375,6 +375,19 @@ func (h *DiscordHandler) sendSMS(ctx context.Context, c *fiber.Ctx, payload map[ }, } + if len(request.Attachments) > 0 { + var urls []string + for _, att := range request.Attachments { + urls = append(urls, att.URL) + } + + fields := messageEmbed["fields"].([]fiber.Map) + messageEmbed["fields"] = append(fields, fiber.Map{ + "name": "Attachments:", + "value": strings.Join(urls, "\n"), + }) + } + if errors := h.messageValidator.ValidateMessageSend(ctx, discord.UserID, request.Sanitize()); len(errors) != 0 { msg := fmt.Sprintf("validation errors [%s], while sending payload [%s]", spew.Sdump(errors), c.Body()) ctxLogger.Warn(stacktrace.NewError(msg)) From 64a40c75298975c10fb1881872aab2dd5e153e3e Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:11:13 -0800 Subject: [PATCH 056/128] Defined attachment --- android/app/src/main/java/com/httpsms/Models.kt | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/android/app/src/main/java/com/httpsms/Models.kt b/android/app/src/main/java/com/httpsms/Models.kt index ccfe590b..5b718450 100644 --- a/android/app/src/main/java/com/httpsms/Models.kt +++ b/android/app/src/main/java/com/httpsms/Models.kt @@ -29,6 +29,13 @@ data class Phone ( val userID: String, ) +data class Attachment ( + @Json(name = "content_type") + val contentType: String, + + val url: String +) + data class Message ( val contact: String, val content: String, @@ -69,4 +76,6 @@ data class Message ( @Json(name = "updated_at") val updatedAt: String + + val attachments: List? = null ) From 173a4f1d2076ca0d868bde67a8e9b4d98f450a2d Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:14:20 -0800 Subject: [PATCH 057/128] Added a sendMultimediaMessage function --- .../main/java/com/httpsms/SmsManagerService.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/android/app/src/main/java/com/httpsms/SmsManagerService.kt b/android/app/src/main/java/com/httpsms/SmsManagerService.kt index 17987b5c..196c3868 100644 --- a/android/app/src/main/java/com/httpsms/SmsManagerService.kt +++ b/android/app/src/main/java/com/httpsms/SmsManagerService.kt @@ -76,4 +76,20 @@ class SmsManagerService { context.getSystemService(SmsManager::class.java).createForSubscriptionId(subscriptionId) } } + + fun sendMultimediaMessage( + context: Context, + pduUri: android.net.Uri, + sim: String, + sentIntent: PendingIntent + ) { + val smsManager = getSmsManager(context, sim) + smsManager.sendMultimediaMessage( + context, + pduUri, + null, + null, + sentIntent + ) + } } From 8a19b1d9021c564a1bedd2c76285b15f29ad681e Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:25:10 -0800 Subject: [PATCH 058/128] Added a filesize validation to make sure we're under 1.5MB --- .../java/com/httpsms/SmsManagerService.kt | 15 ++------- .../bulk_message_handler_validator.go | 6 +++- .../validators/message_handler_validator.go | 4 +++ api/pkg/validators/validator.go | 31 +++++++++++++++++++ 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/android/app/src/main/java/com/httpsms/SmsManagerService.kt b/android/app/src/main/java/com/httpsms/SmsManagerService.kt index 196c3868..59fbdad8 100644 --- a/android/app/src/main/java/com/httpsms/SmsManagerService.kt +++ b/android/app/src/main/java/com/httpsms/SmsManagerService.kt @@ -77,19 +77,8 @@ class SmsManagerService { } } - fun sendMultimediaMessage( - context: Context, - pduUri: android.net.Uri, - sim: String, - sentIntent: PendingIntent - ) { + fun sendMultimediaMessage(context: Context, pduUri: android.net.Uri, sim: String, sentIntent: PendingIntent) { val smsManager = getSmsManager(context, sim) - smsManager.sendMultimediaMessage( - context, - pduUri, - null, - null, - sentIntent - ) + smsManager.sendMultimediaMessage(context, pduUri, null, null, sentIntent) } } diff --git a/api/pkg/validators/bulk_message_handler_validator.go b/api/pkg/validators/bulk_message_handler_validator.go index 84844392..b96829af 100644 --- a/api/pkg/validators/bulk_message_handler_validator.go +++ b/api/pkg/validators/bulk_message_handler_validator.go @@ -221,7 +221,7 @@ func (v *BulkMessageHandlerValidator) validateMessages(messages []*requests.Bulk if message.AttachmentURLs != "" { urls := strings.Split(message.AttachmentURLs, ",") - + if len(urls) > 10 { result.Add("document", fmt.Sprintf("Row [%d]: You cannot attach more than 10 files per message.", index+2)) } @@ -237,6 +237,10 @@ func (v *BulkMessageHandlerValidator) validateMessages(messages []*requests.Bulk result.Add("document", fmt.Sprintf("Row [%d]: The attachment URL [%s] has an invalid url format.", index+2, cleanURL)) } else if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { result.Add("document", fmt.Sprintf("Row [%d]: The attachment URL [%s] must use http or https.", index+2, cleanURL)) + } else { + if err := validateAttachmentURL(cleanURL); err != nil { + result.Add("attachments", fmt.Sprintf("Row [%d]: The attachment URL [%s] failed validation: %s", index+2, cleanURL, err.Error())) + } } } } diff --git a/api/pkg/validators/message_handler_validator.go b/api/pkg/validators/message_handler_validator.go index 20a8ed9f..ffbdd778 100644 --- a/api/pkg/validators/message_handler_validator.go +++ b/api/pkg/validators/message_handler_validator.go @@ -123,6 +123,10 @@ func (validator MessageHandlerValidator) ValidateMessageSend(ctx context.Context result.Add("attachments", fmt.Sprintf("attachment at index %d has an invalid url format", i)) } else if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { result.Add("attachments", fmt.Sprintf("attachment at index %d must use http or https scheme", i)) + } else { + if err := validateAttachmentURL(attachment.URL); err != nil { + result.Add("attachments", fmt.Sprintf("attachment at index %d failed validation: %s", i, err.Error())) + } } } } diff --git a/api/pkg/validators/validator.go b/api/pkg/validators/validator.go index bc7111e8..bcef0a9b 100644 --- a/api/pkg/validators/validator.go +++ b/api/pkg/validators/validator.go @@ -2,9 +2,11 @@ package validators import ( "fmt" + "net/http" "net/url" "regexp" "strings" + "time" "github.com/NdoleStudio/httpsms/pkg/events" @@ -160,3 +162,32 @@ func (validator *validator) ValidateUUID(ID string, name string) url.Values { return v.ValidateStruct() } + +func validateAttachmentURL(attachmentURL string) error { + client := &http.Client{ + Timeout: 5 * time.Second, + } + + req, err := http.NewRequest(http.MethodHead, attachmentURL, nil) + if err != nil { + return fmt.Errorf("invalid url format") + } + + resp, err := client.Do(req) + if err != nil { + return fmt.Errorf("could not reach the url") + } + defer resp.Body.Close() + + if resp.StatusCode < 200 || resp.StatusCode >= 400 { + return fmt.Errorf("url returned an error status code: %d", resp.StatusCode) + } + + const maxSizeBytes = 1.5 * 1024 * 1024 + + if resp.ContentLength > int64(maxSizeBytes) { + return fmt.Errorf("file size (%.2f MB) exceeds the 1.5 MB carrier limit", float64(resp.ContentLength)/(1024*1024)) + } + + return nil +} From 40f718cc5bfd83f77ebea57e64077798be18ac89 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:25:45 -0800 Subject: [PATCH 059/128] Added missing validation to bulk send validator --- api/pkg/validators/message_handler_validator.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/api/pkg/validators/message_handler_validator.go b/api/pkg/validators/message_handler_validator.go index ffbdd778..ec23ab78 100644 --- a/api/pkg/validators/message_handler_validator.go +++ b/api/pkg/validators/message_handler_validator.go @@ -198,6 +198,10 @@ func (validator MessageHandlerValidator) ValidateMessageBulkSend(ctx context.Con result.Add("attachments", fmt.Sprintf("attachment at index %d has an invalid url format", i)) } else if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { result.Add("attachments", fmt.Sprintf("attachment at index %d must use http or https scheme", i)) + } else { + if err := validateAttachmentURL(attachment.URL); err != nil { + result.Add("attachments", fmt.Sprintf("attachment at index %d failed validation: %s", i, err.Error())) + } } } } From f2a0ab8a64831856ac92852c117012d6845f7e98 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:35:27 -0800 Subject: [PATCH 060/128] Added cache for csv uploads to avoid 1000s of duplicate http requests --- .../bulk_message_handler_validator.go | 10 ++++-- .../validators/message_handler_validator.go | 8 +++-- api/pkg/validators/validator.go | 34 ++++++++++++++++--- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/api/pkg/validators/bulk_message_handler_validator.go b/api/pkg/validators/bulk_message_handler_validator.go index b96829af..137442d0 100644 --- a/api/pkg/validators/bulk_message_handler_validator.go +++ b/api/pkg/validators/bulk_message_handler_validator.go @@ -17,6 +17,7 @@ import ( "github.com/NdoleStudio/httpsms/pkg/requests" "github.com/NdoleStudio/httpsms/pkg/services" "github.com/NdoleStudio/httpsms/pkg/telemetry" + "github.com/NdoleStudio/httpsms/pkg/cache" "github.com/dustin/go-humanize" "github.com/jszwec/csvutil" "github.com/nyaruka/phonenumbers" @@ -30,6 +31,7 @@ type BulkMessageHandlerValidator struct { userService *services.UserService logger telemetry.Logger tracer telemetry.Tracer + cache cache.Cache } // NewBulkMessageHandlerValidator creates a new handlers.BulkMessageHandlerValidator validator @@ -38,12 +40,14 @@ func NewBulkMessageHandlerValidator( tracer telemetry.Tracer, phoneService *services.PhoneService, userService *services.UserService, + appCache cache.Cache, ) (v *BulkMessageHandlerValidator) { return &BulkMessageHandlerValidator{ logger: logger.WithService(fmt.Sprintf("%T", v)), tracer: tracer, userService: userService, phoneService: phoneService, + cache: appCache, } } @@ -79,7 +83,7 @@ func (v *BulkMessageHandlerValidator) ValidateStore(ctx context.Context, userID messages[index] = message.Sanitize() } - result = v.validateMessages(messages) + result = v.validateMessages(ctx, messages) if len(result) != 0 { return messages, result } @@ -215,7 +219,7 @@ func (v *BulkMessageHandlerValidator) parseCSV(ctxLogger telemetry.Logger, user return messages, url.Values{} } -func (v *BulkMessageHandlerValidator) validateMessages(messages []*requests.BulkMessage) url.Values { +func (v *BulkMessageHandlerValidator) validateMessages(ctx context.Context, messages []*requests.BulkMessage) url.Values { result := url.Values{} for index, message := range messages { @@ -238,7 +242,7 @@ func (v *BulkMessageHandlerValidator) validateMessages(messages []*requests.Bulk } else if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { result.Add("document", fmt.Sprintf("Row [%d]: The attachment URL [%s] must use http or https.", index+2, cleanURL)) } else { - if err := validateAttachmentURL(cleanURL); err != nil { + if err := validateAttachmentURL(ctx, v.cache, cleanURL); err != nil { result.Add("attachments", fmt.Sprintf("Row [%d]: The attachment URL [%s] failed validation: %s", index+2, cleanURL, err.Error())) } } diff --git a/api/pkg/validators/message_handler_validator.go b/api/pkg/validators/message_handler_validator.go index ec23ab78..52741891 100644 --- a/api/pkg/validators/message_handler_validator.go +++ b/api/pkg/validators/message_handler_validator.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "github.com/NdoleStudio/httpsms/pkg/cache" "github.com/NdoleStudio/httpsms/pkg/repositories" "github.com/NdoleStudio/httpsms/pkg/services" "github.com/palantir/stacktrace" @@ -25,6 +26,7 @@ type MessageHandlerValidator struct { tracer telemetry.Tracer phoneService *services.PhoneService tokenValidator *TurnstileTokenValidator + cache cache.Cache } // NewMessageHandlerValidator creates a new handlers.MessageHandler validator @@ -33,12 +35,14 @@ func NewMessageHandlerValidator( tracer telemetry.Tracer, phoneService *services.PhoneService, tokenValidator *TurnstileTokenValidator, + appCache cache.Cache, ) (v *MessageHandlerValidator) { return &MessageHandlerValidator{ logger: logger.WithService(fmt.Sprintf("%T", v)), tracer: tracer, phoneService: phoneService, tokenValidator: tokenValidator, + cache: appCache, } } @@ -124,7 +128,7 @@ func (validator MessageHandlerValidator) ValidateMessageSend(ctx context.Context } else if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { result.Add("attachments", fmt.Sprintf("attachment at index %d must use http or https scheme", i)) } else { - if err := validateAttachmentURL(attachment.URL); err != nil { + if err := validateAttachmentURL(ctx, validator.cache, attachment.URL); err != nil { result.Add("attachments", fmt.Sprintf("attachment at index %d failed validation: %s", i, err.Error())) } } @@ -199,7 +203,7 @@ func (validator MessageHandlerValidator) ValidateMessageBulkSend(ctx context.Con } else if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { result.Add("attachments", fmt.Sprintf("attachment at index %d must use http or https scheme", i)) } else { - if err := validateAttachmentURL(attachment.URL); err != nil { + if err := validateAttachmentURL(ctx, validator.cache, attachment.URL); err != nil { result.Add("attachments", fmt.Sprintf("attachment at index %d failed validation: %s", i, err.Error())) } } diff --git a/api/pkg/validators/validator.go b/api/pkg/validators/validator.go index bcef0a9b..850d1e76 100644 --- a/api/pkg/validators/validator.go +++ b/api/pkg/validators/validator.go @@ -1,6 +1,7 @@ package validators import ( + "context" "fmt" "net/http" "net/url" @@ -8,6 +9,7 @@ import ( "strings" "time" + "github.com/NdoleStudio/httpsms/pkg/cache" "github.com/NdoleStudio/httpsms/pkg/events" "github.com/nyaruka/phonenumbers" @@ -163,31 +165,53 @@ func (validator *validator) ValidateUUID(ID string, name string) url.Values { return v.ValidateStruct() } -func validateAttachmentURL(attachmentURL string) error { +func validateAttachmentURL(ctx context.Context, c cache.Cache, attachmentURL string) error { + cacheKey := "mms-url-validation:" + attachmentURL + + if cachedVal, err := c.Get(ctx, cacheKey); err == nil { + if cachedVal == "valid" { + return nil + } + return fmt.Errorf(cachedVal) + } + client := &http.Client{ Timeout: 5 * time.Second, } req, err := http.NewRequest(http.MethodHead, attachmentURL, nil) if err != nil { - return fmt.Errorf("invalid url format") + errMsg := fmt.Sprintf("invalid url format") + saveToCache(ctx, c, cacheKey, errMsg) + return fmt.Errorf(errMsg) } resp, err := client.Do(req) if err != nil { - return fmt.Errorf("could not reach the url") + errMsg := fmt.Sprintf("could not reach the url") + saveToCache(ctx, c, cacheKey, errMsg) + return fmt.Errorf(errMsg) } defer resp.Body.Close() if resp.StatusCode < 200 || resp.StatusCode >= 400 { - return fmt.Errorf("url returned an error status code: %d", resp.StatusCode) + errMsg := fmt.Sprintf("url returned an error status code: %d", resp.StatusCode) + saveToCache(ctx, c, cacheKey, errMsg) + return fmt.Errorf(errMsg) } const maxSizeBytes = 1.5 * 1024 * 1024 if resp.ContentLength > int64(maxSizeBytes) { - return fmt.Errorf("file size (%.2f MB) exceeds the 1.5 MB carrier limit", float64(resp.ContentLength)/(1024*1024)) + errMsg := fmt.Sprintf("file size (%.2f MB) exceeds the 1.5 MB carrier limit", float64(resp.ContentLength)/(1024*1024)) + saveToCache(ctx, c, cacheKey, errMsg) + return fmt.Errorf(errMsg) } + saveToCache(ctx, c, cacheKey, "valid") return nil } + +func saveToCache(ctx context.Context, c cache.Cache, key string, value string) { + _ = c.Set(ctx, key, value, 24*time.Hour) +} From 3829d74b7830eae1a8ab301c711ce4719fdd7975 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:40:58 -0800 Subject: [PATCH 061/128] Added provider to manifest --- android/app/src/main/AndroidManifest.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 6d704ade..409b7140 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -90,6 +90,17 @@ + + + + + From 41c7bedea4bd8a811f5cb135165fde819b029d8a Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:41:58 -0800 Subject: [PATCH 062/128] File path for mms attachments/cache --- android/app/src/main/res/xml/file_paths.xml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 android/app/src/main/res/xml/file_paths.xml diff --git a/android/app/src/main/res/xml/file_paths.xml b/android/app/src/main/res/xml/file_paths.xml new file mode 100644 index 00000000..0df3af41 --- /dev/null +++ b/android/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file From e8140cdf4b84e62a7156af4bf9e28cec5bd2824f Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 01:55:58 -0800 Subject: [PATCH 063/128] added missing cache arguments --- api/pkg/di/container.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/pkg/di/container.go b/api/pkg/di/container.go index 632e4706..02d37738 100644 --- a/api/pkg/di/container.go +++ b/api/pkg/di/container.go @@ -534,6 +534,7 @@ func (container *Container) MessageHandlerValidator() (validator *validators.Mes container.Tracer(), container.PhoneService(), container.TurnstileTokenValidator(), + container.Cache(), ) } @@ -556,6 +557,7 @@ func (container *Container) BulkMessageHandlerValidator() (validator *validators container.Tracer(), container.PhoneService(), container.UserService(), + container.Cache(), ) } From b35f60d7278609ae6c870db844673d124fa33433 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 02:15:11 -0800 Subject: [PATCH 064/128] Added web support for attachments --- web/components/MessageThread.vue | 11 +++++++++-- web/models/message.ts | 6 ++++++ web/pages/messages/index.vue | 34 ++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/web/components/MessageThread.vue b/web/components/MessageThread.vue index 0f0f222b..e2ed4739 100644 --- a/web/components/MessageThread.vue +++ b/web/components/MessageThread.vue @@ -95,8 +95,13 @@ {{ thread.contact | phoneNumber }} - - {{ thread.last_message_content }} + + + {{ thread.last_message_content }} + + + {{ mdiPaperclip }} Multimedia Message + @@ -150,6 +155,7 @@ import { mdiCheck, mdiAlert, mdiAccount, + mdiPaperclip, } from '@mdi/js' @Component @@ -160,6 +166,7 @@ export default class MessageThread extends Vue { mdiAlert = mdiAlert mdiCheck = mdiCheck mdiCheckAll = mdiCheckAll + mdiPaperclip = mdiPaperclip get threads(): Array { return this.$store.getters.getThreads diff --git a/web/models/message.ts b/web/models/message.ts index 35306648..c0d09f12 100644 --- a/web/models/message.ts +++ b/web/models/message.ts @@ -1,6 +1,12 @@ +export interface MessageAttachment { + content_type: string + url: string +} + export interface Message { contact: string content: string + attachments?: MessageAttachment[] created_at: string failure_reason: string id: string diff --git a/web/pages/messages/index.vue b/web/pages/messages/index.vue index a1a2a154..78a46533 100644 --- a/web/pages/messages/index.vue +++ b/web/pages/messages/index.vue @@ -33,6 +33,16 @@ placeholder="Enter your message here" label="Content" > + { @@ -113,6 +144,9 @@ export default { ), ) } + if (response.data.data.attachments) { + errors.set('attachments', response.data.data.attachments) + } if (response.data.data.from) { this.$store.dispatch('addNotification', { message: response.data.data.from[0], From adfa171d0fdf94431b62f6ae5de6381ec6da4d2d Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 02:52:01 -0800 Subject: [PATCH 065/128] Added PDU generation via android-smsmms and MMS sender/handler --- android/app/build.gradle | 1 + .../com/httpsms/FirebaseMessagingService.kt | 113 ++++++++++++++++++ .../java/com/httpsms/HttpSmsApiService.kt | 47 ++++++++ .../src/main/java/com/httpsms/SentReceiver.kt | 22 ++++ 4 files changed, 183 insertions(+) diff --git a/android/app/build.gradle b/android/app/build.gradle index f49acb2b..66eb98c1 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -67,6 +67,7 @@ dependencies { implementation 'com.google.android.material:material:1.12.0' implementation 'androidx.constraintlayout:constraintlayout:2.2.1' implementation 'com.googlecode.libphonenumber:libphonenumber:9.0.4' + implementation 'com.klinkerapps:android-smsmms:5.2.6' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.2.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' diff --git a/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt b/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt index 8f1e448c..dca73a5e 100644 --- a/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt +++ b/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt @@ -9,6 +9,13 @@ import com.google.firebase.messaging.RemoteMessage import com.httpsms.SentReceiver.FailedMessageWorker import timber.log.Timber +import com.google.android.mms.pdu.CharacterSets +import com.google.android.mms.pdu.EncodedStringValue +import com.google.android.mms.pdu.PduBody +import com.google.android.mms.pdu.PduComposer +import com.google.android.mms.pdu.PduPart +import com.google.android.mms.pdu.SendReq + class MyFirebaseMessagingService : FirebaseMessagingService() { // [START receive_message] override fun onMessageReceived(remoteMessage: RemoteMessage) { @@ -158,6 +165,11 @@ class MyFirebaseMessagingService : FirebaseMessagingService() { } Receiver.register(applicationContext) + + if (message.attachments != null && message.attachments.isNotEmpty()) { + return handleMmsMessage(message) + } + val parts = getMessageParts(applicationContext, message) if (parts.size == 1) { return handleSingleMessage(message, parts.first()) @@ -165,6 +177,107 @@ class MyFirebaseMessagingService : FirebaseMessagingService() { return handleMultipartMessage(message, parts) } + private fun handleMmsMessage(message: Message): Result { + Timber.d("Processing MMS for message ID [${message.id}]") + val apiService = HttpSmsApiService.create(applicationContext) + + val downloadedFiles = mutableListOf() + + try { + for ((index, attachment) in message.attachments!!.withIndex()) { + val file = apiService.downloadAttachment(applicationContext, attachment.url, message.id, index) + if (file == null) { + handleFailed(applicationContext, message.id, "Failed to download attachment or file size exceeded 1.5MB.") + return Result.failure() + } + downloadedFiles.add(file) + } + + val sendReq = SendReq() + + val encodedContact = EncodedStringValue(message.contact) + sendReq.to = arrayOf(encodedContact) + + val pduBody = PduBody() + + if (message.content.isNotEmpty()) { + val textPart = PduPart() + textPart.setCharset(CharacterSets.UTF_8) + textPart.contentType = "text/plain".toByteArray() + textPart.name = "text".toByteArray() + textPart.contentId = "text".toByteArray() + textPart.contentLocation = "text".toByteArray() + + var messageBody = message.content + val encryptionKey = Settings.getEncryptionKey(applicationContext) + if (message.encrypted && !encryptionKey.isNullOrEmpty()) { + messageBody = Encrypter.decrypt(encryptionKey, messageBody) + } + textPart.data = messageBody.toByteArray(Charsets.UTF_8) + + pduBody.addPart(textPart) + } + + for ((index, file) in downloadedFiles.withIndex()) { + val attachment = message.attachments[index] + val fileBytes = file.readBytes() + + val mediaPart = PduPart() + mediaPart.contentType = attachment.contentType.toByteArray() + + val fileName = "attachment_$index".toByteArray() + mediaPart.name = fileName + mediaPart.contentId = fileName + mediaPart.contentLocation = fileName + mediaPart.data = fileBytes + + pduBody.addPart(mediaPart) + } + + sendReq.body = pduBody + + val pduComposer = PduComposer(applicationContext, sendReq) + val pduBytes = pduComposer.make() + + if (pduBytes == null) { + Timber.e("PduComposer failed to generate PDU byte array") + handleFailed(applicationContext, message.id, "Failed to compose MMS PDU.") + return Result.failure() + } + + val mmsDir = java.io.File(applicationContext.cacheDir, "mms_attachments") + if (!mmsDir.exists()) { + mmsDir.mkdirs() + } + + val pduFile = java.io.File(mmsDir, "pdu_${message.id}.dat") + java.io.FileOutputStream(pduFile).use { it.write(pduBytes) } + + val pduUri = androidx.core.content.FileProvider.getUriForFile( + applicationContext, + "${BuildConfig.APPLICATION_ID}.fileprovider", + pduFile + ) + + val sentIntent = createPendingIntent(message.id, SmsManagerService.sentAction()) + SmsManagerService().sendMultimediaMessage(applicationContext, pduUri, message.sim, sentIntent) + + Timber.d("Successfully dispatched MMS for message ID [${message.id}]") + return Result.success() + + } catch (e: Exception) { + Timber.e(e, "Failed to send MMS for message ID [${message.id}]") + handleFailed(applicationContext, message.id, e.message ?: "Internal error while building or sending MMS.") + return Result.failure() + } finally { + downloadedFiles.forEach { file -> + if (file.exists()) { + file.delete() + } + } + } + } + private fun handleMultipartMessage(message:Message, parts: ArrayList): Result { Timber.d("sending multipart SMS for message with ID [${message.id}]") return try { diff --git a/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt b/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt index 3d813e13..4f1fe5dd 100644 --- a/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt +++ b/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt @@ -11,6 +11,8 @@ import java.net.URI import java.net.URL import java.util.logging.Level import java.util.logging.Logger.getLogger +import java.io.File +import java.io.FileOutputStream class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) { @@ -156,6 +158,51 @@ class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) { return true } + fun downloadAttachment(context: Context, urlString: String, messageId: String, attachmentIndex: Int): File? { + val request = Request.Builder().url(urlString).build() + + try { + val response = client.newCall(request).execute() + if (!response.isSuccessful) { + Timber.e("Failed to download attachment: ${response.code}") + response.close() + return null + } + + val maxSizeBytes = 1.5 * 1024 * 1024 // most (modern?) carriers have a 2MB limit, so targetting 1.5MB should be safe + val contentLength = response.body?.contentLength() ?: -1L + if (contentLength > maxSizeBytes) { + Timber.e("Attachment is too large ($contentLength bytes).") + response.close() + return null + } + + val mmsDir = File(context.cacheDir, "mms_attachments") + if (!mmsDir.exists()) { + mmsDir.mkdirs() + } + + val tempFile = File(mmsDir, "mms_${messageId}_$attachmentIndex") + val inputStream = response.body?.byteStream() + val outputStream = FileOutputStream(tempFile) + inputStream?.copyTo(outputStream) + + outputStream.close() + inputStream?.close() + response.close() + + if (tempFile.length() > maxSizeBytes) { + tempFile.delete() + Timber.e("Downloaded file exceeded 1.5MB limit.") + return null + } + + return tempFile + } catch (e: Exception) { + Timber.e(e, "Exception while downloading attachment") + return null + } + } private fun sendEvent(messageId: String, event: String, timestamp: String, reason: String? = null): Boolean { var reasonString = "null" diff --git a/android/app/src/main/java/com/httpsms/SentReceiver.kt b/android/app/src/main/java/com/httpsms/SentReceiver.kt index 7995c35c..00e76c2c 100644 --- a/android/app/src/main/java/com/httpsms/SentReceiver.kt +++ b/android/app/src/main/java/com/httpsms/SentReceiver.kt @@ -17,6 +17,8 @@ import timber.log.Timber internal class SentReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { + val messageId = intent.getStringExtra(Constants.KEY_MESSAGE_ID) + cleanupPduFile(context, messageId) when (resultCode) { Activity.RESULT_OK -> handleMessageSent(context, intent.getStringExtra(Constants.KEY_MESSAGE_ID)) SmsManager.RESULT_ERROR_GENERIC_FAILURE -> handleMessageFailed(context, intent.getStringExtra(Constants.KEY_MESSAGE_ID), "GENERIC_FAILURE") @@ -27,6 +29,26 @@ internal class SentReceiver : BroadcastReceiver() { } } + private fun cleanupPduFile(context: Context, messageId: String?) { + if (messageId == null) return + + try { + val baseMessageId = messageId.substringBefore(".") + val mmsDir = File(context.cacheDir, "mms_attachments") + val pduFile = File(mmsDir, "pdu_$baseMessageId.dat") + + if (pduFile.exists()) { + if (pduFile.delete()) { + Timber.d("Cleaned up PDU file for message ID [$baseMessageId]") + } else { + Timber.w("Failed to delete PDU file for message ID [$baseMessageId]") + } + } + } catch (e: Exception) { + Timber.e(e, "Error cleaning up PDU file for message ID [$messageId]") + } + } + private fun handleMessageSent(context: Context, messageId: String?) { if (!Receiver.isValid(context, messageId)) { return From 5508157e936e35ee5aa32e74739164c2f5c4fdb7 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Fri, 27 Feb 2026 09:36:36 -0800 Subject: [PATCH 066/128] Added annotations for Codacy --- android/app/src/main/java/com/httpsms/HttpSmsApiService.kt | 1 + android/app/src/main/java/com/httpsms/Models.kt | 1 + android/app/src/main/java/com/httpsms/SmsManagerService.kt | 1 + 3 files changed, 3 insertions(+) diff --git a/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt b/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt index 4f1fe5dd..c3ae8e13 100644 --- a/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt +++ b/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt @@ -158,6 +158,7 @@ class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) { return true } + // Downloads the attachment URL content locally fun downloadAttachment(context: Context, urlString: String, messageId: String, attachmentIndex: Int): File? { val request = Request.Builder().url(urlString).build() diff --git a/android/app/src/main/java/com/httpsms/Models.kt b/android/app/src/main/java/com/httpsms/Models.kt index 5b718450..d2559fb0 100644 --- a/android/app/src/main/java/com/httpsms/Models.kt +++ b/android/app/src/main/java/com/httpsms/Models.kt @@ -29,6 +29,7 @@ data class Phone ( val userID: String, ) +// mms attachment data class Attachment ( @Json(name = "content_type") val contentType: String, diff --git a/android/app/src/main/java/com/httpsms/SmsManagerService.kt b/android/app/src/main/java/com/httpsms/SmsManagerService.kt index 59fbdad8..5f7ce6f5 100644 --- a/android/app/src/main/java/com/httpsms/SmsManagerService.kt +++ b/android/app/src/main/java/com/httpsms/SmsManagerService.kt @@ -77,6 +77,7 @@ class SmsManagerService { } } + // Wrapper for the smsManager's sendMultimediaMessage fun sendMultimediaMessage(context: Context, pduUri: android.net.Uri, sim: String, sentIntent: PendingIntent) { val smsManager = getSmsManager(context, sim) smsManager.sendMultimediaMessage(context, pduUri, null, null, sentIntent) From 301540c2eb89097963406a7cf7c07551f597a94a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Mar 2026 00:03:26 +0000 Subject: [PATCH 067/128] fix(deps): bump google.golang.org/api from 0.267.0 to 0.269.0 in /api Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.267.0 to 0.269.0. - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.267.0...v0.269.0) --- updated-dependencies: - dependency-name: google.golang.org/api dependency-version: 0.269.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- api/go.mod | 2 +- api/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/go.mod b/api/go.mod index 3a1c6701..49c3f34f 100644 --- a/api/go.mod +++ b/api/go.mod @@ -50,7 +50,7 @@ require ( go.opentelemetry.io/otel/sdk v1.40.0 go.opentelemetry.io/otel/sdk/metric v1.40.0 go.opentelemetry.io/otel/trace v1.40.0 - google.golang.org/api v0.267.0 + google.golang.org/api v0.269.0 google.golang.org/protobuf v1.36.11 gorm.io/driver/postgres v1.6.0 gorm.io/driver/sqlite v1.6.0 diff --git a/api/go.sum b/api/go.sum index 26dba3ad..a2c97396 100644 --- a/api/go.sum +++ b/api/go.sum @@ -541,8 +541,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T 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= -google.golang.org/api v0.267.0 h1:w+vfWPMPYeRs8qH1aYYsFX68jMls5acWl/jocfLomwE= -google.golang.org/api v0.267.0/go.mod h1:Jzc0+ZfLnyvXma3UtaTl023TdhZu6OMBP9tJ+0EmFD0= +google.golang.org/api v0.269.0 h1:qDrTOxKUQ/P0MveH6a7vZ+DNHxJQjtGm/uvdbdGXCQg= +google.golang.org/api v0.269.0/go.mod h1:N8Wpcu23Tlccl0zSHEkcAZQKDLdquxK+l9r2LkwAauE= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20260217200457-a2cb2272a1e9 h1:MzLVemxGdOBt2uziz9LnuYRQQFw1FDV0s0af4GVYE1A= From 42210657c13b711fa8a7ba33da0c6f808d5b7bbd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Mar 2026 00:03:31 +0000 Subject: [PATCH 068/128] fix(deps): bump github.com/uptrace/uptrace-go in /api Bumps [github.com/uptrace/uptrace-go](https://github.com/uptrace/uptrace-go) from 1.39.0 to 1.40.0. - [Release notes](https://github.com/uptrace/uptrace-go/releases) - [Commits](https://github.com/uptrace/uptrace-go/compare/v1.39.0...v1.40.0) --- updated-dependencies: - dependency-name: github.com/uptrace/uptrace-go dependency-version: 1.40.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- api/go.mod | 5 +++-- api/go.sum | 10 ++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/api/go.mod b/api/go.mod index 3a1c6701..97626364 100644 --- a/api/go.mod +++ b/api/go.mod @@ -43,7 +43,7 @@ require ( github.com/swaggo/swag v1.16.6 github.com/thedevsaddam/govalidator v1.9.10 github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc - github.com/uptrace/uptrace-go v1.39.0 + github.com/uptrace/uptrace-go v1.40.0 github.com/xuri/excelize/v2 v2.10.0 go.opentelemetry.io/otel v1.40.0 go.opentelemetry.io/otel/metric v1.40.0 @@ -171,6 +171,7 @@ require ( go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect go.opentelemetry.io/contrib/instrumentation/runtime v0.65.0 // indirect + go.opentelemetry.io/contrib/processors/minsev v0.13.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.16.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.40.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect @@ -195,7 +196,7 @@ require ( golang.org/x/tools v0.42.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20260217200457-a2cb2272a1e9 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260217200457-a2cb2272a1e9 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d // indirect google.golang.org/grpc v1.79.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/api/go.sum b/api/go.sum index 26dba3ad..d625f903 100644 --- a/api/go.sum +++ b/api/go.sum @@ -343,8 +343,8 @@ github.com/tiendc/go-deepcopy v1.7.2 h1:Ut2yYR7W9tWjTQitganoIue4UGxZwCcJy3orjrrI github.com/tiendc/go-deepcopy v1.7.2/go.mod h1:4bKjNC2r7boYOkD2IOuZpYjmlDdzjbpTRyCx+goBCJQ= github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc h1:lzi/5fg2EfinRlh3v//YyIhnc4tY7BTqazQGwb1ar+0= github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc/go.mod h1:08inkKyguB6CGGssc/JzhmQWwBgFQBgjlYFjxjRh7nU= -github.com/uptrace/uptrace-go v1.39.0 h1:MszuE3eX/z86xzYywN2JBtYcmsS4ofdo1VMDhRvkWrI= -github.com/uptrace/uptrace-go v1.39.0/go.mod h1:FquipEqgTMXPbhdhenjbiLHG1R5WYdxVH6zgwHeMzzA= +github.com/uptrace/uptrace-go v1.40.0 h1:fMva36FZ/eujU60hq+ke9HdYGkXP5jJXUTNeEuWDI+I= +github.com/uptrace/uptrace-go v1.40.0/go.mod h1:HJhggr8UMkJ+keR8B9o4KsF7kxT8lKH7Ra8X2DRwqdc= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.69.0 h1:fNLLESD2SooWeh2cidsuFtOcrEi4uB4m1mPrkJMZyVI= @@ -385,6 +385,8 @@ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0= go.opentelemetry.io/contrib/instrumentation/runtime v0.65.0 h1:n8qdwrebNEHF/zHpueuZ4OacdJ8CdSaP7xef9WRZXTQ= go.opentelemetry.io/contrib/instrumentation/runtime v0.65.0/go.mod h1:Z1pjGxUL3nJ/IbDDfL6rBD0Xbz7ZOViRqrIUg4l1CYE= +go.opentelemetry.io/contrib/processors/minsev v0.13.0 h1:pADh6ro5deXRfNmry136khTZYWVXn9NKZR5nZuEXtXw= +go.opentelemetry.io/contrib/processors/minsev v0.13.0/go.mod h1:MC0s+ldbPprTztVZQ/pecYqPSxwfjQkdnCeC3u6uGQU= go.opentelemetry.io/contrib/propagators/b3 v1.19.0 h1:ulz44cpm6V5oAeg5Aw9HyqGFMS6XM7untlMEhD7YzzA= go.opentelemetry.io/contrib/propagators/b3 v1.19.0/go.mod h1:OzCmE2IVS+asTI+odXQstRGVfXQ4bXv9nMBRK0nNyqQ= go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= @@ -547,8 +549,8 @@ google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAs google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20260217200457-a2cb2272a1e9 h1:MzLVemxGdOBt2uziz9LnuYRQQFw1FDV0s0af4GVYE1A= google.golang.org/genproto v0.0.0-20260217200457-a2cb2272a1e9/go.mod h1:9mSgs6f8tLwHSr6EzFWG+naa04gb1Zpt4IumYKsRDs0= -google.golang.org/genproto/googleapis/api v0.0.0-20260217200457-a2cb2272a1e9 h1:yt1EUx2U7D7a0Myzkt7z+RR5hnl6mCdzcUfYHx7LEls= -google.golang.org/genproto/googleapis/api v0.0.0-20260217200457-a2cb2272a1e9/go.mod h1:S3ojYC5GRm/7ewOSg8Rh+iqeqxS3BLlLKFhVlbYwHuU= +google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d h1:EocjzKLywydp5uZ5tJ79iP6Q0UjDnyiHkGRWxuPBP8s= +google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:48U2I+QQUYhsFrg2SY6r+nJzeOtjey7j//WBESw+qyQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d h1:t/LOSXPJ9R0B6fnZNyALBRfZBH0Uy0gT+uR+SJ6syqQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= From 2802cde39710bf628c9d07854156afca99e3e204 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Mar 2026 00:03:42 +0000 Subject: [PATCH 069/128] fix(deps): bump github.com/nyaruka/phonenumbers in /api Bumps [github.com/nyaruka/phonenumbers](https://github.com/nyaruka/phonenumbers) from 1.6.9 to 1.6.10. - [Release notes](https://github.com/nyaruka/phonenumbers/releases) - [Changelog](https://github.com/nyaruka/phonenumbers/blob/main/CHANGELOG.md) - [Commits](https://github.com/nyaruka/phonenumbers/compare/v1.6.9...v1.6.10) --- updated-dependencies: - dependency-name: github.com/nyaruka/phonenumbers dependency-version: 1.6.10 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- api/go.mod | 2 +- api/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/go.mod b/api/go.mod index 3a1c6701..e075e3ac 100644 --- a/api/go.mod +++ b/api/go.mod @@ -31,7 +31,7 @@ require ( github.com/jordan-wright/email v4.0.1-0.20210109023952-943e75fe5223+incompatible github.com/jszwec/csvutil v1.10.0 github.com/lib/pq v1.11.2 - github.com/nyaruka/phonenumbers v1.6.9 + github.com/nyaruka/phonenumbers v1.6.10 github.com/palantir/stacktrace v0.0.0-20161112013806-78658fd2d177 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/pkg/errors v0.9.1 diff --git a/api/go.sum b/api/go.sum index 26dba3ad..c70fa5ef 100644 --- a/api/go.sum +++ b/api/go.sum @@ -271,8 +271,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= -github.com/nyaruka/phonenumbers v1.6.9 h1:LUmsIr+WKyBhWTzxm/9j+kGC9JclO+hBOHc18PSo9iM= -github.com/nyaruka/phonenumbers v1.6.9/go.mod h1:IUu45lj2bSeYXQuxDyyuzOrdV10tyRa1YSsfH8EKN5c= +github.com/nyaruka/phonenumbers v1.6.10 h1:kGTxTzd320dUamRB/MPeZSIwKNLn4vHlysOt5Cp8uoU= +github.com/nyaruka/phonenumbers v1.6.10/go.mod h1:IUu45lj2bSeYXQuxDyyuzOrdV10tyRa1YSsfH8EKN5c= github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 h1:zrbMGy9YXpIeTnGj4EljqMiZsIcE09mmF8XsD5AYOJc= github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6/go.mod h1:rEKTHC9roVVicUIfZK7DYrdIoM0EOr8mK1Hj5s3JjH0= github.com/olekukonko/errors v1.2.0 h1:10Zcn4GeV59t/EGqJc8fUjtFT/FuUh5bTMzZ1XwmCRo= From a8c976bb5598f25ccebabab756c4713c55cd85ea Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Sat, 28 Feb 2026 20:22:34 -0800 Subject: [PATCH 070/128] Fixed imports and missing comma --- .../java/com/httpsms/FirebaseMessagingService.kt | 12 ++++++------ android/app/src/main/java/com/httpsms/Models.kt | 2 +- .../app/src/main/java/com/httpsms/SentReceiver.kt | 1 + 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt b/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt index dca73a5e..03c99bb4 100644 --- a/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt +++ b/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt @@ -9,12 +9,12 @@ import com.google.firebase.messaging.RemoteMessage import com.httpsms.SentReceiver.FailedMessageWorker import timber.log.Timber -import com.google.android.mms.pdu.CharacterSets -import com.google.android.mms.pdu.EncodedStringValue -import com.google.android.mms.pdu.PduBody -import com.google.android.mms.pdu.PduComposer -import com.google.android.mms.pdu.PduPart -import com.google.android.mms.pdu.SendReq +import com.google.android.mms.pdu_alt.CharacterSets +import com.google.android.mms.pdu_alt.EncodedStringValue +import com.google.android.mms.pdu_alt.PduBody +import com.google.android.mms.pdu_alt.PduComposer +import com.google.android.mms.pdu_alt.PduPart +import com.google.android.mms.pdu_alt.SendReq class MyFirebaseMessagingService : FirebaseMessagingService() { // [START receive_message] diff --git a/android/app/src/main/java/com/httpsms/Models.kt b/android/app/src/main/java/com/httpsms/Models.kt index d2559fb0..1ee2dbc8 100644 --- a/android/app/src/main/java/com/httpsms/Models.kt +++ b/android/app/src/main/java/com/httpsms/Models.kt @@ -76,7 +76,7 @@ data class Message ( val type: String, @Json(name = "updated_at") - val updatedAt: String + val updatedAt: String, val attachments: List? = null ) diff --git a/android/app/src/main/java/com/httpsms/SentReceiver.kt b/android/app/src/main/java/com/httpsms/SentReceiver.kt index 00e76c2c..8786ba2c 100644 --- a/android/app/src/main/java/com/httpsms/SentReceiver.kt +++ b/android/app/src/main/java/com/httpsms/SentReceiver.kt @@ -14,6 +14,7 @@ import androidx.work.Worker import androidx.work.WorkerParameters import androidx.work.workDataOf import timber.log.Timber +import java.io.File internal class SentReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { From cafaab90086d37d9158e0306a59a351d75162b0b Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Sat, 28 Feb 2026 20:39:51 -0800 Subject: [PATCH 071/128] Updated UI to show attachments --- web/components/MessageThread.vue | 5 +--- web/pages/threads/_id/index.vue | 40 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/web/components/MessageThread.vue b/web/components/MessageThread.vue index e2ed4739..51676b85 100644 --- a/web/components/MessageThread.vue +++ b/web/components/MessageThread.vue @@ -96,12 +96,9 @@ {{ thread.contact | phoneNumber }} - + {{ thread.last_message_content }} - - {{ mdiPaperclip }} Multimedia Message - diff --git a/web/pages/threads/_id/index.vue b/web/pages/threads/_id/index.vue index 06042a45..21ff39c7 100644 --- a/web/pages/threads/_id/index.vue +++ b/web/pages/threads/_id/index.vue @@ -173,6 +173,46 @@ > + + Message Attachments + + + + + + + +
+ +
Unsupported file type
+
+
+
+
+

{{ new Date(message.order_timestamp).toLocaleString() }} From 47dde30802b6bfdad79585c8705f701e0d009440 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Sat, 28 Feb 2026 20:50:16 -0800 Subject: [PATCH 072/128] Updated templates --- web/static/templates/httpsms-bulk.csv | 6 +++--- web/static/templates/httpsms-bulk.xlsx | Bin 8991 -> 8246 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/static/templates/httpsms-bulk.csv b/web/static/templates/httpsms-bulk.csv index 38891f63..715ecab4 100644 --- a/web/static/templates/httpsms-bulk.csv +++ b/web/static/templates/httpsms-bulk.csv @@ -1,3 +1,3 @@ -FromPhoneNumber,ToPhoneNumber,Content -+18005550199,+18005550100,This is a sample text message1 -+18005550199,+18005550100,This is a sample text message2 +FromPhoneNumber,ToPhoneNumber,Content,SendTime(optional),AttachmentURLs(optional) ++18005550199,+18005550100,This is a sample text message1,,http://thisisasample.com/attachment.png ++18005550199,+18005550100,This is a sample text message2,2023-11-11T02:10:01, diff --git a/web/static/templates/httpsms-bulk.xlsx b/web/static/templates/httpsms-bulk.xlsx index bb713087050c20208ebcbf516a03b162f3514f34..20f2b543d704e8dfcb2836fbb5002e850cfda523 100644 GIT binary patch literal 8246 zcmd^E2UL_xvL;FzGKd3`ama#zT=#TzNbfgxYT*aqZBwq3+?%p9yh5o!Wzw&~Pcn1Oi7qat zn_#ZUEl z|2h*ixB3n{6?=a7Ono@C<|g5RT>8~xQRdLg7RR^;HZw)}cqQ6WS|^z80l|WiSYg6X zxn8evjw;KaN)m{k(e6!l>NIwLHtn3G>cFJeY~^{Q;N2Nk4l-#>uvYTe463!orVr}r zd@Xu7KUvPzC0xzH?NDwqRs5lnrPfqS6%QZJ!Y%|C69WSe8v{e@ubI*V;`+eN*4o)!96$D7gY-)df#e(pEDhmj(zk<+j&G$^!Djn!fcpkVFdJKCqlDje~A z7B+R|&WT60k3W`Mh8XzZ8#1O=rtwqAxty8J3jiw^P!08 zW}{oR;WVPAK6g!oJ*|Gv7y1U`?&C(0JLv5yai52sRO+pvDq~?`VO!hD-s;@shVL7{ zWh<$s6i1KNX(PT(;Y{!P)5D_r@wPVa>fekVWBBxHW282eoLvOYJ#S2t<^>2pA14A1 zY&e|mPfmK&U*CdeA3C~Jj+`|z4riqufD=5{77IJ18zlhqjlG4F$R_UqpWXaJ%TD1< zFrM49s6M6h8;R$ox%^TDvyV%5){n}!&3mttNKG1wgefw}uq@>wuLqc9W={1^eF#W_ z1T-MM{9OILT|NEIXQm$?h4m(M+&*9&oYpI>J>T#`^B8N(WDulb76GBAeKnQ4gL|v31K!infcHBt6F1Ly;9FDcjmv%Y1-*^XgH@Y@ zRpjoFL*S4R_>#7xIwy;&;kiC%Am66kkcigRqZzlzC2ebh)eNJPhIwi3_mwMAV6Q$O@u!9apSDOp_r zbsJj&g#@7QixqIHZ-LmNTQ6s(gT|4ATX$}nuJrV?9fGCAKG9s?Zn4EElV;3kaUp?^ z0}}$%0_&hj45lm&|I7-3IDr9g1 zED1R?4tyTmpnRq>YMl1qW2aN2?Z-~_&Ojiow-6#5en->kc|Ra{)+N=56>U7g{VY!ChCM1rwKnO zo%z@r-=99%G`#t5Y5%wP^e_A;8x-~)5jz5;kWjDyE3X40(wWNz|6ZkkN67Tf%z@;gkWfOw9L%u}c$A)1CP)Q^ zwIKeL%E;2y@seMuGnx%FhRJ+tF;k>;%&)EeG-2y=*3BX*l2o~DPGFpGoE==P-?Mmg+A#?&H*|td*QYh4 zocq=IR~k4y@xSlrv4tY%4AbWsb%w3w96FLHC!w%X)F^7!Z}U52`oO;1m6+q#p#soR?jKLeiW6UYc@_Gy`6)1>C!NfWw) zgH6Oy`4VGbtQGuG1;_fM7`{-!nYvm#T&&}+qwkC3q?}s$0ZN+v68ICWqrk`);px|S zW3yD_7y@H$Rm0T@C7E^hr~>- z%@N!sw+hp>TAfkE9Xf4YO$Q~Wa!S8^!4;~CXTl~$r(2W@eEcNhwFV3hPBi>7z*gmR zwTmb1%fP}kU>O3pUlZ@VKO8)kPI3B(K8)F5Owk7(v4|j;=jPN5I-rj9VtZrJ7DhoR z5czy>>1~aRaB@TKazRUvHiw{w*=GIq^TE&7Ck2{^H$ESKtS7l|Tn?sl+kJ9IhqhQW z(W|Oils$$}b?@)jyp%sI=5A~4XwCQi`+K?DtA8Id#!q#IizIzIJv@PriF22iYQuc+ zWw~7+$c3Wx3FT;x@%iahcCw`*J?wbW3Yv8zk%Vbov(@a?eGjc_Jl}u z%%wcqW2v_R5>1me8%SdRu~xkOUMNM?Hf^F#%O;ZiAb0A^!Um9H>03|F_9bgzlJ1J2 znBHyRal&po*78EZj+Lx5wWv~7izC@JJdJMReyr^BBrQOx0sSt}e5+31a!Me5h`Do& z{IDb@_lc|;$7BzCWD}vf+CrkD#I;Y9#qK1YaRufL#ze`^FFOL4c0}S?pBAbOhdZd6bPkMzW2*?MbwnV z*6;$c-V{G~z;;Pm-}+Mh`*FHpIY(i&Ub-CNA&KjUO#C%zPu};^_kN+Pm#eksoj1-0 zr^`6AcO5gLJx#AF_ZlZ^XXy>eA9)(p4^MNmHFveP(sg%5@7AF=>5{a^Ro=@2PO;9- z;p~1Rh^pXafejWSBpb`vY2ZjZ^kqW6I@j8?#0zd6EwY{XXKt>pE@=u^K5=WTvnGl6 z73nFfJ4iizH8ouS`IR1zEH5Cg>=UHZTQ^3F3KrNR=Houru1VKYrwY#tR%~>Ho%TcW@wbB2l_2RY>*xN{i@o3dwN7 zP5}KE)&1cVwg^dV`g$96z@ z6n!IvS|-*}r*rs#wiS?_p9&TkIhb|ZY`7}Xu#%)0Ga+v74omn<%UY6>A39}yxKtyG z4368qtACfaS5VS946>t{zZqgDzZac2O1n2hZ|PBZ0TnjEUMc<4QWIvmBIka`^)|Z)+p_ ztHBuKI(#b3j~LqvoHK@$e8S)>Rejq>3!SrzjE^V}?!`k9pFu!~pA*2#%6Km1!759FkROS155WZ}hn%cUY-byq;u>qQ3bHYR_c%INx_ZUxlX{{mn7G zRF;?syJ6!8tXk1w#+Hx#M^fbv2Vmo?xI`2j(FaQA-^M>edyqG-data}B&D5HPP92s zMenr_nGW=P3D`-vLqep@aL08^svowNHe0_vp&Zq%q0HwVMW0X1UwFn;bwx_DT^rdQHKrkn>Gb}O%9=gdNVem_f-{ul|G*H}Ox55Dj1$E%|D_Q_x<4x=~~GEc}A zt~_!#3H2UhXda=on7wV4CN$BQ5UcpY;YG>GGl=x)xzjXly3kCBt1!DmN<2=Hv(Bil zMq|^|WxDv#&flv5&ZZ9DShQ?zPxZ1_Dg~AB|q^kNMZ3!Q}T3N53 zM!?3fle4hGl?IoD{IX!&s!pLF`pjQf+{H3Ue|@Fw>!q*Hy%dpJ`QlMRgVHlm6jQkR z?XR3|n6iSN_Y*EZ684Z+`fx*FB9m_qEAFP@)g-;IV?OF|5IYT|GN>FbRF?`sf};oK z7oQe?@sg4J^3-W-{eI0EW5lb(a+y5p0N=+)hDK^^f~10{on&zqk>g>xZ6!-#=IbAU zH{j8Pt9e0ePw9;Op#i`eRdc z(1`<4#@~D8YTjIau^5An~ZjTvRt5^ zssPSry=W`BMZen~&Ep}FZp)+h(*E0t7WRGbjLtAE4L3No+VVlWz2wMUx;StXnbCxB zMcAg?`JvmQzN*Gt^og`kxGxj1xKFIja)QvMYO@UwZPFtFIcp-6NrnH=q(mr_{;=nF z8%FoZkp%OT;r3H{hS}`vIGaahmE8b25HmclQDBzMwJU7d*wBe4N=`W1_0K6v_Oc-T zX3oU@ywlapmU`tKE#~n4TPX}8Z9`u63J$Y2jEB{ne4<@&CwZCI%@h_PfznDI3zB&Z zV4#4j?O+b8Ob=WM@;bpj@zT-tzJrM-IxRnV(EyfjHj&xJ>NaCqos*U)%frlpc1CK` z2sTv+KcNBWj7?@LyqzbjxiCIJ(x3t5v3U3|Az4fnsDW^xhWq;-jON+*6(COT)=uuG zcfFjg-Hg#*j80rAFFpxAQ&@OFP3N6g5ZRo?+fk#lf_KG7f#oEASoRR2<^ z;(D3cJ(XE){JYc!5fgaMp^4IlDYkU_EXvhSxyd}T2O6}dt~qmR^5UgwWMn1MB~;{| z`KcQ71B3IE)D~39fITL(SUzbRCMQggwQngY6Uo-avOd-2i7lrU6HMusq}byr$xC&) z&bi$3l5g`*0*h7yYnL99MHaWv`2`w0IMlp$g+)1 zVKymmu!ESrE~R(9v#6L%2YV_0Jiz2(Jcldy+B;Y+Yr{8xzfUxi=XS@q-|2*f`oewG zyiDVu=LQpt3ghP?>culb^dah>%kLej{)%$3F8y;9RaCzylnb@!&(p+TQ7+bM=opQHT6iuPB)i}KS3%*|gE)p>`bNwm#C_FUz`jyB2if}PUqY2wj z`Gx{SBm572`?cxCq=-)9KZTCwd(;1&(tm}x7}L?&^QSESfVddJe{Fm*dZEMqPq71j z@Bep_z^^zLLjyY2{gk&T*b9;G*M`sw>-Nv5FPH8w#t|)5+)HS5BGhXV3j;%e9)0&; DfILSV literal 8991 zcmeHtg;yNe_H_p*0n#`G2=4Aqf(Hp2TpD+1+=IKjYaqA>mk`{7LvV-S?*8lK&3u{3 z%=Z_(SG`u%>a}X0Rdw&)=j?lK$w@)OU;y9%2mkC2{)ag9#{l`Q}b|onCUj>NNuU zzE2Mtjl95@&e-lEeT@uL)5nb9TcA)jrWt1?+VH#^%kiK|m6c_!Pf&N00#c}V?-wO) zJWj^0o;~tbY}^=Ib+yAR47}IOxFArtQ7RzGrmjPQO=Lw-vgCycCYFHLTKa5{GU`%y z15%NC0eA0Q+p>)EA}UvZ;W%(@6n(WEyJ_UW zGy&0TWW4q!_8FT7$eD*$W0kU44ZrVvg_$EgaMVt;a7(^|j^DY2XV91t8D$`YLt;s{ z{IMrPM3$SA#>XSSx38Y-i|oEWzPnZ4DEvB%=+z^}1?qO==@%hj-xp%C_ksJ%z1zHQ zdm|efz6Zw%+ny{BZ~(yLBQ!wnZ?ddWVj?|*a7`Mbx@Qnsf@}>f>=+q-oc|}s|6&dP z<<(1K-pY0`Aq5=1xeM&QoLq}zNhlfyFKMk)X+YwQjRQOlg>8bEP030ps^jGO5T9SaP*ODEHm%Uhu;n3f0U20)ITcB5MZb5amr3hY zAYnthVi^|iAQ;%8rR*9P@WEs3K9Fijc(s{5n5wvWCkl`~=FeM*#u6+=7gKM{ zTaB>qxnwhoF`Xf!~jt!r@PLf zR!&=%obc$)oh z;gXxH0FGbd(SYFOw9E&#?ke^1U$Fr%;9O<{I)(#14cc@fDZRIs3lb925NqQo0hU%0 zgq@Le=-JPyr}4ipbCFH0uO}D1I8d{Bj4iq2Pk4k2C;^EH6O{_mqLLlPnk;6dmS(0i zm=YduU3txEJj* zJk2*s+<6O$kdJ=@u{{V+!a0y!LXA=|u&Lfd$qw34omH-$gY@wt4&8)q1iSMoDFf*p zQCVe4O$MhTe>fHh)~_|lr6 zAl$i{?su%)dgm8pQ^=w(WLA4tH~cCO@x$^c)r5H;yR*PBLzXJ%6|N*aRH0+~dz2c% zq4z2$2n(%wGB`b^-*L0`-2y^SrV&`-as4y%m~BJJD)+!Zq|2O`742`lN>p2g2R<+; z(uvNj>QR{I)vh_mX8R9F?2k-gwO|?@hsOnlDlG7gyp*M#cvDDeek1y8X~wmu8B@M1 z5z19?$1doGO9%I&Tl&Zrmb7xIBcvgd?>yf^_ejMMF;z+6;913N0Gm~CGW*VAVTH9E6SM3sSM$9Ll~Ew>5T?I>5auACdcVT!Y3*Zts%<*8@~@Ea2-E z(?;O_N+k63EXuqKoz@!-I(tE!tHezYKdasohzW({f&cEKMB%MeClj#c*+U?cQ>r5->Wn=j$)3{g zbA-NX>NyHxR*$nKJeo!=)o)Ua(BJ@<01aRYPmNJP#W#sb*PhL{{!%+kWcSxf8m9vqPix zzMjb?$V~q;>2HT9!kk0sQV;P>IFLL3NcwgrhKBZbj6W~TKeB&X>|8`D6ENVA_M9N< zuq`b%D@sYtajvDR#sRf#QPcpi8RMHE+#bVJGrdzkv@zVC|Z+g$@k(8!9*T1`d3 zLu`HEHi^8c)Wr?Siy+ky<>?Lt@`&}B@gl_(dW{k{!p<;Ww{Y2=Z~bfw6=;kz{83?drHgX@B-*4K8;)d6*<$78EC*#~AmSsdt4@(P1}>)%n^GP~;s*{>I=M7`%oW(FV9r6AS`ba_T%k*sSya};79%gCG{kT*#gKV4 z#?ADr&+sG0IuD46sCj_cfXBz5go%sRdfLu}IC+LoOv5V-%-HLJnyt7*|l9Fmcc_B=n%rjS?0bK;e@RiqcoTm2ITgr#Wb^i*Xi`qq;_=?daZ<^eyGMRx~4swYmq;(I0VA z7pb{M`gle3umRl>5-C(yJcHFRHe62l^AUfZs;J*c%bvfblN|m^tK2K`mbOxfWrS5l zfvR76*sD_NC zq&AF)9+-2Xy zg`pZET3tV*yOWyB^sq&>>_h08hQ1cD$W9=X;GUzw>Ou&JuK!}h<-J4^*7K&FG!v@_ zpTKu935)ilLMaYu%$2r}o}Alz7Glypx58%G73OFm!{Dxo0% zErkOD;@K133})V!t8QbLRA^`(CfDTmo7i=XSfk1mA{%gO!d6+2EDh2+?y949C);gi zV?+qP>TVxF&;^=3=ezgnt+iwMPfXZ+;`3^!d3NKiqI8kvZYHyvR1TE}uog!^TAvyS ziX#1|vfg=C1P~%ME{i@Z7o--@>@ zHOyifv~NYAFCzI0w!}~m%SRy>?1M-Zy&L#eoz zJLky95zxQ^XcRj2@2HU_m9EMKydUyNLu#2=a^tmhf>rSpE}Zo``=o2{XtO3ci5N5Z z-5!p%PXk-|J9#p*mJ;OUuOH@!|)i$QsS}7bxP~0ROv@ylc zvMOB>e0BgV_YE2+7q- z34{Ee0=Eb=JHh8rgLM{L&o*(2GDb2H*AVK{8+|%IsqZ|2=Pv|XpCYZH+`iQ6tz;=(E;T7Q*#+R#Np07i!ZNE1nsfS%R zONpZlx-lFgsB8{PZXv|B_o)aqoaL*Xt{Dtw<>fgojGt}7QM3>1#&N3?uu~n;WgXaT z7*!$Bi6_{TETQckQaVr5d14q-Wd4oXHW7i=@bWm$vcec_M7VQrkJKyiQRAnHRD8AtOIu~Yg!NRryd>9BLDtp7+iNV zT%wD*i$S2gxeuRi0K!uw>;<17%m+=8^kQ|3gSgb`RF3D+7-GsT=&|eJUBkguly^@3 zFP)y)!NEpq9N)(Aq*57fighZS7Xk1&M+;GS| z`Bc68{Nh~DEV}WrNw1A(E>U z_9VLbI8ypG8;VzyEVGd#Nb16d3t!Sgq|e_uvr=T~=LR~^VrGt%-pZUhM~08f7&nwO zrW8Jdjk$KF)(jU;l+4>w=RaI5o!Ir*dgr8;2uC$Dj-xAWgeUKSBM(9m!q7JM)1FCI z9ko{-mD@?oRu{9`c*R`zr#SmENk_^&!;>gaVv}Nxy@Ff*NU$n?Ba1u`T+rgQB zH_q##*_p79-45hkM=m}Qo~WYvXmu|`Z(C;0(13zA=_1*@GVwkXx{ZlG^DE0+wPu-) zkWZiF=c-xh5RhaiIIb)m#JKp6%P3#y6{k37wBs3rARL=BA{7^q{tYUyz)pk9(op3Vi3Qkd0bf?C*%9JaAv3 zx#K|dd|4-2UK3?}_vVSF?ue+PX?f2S!@=4H{h&W;Xs9&kD|XGw&FW{(8F!mQRHF3T zn*J;`OGh(*qZ)oHm=>9wk-cv`{@SG)hsdrA6{GlkM=hktD6^ARa=V;QYi#Q@5X{I8 zJ#y3v;NvBE3+nLhv+jv#^>sF=-y3`eT$(l2KK^Ta!X?|wA{XLR6(CL(`9I~?&fdks z(C&vl%~i5ApJM_(2uyndZw~q$*XR&y2gWAkwz{(j_KNief(x|6$c%@&A8utFwefjs zM?HdNHplIT7wiv!9hvfyj^<1j1jgcQFGXcfS0Ln7TRC@L5UF?1fL``owG zDpfl7?4sWAE3uaxM~B8{3M_H$Jd4DByj7A9V+}_P&vXiMWw>s2)k72p8A=CrbQ~=o z5uL&HE25Z`&00iBdc2*hlxGJQ{8(aDn)Bc|4tshpGwin}!Hp(ndK1a|F^jh(k?S8v zm8TA#S_hYzYgZ-OZyLy$xQIcmPZ5hEBCdtb@}5fOA~IX_w77H0nwO@Dezb~*X7(-s zx2>ve9~K>DHroaDE8ary7XW1aBr+1zO?>g+z^Cu>he&dW%qz4_1>9DoNHSdb@?Jz} z?+d4`kGLI@W%TG)S_eI|(Zh6uTJBYh8fMOUI-TWvUkxT|@sYsOxvBRQ0V6Gl+pzGw zzVUNu{Fdj_Cvds8)vwrQ1}}oVWO2V^58Z0Mk6)0PkC~5GT5$9ciHH)qpE?;B>2cFK zi9M|q{*Lz9_CYaH2mi@it`xc6HvFT2@E*b(m@m9elQi4j?p+gODBL4?3IZ+8P=t+S{618UJK;T$CVWb&BD4=<`Uto*TH3i)l|S zaZynrj#~1HsCJlRq`9+MMeVT#71aP%Flpdukcr92GbGg6SBN+}eo$HJ30E%jvcZO; z=lotS(FNBHIkDCpZ{u^m>Bw` zdQ~>kvAJRe4{%TM&oQsEmlopPB%Td zMdgh@dX4{d+vs7}FC`#jV+@fzDx{ZT0M?hY1zX!O>Vs_!|JXuNPVE>ga#BWS$wOXtx<@uvC!2E z1Ba$SkUP{=z(Oqkq!?CS@b%)Vfo}qnH zq+8gih4|Wq1{NKzew+e?^N|*pu2VVRndQ(?)n-@OV__F<{r+LXmBGynr1#nv$(@cP zj*AA|*P&l2;v&6DmP72o$i_(;sbsP)uK82I zRl-gFCvH89f-8@T<@mJFknLI>P*qM2Lws7DnR$31JN$09GYt6>+|J9d71iN3xHUVb zlfEC5p4odkTdI7xvIN4VNuE*gq6byN%}s>W$i7i~)pZv}56F(OND9#Bz8o^Y6lD~L z#@_5E)`8Mp!MEA$g?=#Opcv=v9N<3gWjdDOn)3$p*bQ-NC(GVYx)C%Pv`70Zo_F{g zyT562Hb>B&auIkp_syW-8dhdk0C|ER%yLU?u#i#_cr$t0%Eb4ucGhuz;wtaKaIIy` zO1|_^_3-RZ`aXf8hm?|k{}kcR>H72fFCQkzN&P**-#1PF1pc@tLNxK0E!5wEzi%Y{ zf;L0E+i%-Szk~nY!~O*Y06d=l1pj|J+P}y7y|MW#QYF&=dx(FuIe(Axd(Y=rlzB+m zg1pM_9iZO>{O($R1<=6$8Q_ Date: Sat, 28 Feb 2026 21:33:15 -0800 Subject: [PATCH 073/128] Added a custom copyTo to cancel downloads as soon as they breach the size limit --- .../java/com/httpsms/HttpSmsApiService.kt | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt b/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt index c3ae8e13..9581cedc 100644 --- a/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt +++ b/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt @@ -13,6 +13,9 @@ import java.util.logging.Level import java.util.logging.Logger.getLogger import java.io.File import java.io.FileOutputStream +import java.io.IOException +import java.io.InputStream +import java.io.OutputStream class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) { @@ -158,6 +161,28 @@ class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) { return true } + fun InputStream.copyToWithLimit( + out: OutputStream, + limit: Long, + bufferSize: Int = DEFAULT_BUFFER_SIZE + ): Long { + var bytesCopied: Long = 0 + val buffer = ByteArray(bufferSize) + var bytes = read(buffer) + + while (bytes >= 0) { + bytesCopied += bytes + + if (bytesCopied > limit) { + throw IOException("Download aborted: File exceeded maximum allowed size of $limit bytes.") + } + + out.write(buffer, 0, bytes) + bytes = read(buffer) + } + return bytesCopied + } + // Downloads the attachment URL content locally fun downloadAttachment(context: Context, urlString: String, messageId: String, attachmentIndex: Int): File? { val request = Request.Builder().url(urlString).build() @@ -186,18 +211,13 @@ class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) { val tempFile = File(mmsDir, "mms_${messageId}_$attachmentIndex") val inputStream = response.body?.byteStream() val outputStream = FileOutputStream(tempFile) - inputStream?.copyTo(outputStream) + + inputStream?.copyToWithLimit(outputStream, maxSizeBytes.toLong()) outputStream.close() inputStream?.close() response.close() - if (tempFile.length() > maxSizeBytes) { - tempFile.delete() - Timber.e("Downloaded file exceeded 1.5MB limit.") - return null - } - return tempFile } catch (e: Exception) { Timber.e(e, "Exception while downloading attachment") From 182d86006e32a24596251ad3f55a75042249268c Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Sat, 28 Feb 2026 21:34:17 -0800 Subject: [PATCH 074/128] Changed cache timeout to 15min --- api/pkg/validators/validator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/pkg/validators/validator.go b/api/pkg/validators/validator.go index 850d1e76..3cd85de2 100644 --- a/api/pkg/validators/validator.go +++ b/api/pkg/validators/validator.go @@ -213,5 +213,5 @@ func validateAttachmentURL(ctx context.Context, c cache.Cache, attachmentURL str } func saveToCache(ctx context.Context, c cache.Cache, key string, value string) { - _ = c.Set(ctx, key, value, 24*time.Hour) + _ = c.Set(ctx, key, value, 15*time.Minute) } From c4f7e185582a39a8ef4f5283c8cf41e7ee4cb872 Mon Sep 17 00:00:00 2001 From: Jake Daynes Date: Sat, 28 Feb 2026 21:42:05 -0800 Subject: [PATCH 075/128] Centralised the content type check into message entities file --- api/pkg/entities/message.go | 17 +++++++++++++++++ api/pkg/handlers/discord_handler.go | 14 +------------- api/pkg/requests/bulk_message_request.go | 13 +------------ 3 files changed, 19 insertions(+), 25 deletions(-) diff --git a/api/pkg/entities/message.go b/api/pkg/entities/message.go index eb71f51b..6f0f75e6 100644 --- a/api/pkg/entities/message.go +++ b/api/pkg/entities/message.go @@ -1,6 +1,7 @@ package entities import ( + "strings" "time" "github.com/google/uuid" @@ -233,3 +234,19 @@ func (message *Message) updateOrderTimestamp(timestamp time.Time) { message.OrderTimestamp = timestamp } } + +func GetAttachmentContentType(url string) string { + // Since there's no easy way to set a type in the CSV, defaulting to octet-stream and then just checking the file extension in the URL + contentType := "application/octet-stream" + lowerURL := strings.ToLower(url) + if strings.HasSuffix(lowerURL, ".jpg") || strings.HasSuffix(lowerURL, ".jpeg") { + contentType = "image/jpeg" + } else if strings.HasSuffix(lowerURL, ".png") { + contentType = "image/png" + } else if strings.HasSuffix(lowerURL, ".gif") { + contentType = "image/gif" + } else if strings.HasSuffix(lowerURL, ".mp4") { + contentType = "video/mp4" + } + return contentType +} diff --git a/api/pkg/handlers/discord_handler.go b/api/pkg/handlers/discord_handler.go index 7be60f3b..729c6ce6 100644 --- a/api/pkg/handlers/discord_handler.go +++ b/api/pkg/handlers/discord_handler.go @@ -303,19 +303,7 @@ func (h *DiscordHandler) createRequest(payload map[string]any) requests.MessageS continue } - // Same as with bulk CSV attachments, can't easily ask for the MIME type so - // just inferring based on the file extension - contentType := "application/octet-stream" - lowerURL := strings.ToLower(cleanURL) - if strings.HasSuffix(lowerURL, ".jpg") || strings.HasSuffix(lowerURL, ".jpeg") { - contentType = "image/jpeg" - } else if strings.HasSuffix(lowerURL, ".png") { - contentType = "image/png" - } else if strings.HasSuffix(lowerURL, ".gif") { - contentType = "image/gif" - } else if strings.HasSuffix(lowerURL, ".mp4") { - contentType = "video/mp4" - } + contentType := entities.GetAttachmentContentType(cleanURL) attachments = append(attachments, entities.MessageAttachment{ ContentType: contentType, diff --git a/api/pkg/requests/bulk_message_request.go b/api/pkg/requests/bulk_message_request.go index 0ab6c024..a5aca7ce 100644 --- a/api/pkg/requests/bulk_message_request.go +++ b/api/pkg/requests/bulk_message_request.go @@ -43,18 +43,7 @@ func (input *BulkMessage) ToMessageSendParams(userID entities.UserID, requestID continue } - // Since there's no easy way to set a type in the CSV, defaulting to octet-stream and then just checking the file extension in the URL - contentType := "application/octet-stream" - lowerURL := strings.ToLower(cleanURL) - if strings.HasSuffix(lowerURL, ".jpg") || strings.HasSuffix(lowerURL, ".jpeg") { - contentType = "image/jpeg" - } else if strings.HasSuffix(lowerURL, ".png") { - contentType = "image/png" - } else if strings.HasSuffix(lowerURL, ".gif") { - contentType = "image/gif" - } else if strings.HasSuffix(lowerURL, ".mp4") { - contentType = "video/mp4" - } + contentType := entities.GetAttachmentContentType(cleanURL) attachments = append(attachments, entities.MessageAttachment{ ContentType: contentType, From c4b4f1f5df58f1d9c57f27360cd8760085267272 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 08:35:56 +0000 Subject: [PATCH 076/128] fix(deps): bump github.com/xuri/excelize/v2 in /api Bumps [github.com/xuri/excelize/v2](https://github.com/xuri/excelize) from 2.10.0 to 2.10.1. - [Release notes](https://github.com/xuri/excelize/releases) - [Commits](https://github.com/xuri/excelize/compare/v2.10.0...v2.10.1) --- updated-dependencies: - dependency-name: github.com/xuri/excelize/v2 dependency-version: 2.10.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- api/go.mod | 2 +- api/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/go.mod b/api/go.mod index 2d1f8df2..2523c3bd 100644 --- a/api/go.mod +++ b/api/go.mod @@ -44,7 +44,7 @@ require ( github.com/thedevsaddam/govalidator v1.9.10 github.com/tursodatabase/libsql-client-go v0.0.0-20251219100830-236aa1ff8acc github.com/uptrace/uptrace-go v1.40.0 - github.com/xuri/excelize/v2 v2.10.0 + github.com/xuri/excelize/v2 v2.10.1 go.opentelemetry.io/otel v1.40.0 go.opentelemetry.io/otel/metric v1.40.0 go.opentelemetry.io/otel/sdk v1.40.0 diff --git a/api/go.sum b/api/go.sum index 06c161bf..a35facfe 100644 --- a/api/go.sum +++ b/api/go.sum @@ -358,8 +358,8 @@ github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23n github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8= github.com/xuri/efp v0.0.1 h1:fws5Rv3myXyYni8uwj2qKjVaRP30PdjeYe2Y6FDsCL8= github.com/xuri/efp v0.0.1/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI= -github.com/xuri/excelize/v2 v2.10.0 h1:8aKsP7JD39iKLc6dH5Tw3dgV3sPRh8uRVXu/fMstfW4= -github.com/xuri/excelize/v2 v2.10.0/go.mod h1:SC5TzhQkaOsTWpANfm+7bJCldzcnU/jrhqkTi/iBHBU= +github.com/xuri/excelize/v2 v2.10.1 h1:V62UlqopMqha3kOpnlHy2CcRVw1V8E63jFoWUmMzxN0= +github.com/xuri/excelize/v2 v2.10.1/go.mod h1:iG5tARpgaEeIhTqt3/fgXCGoBRt4hNXgCp3tfXKoOIc= github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 h1:+C0TIdyyYmzadGaL/HBLbf3WdLgC29pgyhTjAT/0nuE= github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ= github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU= From 78092ad9e8771a06db6174b77762171fccc8b40e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 02:13:24 +0000 Subject: [PATCH 077/128] fix(deps): bump google.golang.org/grpc from 1.79.1 to 1.79.3 in /api Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.79.1 to 1.79.3. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.79.1...v1.79.3) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-version: 1.79.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- api/go.mod | 2 +- api/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/go.mod b/api/go.mod index 2523c3bd..970afcbf 100644 --- a/api/go.mod +++ b/api/go.mod @@ -198,7 +198,7 @@ require ( google.golang.org/genproto v0.0.0-20260217200457-a2cb2272a1e9 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d // indirect - google.golang.org/grpc v1.79.1 // indirect + google.golang.org/grpc v1.79.3 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gorm.io/driver/clickhouse v0.7.0 // indirect gorm.io/driver/mysql v1.6.0 // indirect diff --git a/api/go.sum b/api/go.sum index a35facfe..a5e74ec7 100644 --- a/api/go.sum +++ b/api/go.sum @@ -553,8 +553,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d h1: google.golang.org/genproto/googleapis/api v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:48U2I+QQUYhsFrg2SY6r+nJzeOtjey7j//WBESw+qyQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d h1:t/LOSXPJ9R0B6fnZNyALBRfZBH0Uy0gT+uR+SJ6syqQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= -google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +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.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= From c41a79983d4eb5095354e08cecacafbe2a5d3697 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 22 Mar 2026 13:46:51 +0200 Subject: [PATCH 078/128] Fix gradle file --- android/build.gradle | 4 ++-- android/gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index e29386c3..8450dab4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -17,8 +17,8 @@ buildscript { } plugins { - id 'com.android.application' version '8.9.2' apply false - id 'com.android.library' version '8.9.2' apply false + id 'com.android.application' version '8.13.2' apply false + id 'com.android.library' version '8.13.2' apply false id 'org.jetbrains.kotlin.android' version '1.6.21' apply false } diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index f40abbca..0d14e6a1 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Jun 23 15:32:32 EEST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From bded0b4a9b135051991c0e606fcd44be7b60192d Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 22 Mar 2026 14:12:50 +0200 Subject: [PATCH 079/128] ADB upgrade --- android/app/build.gradle | 17 ++++++----------- android/build.gradle | 8 ++++---- android/gradle.properties | 10 ++++++++++ .../gradle/wrapper/gradle-wrapper.properties | 2 +- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index f49acb2b..ae0e8d94 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -2,27 +2,22 @@ plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'com.google.gms.google-services' - id "io.sentry.android.gradle" version "4.3.1" + id "io.sentry.android.gradle" version "6.2.0" } -def getGitHash = { -> - def stdout = new ByteArrayOutputStream() - exec { - commandLine 'git', 'rev-parse', '--short', 'HEAD' - standardOutput = stdout - } - return stdout.toString().trim() -} +def gitHash = providers.exec { + commandLine 'git', 'rev-parse', '--short', 'HEAD' +}.standardOutput.asText.map { it.trim() }.getOrElse("unknown") android { - compileSdk 35 + compileSdk 36 defaultConfig { applicationId "com.httpsms" minSdk 28 targetSdk 35 versionCode 1 - versionName "${getGitHash()}" + versionName gitHash testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/android/build.gradle b/android/build.gradle index 8450dab4..eeed1cc3 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext { - kotlin_version = '2.1.0' + kotlin_version = '2.2.10' } repositories { // Check that you have the following line (if not, add it): @@ -17,9 +17,9 @@ buildscript { } plugins { - id 'com.android.application' version '8.13.2' apply false - id 'com.android.library' version '8.13.2' apply false - id 'org.jetbrains.kotlin.android' version '1.6.21' apply false + id 'com.android.application' version '9.1.0' apply false + id 'com.android.library' version '9.1.0' apply false + id 'org.jetbrains.kotlin.android' version '2.3.20' apply false } tasks.register('clean', Delete) { diff --git a/android/gradle.properties b/android/gradle.properties index cf0008dd..8665be9a 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -22,3 +22,13 @@ kotlin.code.style=official # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true android.nonFinalResIds=false +android.defaults.buildfeatures.resvalues=true +android.sdk.defaultTargetSdkToCompileSdkIfUnset=false +android.enableAppCompileTimeRClass=false +android.usesSdkInManifest.disallowed=false +android.uniquePackageNames=false +android.dependency.useConstraints=true +android.r8.strictFullModeForKeepRules=false +android.r8.optimizedResourceShrinking=false +android.builtInKotlin=false +android.newDsl=false diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 0d14e6a1..2721b96b 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Thu Jun 23 15:32:32 EEST 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From c1dddc36c944d96744559046ee0c2f3b4cd8713f Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 22 Mar 2026 14:35:00 +0200 Subject: [PATCH 080/128] Update api/pkg/validators/bulk_message_handler_validator.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- api/pkg/validators/bulk_message_handler_validator.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/api/pkg/validators/bulk_message_handler_validator.go b/api/pkg/validators/bulk_message_handler_validator.go index 137442d0..23b4d48d 100644 --- a/api/pkg/validators/bulk_message_handler_validator.go +++ b/api/pkg/validators/bulk_message_handler_validator.go @@ -241,13 +241,10 @@ func (v *BulkMessageHandlerValidator) validateMessages(ctx context.Context, mess result.Add("document", fmt.Sprintf("Row [%d]: The attachment URL [%s] has an invalid url format.", index+2, cleanURL)) } else if parsedURL.Scheme != "http" && parsedURL.Scheme != "https" { result.Add("document", fmt.Sprintf("Row [%d]: The attachment URL [%s] must use http or https.", index+2, cleanURL)) - } else { - if err := validateAttachmentURL(ctx, v.cache, cleanURL); err != nil { - result.Add("attachments", fmt.Sprintf("Row [%d]: The attachment URL [%s] failed validation: %s", index+2, cleanURL, err.Error())) - } } } } + } if _, err := phonenumbers.Parse(message.FromPhoneNumber, phonenumbers.UNKNOWN_REGION); err != nil { result.Add("document", fmt.Sprintf("Row [%d]: The FromPhoneNumber [%s] is not a valid E.164 phone number", index+2, message.FromPhoneNumber)) From 4df5ba425af133359394331f3af16ba45776a427 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 22 Mar 2026 14:36:36 +0200 Subject: [PATCH 081/128] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../java/com/httpsms/FirebaseMessagingService.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt b/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt index 03c99bb4..294eb18e 100644 --- a/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt +++ b/android/app/src/main/java/com/httpsms/FirebaseMessagingService.kt @@ -270,11 +270,27 @@ class MyFirebaseMessagingService : FirebaseMessagingService() { handleFailed(applicationContext, message.id, e.message ?: "Internal error while building or sending MMS.") return Result.failure() } finally { + // Clean up any downloaded temporary files downloadedFiles.forEach { file -> if (file.exists()) { file.delete() } } + + // Also clean up the MMS PDU file to avoid cache buildup in cases where + // sendMultimediaMessage fails before the sent broadcast is delivered. + try { + val pduFile = java.io.File(applicationContext.cacheDir, "pdu_${message.id}.dat") + if (pduFile.exists()) { + val deleted = pduFile.delete() + if (!deleted) { + Timber.w("Failed to delete MMS PDU file for message ID [${message.id}] at [${pduFile.absolutePath}]") + } + } + } catch (cleanupException: Exception) { + // Best-effort cleanup; log but do not change the original result. + Timber.w(cleanupException, "Error while cleaning up MMS PDU file for message ID [${message.id}]") + } } } From 1d00212a801a56745b9db18a27a44145e97e6534 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 22 Mar 2026 14:37:32 +0200 Subject: [PATCH 082/128] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../java/com/httpsms/HttpSmsApiService.kt | 57 ++++++++++--------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt b/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt index 9581cedc..b252d1fd 100644 --- a/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt +++ b/android/app/src/main/java/com/httpsms/HttpSmsApiService.kt @@ -188,37 +188,40 @@ class HttpSmsApiService(private val apiKey: String, private val baseURL: URI) { val request = Request.Builder().url(urlString).build() try { - val response = client.newCall(request).execute() - if (!response.isSuccessful) { - Timber.e("Failed to download attachment: ${response.code}") - response.close() - return null - } + client.newCall(request).execute().use { response -> + if (!response.isSuccessful) { + Timber.e("Failed to download attachment: ${response.code}") + return null + } - val maxSizeBytes = 1.5 * 1024 * 1024 // most (modern?) carriers have a 2MB limit, so targetting 1.5MB should be safe - val contentLength = response.body?.contentLength() ?: -1L - if (contentLength > maxSizeBytes) { - Timber.e("Attachment is too large ($contentLength bytes).") - response.close() - return null - } + val body = response.body + if (body == null) { + Timber.e("Failed to download attachment: response body is null") + return null + } - val mmsDir = File(context.cacheDir, "mms_attachments") - if (!mmsDir.exists()) { - mmsDir.mkdirs() - } + val maxSizeBytes = 1.5 * 1024 * 1024 // most (modern?) carriers have a 2MB limit, so targetting 1.5MB should be safe + val contentLength = body.contentLength() + if (contentLength > maxSizeBytes) { + Timber.e("Attachment is too large ($contentLength bytes).") + return null + } - val tempFile = File(mmsDir, "mms_${messageId}_$attachmentIndex") - val inputStream = response.body?.byteStream() - val outputStream = FileOutputStream(tempFile) - - inputStream?.copyToWithLimit(outputStream, maxSizeBytes.toLong()) - - outputStream.close() - inputStream?.close() - response.close() + val mmsDir = File(context.cacheDir, "mms_attachments") + if (!mmsDir.exists()) { + mmsDir.mkdirs() + } + + val tempFile = File(mmsDir, "mms_${messageId}_$attachmentIndex") + val inputStream = body.byteStream() + FileOutputStream(tempFile).use { outputStream -> + inputStream.use { input -> + input.copyToWithLimit(outputStream, maxSizeBytes.toLong()) + } + } - return tempFile + return tempFile + } } catch (e: Exception) { Timber.e(e, "Exception while downloading attachment") return null From 12d6d94f52cf66a2d19243196e48a7ef582cba47 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 22 Mar 2026 14:44:23 +0200 Subject: [PATCH 083/128] Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- api/pkg/validators/bulk_message_handler_validator.go | 9 ++++++++- web/pages/threads/_id/index.vue | 6 +++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/api/pkg/validators/bulk_message_handler_validator.go b/api/pkg/validators/bulk_message_handler_validator.go index 23b4d48d..d640c648 100644 --- a/api/pkg/validators/bulk_message_handler_validator.go +++ b/api/pkg/validators/bulk_message_handler_validator.go @@ -226,7 +226,14 @@ func (v *BulkMessageHandlerValidator) validateMessages(ctx context.Context, mess if message.AttachmentURLs != "" { urls := strings.Split(message.AttachmentURLs, ",") - if len(urls) > 10 { + validAttachmentCount := 0 + for _, u := range urls { + if strings.TrimSpace(u) != "" { + validAttachmentCount++ + } + } + + if validAttachmentCount > 10 { result.Add("document", fmt.Sprintf("Row [%d]: You cannot attach more than 10 files per message.", index+2)) } diff --git a/web/pages/threads/_id/index.vue b/web/pages/threads/_id/index.vue index 21ff39c7..00636a0f 100644 --- a/web/pages/threads/_id/index.vue +++ b/web/pages/threads/_id/index.vue @@ -174,9 +174,9 @@ + v-if="message.attachments?.length" + shaped + > Message Attachments From 9827ebf2e5f6670011389487c91d76b4daa0bf34 Mon Sep 17 00:00:00 2001 From: Acho Arnold Date: Sun, 22 Mar 2026 15:02:35 +0200 Subject: [PATCH 084/128] Fix ESLINT warnings --- .../bulk_message_handler_validator.go | 8 ++--- web/models/api.ts | 2 -- web/pages/messages/index.vue | 5 +-- web/pages/phone-api-keys/index.vue | 2 +- web/pages/settings/index.vue | 4 +-- web/pages/threads/_id/index.vue | 31 ++++++++++++------- 6 files changed, 30 insertions(+), 22 deletions(-) diff --git a/api/pkg/validators/bulk_message_handler_validator.go b/api/pkg/validators/bulk_message_handler_validator.go index d640c648..3fa0c35c 100644 --- a/api/pkg/validators/bulk_message_handler_validator.go +++ b/api/pkg/validators/bulk_message_handler_validator.go @@ -12,12 +12,12 @@ import ( "github.com/xuri/excelize/v2" + "github.com/NdoleStudio/httpsms/pkg/cache" "github.com/NdoleStudio/httpsms/pkg/entities" "github.com/NdoleStudio/httpsms/pkg/repositories" "github.com/NdoleStudio/httpsms/pkg/requests" "github.com/NdoleStudio/httpsms/pkg/services" "github.com/NdoleStudio/httpsms/pkg/telemetry" - "github.com/NdoleStudio/httpsms/pkg/cache" "github.com/dustin/go-humanize" "github.com/jszwec/csvutil" "github.com/nyaruka/phonenumbers" @@ -123,6 +123,7 @@ func (v *BulkMessageHandlerValidator) parseXlsx(ctxLogger telemetry.Logger, user result.Add("document", fmt.Sprintf("Cannot parse the uploaded excel file with name [%s].", header.Filename)) return nil, result } + defer excel.Close() rows, err := excel.GetRows(excel.GetSheetName(0)) if err != nil { @@ -212,14 +213,14 @@ func (v *BulkMessageHandlerValidator) parseCSV(ctxLogger telemetry.Logger, user var messages []*requests.BulkMessage if err := csvutil.Unmarshal(content, &messages); err != nil { ctxLogger.Error(stacktrace.Propagate(err, fmt.Sprintf("cannot unmarshall contents [%s] into type [%T] for file [%s] and user [%s]", content, messages, header.Filename, user.ID))) - result.Add("document", fmt.Sprintf("Cannot read the conents of the uploaded file [%s].", header.Filename)) + result.Add("document", fmt.Sprintf("Cannot read the contents of the uploaded file [%s].", header.Filename)) return nil, result } return messages, url.Values{} } -func (v *BulkMessageHandlerValidator) validateMessages(ctx context.Context, messages []*requests.BulkMessage) url.Values { +func (v *BulkMessageHandlerValidator) validateMessages(_ context.Context, messages []*requests.BulkMessage) url.Values { result := url.Values{} for index, message := range messages { @@ -251,7 +252,6 @@ func (v *BulkMessageHandlerValidator) validateMessages(ctx context.Context, mess } } } - } if _, err := phonenumbers.Parse(message.FromPhoneNumber, phonenumbers.UNKNOWN_REGION); err != nil { result.Add("document", fmt.Sprintf("Row [%d]: The FromPhoneNumber [%s] is not a valid E.164 phone number", index+2, message.FromPhoneNumber)) diff --git a/web/models/api.ts b/web/models/api.ts index 029b5f01..660e7493 100644 --- a/web/models/api.ts +++ b/web/models/api.ts @@ -1,5 +1,3 @@ -/* eslint-disable */ -/* tslint:disable */ // @ts-nocheck /* * --------------------------------------------------------------- diff --git a/web/pages/messages/index.vue b/web/pages/messages/index.vue index 78a46533..eec128e8 100644 --- a/web/pages/messages/index.vue +++ b/web/pages/messages/index.vue @@ -106,7 +106,8 @@ export default { let contentType = 'application/octet-stream' const lowerUrl = cleanUrl.toLowerCase() - if (lowerUrl.endsWith('.jpg') || lowerUrl.endsWith('.jpeg')) contentType = 'image/jpeg' + if (lowerUrl.endsWith('.jpg') || lowerUrl.endsWith('.jpeg')) + contentType = 'image/jpeg' else if (lowerUrl.endsWith('.png')) contentType = 'image/png' else if (lowerUrl.endsWith('.gif')) contentType = 'image/gif' else if (lowerUrl.endsWith('.mp4')) contentType = 'video/mp4' @@ -120,7 +121,7 @@ export default { to: this.formPhoneNumber, from: this.$store.getters.getOwner, content: this.formContent, - attachments: attachments, + attachments, sim: this.simSelected.code, }) .then(() => { diff --git a/web/pages/phone-api-keys/index.vue b/web/pages/phone-api-keys/index.vue index dc19e75c..e83a2d70 100644 --- a/web/pages/phone-api-keys/index.vue +++ b/web/pages/phone-api-keys/index.vue @@ -24,9 +24,9 @@

{ + toCanvas(canvas, text, { errorCorrectionLevel: 'H' }, (err) => { if (err) { this.$store.dispatch('addNotification', { message: 'Failed to generate API key QR code', diff --git a/web/pages/threads/_id/index.vue b/web/pages/threads/_id/index.vue index 00636a0f..4ea6504d 100644 --- a/web/pages/threads/_id/index.vue +++ b/web/pages/threads/_id/index.vue @@ -173,11 +173,8 @@ > - - Message Attachments + + Message Attachments -