diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml
index aacb559fd..efe7dcf2c 100644
--- a/.github/workflows/backend.yml
+++ b/.github/workflows/backend.yml
@@ -30,7 +30,7 @@ jobs:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
- ${{ runner.os }}-go-
+ ${{ runner.os }}-go
- name: Install gofumpt
run: go install mvdan.cc/gofumpt@latest
- name: Check code formatting
@@ -87,7 +87,7 @@ jobs:
restore-keys: |
${{ runner.os }}-go
- name: Install Dependencies
- run: cd ./backend/ && go get ./...
+ run: cd ./backend/ && go install github.com/a-h/templ/cmd/templ@latest && go get ./...
- name: Increase max_connections in PostgreSQL
run: |
CONTAINER_ID=$(docker ps --filter "publish=5432" --format "{{.ID}}")
diff --git a/.github/workflows/backend_codeql.yml b/.github/workflows/backend_codeql.yml
index a40539efb..69eb301b4 100644
--- a/.github/workflows/backend_codeql.yml
+++ b/.github/workflows/backend_codeql.yml
@@ -32,7 +32,7 @@ jobs:
queries: security-and-quality
- name: Build
run: |
- cd ./backend/ && go build -o backend main.go
+ cd ./backend/ && go install github.com/a-h/templ/cmd/templ@latest && templ generate && go build -o backend main.go
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
diff --git a/.gitignore b/.gitignore
index af7dd576d..87f35bef7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,23 +1,17 @@
-# MacOS
.DS_Store
-# Cli
sac
-# VSCode
.vscode
.trunk
-# Node modules
node_modules
-# Environment files
.env
.env.dev
+.env.prod
-# Debug files
backend/tests/api/__debug_*
-.env.prod
frontend/mobile/ios/
frontend/mobile/android/
@@ -25,3 +19,5 @@ tmp/
ios
android
.idea/modules.xml
+
+*_templ.go
\ No newline at end of file
diff --git a/backend/.dockerignore b/backend/.dockerignore
index 59a45cc78..9ffcea7db 100644
--- a/backend/.dockerignore
+++ b/backend/.dockerignore
@@ -1,2 +1,4 @@
tests/
-docs/
\ No newline at end of file
+docs/
+*.md
+*.templ
\ No newline at end of file
diff --git a/backend/Dockerfile.server b/backend/Dockerfile.server
index 8fa18c7b8..65261320d 100644
--- a/backend/Dockerfile.server
+++ b/backend/Dockerfile.server
@@ -1,15 +1,18 @@
-# syntax=docker/dockerfile:1
-
-FROM golang:1.22.2
+FROM golang:1.22-alpine as builder
WORKDIR /app
+RUN apk add --no-cache make nodejs npm git
-COPY go.mod go.sum ./
-
-COPY *.go ./
+COPY . ./
+RUN go install github.com/a-h/templ/cmd/templ@latest
+RUN templ generate
+RUN go get ./...
+RUN go mod tidy
+RUN go mod download
+RUN go build -tags prod -o bin/sac main.go
-RUN CGO_ENABLED=0 GOOS=linux go build -v -o ./sac
+FROM scratch
+COPY --from=builder /app/bin/sac /sac
EXPOSE 8080
-
-CMD ["/sac"]
\ No newline at end of file
+ENTRYPOINT [ "./sac" ]
\ No newline at end of file
diff --git a/backend/templates/emails/layouts/base_templ.go b/backend/templates/emails/layouts/base_templ.go
deleted file mode 100644
index 3689f140b..000000000
--- a/backend/templates/emails/layouts/base_templ.go
+++ /dev/null
@@ -1,64 +0,0 @@
-// Code generated by templ - DO NOT EDIT.
-
-// templ: version: v0.2.639
-package layouts
-
-//lint:file-ignore SA4006 This context is only used if a nested component is present.
-
-import "github.com/a-h/templ"
-import "context"
-import "io"
-import "bytes"
-
-func Base(title string, styles templ.Component) templ.Component {
- return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
- if !templ_7745c5c3_IsBuffer {
- templ_7745c5c3_Buffer = templ.GetBuffer()
- defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var1 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var1 == nil {
- templ_7745c5c3_Var1 = templ.NopComponent
- }
- ctx = templ.ClearChildren(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var2 string
- templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(title)
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/emails/layouts/base.templ`, Line: 7, Col: 17}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = styles.Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- templ_7745c5c3_Err = templ_7745c5c3_Var1.Render(ctx, templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if !templ_7745c5c3_IsBuffer {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
- }
- return templ_7745c5c3_Err
- })
-}
diff --git a/backend/templates/emails/verification.templ b/backend/templates/emails/verification.templ
deleted file mode 100644
index fad4cff02..000000000
--- a/backend/templates/emails/verification.templ
+++ /dev/null
@@ -1,76 +0,0 @@
-package emails
-
-import (
- "github.com/GenerateNU/sac/backend/templates/emails/layouts"
-)
-
-templ Verification(otp string) {
- @layouts.Base("Welcome to Hippo! Verify your Email", verificationStyles()) {
-
-
Welcome to Hippo
-
- Thank you for signing up! To unlock the full potential of your account
- and start enjoying our services, please verify your email address by
- typing the following code in the verification page:
-
-
{ otp }
-
- If you didn't create an account with Hippo, please disregard this email.
-
-
We look forward to having you on board!
-
Sincerely,
-
The Hippo Team
-
- }
-}
-
-templ verificationStyles() {
-
-}
diff --git a/backend/templates/emails/verification_templ.go b/backend/templates/emails/verification_templ.go
deleted file mode 100644
index 25b8af044..000000000
--- a/backend/templates/emails/verification_templ.go
+++ /dev/null
@@ -1,91 +0,0 @@
-// Code generated by templ - DO NOT EDIT.
-
-// templ: version: v0.2.639
-package emails
-
-//lint:file-ignore SA4006 This context is only used if a nested component is present.
-
-import "github.com/a-h/templ"
-import "context"
-import "io"
-import "bytes"
-
-import (
- "github.com/GenerateNU/sac/backend/templates/emails/layouts"
-)
-
-func Verification(otp string) templ.Component {
- return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
- if !templ_7745c5c3_IsBuffer {
- templ_7745c5c3_Buffer = templ.GetBuffer()
- defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var1 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var1 == nil {
- templ_7745c5c3_Var1 = templ.NopComponent
- }
- ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var2 := templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
- if !templ_7745c5c3_IsBuffer {
- templ_7745c5c3_Buffer = templ.GetBuffer()
- defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("Welcome to Hippo
Thank you for signing up! To unlock the full potential of your account and start enjoying our services, please verify your email address by typing the following code in the verification page:
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var3 string
- templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(otp)
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/emails/verification.templ`, Line: 16, Col: 19}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
If you didn't create an account with Hippo, please disregard this email.
We look forward to having you on board!
Sincerely,
The Hippo Team
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if !templ_7745c5c3_IsBuffer {
- _, templ_7745c5c3_Err = io.Copy(templ_7745c5c3_W, templ_7745c5c3_Buffer)
- }
- return templ_7745c5c3_Err
- })
- templ_7745c5c3_Err = layouts.Base("Welcome to Hippo! Verify your Email", verificationStyles()).Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if !templ_7745c5c3_IsBuffer {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
- }
- return templ_7745c5c3_Err
- })
-}
-
-func verificationStyles() templ.Component {
- return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
- if !templ_7745c5c3_IsBuffer {
- templ_7745c5c3_Buffer = templ.GetBuffer()
- defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var4 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var4 == nil {
- templ_7745c5c3_Var4 = templ.NopComponent
- }
- ctx = templ.ClearChildren(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if !templ_7745c5c3_IsBuffer {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
- }
- return templ_7745c5c3_Err
- })
-}
diff --git a/backend/templates/emails/welcome_templ.go b/backend/templates/emails/welcome_templ.go
deleted file mode 100644
index 2f3325b90..000000000
--- a/backend/templates/emails/welcome_templ.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Code generated by templ - DO NOT EDIT.
-
-// templ: version: v0.2.639
-package emails
-
-//lint:file-ignore SA4006 This context is only used if a nested component is present.
-
-import "github.com/a-h/templ"
-import "context"
-import "io"
-import "bytes"
-
-import "github.com/GenerateNU/sac/backend/templates/emails/layouts"
-
-func Welcome(name string) templ.Component {
- return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
- if !templ_7745c5c3_IsBuffer {
- templ_7745c5c3_Buffer = templ.GetBuffer()
- defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var1 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var1 == nil {
- templ_7745c5c3_Var1 = templ.NopComponent
- }
- ctx = templ.ClearChildren(ctx)
- templ_7745c5c3_Var2 := templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
- if !templ_7745c5c3_IsBuffer {
- templ_7745c5c3_Buffer = templ.GetBuffer()
- defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("Welcome to Hippo ")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- var templ_7745c5c3_Var3 string
- templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(name)
- if templ_7745c5c3_Err != nil {
- return templ.Error{Err: templ_7745c5c3_Err, FileName: `templates/emails/welcome.templ`, Line: 8, Col: 30}
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3))
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("!
Thank you for creating an account with us. We're excited to have you on board!
Your account is now active, and you can log in using your email address and password.
If you haven't already, we recommend that you complete your profile to get the most out of your Hippo experience.
To get started, you can visit our website at hipponeu.com.
If you have any questions or need assistance, please don't hesitate to contact us at generatesac@gmail.com.
We look forward to seeing you around!
Sincerely,
The Hippo Team
")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if !templ_7745c5c3_IsBuffer {
- _, templ_7745c5c3_Err = io.Copy(templ_7745c5c3_W, templ_7745c5c3_Buffer)
- }
- return templ_7745c5c3_Err
- })
- templ_7745c5c3_Err = layouts.Base("Welcome to Hippo!", welcomeStyles()).Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer)
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if !templ_7745c5c3_IsBuffer {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
- }
- return templ_7745c5c3_Err
- })
-}
-
-func welcomeStyles() templ.Component {
- return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) {
- templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templ_7745c5c3_W.(*bytes.Buffer)
- if !templ_7745c5c3_IsBuffer {
- templ_7745c5c3_Buffer = templ.GetBuffer()
- defer templ.ReleaseBuffer(templ_7745c5c3_Buffer)
- }
- ctx = templ.InitializeContext(ctx)
- templ_7745c5c3_Var4 := templ.GetChildren(ctx)
- if templ_7745c5c3_Var4 == nil {
- templ_7745c5c3_Var4 = templ.NopComponent
- }
- ctx = templ.ClearChildren(ctx)
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("")
- if templ_7745c5c3_Err != nil {
- return templ_7745c5c3_Err
- }
- if !templ_7745c5c3_IsBuffer {
- _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteTo(templ_7745c5c3_W)
- }
- return templ_7745c5c3_Err
- })
-}
diff --git a/cli/cmd/run.go b/cli/cmd/run.go
index 09cc8eda5..8cfa88f18 100644
--- a/cli/cmd/run.go
+++ b/cli/cmd/run.go
@@ -40,7 +40,7 @@ var runBeCmd = &cobra.Command{
seedSearch, _ := cmd.Flags().GetBool("seed-search")
if migrate {
- err := helpers.Execute(exec.Command("go", "run", "main.go", "--only-migrate"), helpers.BACKEND_DIR)
+ err := helpers.Execute(exec.Command("templ", "generate", "&&", "go", "run", "main.go", "--only-migrate"), helpers.BACKEND_DIR)
if err != nil {
fmt.Println(err)
os.Exit(1)
@@ -48,7 +48,7 @@ var runBeCmd = &cobra.Command{
}
if seedSearch {
- err := helpers.Execute(exec.Command("go", "run", "main.go", "--seed-search"), helpers.BACKEND_DIR)
+ err := helpers.Execute(exec.Command("templ", "generate", "&&", "go", "run", "main.go", "--seed-search"), helpers.BACKEND_DIR)
if err != nil {
fmt.Println(err)
os.Exit(1)
diff --git a/cli/cmd/search.go b/cli/cmd/search.go
index a290fbf4a..ed67f0236 100644
--- a/cli/cmd/search.go
+++ b/cli/cmd/search.go
@@ -13,7 +13,7 @@ var seedSearchCmd = &cobra.Command{
Use: "seed-search",
Short: "Seed Search",
Run: func(cmd *cobra.Command, args []string) {
- err := helpers.Execute(exec.Command("go", "run", "main.go", "seed-search"), helpers.BACKEND_DIR)
+ err := helpers.Execute(exec.Command("templ", "generate", "&&", "go", "run", "main.go", "seed-search"), helpers.BACKEND_DIR)
if err != nil {
fmt.Println(err)
os.Exit(1)
diff --git a/cli/cmd/test.go b/cli/cmd/test.go
index 91a8c1f64..e3f5bba51 100644
--- a/cli/cmd/test.go
+++ b/cli/cmd/test.go
@@ -100,7 +100,7 @@ var testBackendCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
clear, _ := cmd.Flags().GetBool("clean")
- err := helpers.Execute(exec.Command("go", "test", "-v", "-race", "./..."), helpers.BACKEND_DIR)
+ err := helpers.Execute(exec.Command("templ", "generate", "&&", "go", "test", "-v", "-race", "./..."), helpers.BACKEND_DIR)
if err != nil {
fmt.Println(err)
}
@@ -120,7 +120,7 @@ var testCliCmd = &cobra.Command{
Short: "CLI testing commands",
Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) {
- err := helpers.Execute(exec.Command("go", "test", "-v", "-race", "./..."), helpers.CLI_DIR)
+ err := helpers.Execute(exec.Command("templ", "generate", "&&", "go", "test", "-v", "-race", "./..."), helpers.CLI_DIR)
if err != nil {
fmt.Println(err)
os.Exit(1)
diff --git a/cli/helpers/backend.go b/cli/helpers/backend.go
index 34cbf1eb8..283a88b0d 100644
--- a/cli/helpers/backend.go
+++ b/cli/helpers/backend.go
@@ -16,7 +16,7 @@ func RunBackend() error {
return fmt.Errorf("error initializing redis: %w", err)
}
- err = Execute(exec.Command("go", "run", "main.go"), BACKEND_DIR)
+ err = Execute(exec.Command("templ", "generate", "&&", "go", "run", "main.go"), BACKEND_DIR)
if err != nil {
return fmt.Errorf("error running backend: %w", err)
}
diff --git a/cli/helpers/database.go b/cli/helpers/database.go
index ad2951c00..f365b7d4e 100644
--- a/cli/helpers/database.go
+++ b/cli/helpers/database.go
@@ -123,7 +123,7 @@ func InsertDB() error {
if !exists {
fmt.Println("Database does not exist or has no tables. Running database migration.")
- migrateCmd := exec.Command("go", "run", "main.go", "--only-migrate")
+ migrateCmd := exec.Command("templ", "generate", "&&", "go", "run", "main.go", "--only-migrate")
migrateCmd.Dir = BACKEND_DIR
diff --git a/go.work.sum b/go.work.sum
index d98dc8c5b..16a0105eb 100644
--- a/go.work.sum
+++ b/go.work.sum
@@ -29,6 +29,8 @@ cloud.google.com/go/cloudtasks v1.12.4/go.mod h1:BEPu0Gtt2dU6FxZHNqqNdGqIG86qyWK
cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78=
+cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk=
+cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI=
cloud.google.com/go/contactcenterinsights v1.11.3/go.mod h1:HHX5wrz5LHVAwfI2smIotQG9x8Qd6gYilaHcLLLmNis=
cloud.google.com/go/container v1.27.1/go.mod h1:b1A1gJeTBXVLQ6GGw9/9M4FG94BEGsqJ5+t4d/3N7O4=
cloud.google.com/go/containeranalysis v0.11.3/go.mod h1:kMeST7yWFQMGjiG9K7Eov+fPNQcGhb8mXj/UcTiWw9U=
@@ -275,6 +277,7 @@ github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EO
github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
@@ -479,6 +482,7 @@ github.com/xdg-go/stringprep v1.0.3 h1:kdwGpVNwPFtjs98xCGkHjQtGKh86rDcRZN17QEMCO
github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d h1:splanxYIlg+5LfHAM6xpdFEAYOk8iySO56hMFq6uLyA=
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b h1:7gd+rd8P3bqcn/96gOZa3F5dpJr/vEiDQYlNb/y2uNs=
@@ -580,6 +584,7 @@ google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibz
google.golang.org/api v0.152.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY=
google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4=
google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY=
+google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4=
google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI=
google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4=
@@ -602,6 +607,7 @@ google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s=