From 1ed286ff5ff39a547bf393b3b2fb6bc80262b5dc Mon Sep 17 00:00:00 2001 From: Prad N Date: Thu, 3 Apr 2025 20:02:15 -0400 Subject: [PATCH] feat: introduce mutual service for cross-service functionalities --- .taskfiles/Docker.yml | 106 ++++++++++++++++++ cmd/proxy/main.go | 2 +- cmd/vault/main.go | 2 +- {config => internal/config}/controller.go | 0 .../config}/manifest/manifest.go | 0 internal/config/mutual.go | 10 ++ {config => internal/config}/resolver.go | 0 internal/middleware/ipfs_middleware.go | 1 + internal/middleware/sonr_middleware.go | 1 + internal/middleware/ucan_middleware.go | 1 + .../handlers/authorization_handler.go | 0 .../controller/handlers/credential_handler.go | 0 .../controller/handlers/session_handler.go | 0 {pkg => services}/controller/routes/routes.go | 0 {pkg => services}/controller/server.go | 2 +- .../mutual}/handlers/account_handler.go | 0 .../mutual/handlers/asset_handler.go | 0 .../mutual/handlers/profile_handler.go | 0 services/mutual/handlers/session_handler.go | 1 + .../mutual}/routes/routes.go | 0 services/mutual/server.go | 38 +++++++ services/resolver/handlers/chain_handler.go | 1 + services/resolver/handlers/did_handler.go | 1 + services/resolver/handlers/vault_handler.go | 1 + services/resolver/routes/routes.go | 1 + {pkg => services}/resolver/server.go | 2 +- 26 files changed, 166 insertions(+), 4 deletions(-) create mode 100644 .taskfiles/Docker.yml rename {config => internal/config}/controller.go (100%) rename {config => internal/config}/manifest/manifest.go (100%) create mode 100644 internal/config/mutual.go rename {config => internal/config}/resolver.go (100%) create mode 100644 internal/middleware/ipfs_middleware.go create mode 100644 internal/middleware/sonr_middleware.go create mode 100644 internal/middleware/ucan_middleware.go rename {pkg => services}/controller/handlers/authorization_handler.go (100%) rename {pkg => services}/controller/handlers/credential_handler.go (100%) rename pkg/controller/handlers/account_handler.go => services/controller/handlers/session_handler.go (100%) rename {pkg => services}/controller/routes/routes.go (100%) rename {pkg => services}/controller/server.go (95%) rename {pkg/resolver => services/mutual}/handlers/account_handler.go (100%) rename pkg/resolver/handlers/profile_handler.go => services/mutual/handlers/asset_handler.go (100%) rename pkg/resolver/handlers/search_handler.go => services/mutual/handlers/profile_handler.go (100%) create mode 100644 services/mutual/handlers/session_handler.go rename {pkg/resolver => services/mutual}/routes/routes.go (100%) create mode 100644 services/mutual/server.go create mode 100644 services/resolver/handlers/chain_handler.go create mode 100644 services/resolver/handlers/did_handler.go create mode 100644 services/resolver/handlers/vault_handler.go create mode 100644 services/resolver/routes/routes.go rename {pkg => services}/resolver/server.go (95%) diff --git a/.taskfiles/Docker.yml b/.taskfiles/Docker.yml new file mode 100644 index 0000000..2397b5e --- /dev/null +++ b/.taskfiles/Docker.yml @@ -0,0 +1,106 @@ +# yaml-language-server: $schema=https://taskfile.dev/schema.json + +version: "3" +silent: true + +vars: + ROOT_DIR: + sh: git rev-parse --show-toplevel + +tasks: + default: + cmds: + - task: test + - task: gen + - task: build + + test: + desc: Runs tests + cmds: + - defer: task clean + - task: test:go + + build: + desc: Builds code + cmds: + - rm -rf bin + - defer: rm -rf .task + - task: build:go + # - task: build:docker + + gen: + desc: Generates code + cmds: + - defer: rm -rf .task + - task: gen:templ + - task: gen:sqlc + + clean: + cmds: + - rm -rf bin + - rm -rf dist + - rm -rf .task + + # + # Internal tasks + # + + build:go: + desc: Builds Go code + dir: "{{.ROOT_DIR}}" + env: + GOOS: js + GOARCH: wasm + sources: + - "main.go" + - "**/*.go" + generates: + - bin/motr.wasm + cmds: + - go build -o bin/motr.wasm ./cmd/vault + + build:docker: + desc: Builds Docker image + dir: "{{.ROOT_DIR}}" + env: + GOOS: js + GOARCH: wasm + sources: + - "main.go" + - "**/*.go" + generates: + - bin/motr.wasm + cmds: + - go build -o bin/motr.wasm . + + gen:templ: + internal: true + dir: "{{.ROOT_DIR}}" + sources: + - "**/*.templ" + generates: + - "**/_templ.go" + cmds: + - templ generate + + gen:sqlc: + internal: true + dir: "{{.ROOT_DIR}}/internal/sink" + sources: + - "**/query.sql" + - "**/schema.sql" + generates: + - "**/db.go" + - "**/querier.go" + - "**/models.go" + - "**/query.sql.go" + cmds: + - sqlc generate + + test:go: + internal: true + dir: "{{.ROOT_DIR}}" + sources: + - "**/*.go" + cmds: + - go test -v ./... diff --git a/cmd/proxy/main.go b/cmd/proxy/main.go index 54ccb21..5bae9e6 100644 --- a/cmd/proxy/main.go +++ b/cmd/proxy/main.go @@ -14,7 +14,7 @@ import ( "sync" "syscall/js" - "github.com/onsonr/motr/pkg/resolver" + "github.com/onsonr/motr/services/resolver" ) var ( diff --git a/cmd/vault/main.go b/cmd/vault/main.go index 634156d..9117888 100644 --- a/cmd/vault/main.go +++ b/cmd/vault/main.go @@ -9,7 +9,7 @@ import ( "sync" "syscall/js" - "github.com/onsonr/motr/pkg/controller" + "github.com/onsonr/motr/services/controller" ) var ( diff --git a/config/controller.go b/internal/config/controller.go similarity index 100% rename from config/controller.go rename to internal/config/controller.go diff --git a/config/manifest/manifest.go b/internal/config/manifest/manifest.go similarity index 100% rename from config/manifest/manifest.go rename to internal/config/manifest/manifest.go diff --git a/internal/config/mutual.go b/internal/config/mutual.go new file mode 100644 index 0000000..ca4fc67 --- /dev/null +++ b/internal/config/mutual.go @@ -0,0 +1,10 @@ +package config + +type MutualConfig struct { + MotrCID string `json:"motr_cid"` + MotrAddress string `json:"motr_address"` + IpfsGatewayURL string `json:"ipfs_gateway_url"` + SonrAPIURL string `json:"sonr_api_url"` + SonrRPCURL string `json:"sonr_rpc_url"` + SonrChainID string `json:"sonr_chain_id"` +} diff --git a/config/resolver.go b/internal/config/resolver.go similarity index 100% rename from config/resolver.go rename to internal/config/resolver.go diff --git a/internal/middleware/ipfs_middleware.go b/internal/middleware/ipfs_middleware.go new file mode 100644 index 0000000..c870d7c --- /dev/null +++ b/internal/middleware/ipfs_middleware.go @@ -0,0 +1 @@ +package middleware diff --git a/internal/middleware/sonr_middleware.go b/internal/middleware/sonr_middleware.go new file mode 100644 index 0000000..c870d7c --- /dev/null +++ b/internal/middleware/sonr_middleware.go @@ -0,0 +1 @@ +package middleware diff --git a/internal/middleware/ucan_middleware.go b/internal/middleware/ucan_middleware.go new file mode 100644 index 0000000..c870d7c --- /dev/null +++ b/internal/middleware/ucan_middleware.go @@ -0,0 +1 @@ +package middleware diff --git a/pkg/controller/handlers/authorization_handler.go b/services/controller/handlers/authorization_handler.go similarity index 100% rename from pkg/controller/handlers/authorization_handler.go rename to services/controller/handlers/authorization_handler.go diff --git a/pkg/controller/handlers/credential_handler.go b/services/controller/handlers/credential_handler.go similarity index 100% rename from pkg/controller/handlers/credential_handler.go rename to services/controller/handlers/credential_handler.go diff --git a/pkg/controller/handlers/account_handler.go b/services/controller/handlers/session_handler.go similarity index 100% rename from pkg/controller/handlers/account_handler.go rename to services/controller/handlers/session_handler.go diff --git a/pkg/controller/routes/routes.go b/services/controller/routes/routes.go similarity index 100% rename from pkg/controller/routes/routes.go rename to services/controller/routes/routes.go diff --git a/pkg/controller/server.go b/services/controller/server.go similarity index 95% rename from pkg/controller/server.go rename to services/controller/server.go index a5f60a7..2d4a7d0 100644 --- a/pkg/controller/server.go +++ b/services/controller/server.go @@ -5,7 +5,7 @@ package controller import ( "github.com/labstack/echo/v4" echomiddleware "github.com/labstack/echo/v4/middleware" - "github.com/onsonr/motr/config" + "github.com/onsonr/motr/internal/config" "github.com/onsonr/motr/internal/models" ) diff --git a/pkg/resolver/handlers/account_handler.go b/services/mutual/handlers/account_handler.go similarity index 100% rename from pkg/resolver/handlers/account_handler.go rename to services/mutual/handlers/account_handler.go diff --git a/pkg/resolver/handlers/profile_handler.go b/services/mutual/handlers/asset_handler.go similarity index 100% rename from pkg/resolver/handlers/profile_handler.go rename to services/mutual/handlers/asset_handler.go diff --git a/pkg/resolver/handlers/search_handler.go b/services/mutual/handlers/profile_handler.go similarity index 100% rename from pkg/resolver/handlers/search_handler.go rename to services/mutual/handlers/profile_handler.go diff --git a/services/mutual/handlers/session_handler.go b/services/mutual/handlers/session_handler.go new file mode 100644 index 0000000..5ac8282 --- /dev/null +++ b/services/mutual/handlers/session_handler.go @@ -0,0 +1 @@ +package handlers diff --git a/pkg/resolver/routes/routes.go b/services/mutual/routes/routes.go similarity index 100% rename from pkg/resolver/routes/routes.go rename to services/mutual/routes/routes.go diff --git a/services/mutual/server.go b/services/mutual/server.go new file mode 100644 index 0000000..812b607 --- /dev/null +++ b/services/mutual/server.go @@ -0,0 +1,38 @@ +//go:build js && wasm + +package mutual + +import ( + "github.com/labstack/echo/v4" + echomiddleware "github.com/labstack/echo/v4/middleware" + "github.com/onsonr/motr/internal/config" + "github.com/onsonr/motr/internal/models" +) + +// New returns a new Vault instance +func New(config *config.MutualConfig, dbq *models.Queries, mdws ...echo.MiddlewareFunc) (*echo.Echo, error) { + e := echo.New() + // Override default behaviors + e.IPExtractor = echo.ExtractIPDirect() + e.HTTPErrorHandler = handleError() + + // Built-in middleware + e.Use(echomiddleware.Logger()) + e.Use(echomiddleware.Recover()) + e.Use(mdws...) + registerRoutes(e) + return e, nil +} + +func handleError() echo.HTTPErrorHandler { + return func(err error, c echo.Context) { + if he, ok := err.(*echo.HTTPError); ok { + // Log the error if needed + c.Logger().Errorf("Error: %v", he.Message) + } + } +} + +// RegisterRoutes registers the Decentralized Web Node API routes. +func registerRoutes(e *echo.Echo) { +} diff --git a/services/resolver/handlers/chain_handler.go b/services/resolver/handlers/chain_handler.go new file mode 100644 index 0000000..5ac8282 --- /dev/null +++ b/services/resolver/handlers/chain_handler.go @@ -0,0 +1 @@ +package handlers diff --git a/services/resolver/handlers/did_handler.go b/services/resolver/handlers/did_handler.go new file mode 100644 index 0000000..5ac8282 --- /dev/null +++ b/services/resolver/handlers/did_handler.go @@ -0,0 +1 @@ +package handlers diff --git a/services/resolver/handlers/vault_handler.go b/services/resolver/handlers/vault_handler.go new file mode 100644 index 0000000..5ac8282 --- /dev/null +++ b/services/resolver/handlers/vault_handler.go @@ -0,0 +1 @@ +package handlers diff --git a/services/resolver/routes/routes.go b/services/resolver/routes/routes.go new file mode 100644 index 0000000..0db51ae --- /dev/null +++ b/services/resolver/routes/routes.go @@ -0,0 +1 @@ +package routes diff --git a/pkg/resolver/server.go b/services/resolver/server.go similarity index 95% rename from pkg/resolver/server.go rename to services/resolver/server.go index 40f6966..6f7e293 100644 --- a/pkg/resolver/server.go +++ b/services/resolver/server.go @@ -5,7 +5,7 @@ package resolver import ( "github.com/labstack/echo/v4" echomiddleware "github.com/labstack/echo/v4/middleware" - "github.com/onsonr/motr/config" + "github.com/onsonr/motr/internal/config" "github.com/onsonr/motr/internal/models" )