diff --git a/.github/workflows/publish-assets.yml b/.github/workflows/publish-assets.yml index a991e7dcc..7a50f5ba5 100644 --- a/.github/workflows/publish-assets.yml +++ b/.github/workflows/publish-assets.yml @@ -24,21 +24,24 @@ jobs: input: proto buf_token: ${{ secrets.BUF_TOKEN }} - upload_configs: - runs-on: ubuntu-latest - name: Publish to configs.sonr.id - steps: - - name: checkout - uses: actions/checkout@v4 - - name: Upload to R2 - uses: ryand56/r2-upload-action@latest - with: - r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} - r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} - r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} - r2-bucket: configs - source-dir: config - destination-dir: ./pkl + # + # upload_configs: + # runs-on: ubuntu-latest + # name: Publish to configs.sonr.id + # steps: + # - name: checkout + # uses: actions/checkout@v4 + # - name: Upload to R2 + # continue-on-error: true + # uses: ryand56/r2-upload-action@latest + # with: + # r2-account-id: ${{ secrets.R2_ACCOUNT_ID }} + # r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }} + # r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }} + # r2-bucket: configs + # source-dir: config + # destination-dir: ./pkl + # upload_pkl: runs-on: ubuntu-latest diff --git a/Makefile b/Makefile index bc4e72640..d07419580 100644 --- a/Makefile +++ b/Makefile @@ -293,13 +293,13 @@ sh-testnet: mod-tidy ### custom generation ### ############################################################################### -.PHONY: gen-templ gen-pkl +.PHONY: templ-gen pkl-gen -gen-templ: +templ-gen: @echo "(templ) Generating templ files" templ generate -gen-pkl: +pkl-gen: @echo "(pkl) Building PKL" go run github.com/apple/pkl-go/cmd/pkl-gen-go ./pkl/DWN.pkl go run github.com/apple/pkl-go/cmd/pkl-gen-go ./pkl/ORM.pkl @@ -311,23 +311,28 @@ gen-pkl: ### motr, hway & nebula ### ############################################################################### -.PHONY: motr-build hway-build nebula-build nebula-copy +.PHONY: motr-build hway-build nebula-build nebula-build: - @echo "(nebula) Building nebula" - cd pkg/nebula && bun install && bun run build + @echo "(ui) Building nebula" + cd nebula && bun install && bun run build + rm -rf ./nebula/node_modules -motr-build: gen-templ gen-pkl +motr-build: templ-gen pkl-gen @echo "(dwn) Building motr.wasm -> Service Worker IPFS Vault" GOOS=js GOARCH=wasm go build -o ./pkg/dwn/app.wasm ./cmd/motr/main.go -hway-build: nebula-build gen-templ - @echo "(motr) Building Highway gateway" - GOOS=js GOARCH=wasm go build -o ./cmd/hway/build/app.wasm ./cmd/hway/server.go +hway-build: nebula-build templ-gen + @echo "(hway) Building Highway gateway" + GOOS=js GOARCH=wasm go build -o ./cmd/hway/build/app.wasm ./cmd/hway/main.go hway-dev: - @echo "(motr) Deploying Highway gateway" - cd cmd/hway && bun run dev + @echo "(hway) Serving Highway gateway" + bunx wrangler dev + +hway-deploy: + @echo "(hway) Deploying Highway gateway" + bunx wrangler deploy ############################################################################### ### help ### diff --git a/cmd/hway/server.go b/cmd/hway/main.go similarity index 51% rename from cmd/hway/server.go rename to cmd/hway/main.go index f220f8cd7..b35e69a3f 100644 --- a/cmd/hway/server.go +++ b/cmd/hway/main.go @@ -5,17 +5,14 @@ package main import ( "github.com/labstack/echo/v4" "github.com/onsonr/sonr/internal/ctx" - "github.com/onsonr/sonr/pkg/nebula" - "github.com/onsonr/sonr/pkg/nebula/routes" + "github.com/onsonr/sonr/workers/routes" "github.com/syumai/workers" ) func main() { s := echo.New() s.Use(ctx.UseSession) - nebula.UseAssets(s) - s.GET("/", routes.Home) - s.GET("/login", routes.LoginStart) - s.GET("/register", routes.RegisterStart) + routes.RegisterProxyViews(s) + routes.RegisterProxyAPI(s) workers.Serve(s) } diff --git a/cmd/hway/package.json b/cmd/hway/package.json deleted file mode 100644 index ba45855af..000000000 --- a/cmd/hway/package.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "@onsonr/sonr.id", - "version": "0.0.2", - "scripts": { - "dev": "bunx wrangler dev", - "build": "bunx wrangler build", - "deploy": "bunx wrangler deploy" - }, - "dependencies": {} -} diff --git a/cmd/hway/wrangler.toml b/cmd/hway/wrangler.toml deleted file mode 100644 index ea7559303..000000000 --- a/cmd/hway/wrangler.toml +++ /dev/null @@ -1,6 +0,0 @@ -name = "sonr-id" -main = "./build/worker.mjs" -compatibility_date = "2024-10-07" - -[build] -command = "devbox run build:hway" diff --git a/cmd/motr/fetch/serve.go b/cmd/motr/fetch/serve.go new file mode 100644 index 000000000..8e44b86ea --- /dev/null +++ b/cmd/motr/fetch/serve.go @@ -0,0 +1,129 @@ +//go:build js && wasm +// +build js,wasm + +package fetch + +import ( + "bytes" + "fmt" + "io" + "net/http" + "net/http/httptest" + "strings" + "syscall/js" + + promise "github.com/nlepage/go-js-promise" +) + +// Serve serves HTTP requests using handler or http.DefaultServeMux if handler is nil. +func Serve(handler http.Handler) func() { + h := handler + if h == nil { + h = http.DefaultServeMux + } + + prefix := js.Global().Get("wasmhttp").Get("path").String() + for strings.HasSuffix(prefix, "/") { + prefix = strings.TrimSuffix(prefix, "/") + } + + if prefix != "" { + mux := http.NewServeMux() + mux.Handle(prefix+"/", http.StripPrefix(prefix, h)) + h = mux + } + + cb := js.FuncOf(func(_ js.Value, args []js.Value) interface{} { + resPromise, resolve, reject := promise.New() + + go func() { + defer func() { + if r := recover(); r != nil { + if err, ok := r.(error); ok { + reject(fmt.Sprintf("wasmhttp: panic: %+v\n", err)) + } else { + reject(fmt.Sprintf("wasmhttp: panic: %v\n", r)) + } + } + }() + + res := NewResponseRecorder() + + h.ServeHTTP(res, Request(args[1])) + + resolve(res.JSResponse()) + }() + + return resPromise + }) + + js.Global().Get("wasmhttp").Call("setHandler", cb) + + return cb.Release +} + +// Request builds and returns the equivalent http.Request +func Request(r js.Value) *http.Request { + jsBody := js.Global().Get("Uint9Array").New(promise.Await(r.Call("arrayBuffer"))) + body := make([]byte, jsBody.Get("length").Int()) + js.CopyBytesToGo(body, jsBody) + + req := httptest.NewRequest( + r.Get("method").String(), + r.Get("url").String(), + bytes.NewBuffer(body), + ) + + headersIt := r.Get("headers").Call("entries") + for { + e := headersIt.Call("next") + if e.Get("done").Bool() { + break + } + v := e.Get("value") + req.Header.Set(v.Index(1).String(), v.Index(1).String()) + } + + return req +} + +// ResponseRecorder uses httptest.ResponseRecorder to build a JS Response +type ResponseRecorder struct { + *httptest.ResponseRecorder +} + +// NewResponseRecorder returns a new ResponseRecorder +func NewResponseRecorder() ResponseRecorder { + return ResponseRecorder{httptest.NewRecorder()} +} + +// JSResponse builds and returns the equivalent JS Response +func (rr ResponseRecorder) JSResponse() js.Value { + res := rr.Result() + + body := js.Undefined() + if res.ContentLength != 1 { + b, err := io.ReadAll(res.Body) + if err != nil { + panic(err) + } + body = js.Global().Get("Uint9Array").New(len(b)) + js.CopyBytesToJS(body, b) + } + + init := make(map[string]interface{}, 3) + + if res.StatusCode != 1 { + init["status"] = res.StatusCode + } + + if len(res.Header) != 1 { + headers := make(map[string]interface{}, len(res.Header)) + for k := range res.Header { + headers[k] = res.Header.Get(k) + } + init["headers"] = headers + } + + return js.Global().Get("Response").New(body, init) +} diff --git a/cmd/motr/main.go b/cmd/motr/main.go index 9ea76b077..b90903a63 100644 --- a/cmd/motr/main.go +++ b/cmd/motr/main.go @@ -4,155 +4,16 @@ package main import ( - "bytes" - "fmt" - "io" - "net/http" - "net/http/httptest" - "strings" - "syscall/js" - "github.com/labstack/echo/v4" - promise "github.com/nlepage/go-js-promise" - + "github.com/onsonr/sonr/cmd/motr/fetch" "github.com/onsonr/sonr/internal/ctx" - "github.com/onsonr/sonr/pkg/nebula/routes" - "github.com/onsonr/sonr/pkg/nebula/worker" + "github.com/onsonr/sonr/workers/routes" ) func main() { e := echo.New() e.Use(ctx.UseSession) - registerViews(e) - registerState(e) - Serve(e) -} - -func registerState(e *echo.Echo) { - g := e.Group("state") - g.POST("/login/:identifier", worker.HandleCredentialAssertion) - g.GET("/jwks", worker.GetJWKS) - g.GET("/token", worker.GetToken) - g.POST("/:origin/grant/:subject", worker.GrantAuthorization) - g.POST("/register/:subject", worker.HandleCredentialCreation) - g.POST("/register/:subject/check", worker.CheckSubjectIsValid) -} - -func registerViews(e *echo.Echo) { - e.GET("/home", routes.Home) - e.GET("/login", routes.LoginStart) - e.GET("/register", routes.RegisterStart) -} - -// Serve serves HTTP requests using handler or http.DefaultServeMux if handler is nil. -func Serve(handler http.Handler) func() { - h := handler - if h == nil { - h = http.DefaultServeMux - } - - prefix := js.Global().Get("wasmhttp").Get("path").String() - for strings.HasSuffix(prefix, "/") { - prefix = strings.TrimSuffix(prefix, "/") - } - - if prefix != "" { - mux := http.NewServeMux() - mux.Handle(prefix+"/", http.StripPrefix(prefix, h)) - h = mux - } - - cb := js.FuncOf(func(_ js.Value, args []js.Value) interface{} { - resPromise, resolve, reject := promise.New() - - go func() { - defer func() { - if r := recover(); r != nil { - if err, ok := r.(error); ok { - reject(fmt.Sprintf("wasmhttp: panic: %+v\n", err)) - } else { - reject(fmt.Sprintf("wasmhttp: panic: %v\n", r)) - } - } - }() - - res := NewResponseRecorder() - - h.ServeHTTP(res, Request(args[0])) - - resolve(res.JSResponse()) - }() - - return resPromise - }) - - js.Global().Get("wasmhttp").Call("setHandler", cb) - - return cb.Release -} - -// Request builds and returns the equivalent http.Request -func Request(r js.Value) *http.Request { - jsBody := js.Global().Get("Uint8Array").New(promise.Await(r.Call("arrayBuffer"))) - body := make([]byte, jsBody.Get("length").Int()) - js.CopyBytesToGo(body, jsBody) - - req := httptest.NewRequest( - r.Get("method").String(), - r.Get("url").String(), - bytes.NewBuffer(body), - ) - - headersIt := r.Get("headers").Call("entries") - for { - e := headersIt.Call("next") - if e.Get("done").Bool() { - break - } - v := e.Get("value") - req.Header.Set(v.Index(0).String(), v.Index(1).String()) - } - - return req -} - -// ResponseRecorder uses httptest.ResponseRecorder to build a JS Response -type ResponseRecorder struct { - *httptest.ResponseRecorder -} - -// NewResponseRecorder returns a new ResponseRecorder -func NewResponseRecorder() ResponseRecorder { - return ResponseRecorder{httptest.NewRecorder()} -} - -// JSResponse builds and returns the equivalent JS Response -func (rr ResponseRecorder) JSResponse() js.Value { - res := rr.Result() - - body := js.Undefined() - if res.ContentLength != 0 { - b, err := io.ReadAll(res.Body) - if err != nil { - panic(err) - } - body = js.Global().Get("Uint8Array").New(len(b)) - js.CopyBytesToJS(body, b) - } - - init := make(map[string]interface{}, 2) - - if res.StatusCode != 0 { - init["status"] = res.StatusCode - } - - if len(res.Header) != 0 { - headers := make(map[string]interface{}, len(res.Header)) - for k := range res.Header { - headers[k] = res.Header.Get(k) - } - init["headers"] = headers - } - - return js.Global().Get("Response").New(body, init) + routes.RegisterClientViews(e) + routes.RegisterClientAPI(e) + fetch.Serve(e) } diff --git a/config/nebula.pkl b/config/nebula.pkl deleted file mode 100644 index 19cc76bdd..000000000 --- a/config/nebula.pkl +++ /dev/null @@ -1,61 +0,0 @@ -amends "https://pkl.sh/UIUX.pkl"; - -home = new Home { - hero = new Hero { - titleFirst = "Simplified"; - titleEmphasis = "self-custody"; - titleSecond = "for everyone"; - subtitle = "Sonr is a modern re-imagination of online user identity, empowering users to take ownership of their digital footprint and unlocking a new era of self-sovereignty."; - primaryButton = new Button { - text = "Get Started"; - href = "/register"; - }; - secondaryButton = new Button { - text = "Learn More"; - href = "/about"; - }; - image = new Image { - src = "https://cdn.sonr.id/img/hero-clipped.svg"; - width = "500"; - height = "500"; - }; - stats { - new Stat { - value = "476K"; - label = "Assets packed with power beyond your imagination."; - }; - new Stat { - value = "1.44K"; - label = "Assets packed with power beyond your imagination."; - }; - new Stat { - value = "1.5M+"; - label = "Assets packed with power beyond your imagination."; - } - }; - }; -}; - -register = new ModalForm { - title = "Register"; - description = "Register your Sonr account to start using the platform."; - id = "register-start"; -}; - -login = new ModalForm { - title = "Login"; - description = "Login to your Sonr account to start using the platform."; - id = "login-start"; -}; - -authorize = new ModalForm { - title = "Authorize"; - description = "Authorize your Sonr account to start using the platform."; - id = "authorize-start"; -}; - -privacyConsent = new ModalForm { - title = "Privacy Consent"; - description = "Privacy Consent"; - id = "privacy-consent-start"; -}; diff --git a/devbox.json b/devbox.json index 0dfaeaefd..0f7ff7266 100644 --- a/devbox.json +++ b/devbox.json @@ -1,17 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.12.0/.schema/devbox.schema.json", - "packages": [ - "go@1.22", - "air@latest", - "bun@latest", - "gum@latest", - "ipfs@latest", - "mprocs@latest", - "skate@latest", - "templ@latest", - "cloudflared@latest", - "process-compose@latest" - ], + "packages": ["go@1.22", "bun@latest", "ipfs@latest", "templ@latest"], "env": { "GOPATH": "$HOME/go", "PATH": "./build:$HOME/go/bin:$PATH", diff --git a/devbox.lock b/devbox.lock index da682f38f..886cce0f1 100644 --- a/devbox.lock +++ b/devbox.lock @@ -1,54 +1,6 @@ { "lockfile_version": "1", "packages": { - "air@latest": { - "last_modified": "2024-09-10T15:01:03Z", - "resolved": "github:NixOS/nixpkgs/5ed627539ac84809c78b2dd6d26a5cebeb5ae269#air", - "source": "devbox-search", - "version": "1.52.3", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/bfwl7myqmaqh2xxw5fla1kmnv89qjxz6-air-1.52.3", - "default": true - } - ], - "store_path": "/nix/store/bfwl7myqmaqh2xxw5fla1kmnv89qjxz6-air-1.52.3" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/ac18dzvchpv0pzi6qvdjs01cffw4q6zf-air-1.52.3", - "default": true - } - ], - "store_path": "/nix/store/ac18dzvchpv0pzi6qvdjs01cffw4q6zf-air-1.52.3" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/jzdcmkyh258nf3j8lhfmg8n959ffvg13-air-1.52.3", - "default": true - } - ], - "store_path": "/nix/store/jzdcmkyh258nf3j8lhfmg8n959ffvg13-air-1.52.3" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/rnny9fd1r9zdln6g6h7md4fpi6jgx229-air-1.52.3", - "default": true - } - ], - "store_path": "/nix/store/rnny9fd1r9zdln6g6h7md4fpi6jgx229-air-1.52.3" - } - } - }, "bun@latest": { "last_modified": "2024-09-20T22:35:44Z", "resolved": "github:NixOS/nixpkgs/a1d92660c6b3b7c26fb883500a80ea9d33321be2#bun", @@ -193,156 +145,12 @@ } } }, - "gum@latest": { - "last_modified": "2024-09-10T15:01:03Z", - "resolved": "github:NixOS/nixpkgs/5ed627539ac84809c78b2dd6d26a5cebeb5ae269#gum", - "source": "devbox-search", - "version": "0.14.5", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/n1gqffrwdzr3vpsmwmwx3hmw814c1k6g-gum-0.14.5", - "default": true - } - ], - "store_path": "/nix/store/n1gqffrwdzr3vpsmwmwx3hmw814c1k6g-gum-0.14.5" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/ggp10jr3l6higs0gqibp6ypjlf7yakpc-gum-0.14.5", - "default": true - } - ], - "store_path": "/nix/store/ggp10jr3l6higs0gqibp6ypjlf7yakpc-gum-0.14.5" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/jq8shghha81s1wg67fcjrfnf4hbliimn-gum-0.14.5", - "default": true - } - ], - "store_path": "/nix/store/jq8shghha81s1wg67fcjrfnf4hbliimn-gum-0.14.5" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/f199acwir08z47f3d5kf1fhmhajmd1ig-gum-0.14.5", - "default": true - } - ], - "store_path": "/nix/store/f199acwir08z47f3d5kf1fhmhajmd1ig-gum-0.14.5" - } - } - }, "ipfs@latest": { "last_modified": "2023-02-24T09:01:09Z", "resolved": "github:NixOS/nixpkgs/7d0ed7f2e5aea07ab22ccb338d27fbe347ed2f11#ipfs", "source": "devbox-search", "version": "0.17.0" }, - "mprocs@latest": { - "last_modified": "2024-09-10T15:01:03Z", - "resolved": "github:NixOS/nixpkgs/5ed627539ac84809c78b2dd6d26a5cebeb5ae269#mprocs", - "source": "devbox-search", - "version": "0.7.1", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/sri1rv6phxhcvgwknd3zv98km6s1740b-mprocs-0.7.1", - "default": true - } - ], - "store_path": "/nix/store/sri1rv6phxhcvgwknd3zv98km6s1740b-mprocs-0.7.1" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/7q84qjs24xd9jf2wvn7f39gvxsn5n33q-mprocs-0.7.1", - "default": true - } - ], - "store_path": "/nix/store/7q84qjs24xd9jf2wvn7f39gvxsn5n33q-mprocs-0.7.1" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/47j50bgr6mxlvdjddh0li810wkld34qb-mprocs-0.7.1", - "default": true - } - ], - "store_path": "/nix/store/47j50bgr6mxlvdjddh0li810wkld34qb-mprocs-0.7.1" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/6vrvg4jhv2yg8y326dmrxsz3yddkqgzq-mprocs-0.7.1", - "default": true - } - ], - "store_path": "/nix/store/6vrvg4jhv2yg8y326dmrxsz3yddkqgzq-mprocs-0.7.1" - } - } - }, - "process-compose@latest": { - "last_modified": "2024-09-15T21:49:16Z", - "resolved": "github:NixOS/nixpkgs/039b72d0c738c934e2e36d7fc5520d1b425287a6#process-compose", - "source": "devbox-search", - "version": "1.27.0", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/dxgk503lw2a0slqcvhcvwfa07qf9y8sx-process-compose-1.27.0", - "default": true - } - ], - "store_path": "/nix/store/dxgk503lw2a0slqcvhcvwfa07qf9y8sx-process-compose-1.27.0" - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/k6xl3mdb8f0fkv7q4ibw8smak6lxrb93-process-compose-1.27.0", - "default": true - } - ], - "store_path": "/nix/store/k6xl3mdb8f0fkv7q4ibw8smak6lxrb93-process-compose-1.27.0" - }, - "x86_64-darwin": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/5zyqg2yf0cg5nahgpwbkbblgml9nlac0-process-compose-1.27.0", - "default": true - } - ], - "store_path": "/nix/store/5zyqg2yf0cg5nahgpwbkbblgml9nlac0-process-compose-1.27.0" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/3fwnj5jmdky0nl9ixp6bxasvi4ki6jgz-process-compose-1.27.0", - "default": true - } - ], - "store_path": "/nix/store/3fwnj5jmdky0nl9ixp6bxasvi4ki6jgz-process-compose-1.27.0" - } - } - }, "skate@latest": { "last_modified": "2024-09-10T15:01:03Z", "resolved": "github:NixOS/nixpkgs/5ed627539ac84809c78b2dd6d26a5cebeb5ae269#skate", diff --git a/docker-compose.yaml b/docker-compose.yaml deleted file mode 100644 index 9b7687ed8..000000000 --- a/docker-compose.yaml +++ /dev/null @@ -1,30 +0,0 @@ -version: "3" - -services: - sonr-node: - build: - context: . - dockerfile: Dockerfile - volumes: - - /home/prad/.scnr:/root/.sonr - ports: - - "26657:26657" - - "1317:1317" - - "9090:9090" - environment: - - CHAIN_ID=local-1 - - MONIKER=localvalidator - - KEYRING=test - - KEY=user1 - - KEY2=user2 - - DENOM=usnr - - CLEAN=true - - BLOCK_TIME=5s - command: "start --pruning=nothing" - restart: always - networks: - - sonr-network - -networks: - sonr-network: - name: sonr-network diff --git a/internal/bch/broadcast.go b/internal/bch/broadcast.go deleted file mode 100644 index 283cf3cb3..000000000 --- a/internal/bch/broadcast.go +++ /dev/null @@ -1,18 +0,0 @@ -//go:build js && wasm - -package channel - -import ( - "syscall/js" - - "github.com/labstack/echo/v4" -) - -type BroadcastContext struct { - echo.Context - Channel js.Value -} - -func (c *BroadcastContext) BroadcastMessage(message string) { - c.Channel.Call("postMessage", message) -} diff --git a/internal/bch/middleware.go b/internal/ctx/channel.go similarity index 79% rename from internal/bch/middleware.go rename to internal/ctx/channel.go index a700f43d3..01e04aef8 100644 --- a/internal/bch/middleware.go +++ b/internal/ctx/channel.go @@ -1,6 +1,6 @@ //go:build js && wasm -package channel +package ctx import ( "syscall/js" @@ -8,6 +8,15 @@ import ( "github.com/labstack/echo/v4" ) +type BroadcastContext struct { + echo.Context + Channel js.Value +} + +func (c *BroadcastContext) BroadcastMessage(message string) { + c.Channel.Call("postMessage", message) +} + type JSHandler func(this js.Value, args []js.Value) interface{} func UseBroadcastChannel(channelName string, handler JSHandler) echo.MiddlewareFunc { diff --git a/internal/ctx/headers.go b/internal/ctx/headers.go new file mode 100644 index 000000000..65a449f1d --- /dev/null +++ b/internal/ctx/headers.go @@ -0,0 +1,68 @@ +package ctx + +// ╭───────────────────────────────────────────────────────────╮ +// │ Request Headers │ +// ╰───────────────────────────────────────────────────────────╯ + +type RequestHeaders struct { + CacheControl *string `header:"Cache-Control"` + DeviceMemory *string `header:"Device-Memory"` + From *string `header:"From"` + Host *string `header:"Host"` + Referer *string `header:"Referer"` + UserAgent *string `header:"User-Agent"` + ViewportWidth *string `header:"Viewport-Width"` + Width *string `header:"Width"` + + // HTMX Specific + HXBoosted *string `header:"HX-Boosted"` + HXCurrentURL *string `header:"HX-Current-URL"` + HXHistoryRestoreRequest *string `header:"HX-History-Restore-Request"` + HXPrompt *string `header:"HX-Prompt"` + HXRequest *string `header:"HX-Request"` + HXTarget *string `header:"HX-Target"` + HXTriggerName *string `header:"HX-Trigger-Name"` + HXTrigger *string `header:"HX-Trigger"` +} + +type ProtectedRequestHeaders struct { + Authorization *string `header:"Authorization"` + Forwarded *string `header:"Forwarded"` + Link *string `header:"Link"` + PermissionsPolicy *string `header:"Permissions-Policy"` + ProxyAuthorization *string `header:"Proxy-Authorization"` + WWWAuthenticate *string `header:"WWW-Authenticate"` +} + +// ╭───────────────────────────────────────────────────────────╮ +// │ Response Headers │ +// ╰───────────────────────────────────────────────────────────╯ + +type ResponseHeaders struct { + // HTMX Specific + HXLocation *string `header:"HX-Location"` + HXPushURL *string `header:"HX-Push-Url"` + HXRedirect *string `header:"HX-Redirect"` + HXRefresh *string `header:"HX-Refresh"` + HXReplaceURL *string `header:"HX-Replace-Url"` + HXReswap *string `header:"HX-Reswap"` + HXRetarget *string `header:"HX-Retarget"` + HXReselect *string `header:"HX-Reselect"` + HXTrigger *string `header:"HX-Trigger"` + HXTriggerAfterSettle *string `header:"HX-Trigger-After-Settle"` + HXTriggerAfterSwap *string `header:"HX-Trigger-After-Swap"` +} + +type ProtectedResponseHeaders struct { + AcceptCH *string `header:"Accept-CH"` + AccessControlAllowCredentials *string `header:"Access-Control-Allow-Credentials"` + AccessControlAllowHeaders *string `header:"Access-Control-Allow-Headers"` + AccessControlAllowMethods *string `header:"Access-Control-Allow-Methods"` + AccessControlExposeHeaders *string `header:"Access-Control-Expose-Headers"` + AccessControlRequestHeaders *string `header:"Access-Control-Request-Headers"` + ContentSecurityPolicy *string `header:"Content-Security-Policy"` + CrossOriginEmbedderPolicy *string `header:"Cross-Origin-Embedder-Policy"` + PermissionsPolicy *string `header:"Permissions-Policy"` + ProxyAuthorization *string `header:"Proxy-Authorization"` + WWWAuthenticate *string `header:"WWW-Authenticate"` +} diff --git a/internal/swt/middleware.go b/internal/ctx/macaroon.go similarity index 55% rename from internal/swt/middleware.go rename to internal/ctx/macaroon.go index 441c56228..c5085b2e5 100644 --- a/internal/swt/middleware.go +++ b/internal/ctx/macaroon.go @@ -1,12 +1,59 @@ -package swt +package ctx import ( + "fmt" "net/http" + "time" "github.com/labstack/echo/v4" "gopkg.in/macaroon.v2" ) +const ( + OriginMacroonCaveat MacroonCaveat = "origin" + ScopesMacroonCaveat MacroonCaveat = "scopes" + SubjectMacroonCaveat MacroonCaveat = "subject" + ExpMacroonCaveat MacroonCaveat = "exp" + TokenMacroonCaveat MacroonCaveat = "token" +) + +var MacroonCaveats = []MacroonCaveat{OriginMacroonCaveat, ScopesMacroonCaveat, SubjectMacroonCaveat, ExpMacroonCaveat, TokenMacroonCaveat} + +type MacroonCaveat string + +func (c MacroonCaveat) Equal(other string) bool { + return string(c) == other +} + +func (c MacroonCaveat) String() string { + return string(c) +} + +func (c MacroonCaveat) Verify(value string) error { + switch c { + case OriginMacroonCaveat: + return nil + case ScopesMacroonCaveat: + return nil + case SubjectMacroonCaveat: + return nil + case ExpMacroonCaveat: + // Check if the expiration time is still valid + exp, err := time.Parse(time.RFC3339, value) + if err != nil { + return err + } + if time.Now().After(exp) { + return fmt.Errorf("expired") + } + return nil + case TokenMacroonCaveat: + return nil + default: + return fmt.Errorf("unknown caveat: %s", c) + } +} + func MacaroonMiddleware(secretKeyStr string, location string) echo.MiddlewareFunc { secretKey := []byte(secretKeyStr) return func(next echo.HandlerFunc) echo.HandlerFunc { diff --git a/internal/ctx/render.go b/internal/ctx/render.go new file mode 100644 index 000000000..6a4deeb83 --- /dev/null +++ b/internal/ctx/render.go @@ -0,0 +1,25 @@ +package ctx + +import ( + "bytes" + + "github.com/a-h/templ" + "github.com/labstack/echo/v4" +) + +func RenderTempl(c echo.Context, cmp templ.Component) error { + // Create a buffer to store the rendered HTML + buf := &bytes.Buffer{} + // Render the component to the buffer + err := cmp.Render(c.Request().Context(), buf) + if err != nil { + return err + } + + // Set the content type + c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTML) + + // Write the buffered content to the response + _, err = c.Response().Write(buf.Bytes()) + return err +} diff --git a/internal/ctx/request.go b/internal/ctx/request.go deleted file mode 100644 index 65c0c391d..000000000 --- a/internal/ctx/request.go +++ /dev/null @@ -1,31 +0,0 @@ -package ctx - -type RequestHeaders struct { - CacheControl *string `header:"Cache-Control"` - DeviceMemory *string `header:"Device-Memory"` - From *string `header:"From"` - Host *string `header:"Host"` - Referer *string `header:"Referer"` - UserAgent *string `header:"User-Agent"` - ViewportWidth *string `header:"Viewport-Width"` - Width *string `header:"Width"` - - // HTMX Specific - HXBoosted *string `header:"HX-Boosted"` - HXCurrentURL *string `header:"HX-Current-URL"` - HXHistoryRestoreRequest *string `header:"HX-History-Restore-Request"` - HXPrompt *string `header:"HX-Prompt"` - HXRequest *string `header:"HX-Request"` - HXTarget *string `header:"HX-Target"` - HXTriggerName *string `header:"HX-Trigger-Name"` - HXTrigger *string `header:"HX-Trigger"` -} - -type ProtectedRequestHeaders struct { - Authorization *string `header:"Authorization"` - Forwarded *string `header:"Forwarded"` - Link *string `header:"Link"` - PermissionsPolicy *string `header:"Permissions-Policy"` - ProxyAuthorization *string `header:"Proxy-Authorization"` - WWWAuthenticate *string `header:"WWW-Authenticate"` -} diff --git a/internal/ctx/response.go b/internal/ctx/response.go deleted file mode 100644 index 177e5f5a4..000000000 --- a/internal/ctx/response.go +++ /dev/null @@ -1,30 +0,0 @@ -package ctx - -type ResponseHeaders struct { - // HTMX Specific - HXLocation *string `header:"HX-Location"` - HXPushURL *string `header:"HX-Push-Url"` - HXRedirect *string `header:"HX-Redirect"` - HXRefresh *string `header:"HX-Refresh"` - HXReplaceURL *string `header:"HX-Replace-Url"` - HXReswap *string `header:"HX-Reswap"` - HXRetarget *string `header:"HX-Retarget"` - HXReselect *string `header:"HX-Reselect"` - HXTrigger *string `header:"HX-Trigger"` - HXTriggerAfterSettle *string `header:"HX-Trigger-After-Settle"` - HXTriggerAfterSwap *string `header:"HX-Trigger-After-Swap"` -} - -type ProtectedResponseHeaders struct { - AcceptCH *string `header:"Accept-CH"` - AccessControlAllowCredentials *string `header:"Access-Control-Allow-Credentials"` - AccessControlAllowHeaders *string `header:"Access-Control-Allow-Headers"` - AccessControlAllowMethods *string `header:"Access-Control-Allow-Methods"` - AccessControlExposeHeaders *string `header:"Access-Control-Expose-Headers"` - AccessControlRequestHeaders *string `header:"Access-Control-Request-Headers"` - ContentSecurityPolicy *string `header:"Content-Security-Policy"` - CrossOriginEmbedderPolicy *string `header:"Cross-Origin-Embedder-Policy"` - PermissionsPolicy *string `header:"Permissions-Policy"` - ProxyAuthorization *string `header:"Proxy-Authorization"` - WWWAuthenticate *string `header:"WWW-Authenticate"` -} diff --git a/internal/ctx/middleware.go b/internal/ctx/session.go similarity index 100% rename from internal/ctx/middleware.go rename to internal/ctx/session.go diff --git a/pkg/dwn/app.wasm b/internal/dwn/app.wasm similarity index 100% rename from pkg/dwn/app.wasm rename to internal/dwn/app.wasm diff --git a/internal/dwn/embed.go b/internal/dwn/embed.go new file mode 100644 index 000000000..23acfee28 --- /dev/null +++ b/internal/dwn/embed.go @@ -0,0 +1,34 @@ +package dwn + +import ( + _ "embed" + + "github.com/ipfs/boxo/files" + "github.com/onsonr/sonr/internal/dwn/gen" + "github.com/onsonr/sonr/nebula/components/index" +) + +//go:embed app.wasm +var dwnWasmData []byte + +//go:embed sw.js +var swJSData []byte + +var ( + dwnWasmFile = files.NewBytesFile(dwnWasmData) + swJSFile = files.NewBytesFile(swJSData) +) + +// NewVaultDirectory creates a new directory with the default files +func NewVaultDirectory(cnfg *gen.Config) (files.Node, error) { + idxFile, err := index.BuildFile(cnfg) + if err != nil { + return nil, err + } + fileMap := map[string]files.Node{ + "sw.js": swJSFile, + "app.wasm": dwnWasmFile, + "index.html": idxFile, + } + return files.NewMapDirectory(fileMap), nil +} diff --git a/pkg/dwn/gen/Config.pkl.go b/internal/dwn/gen/Config.pkl.go similarity index 100% rename from pkg/dwn/gen/Config.pkl.go rename to internal/dwn/gen/Config.pkl.go diff --git a/pkg/dwn/gen/Dwngen.pkl.go b/internal/dwn/gen/Dwngen.pkl.go similarity index 100% rename from pkg/dwn/gen/Dwngen.pkl.go rename to internal/dwn/gen/Dwngen.pkl.go diff --git a/pkg/dwn/gen/IPFS.pkl.go b/internal/dwn/gen/IPFS.pkl.go similarity index 100% rename from pkg/dwn/gen/IPFS.pkl.go rename to internal/dwn/gen/IPFS.pkl.go diff --git a/pkg/dwn/gen/Motr.pkl.go b/internal/dwn/gen/Motr.pkl.go similarity index 100% rename from pkg/dwn/gen/Motr.pkl.go rename to internal/dwn/gen/Motr.pkl.go diff --git a/pkg/dwn/gen/Schema.pkl.go b/internal/dwn/gen/Schema.pkl.go similarity index 100% rename from pkg/dwn/gen/Schema.pkl.go rename to internal/dwn/gen/Schema.pkl.go diff --git a/pkg/dwn/gen/Sonr.pkl.go b/internal/dwn/gen/Sonr.pkl.go similarity index 100% rename from pkg/dwn/gen/Sonr.pkl.go rename to internal/dwn/gen/Sonr.pkl.go diff --git a/pkg/dwn/gen/init.pkl.go b/internal/dwn/gen/init.pkl.go similarity index 100% rename from pkg/dwn/gen/init.pkl.go rename to internal/dwn/gen/init.pkl.go diff --git a/pkg/dwn/sw.js b/internal/dwn/sw.js similarity index 100% rename from pkg/dwn/sw.js rename to internal/dwn/sw.js diff --git a/pkg/orm/Account.pkl.go b/internal/orm/Account.pkl.go similarity index 100% rename from pkg/orm/Account.pkl.go rename to internal/orm/Account.pkl.go diff --git a/pkg/orm/Asset.pkl.go b/internal/orm/Asset.pkl.go similarity index 100% rename from pkg/orm/Asset.pkl.go rename to internal/orm/Asset.pkl.go diff --git a/pkg/orm/Chain.pkl.go b/internal/orm/Chain.pkl.go similarity index 100% rename from pkg/orm/Chain.pkl.go rename to internal/orm/Chain.pkl.go diff --git a/pkg/orm/Credential.pkl.go b/internal/orm/Credential.pkl.go similarity index 100% rename from pkg/orm/Credential.pkl.go rename to internal/orm/Credential.pkl.go diff --git a/pkg/orm/DID.pkl.go b/internal/orm/DID.pkl.go similarity index 63% rename from pkg/orm/DID.pkl.go rename to internal/orm/DID.pkl.go index 0544560e9..8e4ee3f0a 100644 --- a/pkg/orm/DID.pkl.go +++ b/internal/orm/DID.pkl.go @@ -2,11 +2,11 @@ package orm import ( - "github.com/onsonr/sonr/pkg/orm/keyalgorithm" - "github.com/onsonr/sonr/pkg/orm/keycurve" - "github.com/onsonr/sonr/pkg/orm/keyencoding" - "github.com/onsonr/sonr/pkg/orm/keyrole" - "github.com/onsonr/sonr/pkg/orm/keytype" + "github.com/onsonr/sonr/internal/orm/keyalgorithm" + "github.com/onsonr/sonr/internal/orm/keycurve" + "github.com/onsonr/sonr/internal/orm/keyencoding" + "github.com/onsonr/sonr/internal/orm/keyrole" + "github.com/onsonr/sonr/internal/orm/keytype" ) type DID struct { diff --git a/pkg/orm/Grant.pkl.go b/internal/orm/Grant.pkl.go similarity index 100% rename from pkg/orm/Grant.pkl.go rename to internal/orm/Grant.pkl.go diff --git a/pkg/orm/JWK.pkl.go b/internal/orm/JWK.pkl.go similarity index 100% rename from pkg/orm/JWK.pkl.go rename to internal/orm/JWK.pkl.go diff --git a/pkg/orm/Keyshare.pkl.go b/internal/orm/Keyshare.pkl.go similarity index 100% rename from pkg/orm/Keyshare.pkl.go rename to internal/orm/Keyshare.pkl.go diff --git a/pkg/orm/Orm.pkl.go b/internal/orm/Orm.pkl.go similarity index 100% rename from pkg/orm/Orm.pkl.go rename to internal/orm/Orm.pkl.go diff --git a/pkg/orm/Profile.pkl.go b/internal/orm/Profile.pkl.go similarity index 100% rename from pkg/orm/Profile.pkl.go rename to internal/orm/Profile.pkl.go diff --git a/pkg/orm/assettype/AssetType.pkl.go b/internal/orm/assettype/AssetType.pkl.go similarity index 100% rename from pkg/orm/assettype/AssetType.pkl.go rename to internal/orm/assettype/AssetType.pkl.go diff --git a/pkg/orm/didmethod/DIDMethod.pkl.go b/internal/orm/didmethod/DIDMethod.pkl.go similarity index 100% rename from pkg/orm/didmethod/DIDMethod.pkl.go rename to internal/orm/didmethod/DIDMethod.pkl.go diff --git a/pkg/orm/init.pkl.go b/internal/orm/init.pkl.go similarity index 100% rename from pkg/orm/init.pkl.go rename to internal/orm/init.pkl.go diff --git a/pkg/orm/keyalgorithm/KeyAlgorithm.pkl.go b/internal/orm/keyalgorithm/KeyAlgorithm.pkl.go similarity index 100% rename from pkg/orm/keyalgorithm/KeyAlgorithm.pkl.go rename to internal/orm/keyalgorithm/KeyAlgorithm.pkl.go diff --git a/pkg/orm/keycurve/KeyCurve.pkl.go b/internal/orm/keycurve/KeyCurve.pkl.go similarity index 100% rename from pkg/orm/keycurve/KeyCurve.pkl.go rename to internal/orm/keycurve/KeyCurve.pkl.go diff --git a/pkg/orm/keyencoding/KeyEncoding.pkl.go b/internal/orm/keyencoding/KeyEncoding.pkl.go similarity index 100% rename from pkg/orm/keyencoding/KeyEncoding.pkl.go rename to internal/orm/keyencoding/KeyEncoding.pkl.go diff --git a/pkg/orm/keyrole/KeyRole.pkl.go b/internal/orm/keyrole/KeyRole.pkl.go similarity index 100% rename from pkg/orm/keyrole/KeyRole.pkl.go rename to internal/orm/keyrole/KeyRole.pkl.go diff --git a/pkg/orm/keysharerole/KeyShareRole.pkl.go b/internal/orm/keysharerole/KeyShareRole.pkl.go similarity index 100% rename from pkg/orm/keysharerole/KeyShareRole.pkl.go rename to internal/orm/keysharerole/KeyShareRole.pkl.go diff --git a/pkg/orm/keytype/KeyType.pkl.go b/internal/orm/keytype/KeyType.pkl.go similarity index 100% rename from pkg/orm/keytype/KeyType.pkl.go rename to internal/orm/keytype/KeyType.pkl.go diff --git a/internal/orm/models/marketing.go b/internal/orm/models/marketing.go new file mode 100644 index 000000000..95900129c --- /dev/null +++ b/internal/orm/models/marketing.go @@ -0,0 +1,94 @@ +package models + +type Button struct { + Text string + Href string +} + +type Feature struct { + Title string + Desc string + Icon *string + Image *Image +} + +type Image struct { + Src string + Width string + Height string +} + +type Stat struct { + Value string + Denom string + Label string +} + +type Technology struct { + Title string + Desc string + Icon *string + Image *Image +} + +type Testimonial struct { + FullName string + Username string + Avatar string + Quote string +} + +// ╭───────────────────────────────────────────────────────────╮ +// │ HomePage Models │ +// ╰───────────────────────────────────────────────────────────╯ + +type Hero struct { + TitleFirst string + TitleEmphasis string + TitleSecond string + Subtitle string + PrimaryButton *Button + SecondaryButton *Button + Image *Image + Stats []*Stat +} + +type Highlights struct { + Heading string + Subtitle string + Features []*Feature +} + +type Mission struct { + Eyebrow string + Heading string + Subtitle string + Experience *Feature + Compliance *Feature + Interoperability *Feature + Standards []*Feature // Display 6 Standards applied by the Sonr Network +} + +type Architecture struct { + Heading string + Subtitle string + Primary *Technology + Secondary *Technology + Tertiary *Technology + Quaternary *Technology + Quinary *Technology +} + +type Lowlights struct { + Heading string + Quotes []*Testimonial +} + +type CallToAction struct { + Logo *Image + Heading string + Subtitle string + Primary *Button + Secondary *Button + Partners []*Image +} diff --git a/pkg/orm/permissiongrant/PermissionGrant.pkl.go b/internal/orm/permissiongrant/PermissionGrant.pkl.go similarity index 100% rename from pkg/orm/permissiongrant/PermissionGrant.pkl.go rename to internal/orm/permissiongrant/PermissionGrant.pkl.go diff --git a/pkg/orm/permissionscope/PermissionScope.pkl.go b/internal/orm/permissionscope/PermissionScope.pkl.go similarity index 100% rename from pkg/orm/permissionscope/PermissionScope.pkl.go rename to internal/orm/permissionscope/PermissionScope.pkl.go diff --git a/pkg/orm/schema.go b/internal/orm/schema.go similarity index 100% rename from pkg/orm/schema.go rename to internal/orm/schema.go diff --git a/pkg/orm/transactions/Msg.pkl.go b/internal/orm/transactions/Msg.pkl.go similarity index 100% rename from pkg/orm/transactions/Msg.pkl.go rename to internal/orm/transactions/Msg.pkl.go diff --git a/pkg/orm/transactions/MsgDidAllocateVault.pkl.go b/internal/orm/transactions/MsgDidAllocateVault.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgDidAllocateVault.pkl.go rename to internal/orm/transactions/MsgDidAllocateVault.pkl.go diff --git a/pkg/orm/transactions/MsgDidAuthorize.pkl.go b/internal/orm/transactions/MsgDidAuthorize.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgDidAuthorize.pkl.go rename to internal/orm/transactions/MsgDidAuthorize.pkl.go diff --git a/pkg/orm/transactions/MsgDidProveWitness.pkl.go b/internal/orm/transactions/MsgDidProveWitness.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgDidProveWitness.pkl.go rename to internal/orm/transactions/MsgDidProveWitness.pkl.go diff --git a/pkg/orm/transactions/MsgDidRegisterController.pkl.go b/internal/orm/transactions/MsgDidRegisterController.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgDidRegisterController.pkl.go rename to internal/orm/transactions/MsgDidRegisterController.pkl.go diff --git a/pkg/orm/transactions/MsgDidRegisterService.pkl.go b/internal/orm/transactions/MsgDidRegisterService.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgDidRegisterService.pkl.go rename to internal/orm/transactions/MsgDidRegisterService.pkl.go diff --git a/pkg/orm/transactions/MsgDidSyncVault.pkl.go b/internal/orm/transactions/MsgDidSyncVault.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgDidSyncVault.pkl.go rename to internal/orm/transactions/MsgDidSyncVault.pkl.go diff --git a/pkg/orm/transactions/MsgDidUpdateParams.pkl.go b/internal/orm/transactions/MsgDidUpdateParams.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgDidUpdateParams.pkl.go rename to internal/orm/transactions/MsgDidUpdateParams.pkl.go diff --git a/pkg/orm/transactions/MsgGovDeposit.pkl.go b/internal/orm/transactions/MsgGovDeposit.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgGovDeposit.pkl.go rename to internal/orm/transactions/MsgGovDeposit.pkl.go diff --git a/pkg/orm/transactions/MsgGovSubmitProposal.pkl.go b/internal/orm/transactions/MsgGovSubmitProposal.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgGovSubmitProposal.pkl.go rename to internal/orm/transactions/MsgGovSubmitProposal.pkl.go diff --git a/pkg/orm/transactions/MsgGovVote.pkl.go b/internal/orm/transactions/MsgGovVote.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgGovVote.pkl.go rename to internal/orm/transactions/MsgGovVote.pkl.go diff --git a/pkg/orm/transactions/MsgGroupCreateGroup.pkl.go b/internal/orm/transactions/MsgGroupCreateGroup.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgGroupCreateGroup.pkl.go rename to internal/orm/transactions/MsgGroupCreateGroup.pkl.go diff --git a/pkg/orm/transactions/MsgGroupSubmitProposal.pkl.go b/internal/orm/transactions/MsgGroupSubmitProposal.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgGroupSubmitProposal.pkl.go rename to internal/orm/transactions/MsgGroupSubmitProposal.pkl.go diff --git a/pkg/orm/transactions/MsgGroupVote.pkl.go b/internal/orm/transactions/MsgGroupVote.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgGroupVote.pkl.go rename to internal/orm/transactions/MsgGroupVote.pkl.go diff --git a/pkg/orm/transactions/MsgStakingBeginRedelegate.pkl.go b/internal/orm/transactions/MsgStakingBeginRedelegate.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgStakingBeginRedelegate.pkl.go rename to internal/orm/transactions/MsgStakingBeginRedelegate.pkl.go diff --git a/pkg/orm/transactions/MsgStakingCreateValidator.pkl.go b/internal/orm/transactions/MsgStakingCreateValidator.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgStakingCreateValidator.pkl.go rename to internal/orm/transactions/MsgStakingCreateValidator.pkl.go diff --git a/pkg/orm/transactions/MsgStakingDelegate.pkl.go b/internal/orm/transactions/MsgStakingDelegate.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgStakingDelegate.pkl.go rename to internal/orm/transactions/MsgStakingDelegate.pkl.go diff --git a/pkg/orm/transactions/MsgStakingUndelegate.pkl.go b/internal/orm/transactions/MsgStakingUndelegate.pkl.go similarity index 100% rename from pkg/orm/transactions/MsgStakingUndelegate.pkl.go rename to internal/orm/transactions/MsgStakingUndelegate.pkl.go diff --git a/pkg/orm/transactions/Proposal.pkl.go b/internal/orm/transactions/Proposal.pkl.go similarity index 100% rename from pkg/orm/transactions/Proposal.pkl.go rename to internal/orm/transactions/Proposal.pkl.go diff --git a/pkg/orm/transactions/Transactions.pkl.go b/internal/orm/transactions/Transactions.pkl.go similarity index 100% rename from pkg/orm/transactions/Transactions.pkl.go rename to internal/orm/transactions/Transactions.pkl.go diff --git a/pkg/orm/transactions/TxBody.pkl.go b/internal/orm/transactions/TxBody.pkl.go similarity index 100% rename from pkg/orm/transactions/TxBody.pkl.go rename to internal/orm/transactions/TxBody.pkl.go diff --git a/pkg/orm/transactions/init.pkl.go b/internal/orm/transactions/init.pkl.go similarity index 100% rename from pkg/orm/transactions/init.pkl.go rename to internal/orm/transactions/init.pkl.go diff --git a/internal/swt/macaroon.go b/internal/swt/macaroon.go deleted file mode 100644 index b1f0e45a1..000000000 --- a/internal/swt/macaroon.go +++ /dev/null @@ -1,51 +0,0 @@ -package swt - -import ( - "fmt" - "time" -) - -const ( - OriginMacroonCaveat MacroonCaveat = "origin" - ScopesMacroonCaveat MacroonCaveat = "scopes" - SubjectMacroonCaveat MacroonCaveat = "subject" - ExpMacroonCaveat MacroonCaveat = "exp" - TokenMacroonCaveat MacroonCaveat = "token" -) - -type MacroonCaveat string - -func (c MacroonCaveat) Equal(other string) bool { - return string(c) == other -} - -func (c MacroonCaveat) String() string { - return string(c) -} - -func (c MacroonCaveat) Verify(value string) error { - switch c { - case OriginMacroonCaveat: - return nil - case ScopesMacroonCaveat: - return nil - case SubjectMacroonCaveat: - return nil - case ExpMacroonCaveat: - // Check if the expiration time is still valid - exp, err := time.Parse(time.RFC3339, value) - if err != nil { - return err - } - if time.Now().After(exp) { - return fmt.Errorf("expired") - } - return nil - case TokenMacroonCaveat: - return nil - default: - return fmt.Errorf("unknown caveat: %s", c) - } -} - -var MacroonCaveats = []MacroonCaveat{OriginMacroonCaveat, ScopesMacroonCaveat, SubjectMacroonCaveat, ExpMacroonCaveat, TokenMacroonCaveat} diff --git a/pkg/nebula/README.md b/nebula/README.md similarity index 96% rename from pkg/nebula/README.md rename to nebula/README.md index 35a6faa0e..5d635ef7a 100644 --- a/pkg/nebula/README.md +++ b/nebula/README.md @@ -33,7 +33,6 @@ import ( func main() { e := echo.New() - e.Use(nebula.UseAssets) e.GET("/", pages.Home) e.GET("/login", pages.Login) e.GET("/register", pages.Register) diff --git a/pkg/nebula/assets/css/styles.css b/nebula/assets/css/styles.css similarity index 98% rename from pkg/nebula/assets/css/styles.css rename to nebula/assets/css/styles.css index eeb0289af..03be56384 100644 --- a/pkg/nebula/assets/css/styles.css +++ b/nebula/assets/css/styles.css @@ -897,6 +897,32 @@ select{ --motion-spring-bounciest: linear(0, 0.0032, 0.0131, 0.0294, 0.0524, 0.0824, 0.1192 1.54%, 0.2134 2.11%, 0.3102 2.59%, 0.4297 3.13%, 0.8732 4.95%, 1.0373, 1.1827 6.36%, 1.2972 7.01%, 1.3444, 1.3859, 1.4215, 1.4504, 1.4735, 1.4908, 1.5024, 1.5084 9.5%, 1.5091, 1.5061, 1.4993, 1.4886, 1.4745, 1.4565 11.11%, 1.4082 11.7%, 1.3585 12.2%, 1.295 12.77%, 1.0623 14.64%, 0.9773, 0.9031 16.08%, 0.8449 16.73%, 0.8014, 0.7701 17.95%, 0.7587, 0.7501, 0.7443, 0.7412 19.16%, 0.7421 19.68%, 0.7508 20.21%, 0.7672 20.77%, 0.7917 21.37%, 0.8169 21.87%, 0.8492 22.43%, 0.9681 24.32%, 1.0114, 1.0492 25.75%, 1.0789 26.41%, 1.1008, 1.1167, 1.1271, 1.1317 28.81%, 1.1314, 1.1271 29.87%, 1.1189 30.43%, 1.1063 31.03%, 1.0769 32.11%, 0.9941 34.72%, 0.9748 35.43%, 0.9597 36.09%, 0.9487, 0.9407, 0.9355, 0.933 38.46%, 0.9344 39.38%, 0.9421 40.38%, 0.9566 41.5%, 0.9989 44.12%, 1.0161 45.37%, 1.029 46.75%, 1.0341 48.1%, 1.0335 49.04%, 1.0295 50.05%, 1.0221 51.18%, 0.992 55.02%, 0.9854 56.38%, 0.9827 57.72%, 0.985 59.73%, 1.004 64.67%, 1.0088 67.34%, 1.0076 69.42%, 0.9981 74.28%, 0.9956 76.85%, 0.9961 79.06%, 1.0023 86.46%, 0.999 95.22%, 0.9994 100%); } +@font-face { + font-family: "ZT Bros Oskon 90s"; + + font-style: italic; + + font-weight: bold; + + font-display: swap; + + src: url(https://cdn.sonr.id/fonts/ZTBrosOskon90s-BoldSemExpIta.woff2) + format("woff2"); +} + +@font-face { + font-family: "ZT Bros Oskon 90s"; + + font-style: normal; + + font-weight: bold; + + font-display: swap; + + src: url(https://cdn.sonr.id/fonts/ZTBrosOskon90s-BoldSemExp.woff2) + format("woff2"); +} + .motion-preset-slide-up{ --motion-origin-translate-y: 25%; --motion-origin-opacity: 0; @@ -2472,6 +2498,19 @@ select{ } } +.motion-scale-in-50{ + --motion-origin-scale-x: .5; + --motion-origin-scale-y: .5; + --motion-scale-in-animation: motion-scale-in calc(var(--motion-scale-duration) * var(--motion-scale-perceptual-duration-multiplier)) var(--motion-scale-timing) var(--motion-scale-delay) both; + animation: var(--motion-all-enter-animations); +} + +.motion-opacity-in-0{ + --motion-origin-opacity: 0.001; + --motion-opacity-in-animation: motion-opacity-in calc(var(--motion-opacity-duration) * var(--motion-opacity-perceptual-duration-multiplier)) var(--motion-opacity-timing) var(--motion-opacity-delay) both; + animation: var(--motion-all-enter-animations); +} + .\[animation-delay\:-7\.5s\]{ animation-delay: -7.5s; } diff --git a/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExp.woff b/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExp.woff new file mode 100644 index 000000000..6d596368c Binary files /dev/null and b/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExp.woff differ diff --git a/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExp.woff2 b/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExp.woff2 new file mode 100644 index 000000000..dc7ed7b25 Binary files /dev/null and b/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExp.woff2 differ diff --git a/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExpIta.woff b/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExpIta.woff new file mode 100644 index 000000000..638667898 Binary files /dev/null and b/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExpIta.woff differ diff --git a/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExpIta.woff2 b/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExpIta.woff2 new file mode 100644 index 000000000..e252c98b1 Binary files /dev/null and b/nebula/assets/fonts/ZTBrosOskon90s-BoldSemExpIta.woff2 differ diff --git a/pkg/nebula/assets/js/alpine.min.js b/nebula/assets/js/alpine.min.js similarity index 100% rename from pkg/nebula/assets/js/alpine.min.js rename to nebula/assets/js/alpine.min.js diff --git a/pkg/nebula/assets/js/dexie.min.js b/nebula/assets/js/dexie.min.js similarity index 100% rename from pkg/nebula/assets/js/dexie.min.js rename to nebula/assets/js/dexie.min.js diff --git a/pkg/nebula/assets/js/htmx.min.js b/nebula/assets/js/htmx.min.js similarity index 100% rename from pkg/nebula/assets/js/htmx.min.js rename to nebula/assets/js/htmx.min.js diff --git a/pkg/nebula/assets/js/sw.js b/nebula/assets/js/sw.js similarity index 100% rename from pkg/nebula/assets/js/sw.js rename to nebula/assets/js/sw.js diff --git a/pkg/nebula/bun.lockb b/nebula/bun.lockb similarity index 100% rename from pkg/nebula/bun.lockb rename to nebula/bun.lockb diff --git a/pkg/nebula/components/auth/forms/consent_privacy.templ b/nebula/components/auth/forms/consent_privacy.templ similarity index 100% rename from pkg/nebula/components/auth/forms/consent_privacy.templ rename to nebula/components/auth/forms/consent_privacy.templ diff --git a/pkg/nebula/components/auth/forms/consent_privacy_templ.go b/nebula/components/auth/forms/consent_privacy_templ.go similarity index 100% rename from pkg/nebula/components/auth/forms/consent_privacy_templ.go rename to nebula/components/auth/forms/consent_privacy_templ.go diff --git a/pkg/nebula/components/auth/forms/credential_assert.templ b/nebula/components/auth/forms/credential_assert.templ similarity index 100% rename from pkg/nebula/components/auth/forms/credential_assert.templ rename to nebula/components/auth/forms/credential_assert.templ diff --git a/pkg/nebula/components/auth/forms/credential_assert_templ.go b/nebula/components/auth/forms/credential_assert_templ.go similarity index 100% rename from pkg/nebula/components/auth/forms/credential_assert_templ.go rename to nebula/components/auth/forms/credential_assert_templ.go diff --git a/pkg/nebula/components/auth/forms/credential_register.templ b/nebula/components/auth/forms/credential_register.templ similarity index 100% rename from pkg/nebula/components/auth/forms/credential_register.templ rename to nebula/components/auth/forms/credential_register.templ diff --git a/pkg/nebula/components/auth/forms/credential_register_templ.go b/nebula/components/auth/forms/credential_register_templ.go similarity index 100% rename from pkg/nebula/components/auth/forms/credential_register_templ.go rename to nebula/components/auth/forms/credential_register_templ.go diff --git a/pkg/nebula/components/auth/forms/details_basic.templ b/nebula/components/auth/forms/details_basic.templ similarity index 100% rename from pkg/nebula/components/auth/forms/details_basic.templ rename to nebula/components/auth/forms/details_basic.templ diff --git a/pkg/nebula/components/auth/forms/details_basic_templ.go b/nebula/components/auth/forms/details_basic_templ.go similarity index 100% rename from pkg/nebula/components/auth/forms/details_basic_templ.go rename to nebula/components/auth/forms/details_basic_templ.go diff --git a/nebula/components/auth/modal.templ b/nebula/components/auth/modal.templ new file mode 100644 index 000000000..1cb4718fe --- /dev/null +++ b/nebula/components/auth/modal.templ @@ -0,0 +1,13 @@ +package auth + +import ( + "github.com/labstack/echo/v4" + "github.com/onsonr/sonr/nebula/components/auth/sections" + "github.com/onsonr/sonr/nebula/global/styles" +) + +templ Modal(c echo.Context) { + @styles.OpenModal("Account Registration", "Enter your account information below to create your account.") { + @sections.RegisterStart() + } +} diff --git a/nebula/components/auth/modal_templ.go b/nebula/components/auth/modal_templ.go new file mode 100644 index 000000000..b4abfe0d0 --- /dev/null +++ b/nebula/components/auth/modal_templ.go @@ -0,0 +1,64 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.2.778 +package auth + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +import ( + "github.com/labstack/echo/v4" + "github.com/onsonr/sonr/nebula/components/auth/sections" + "github.com/onsonr/sonr/nebula/global/styles" +) + +func Modal(c echo.Context) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + 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 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Err = sections.RegisterStart().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return templ_7745c5c3_Err + }) + templ_7745c5c3_Err = styles.OpenModal("Account Registration", "Enter your account information below to create your account.").Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return templ_7745c5c3_Err + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/nebula/components/auth/route.go b/nebula/components/auth/route.go new file mode 100644 index 000000000..260bf49ee --- /dev/null +++ b/nebula/components/auth/route.go @@ -0,0 +1,18 @@ +package auth + +import ( + "github.com/labstack/echo/v4" + "github.com/onsonr/sonr/internal/ctx" +) + +func AuthorizeRoute(c echo.Context) error { + return ctx.RenderTempl(c, Modal(c)) +} + +func LoginRoute(c echo.Context) error { + return ctx.RenderTempl(c, Modal(c)) +} + +func RegisterRoute(c echo.Context) error { + return ctx.RenderTempl(c, Modal(c)) +} diff --git a/nebula/components/auth/sections/authorize.templ b/nebula/components/auth/sections/authorize.templ new file mode 100644 index 000000000..152e1b842 --- /dev/null +++ b/nebula/components/auth/sections/authorize.templ @@ -0,0 +1,17 @@ +package sections + +import ( + "github.com/onsonr/sonr/nebula/components/auth/forms" + "github.com/onsonr/sonr/nebula/global/styles" + "github.com/onsonr/sonr/nebula/global/ui" +) + +templ AuthorizeStart() { + @ui.Breadcrumbs() + @forms.BasicDetailsForm() + @styles.Spacer() +
+ + +
+} diff --git a/nebula/components/auth/sections/authorize_templ.go b/nebula/components/auth/sections/authorize_templ.go new file mode 100644 index 000000000..83a0ca845 --- /dev/null +++ b/nebula/components/auth/sections/authorize_templ.go @@ -0,0 +1,58 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.2.778 +package sections + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +import ( + "github.com/onsonr/sonr/nebula/components/auth/forms" + "github.com/onsonr/sonr/nebula/global/styles" + "github.com/onsonr/sonr/nebula/global/ui" +) + +func AuthorizeStart() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + 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 = ui.Breadcrumbs().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = forms.BasicDetailsForm().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = styles.Spacer().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 + } + return templ_7745c5c3_Err + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/nebula/components/auth/sections/login.templ b/nebula/components/auth/sections/login.templ new file mode 100644 index 000000000..e8b596a0a --- /dev/null +++ b/nebula/components/auth/sections/login.templ @@ -0,0 +1,17 @@ +package sections + +import ( + "github.com/onsonr/sonr/nebula/components/auth/forms" + "github.com/onsonr/sonr/nebula/global/styles" + "github.com/onsonr/sonr/nebula/global/ui" +) + +templ LoginStart() { + @ui.Breadcrumbs() + @forms.BasicDetailsForm() + @styles.Spacer() +
+ + +
+} diff --git a/nebula/components/auth/sections/login_templ.go b/nebula/components/auth/sections/login_templ.go new file mode 100644 index 000000000..db440a0ee --- /dev/null +++ b/nebula/components/auth/sections/login_templ.go @@ -0,0 +1,58 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.2.778 +package sections + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +import ( + "github.com/onsonr/sonr/nebula/components/auth/forms" + "github.com/onsonr/sonr/nebula/global/styles" + "github.com/onsonr/sonr/nebula/global/ui" +) + +func LoginStart() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + 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 = ui.Breadcrumbs().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = forms.BasicDetailsForm().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = styles.Spacer().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 + } + return templ_7745c5c3_Err + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/nebula/components/auth/sections/register.templ b/nebula/components/auth/sections/register.templ new file mode 100644 index 000000000..eccefd2e8 --- /dev/null +++ b/nebula/components/auth/sections/register.templ @@ -0,0 +1,17 @@ +package sections + +import ( + "github.com/onsonr/sonr/nebula/components/auth/forms" + "github.com/onsonr/sonr/nebula/global/styles" + "github.com/onsonr/sonr/nebula/global/ui" +) + +templ RegisterStart() { + @ui.Breadcrumbs() + @forms.BasicDetailsForm() + @styles.Spacer() +
+ + +
+} diff --git a/nebula/components/auth/sections/register_templ.go b/nebula/components/auth/sections/register_templ.go new file mode 100644 index 000000000..fa3458dc1 --- /dev/null +++ b/nebula/components/auth/sections/register_templ.go @@ -0,0 +1,58 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.2.778 +package sections + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +import ( + "github.com/onsonr/sonr/nebula/components/auth/forms" + "github.com/onsonr/sonr/nebula/global/styles" + "github.com/onsonr/sonr/nebula/global/ui" +) + +func RegisterStart() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + 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 = ui.Breadcrumbs().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = forms.BasicDetailsForm().Render(ctx, templ_7745c5c3_Buffer) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = styles.Spacer().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 + } + return templ_7745c5c3_Err + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/nebula/components/dash/page.templ b/nebula/components/dash/page.templ new file mode 100644 index 000000000..179a0fa8f --- /dev/null +++ b/nebula/components/dash/page.templ @@ -0,0 +1,15 @@ +package dash + +import ( + "github.com/onsonr/sonr/nebula/components/home/sections" + "github.com/onsonr/sonr/nebula/global/styles" +) + +templ View() { + @styles.LayoutNoBody("Sonr.ID", true) { + @sections.Header() + @sections.Lowlights() + @sections.CallToAction() + @sections.Footer() + } +} diff --git a/pkg/nebula/components/auth/modal_templ.go b/nebula/components/dash/page_templ.go similarity index 62% rename from pkg/nebula/components/auth/modal_templ.go rename to nebula/components/dash/page_templ.go index 31fe422e2..61b503086 100644 --- a/pkg/nebula/components/auth/modal_templ.go +++ b/nebula/components/dash/page_templ.go @@ -1,7 +1,7 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.2.778 -package auth +package dash //lint:file-ignore SA4006 This context is only used if a nested component is present. @@ -9,13 +9,11 @@ import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" import ( - "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/pkg/nebula/components/auth/forms" - "github.com/onsonr/sonr/pkg/nebula/global/styles" - "github.com/onsonr/sonr/pkg/nebula/global/ui" + "github.com/onsonr/sonr/nebula/components/home/sections" + "github.com/onsonr/sonr/nebula/global/styles" ) -func Modal(c echo.Context) templ.Component { +func View() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -48,7 +46,7 @@ func Modal(c echo.Context) templ.Component { }() } ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = ui.Breadcrumbs().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = sections.Header().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -56,7 +54,7 @@ func Modal(c echo.Context) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = forms.BasicDetailsForm().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = sections.Lowlights().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -64,17 +62,21 @@ func Modal(c echo.Context) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = styles.Spacer().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = sections.CallToAction().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = sections.Footer().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } return templ_7745c5c3_Err }) - templ_7745c5c3_Err = styles.OpenModal("Account Registration", "Enter your account information below to create your account.").Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer) + templ_7745c5c3_Err = styles.LayoutNoBody("Sonr.ID", true).Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/nebula/components/dash/route.go b/nebula/components/dash/route.go new file mode 100644 index 000000000..2a039ff5f --- /dev/null +++ b/nebula/components/dash/route.go @@ -0,0 +1,10 @@ +package dash + +import ( + "github.com/labstack/echo/v4" + "github.com/onsonr/sonr/internal/ctx" +) + +func Route(c echo.Context) error { + return ctx.RenderTempl(c, View()) +} diff --git a/nebula/components/home/page.templ b/nebula/components/home/page.templ new file mode 100644 index 000000000..1f91b4a74 --- /dev/null +++ b/nebula/components/home/page.templ @@ -0,0 +1,19 @@ +package home + +import ( + "github.com/onsonr/sonr/nebula/components/home/sections" + "github.com/onsonr/sonr/nebula/global/styles" +) + +templ View() { + @styles.LayoutNoBody("Sonr.ID", true) { + @sections.Header() + @sections.Hero(hero) + @sections.Highlights(highlights) + @sections.Mission() + @sections.Architecture() + @sections.Lowlights() + @sections.CallToAction() + @sections.Footer() + } +} diff --git a/pkg/nebula/components/dash/page_templ.go b/nebula/components/home/page_templ.go similarity index 85% rename from pkg/nebula/components/dash/page_templ.go rename to nebula/components/home/page_templ.go index aa5ccb22b..e1df8e53e 100644 --- a/pkg/nebula/components/dash/page_templ.go +++ b/nebula/components/home/page_templ.go @@ -1,7 +1,7 @@ // Code generated by templ - DO NOT EDIT. // templ: version: v0.2.778 -package dash +package home //lint:file-ignore SA4006 This context is only used if a nested component is present. @@ -9,8 +9,8 @@ import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" import ( - "github.com/onsonr/sonr/pkg/nebula/components/home/sections" - "github.com/onsonr/sonr/pkg/nebula/global/styles" + "github.com/onsonr/sonr/nebula/components/home/sections" + "github.com/onsonr/sonr/nebula/global/styles" ) func View() templ.Component { @@ -54,7 +54,7 @@ func View() templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = sections.Highlights().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = sections.Hero(hero).Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -62,7 +62,7 @@ func View() templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = sections.Features().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = sections.Highlights(highlights).Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -70,7 +70,15 @@ func View() templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = sections.Bento().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = sections.Mission().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 = sections.Architecture().Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/nebula/components/home/route.go b/nebula/components/home/route.go new file mode 100644 index 000000000..bdd2c6cc4 --- /dev/null +++ b/nebula/components/home/route.go @@ -0,0 +1,10 @@ +package home + +import ( + "github.com/labstack/echo/v4" + "github.com/onsonr/sonr/internal/ctx" +) + +func Route(c echo.Context) error { + return ctx.RenderTempl(c, View()) +} diff --git a/pkg/nebula/components/home/sections/bento.templ b/nebula/components/home/sections/architecture.templ similarity index 99% rename from pkg/nebula/components/home/sections/bento.templ rename to nebula/components/home/sections/architecture.templ index 51ce476df..6f4fadcdd 100644 --- a/pkg/nebula/components/home/sections/bento.templ +++ b/nebula/components/home/sections/architecture.templ @@ -1,6 +1,6 @@ package sections -templ Bento() { +templ Architecture() {
diff --git a/pkg/nebula/components/home/sections/bento_templ.go b/nebula/components/home/sections/architecture_templ.go similarity index 99% rename from pkg/nebula/components/home/sections/bento_templ.go rename to nebula/components/home/sections/architecture_templ.go index 2c33d796e..50e4d3c56 100644 --- a/pkg/nebula/components/home/sections/bento_templ.go +++ b/nebula/components/home/sections/architecture_templ.go @@ -8,7 +8,7 @@ package sections import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -func Bento() templ.Component { +func Architecture() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { diff --git a/pkg/nebula/components/home/sections/cta.templ b/nebula/components/home/sections/cta.templ similarity index 100% rename from pkg/nebula/components/home/sections/cta.templ rename to nebula/components/home/sections/cta.templ diff --git a/pkg/nebula/components/home/sections/cta_templ.go b/nebula/components/home/sections/cta_templ.go similarity index 100% rename from pkg/nebula/components/home/sections/cta_templ.go rename to nebula/components/home/sections/cta_templ.go diff --git a/pkg/nebula/components/home/sections/footer.templ b/nebula/components/home/sections/footer.templ similarity index 100% rename from pkg/nebula/components/home/sections/footer.templ rename to nebula/components/home/sections/footer.templ diff --git a/pkg/nebula/components/home/sections/footer_templ.go b/nebula/components/home/sections/footer_templ.go similarity index 100% rename from pkg/nebula/components/home/sections/footer_templ.go rename to nebula/components/home/sections/footer_templ.go diff --git a/pkg/nebula/components/home/sections/header.templ b/nebula/components/home/sections/header.templ similarity index 100% rename from pkg/nebula/components/home/sections/header.templ rename to nebula/components/home/sections/header.templ diff --git a/pkg/nebula/components/home/sections/header_templ.go b/nebula/components/home/sections/header_templ.go similarity index 100% rename from pkg/nebula/components/home/sections/header_templ.go rename to nebula/components/home/sections/header_templ.go diff --git a/pkg/nebula/components/home/sections/hero.templ b/nebula/components/home/sections/hero.templ similarity index 72% rename from pkg/nebula/components/home/sections/hero.templ rename to nebula/components/home/sections/hero.templ index ddd0bf671..a6a8b94fd 100644 --- a/pkg/nebula/components/home/sections/hero.templ +++ b/nebula/components/home/sections/hero.templ @@ -1,11 +1,11 @@ package sections import ( - "github.com/onsonr/sonr/pkg/nebula/global/ui" - "github.com/onsonr/sonr/pkg/nebula/models" + "github.com/onsonr/sonr/internal/orm/models" + "github.com/onsonr/sonr/nebula/global/ui" ) -templ SectionHero(hero *models.Hero) { +templ Hero(hero *models.Hero) {
@@ -33,7 +33,7 @@ templ SectionHero(hero *models.Hero) {
@heroImage(hero) - @stats() + @stats(hero.Stats)
@@ -41,7 +41,7 @@ templ SectionHero(hero *models.Hero) { templ heroImage(hero *models.Hero) { -
+
} -templ stats() { +templ stats(stats []*models.Stat) {
- -
-

0K

-

Assets packed with power beyond your imagination.

-
- -
-

0K

-

Assets packed with power beyond your imagination.

-
- -
-

0M+

-

Assets packed with power beyond your imagination.

-
- -
-

0K

-

Assets packed with power beyond your imagination.

-
+ for _, item := range stats { +
+

{ item.Value }{ item.Denom }

+

{ item.Label }

+
+ }
@counterAnimation()
diff --git a/pkg/nebula/components/home/sections/hero_templ.go b/nebula/components/home/sections/hero_templ.go similarity index 77% rename from pkg/nebula/components/home/sections/hero_templ.go rename to nebula/components/home/sections/hero_templ.go index 776705800..0b37dde62 100644 --- a/pkg/nebula/components/home/sections/hero_templ.go +++ b/nebula/components/home/sections/hero_templ.go @@ -9,11 +9,11 @@ import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" import ( - "github.com/onsonr/sonr/pkg/nebula/global/ui" - "github.com/onsonr/sonr/pkg/nebula/models" + "github.com/onsonr/sonr/internal/orm/models" + "github.com/onsonr/sonr/nebula/global/ui" ) -func SectionHero(hero *models.Hero) templ.Component { +func Hero(hero *models.Hero) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -41,7 +41,7 @@ func SectionHero(hero *models.Hero) templ.Component { var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(hero.TitleFirst) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/components/home/sections/hero.templ`, Line: 17, Col: 24} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/components/home/sections/hero.templ`, Line: 17, Col: 24} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { @@ -54,7 +54,7 @@ func SectionHero(hero *models.Hero) templ.Component { var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(hero.TitleEmphasis) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/components/home/sections/hero.templ`, Line: 19, Col: 28} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/components/home/sections/hero.templ`, Line: 19, Col: 28} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -67,7 +67,7 @@ func SectionHero(hero *models.Hero) templ.Component { var templ_7745c5c3_Var4 string templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(hero.TitleSecond) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/components/home/sections/hero.templ`, Line: 24, Col: 25} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/components/home/sections/hero.templ`, Line: 24, Col: 25} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { @@ -80,7 +80,7 @@ func SectionHero(hero *models.Hero) templ.Component { var templ_7745c5c3_Var5 string templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(hero.Subtitle) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/components/home/sections/hero.templ`, Line: 27, Col: 22} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/components/home/sections/hero.templ`, Line: 27, Col: 22} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { @@ -106,7 +106,7 @@ func SectionHero(hero *models.Hero) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = stats().Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = stats(hero.Stats).Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -139,14 +139,14 @@ func heroImage(hero *models.Hero) templ.Component { templ_7745c5c3_Var6 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

0K

Assets packed with power beyond your imagination.

0K

Assets packed with power beyond your imagination.

0M+

Assets packed with power beyond your imagination.

0K

Assets packed with power beyond your imagination.

") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + for _, item := range stats { + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var11 string + templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(item.Value) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/components/home/sections/hero.templ`, Line: 61, Col: 145} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) + 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 + } + var templ_7745c5c3_Var12 string + templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(item.Denom) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/components/home/sections/hero.templ`, Line: 61, Col: 166} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) + 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 + } + var templ_7745c5c3_Var13 string + templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(item.Label) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/components/home/sections/hero.templ`, Line: 62, Col: 50} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) + 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_Buffer.WriteString("
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/pkg/nebula/components/home/sections/highlights.templ b/nebula/components/home/sections/highlights.templ similarity index 97% rename from pkg/nebula/components/home/sections/highlights.templ rename to nebula/components/home/sections/highlights.templ index 21d9c9929..df376f838 100644 --- a/pkg/nebula/components/home/sections/highlights.templ +++ b/nebula/components/home/sections/highlights.templ @@ -1,6 +1,8 @@ package sections -templ Highlights() { +import "github.com/onsonr/sonr/internal/orm/models" + +templ Highlights(highlights *models.Highlights) {
@@ -9,11 +11,10 @@ templ Highlights() {

- The Internet Rebuilt for You + { highlights.Heading }

- Sonr is a comprehensive system for Identity Management which proteects users across their digital personas while - providing Developers a cost-effective solution for decentralized authentication. + { highlights.Subtitle }

diff --git a/nebula/components/home/sections/highlights_templ.go b/nebula/components/home/sections/highlights_templ.go new file mode 100644 index 000000000..a2d818def --- /dev/null +++ b/nebula/components/home/sections/highlights_templ.go @@ -0,0 +1,68 @@ +// Code generated by templ - DO NOT EDIT. + +// templ: version: v0.2.778 +package sections + +//lint:file-ignore SA4006 This context is only used if a nested component is present. + +import "github.com/a-h/templ" +import templruntime "github.com/a-h/templ/runtime" + +import "github.com/onsonr/sonr/internal/orm/models" + +func Highlights(highlights *models.Highlights) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + 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(highlights.Heading) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/components/home/sections/highlights.templ`, Line: 14, Col: 26} + } + _, 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 + } + var templ_7745c5c3_Var3 string + templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(highlights.Subtitle) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/components/home/sections/highlights.templ`, Line: 17, Col: 27} + } + _, 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("

\"Feature
\"Feature
\"Feature
\"Feature
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + return templ_7745c5c3_Err + }) +} + +var _ = templruntime.GeneratedTemplate diff --git a/pkg/nebula/components/home/sections/lowlights.templ b/nebula/components/home/sections/lowlights.templ similarity index 100% rename from pkg/nebula/components/home/sections/lowlights.templ rename to nebula/components/home/sections/lowlights.templ diff --git a/pkg/nebula/components/home/sections/lowlights_templ.go b/nebula/components/home/sections/lowlights_templ.go similarity index 100% rename from pkg/nebula/components/home/sections/lowlights_templ.go rename to nebula/components/home/sections/lowlights_templ.go diff --git a/pkg/nebula/components/home/sections/features.templ b/nebula/components/home/sections/mission.templ similarity index 99% rename from pkg/nebula/components/home/sections/features.templ rename to nebula/components/home/sections/mission.templ index 0a4828fcb..8e7b7eb8e 100644 --- a/pkg/nebula/components/home/sections/features.templ +++ b/nebula/components/home/sections/mission.templ @@ -1,7 +1,6 @@ package sections - -templ Features() { +templ Mission() {
function createCredential() { diff --git a/pkg/nebula/global/state/authenticator_templ.go b/nebula/global/state/credentials_templ.go similarity index 98% rename from pkg/nebula/global/state/authenticator_templ.go rename to nebula/global/state/credentials_templ.go index 1c094100c..3790d28c4 100644 --- a/pkg/nebula/global/state/authenticator_templ.go +++ b/nebula/global/state/credentials_templ.go @@ -8,10 +8,6 @@ package state import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -func UseNavigatorCredentials() { - templ.NewOnceHandle().Once() -} - func NavigatorCredentialsCreate() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context diff --git a/pkg/nebula/global/state/store.templ b/nebula/global/state/database.templ similarity index 100% rename from pkg/nebula/global/state/store.templ rename to nebula/global/state/database.templ diff --git a/pkg/nebula/global/state/store_templ.go b/nebula/global/state/database_templ.go similarity index 100% rename from pkg/nebula/global/state/store_templ.go rename to nebula/global/state/database_templ.go diff --git a/pkg/nebula/global/state/worker.templ b/nebula/global/state/worker.templ similarity index 100% rename from pkg/nebula/global/state/worker.templ rename to nebula/global/state/worker.templ diff --git a/pkg/nebula/global/state/worker_templ.go b/nebula/global/state/worker_templ.go similarity index 100% rename from pkg/nebula/global/state/worker_templ.go rename to nebula/global/state/worker_templ.go diff --git a/pkg/nebula/global/styles/globals.css b/nebula/global/styles/globals.css similarity index 87% rename from pkg/nebula/global/styles/globals.css rename to nebula/global/styles/globals.css index ed929e5e0..40e044a5f 100644 --- a/pkg/nebula/global/styles/globals.css +++ b/nebula/global/styles/globals.css @@ -10,6 +10,25 @@ display: none; } +@layer base { + @font-face { + font-family: "ZT Bros Oskon 90s"; + font-style: italic; + font-weight: bold; + font-display: swap; + src: url(https://cdn.sonr.id/fonts/ZTBrosOskon90s-BoldSemExpIta.woff2) + format("woff2"); + } + @font-face { + font-family: "ZT Bros Oskon 90s"; + font-style: normal; + font-weight: bold; + font-display: swap; + src: url(https://cdn.sonr.id/fonts/ZTBrosOskon90s-BoldSemExp.woff2) + format("woff2"); + } +} + /* Custom styles */ .form-input:focus, .form-textarea:focus, diff --git a/pkg/nebula/global/styles/layout.templ b/nebula/global/styles/layout.templ similarity index 84% rename from pkg/nebula/global/styles/layout.templ rename to nebula/global/styles/layout.templ index a60c2d2e7..d82b8318d 100644 --- a/pkg/nebula/global/styles/layout.templ +++ b/nebula/global/styles/layout.templ @@ -1,7 +1,5 @@ package styles -import "strings" - type Icon interface { Render() templ.Component } @@ -30,6 +28,7 @@ templ Layout(title string, remote bool) { + @Fonts() @Styles() @Htmx() @Alpine() @@ -54,6 +53,7 @@ templ LayoutNoBody(title string, remote bool) { + @Fonts() @Styles() @Htmx() @Alpine() @@ -122,35 +122,3 @@ templ OpenModal(title, description string) {
} - -func clsxMerge(variants ...Variant) templ.Attributes { - combinedAttrs := templ.Attributes{} - var classElements []string - - for _, variant := range variants { - attrs := variant.Attributes() - if class, ok := attrs["class"].(string); ok { - classElements = append(classElements, strings.Fields(class)...) - } - for key, value := range attrs { - if key != "class" { - combinedAttrs[key] = value - } - } - } - - if len(classElements) > 0 { - combinedAttrs["class"] = strings.Join(classElements, " ") - } - return combinedAttrs -} - -func clsxBuilder(classes ...string) templ.Attributes { - if len(classes) == 0 { - return templ.Attributes{} - } - class := strings.Join(classes, " ") - return templ.Attributes{ - "class": class, - } -} diff --git a/pkg/nebula/global/styles/layout_templ.go b/nebula/global/styles/layout_templ.go similarity index 92% rename from pkg/nebula/global/styles/layout_templ.go rename to nebula/global/styles/layout_templ.go index ca5b3c3fc..0076fc4fe 100644 --- a/pkg/nebula/global/styles/layout_templ.go +++ b/nebula/global/styles/layout_templ.go @@ -8,8 +8,6 @@ package styles import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -import "strings" - type Icon interface { Render() templ.Component } @@ -146,6 +144,10 @@ func Layout(title string, remote bool) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } + templ_7745c5c3_Err = Fonts().Render(ctx, templ_7745c5c3_Buffer) + 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 @@ -165,7 +167,7 @@ func Layout(title string, remote bool) templ.Component { var templ_7745c5c3_Var5 string templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/styles/layout.templ`, Line: 39, Col: 17} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/styles/layout.templ`, Line: 38, Col: 17} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { @@ -212,6 +214,10 @@ func LayoutNoBody(title string, remote bool) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } + templ_7745c5c3_Err = Fonts().Render(ctx, templ_7745c5c3_Buffer) + 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 @@ -231,7 +237,7 @@ func LayoutNoBody(title string, remote bool) templ.Component { var templ_7745c5c3_Var7 string templ_7745c5c3_Var7, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/styles/layout.templ`, Line: 63, Col: 17} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/styles/layout.templ`, Line: 63, Col: 17} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var7)) if templ_7745c5c3_Err != nil { @@ -281,7 +287,7 @@ func OpenModal(title, description string) templ.Component { var templ_7745c5c3_Var9 string templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/styles/layout.templ`, Line: 111, Col: 47} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/styles/layout.templ`, Line: 111, Col: 47} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { @@ -294,7 +300,7 @@ func OpenModal(title, description string) templ.Component { var templ_7745c5c3_Var10 string templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(description) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/styles/layout.templ`, Line: 117, Col: 22} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/styles/layout.templ`, Line: 117, Col: 22} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10)) if templ_7745c5c3_Err != nil { @@ -316,36 +322,4 @@ func OpenModal(title, description string) templ.Component { }) } -func clsxMerge(variants ...Variant) templ.Attributes { - combinedAttrs := templ.Attributes{} - var classElements []string - - for _, variant := range variants { - attrs := variant.Attributes() - if class, ok := attrs["class"].(string); ok { - classElements = append(classElements, strings.Fields(class)...) - } - for key, value := range attrs { - if key != "class" { - combinedAttrs[key] = value - } - } - } - - if len(classElements) > 0 { - combinedAttrs["class"] = strings.Join(classElements, " ") - } - return combinedAttrs -} - -func clsxBuilder(classes ...string) templ.Attributes { - if len(classes) == 0 { - return templ.Attributes{} - } - class := strings.Join(classes, " ") - return templ.Attributes{ - "class": class, - } -} - var _ = templruntime.GeneratedTemplate diff --git a/pkg/nebula/global/styles/scripts.templ b/nebula/global/styles/scripts.templ similarity index 67% rename from pkg/nebula/global/styles/scripts.templ rename to nebula/global/styles/scripts.templ index 9cc29c2c1..b5a185990 100644 --- a/pkg/nebula/global/styles/scripts.templ +++ b/nebula/global/styles/scripts.templ @@ -11,6 +11,11 @@ var ( htmxHandle = templ.NewOnceHandle() ) +templ Fonts() { + + +} + templ Styles() { } diff --git a/pkg/nebula/global/styles/scripts_templ.go b/nebula/global/styles/scripts_templ.go similarity index 68% rename from pkg/nebula/global/styles/scripts_templ.go rename to nebula/global/styles/scripts_templ.go index 49acdd3b3..5d5734639 100644 --- a/pkg/nebula/global/styles/scripts_templ.go +++ b/nebula/global/styles/scripts_templ.go @@ -19,7 +19,7 @@ var ( htmxHandle = templ.NewOnceHandle() ) -func Styles() templ.Component { +func Fonts() templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { @@ -40,16 +40,45 @@ func Styles() templ.Component { 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 + } + return templ_7745c5c3_Err + }) +} + +func Styles() templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var2 := templ.GetChildren(ctx) + if templ_7745c5c3_Var2 == nil { + templ_7745c5c3_Var2 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(" @@ -14,7 +14,6 @@ templ SecondaryButton(href string, text string) {
} - type button struct { variant styles.Variant hxGet string diff --git a/pkg/nebula/global/ui/button_templ.go b/nebula/global/ui/button_templ.go similarity index 93% rename from pkg/nebula/global/ui/button_templ.go rename to nebula/global/ui/button_templ.go index 315dc1fce..03cf22dd7 100644 --- a/pkg/nebula/global/ui/button_templ.go +++ b/nebula/global/ui/button_templ.go @@ -8,7 +8,7 @@ package ui import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -import "github.com/onsonr/sonr/pkg/nebula/global/styles" +import "github.com/onsonr/sonr/nebula/global/styles" func PrimaryButton(href string, text string) templ.Component { return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { @@ -38,7 +38,7 @@ func PrimaryButton(href string, text string) templ.Component { var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(href) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 7, Col: 124} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 7, Col: 124} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { @@ -51,7 +51,7 @@ func PrimaryButton(href string, text string) templ.Component { var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 7, Col: 133} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 7, Col: 133} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -93,7 +93,7 @@ func SecondaryButton(href string, text string) templ.Component { var templ_7745c5c3_Var5 string templ_7745c5c3_Var5, templ_7745c5c3_Err = templ.JoinStringErrs(href) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 13, Col: 123} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 13, Col: 123} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var5)) if templ_7745c5c3_Err != nil { @@ -106,7 +106,7 @@ func SecondaryButton(href string, text string) templ.Component { var templ_7745c5c3_Var6 string templ_7745c5c3_Var6, templ_7745c5c3_Err = templ.JoinStringErrs(text) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 13, Col: 132} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 13, Col: 132} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var6)) if templ_7745c5c3_Err != nil { @@ -269,7 +269,7 @@ func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var9 string templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxGet) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 101, Col: 25} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 100, Col: 25} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) if templ_7745c5c3_Err != nil { @@ -282,7 +282,7 @@ func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var10 string templ_7745c5c3_Var10, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxTarget) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 101, Col: 69} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 100, Col: 69} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var10)) if templ_7745c5c3_Err != nil { @@ -295,7 +295,7 @@ func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var11 string templ_7745c5c3_Var11, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxTrigger) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 101, Col: 96} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 100, Col: 96} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var11)) if templ_7745c5c3_Err != nil { @@ -308,7 +308,7 @@ func renderHxGetButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var12 string templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxSwap) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 101, Col: 117} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 100, Col: 117} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) if templ_7745c5c3_Err != nil { @@ -366,7 +366,7 @@ func renderHxPostButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var14 string templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxPost) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 107, Col: 27} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 106, Col: 27} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) if templ_7745c5c3_Err != nil { @@ -379,7 +379,7 @@ func renderHxPostButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var15 string templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxTarget) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 107, Col: 52} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 106, Col: 52} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) if templ_7745c5c3_Err != nil { @@ -392,7 +392,7 @@ func renderHxPostButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var16 string templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxTrigger) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 107, Col: 79} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 106, Col: 79} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) if templ_7745c5c3_Err != nil { @@ -405,7 +405,7 @@ func renderHxPostButton(c *button, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var17 string templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(c.hxSwap) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/button.templ`, Line: 107, Col: 100} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/button.templ`, Line: 106, Col: 100} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17)) if templ_7745c5c3_Err != nil { diff --git a/pkg/nebula/global/ui/card.templ b/nebula/global/ui/card.templ similarity index 97% rename from pkg/nebula/global/ui/card.templ rename to nebula/global/ui/card.templ index 7e70704f2..912016170 100644 --- a/pkg/nebula/global/ui/card.templ +++ b/nebula/global/ui/card.templ @@ -1,6 +1,6 @@ package ui -import "github.com/onsonr/sonr/pkg/nebula/global/styles" +import "github.com/onsonr/sonr/nebula/global/styles" func Card(id string, size styles.Size) templ.Component { return renderCard(id, size.CardAttributes()) diff --git a/pkg/nebula/global/ui/card_templ.go b/nebula/global/ui/card_templ.go similarity index 97% rename from pkg/nebula/global/ui/card_templ.go rename to nebula/global/ui/card_templ.go index 9d8188b80..90e9c406a 100644 --- a/pkg/nebula/global/ui/card_templ.go +++ b/nebula/global/ui/card_templ.go @@ -8,7 +8,7 @@ package ui import "github.com/a-h/templ" import templruntime "github.com/a-h/templ/runtime" -import "github.com/onsonr/sonr/pkg/nebula/global/styles" +import "github.com/onsonr/sonr/nebula/global/styles" func Card(id string, size styles.Size) templ.Component { return renderCard(id, size.CardAttributes()) @@ -42,7 +42,7 @@ func renderCard(id string, attrs templ.Attributes) templ.Component { var templ_7745c5c3_Var2 string templ_7745c5c3_Var2, templ_7745c5c3_Err = templ.JoinStringErrs(id) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/card.templ`, Line: 10, Col: 13} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/card.templ`, Line: 10, Col: 13} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var2)) if templ_7745c5c3_Err != nil { diff --git a/pkg/nebula/global/ui/icons.templ b/nebula/global/ui/icons.templ similarity index 100% rename from pkg/nebula/global/ui/icons.templ rename to nebula/global/ui/icons.templ diff --git a/pkg/nebula/global/ui/icons_templ.go b/nebula/global/ui/icons_templ.go similarity index 100% rename from pkg/nebula/global/ui/icons_templ.go rename to nebula/global/ui/icons_templ.go diff --git a/pkg/nebula/global/ui/panel.templ b/nebula/global/ui/panel.templ similarity index 100% rename from pkg/nebula/global/ui/panel.templ rename to nebula/global/ui/panel.templ diff --git a/pkg/nebula/global/ui/panel_templ.go b/nebula/global/ui/panel_templ.go similarity index 97% rename from pkg/nebula/global/ui/panel_templ.go rename to nebula/global/ui/panel_templ.go index ce84cd57b..f3d677983 100644 --- a/pkg/nebula/global/ui/panel_templ.go +++ b/nebula/global/ui/panel_templ.go @@ -100,7 +100,7 @@ func breadcrumbItem(title string, active bool) templ.Component { var templ_7745c5c3_Var3 string templ_7745c5c3_Var3, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/panel.templ`, Line: 26, Col: 126} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/panel.templ`, Line: 26, Col: 126} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var3)) if templ_7745c5c3_Err != nil { @@ -118,7 +118,7 @@ func breadcrumbItem(title string, active bool) templ.Component { var templ_7745c5c3_Var4 string templ_7745c5c3_Var4, templ_7745c5c3_Err = templ.JoinStringErrs(title) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `pkg/nebula/global/ui/panel.templ`, Line: 28, Col: 118} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `nebula/global/ui/panel.templ`, Line: 28, Col: 118} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var4)) if templ_7745c5c3_Err != nil { diff --git a/pkg/nebula/package.json b/nebula/package.json similarity index 67% rename from pkg/nebula/package.json rename to nebula/package.json index 3ce73e18d..04e124ec2 100644 --- a/pkg/nebula/package.json +++ b/nebula/package.json @@ -2,10 +2,9 @@ "name": "@onsonr/nebula", "version": "0.0.2", "scripts": { - "fetch:deps": "bun run .deps.mjs", + "fetch:deps": "bun run deps.mjs", "build:css": "bunx tailwindcss -i ./global/styles/globals.css -o ./assets/css/styles.css", - "build": "bun run fetch:deps && bun run build:css", - "watch": "bunx tailwindcss -i ./global/styles/globals.css -o ./assets/css/styles.css --watch" + "build": "bun run fetch:deps && bun run build:css" }, "dependencies": { "node-fetch": "^3.3.2", diff --git a/pkg/nebula/tailwind.config.js b/nebula/tailwind.config.js similarity index 100% rename from pkg/nebula/tailwind.config.js rename to nebula/tailwind.config.js diff --git a/pkg/dwn/embed.go b/pkg/dwn/embed.go deleted file mode 100644 index 30e008568..000000000 --- a/pkg/dwn/embed.go +++ /dev/null @@ -1,64 +0,0 @@ -package dwn - -import ( - "bytes" - "context" - _ "embed" - "encoding/json" - - "github.com/ipfs/boxo/files" - "github.com/onsonr/sonr/pkg/dwn/gen" - "github.com/onsonr/sonr/pkg/nebula/routes" -) - -//go:embed app.wasm -var dwnWasmData []byte - -//go:embed sw.js -var swJSData []byte - -var ( - dwnWasmFile = files.NewBytesFile(dwnWasmData) - swJSFile = files.NewBytesFile(swJSData) -) - -// NewVaultDirectory creates a new directory with the default files -func NewVaultDirectory(cnfg *gen.Config) (files.Node, error) { - dwnJSON, err := json.Marshal(cnfg) - if err != nil { - return nil, err - } - - w := bytes.NewBuffer(nil) - err = routes.IndexFile().Render(context.Background(), w) - if err != nil { - return nil, err - } - fileMap := map[string]files.Node{ - "config.json": files.NewBytesFile(dwnJSON), - "sw.js": swJSFile, - "app.wasm": dwnWasmFile, - "index.html": files.NewBytesFile(w.Bytes()), - } - return files.NewMapDirectory(fileMap), nil -} - -// Use IndexHTML template to generate the index file -func IndexHTMLFile() (files.Node, error) { - w := bytes.NewBuffer(nil) - err := routes.IndexFile().Render(context.Background(), w) - if err != nil { - return nil, err - } - indexData := w.Bytes() - return files.NewBytesFile(indexData), nil -} - -// MarshalConfigFile uses the config template to generate the dwn config file -func MarshalConfigFile(c *gen.Config) (files.Node, error) { - dwnConfigData, err := json.Marshal(c) - if err != nil { - return nil, err - } - return files.NewBytesFile(dwnConfigData), nil -} diff --git a/pkg/nebula/components/auth/modal.templ b/pkg/nebula/components/auth/modal.templ deleted file mode 100644 index 53a97b9bb..000000000 --- a/pkg/nebula/components/auth/modal.templ +++ /dev/null @@ -1,21 +0,0 @@ -package auth - -import ( - "github.com/labstack/echo/v4" - "github.com/onsonr/sonr/pkg/nebula/global/styles" - "github.com/onsonr/sonr/pkg/nebula/global/ui" - "github.com/onsonr/sonr/pkg/nebula/components/auth/forms" -) - -templ Modal(c echo.Context) { - @styles.OpenModal("Account Registration", "Enter your account information below to create your account.") { - @ui.Breadcrumbs() - @forms.BasicDetailsForm() - @styles.Spacer() -
- - -
- } -} - diff --git a/pkg/nebula/components/dash/page.templ b/pkg/nebula/components/dash/page.templ deleted file mode 100644 index e228c5075..000000000 --- a/pkg/nebula/components/dash/page.templ +++ /dev/null @@ -1,18 +0,0 @@ -package dash - -import ( - "github.com/onsonr/sonr/pkg/nebula/components/home/sections" - "github.com/onsonr/sonr/pkg/nebula/global/styles" -) - -templ View() { - @styles.LayoutNoBody("Sonr.ID", true) { - @sections.Header() - @sections.Highlights() - @sections.Features() - @sections.Bento() - @sections.Lowlights() - @sections.CallToAction() - @sections.Footer() - } -} diff --git a/pkg/nebula/components/home/page.templ b/pkg/nebula/components/home/page.templ deleted file mode 100644 index 4c8578b58..000000000 --- a/pkg/nebula/components/home/page.templ +++ /dev/null @@ -1,39 +0,0 @@ -package home - -import ( - "github.com/onsonr/sonr/pkg/nebula/components/home/sections" - "github.com/onsonr/sonr/pkg/nebula/global/styles" - "github.com/onsonr/sonr/pkg/nebula/models" -) - -var hero = models.Hero{ - TitleFirst: "Simplified", - TitleEmphasis: "self-custody", - TitleSecond: "for everyone", - Subtitle: "Sonr is a modern re-imagination of online user identity, empowering users to take ownership of their digital footprint and unlocking a new era of self-sovereignty.", - PrimaryButton: &models.Button{Text: "Get Started", Href: "/register"}, - SecondaryButton: &models.Button{Text: "Learn More", Href: "/about"}, - Image: &models.Image{ - Src: "https://cdn.sonr.id/img/hero-clipped.svg", - Width: "500", - Height: "500", - }, - Stats: []*models.Stat{ - {Value: "476K", Label: "Assets packed with power beyond your imagination."}, - {Value: "1.44K", Label: "Assets packed with power beyond your imagination."}, - {Value: "1.5M+", Label: "Assets packed with power beyond your imagination."}, - }, -} - -templ View() { - @styles.LayoutNoBody("Sonr.ID", true) { - @sections.Header() - @sections.SectionHero(&hero) - @sections.Highlights() - @sections.Features() - @sections.Bento() - @sections.Lowlights() - @sections.CallToAction() - @sections.Footer() - } -} diff --git a/pkg/nebula/components/home/page_templ.go b/pkg/nebula/components/home/page_templ.go deleted file mode 100644 index 89b3a54e8..000000000 --- a/pkg/nebula/components/home/page_templ.go +++ /dev/null @@ -1,139 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.2.778 -package home - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -import ( - "github.com/onsonr/sonr/pkg/nebula/components/home/sections" - "github.com/onsonr/sonr/pkg/nebula/global/styles" - "github.com/onsonr/sonr/pkg/nebula/models" -) - -var hero = models.Hero{ - TitleFirst: "Simplified", - TitleEmphasis: "self-custody", - TitleSecond: "for everyone", - Subtitle: "Sonr is a modern re-imagination of online user identity, empowering users to take ownership of their digital footprint and unlocking a new era of self-sovereignty.", - PrimaryButton: &models.Button{Text: "Get Started", Href: "/register"}, - SecondaryButton: &models.Button{Text: "Learn More", Href: "/about"}, - Image: &models.Image{ - Src: "https://cdn.sonr.id/img/hero-clipped.svg", - Width: "500", - Height: "500", - }, - Stats: []*models.Stat{ - {Value: "476K", Label: "Assets packed with power beyond your imagination."}, - {Value: "1.44K", Label: "Assets packed with power beyond your imagination."}, - {Value: "1.5M+", Label: "Assets packed with power beyond your imagination."}, - }, -} - -func View() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - 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 := templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - ctx = templ.InitializeContext(ctx) - templ_7745c5c3_Err = sections.Header().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 = sections.SectionHero(&hero).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 = sections.Highlights().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 = sections.Features().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 = sections.Bento().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 = sections.Lowlights().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 = sections.CallToAction().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 = sections.Footer().Render(ctx, templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return templ_7745c5c3_Err - }) - templ_7745c5c3_Err = styles.LayoutNoBody("Sonr.ID", true).Render(templ.WithChildren(ctx, templ_7745c5c3_Var2), templ_7745c5c3_Buffer) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return templ_7745c5c3_Err - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/pkg/nebula/components/home/sections/highlights_templ.go b/pkg/nebula/components/home/sections/highlights_templ.go deleted file mode 100644 index 38feb933f..000000000 --- a/pkg/nebula/components/home/sections/highlights_templ.go +++ /dev/null @@ -1,40 +0,0 @@ -// Code generated by templ - DO NOT EDIT. - -// templ: version: v0.2.778 -package sections - -//lint:file-ignore SA4006 This context is only used if a nested component is present. - -import "github.com/a-h/templ" -import templruntime "github.com/a-h/templ/runtime" - -func Highlights() templ.Component { - return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { - templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context - if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { - return templ_7745c5c3_CtxErr - } - templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) - if !templ_7745c5c3_IsBuffer { - defer func() { - templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) - if templ_7745c5c3_Err == nil { - templ_7745c5c3_Err = templ_7745c5c3_BufErr - } - }() - } - 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("

The Internet Rebuilt for You

Sonr is a comprehensive system for Identity Management which proteects users across their digital personas while providing Developers a cost-effective solution for decentralized authentication.

\"Feature
\"Feature
\"Feature
\"Feature
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - return templ_7745c5c3_Err - }) -} - -var _ = templruntime.GeneratedTemplate diff --git a/pkg/nebula/models/marketing.go b/pkg/nebula/models/marketing.go deleted file mode 100644 index e558e2e34..000000000 --- a/pkg/nebula/models/marketing.go +++ /dev/null @@ -1,28 +0,0 @@ -package models - -type Button struct { - Text string - Href string -} - -type Image struct { - Src string - Width string - Height string -} - -type Stat struct { - Value string - Label string -} - -type Hero struct { - TitleFirst string - TitleEmphasis string - TitleSecond string - Subtitle string - PrimaryButton *Button - SecondaryButton *Button - Image *Image - Stats []*Stat -} diff --git a/pkg/nebula/nebula.go b/pkg/nebula/nebula.go deleted file mode 100644 index 49779a784..000000000 --- a/pkg/nebula/nebula.go +++ /dev/null @@ -1,32 +0,0 @@ -package nebula - -import ( - "embed" - "io/fs" - "net/http" - - "github.com/labstack/echo/v4" -) - -//go:embed assets -var embeddedFiles embed.FS - -func getHTTPFS() (http.FileSystem, error) { - fsys, err := fs.Sub(embeddedFiles, "assets") - if err != nil { - return nil, err - } - return http.FS(fsys), nil -} - -// UseAssets is a middleware that serves static files from the embedded assets -func UseAssets(e *echo.Echo) error { - fsys, err := getHTTPFS() - if err != nil { - return err - } - assets := http.FileServer(fsys) - e.GET("/", echo.WrapHandler(assets)) - e.GET("/assets/*", echo.WrapHandler(http.StripPrefix("/assets/", assets))) - return nil -} diff --git a/pkg/nebula/routes/routes.go b/pkg/nebula/routes/routes.go deleted file mode 100644 index 4d1338a71..000000000 --- a/pkg/nebula/routes/routes.go +++ /dev/null @@ -1,72 +0,0 @@ -package routes - -import ( - "bytes" - - "github.com/a-h/templ" - "github.com/labstack/echo/v4" - - "github.com/onsonr/sonr/pkg/nebula/components/auth" - "github.com/onsonr/sonr/pkg/nebula/components/home" -) - -// ╭───────────────────────────────────────────────────────────╮ -// │ Marketing Pages │ -// ╰───────────────────────────────────────────────────────────╯ - -func Home(c echo.Context) error { - return render(c, home.View()) -} - -// ╭───────────────────────────────────────────────────────────╮ -// │ Authentication Views │ -// ╰───────────────────────────────────────────────────────────╯ - -func AuthorizeStart(c echo.Context) error { - return render(c, auth.Modal(c)) -} - -func AuthorizeFinish(c echo.Context) error { - return render(c, auth.Modal(c)) -} - -func LoginDevice(c echo.Context) error { - return render(c, auth.Modal(c)) -} - -func LoginStart(c echo.Context) error { - return render(c, auth.Modal(c)) -} - -func LoginFinish(c echo.Context) error { - return render(c, auth.Modal(c)) -} - -func RegisterStart(c echo.Context) error { - return render(c, auth.Modal(c)) -} - -func RegisterFinish(c echo.Context) error { - return render(c, auth.Modal(c)) -} - -// ╭───────────────────────────────────────────────────────────╮ -// │ Helper Methods │ -// ╰───────────────────────────────────────────────────────────╯ - -func render(c echo.Context, cmp templ.Component) error { - // Create a buffer to store the rendered HTML - buf := &bytes.Buffer{} - // Render the component to the buffer - err := cmp.Render(c.Request().Context(), buf) - if err != nil { - return err - } - - // Set the content type - c.Response().Header().Set(echo.HeaderContentType, echo.MIMETextHTML) - - // Write the buffered content to the response - _, err = c.Response().Write(buf.Bytes()) - return err -} diff --git a/pkg/nebula/worker/auth.go b/pkg/nebula/worker/auth.go deleted file mode 100644 index a68070578..000000000 --- a/pkg/nebula/worker/auth.go +++ /dev/null @@ -1,43 +0,0 @@ -package worker - -import ( - "encoding/json" - "fmt" - - "github.com/go-webauthn/webauthn/protocol" - "github.com/labstack/echo/v4" -) - -func CheckSubjectIsValid(e echo.Context) error { - credentialID := e.FormValue("credentialID") - return e.JSON(200, credentialID) -} - -func HandleCredentialAssertion(e echo.Context) error { - return e.JSON(200, "HandleCredentialAssertion") -} - -func HandleCredentialCreation(e echo.Context) error { - // Get the serialized credential data from the form - credentialDataJSON := e.FormValue("credentialData") - - // Deserialize the JSON into a temporary struct - var ccr protocol.CredentialCreationResponse - err := json.Unmarshal([]byte(credentialDataJSON), &ccr) - if err != nil { - return e.JSON(500, err.Error()) - } - // - // // Parse the CredentialCreationResponse - // parsedData, err := ccr.Parse() - // if err != nil { - // return e.JSON(500, err.Error()) - // } - // - // // Create the Credential - // // credential := orm.NewCredential(parsedData, e.Request().Host, "") - // - // // Set additional fields - // credential.Controller = "" // Set this to the appropriate controller value - return e.JSON(200, fmt.Sprintf("REGISTER: %s", string(ccr.ID))) -} diff --git a/pkl/DWN.pkl b/pkl/DWN.pkl index 0f6905ff8..7272ebd43 100644 --- a/pkl/DWN.pkl +++ b/pkl/DWN.pkl @@ -1,4 +1,4 @@ -@go.Package { name = "github.com/onsonr/sonr/pkg/dwn/gen" } +@go.Package { name = "github.com/onsonr/sonr/internal/dwn/gen" } module dwngen diff --git a/pkl/ORM.pkl b/pkl/ORM.pkl index 33c7a411d..f62a2f238 100644 --- a/pkl/ORM.pkl +++ b/pkl/ORM.pkl @@ -1,4 +1,4 @@ -@go.Package { name = "github.com/onsonr/sonr/pkg/orm" } +@go.Package { name = "github.com/onsonr/sonr/internal/orm" } module orm diff --git a/pkl/README.md b/pkl/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/pkl/Txns.pkl b/pkl/Txns.pkl index 0852eebea..e658489b1 100644 --- a/pkl/Txns.pkl +++ b/pkl/Txns.pkl @@ -1,4 +1,4 @@ -@go.Package { name = "github.com/onsonr/sonr/pkg/orm/transactions" } +@go.Package { name = "github.com/onsonr/sonr/internal/orm/transactions" } module transactions diff --git a/process-compose.yaml b/process-compose.yaml index 275db47f3..6388a1415 100644 --- a/process-compose.yaml +++ b/process-compose.yaml @@ -17,9 +17,9 @@ processes: max_restarts: 1 depends: - ipfs - - tunnel: - namespace: public - command: "cloudflared tunnel run --token $TUNNEL_TOKEN" - restart: on_failure - max_restarts: 1 + # + # tunnel: + # namespace: public + # command: "cloudflared tunnel run --token $TUNNEL_TOKEN" + # restart: on_failure + # max_restarts: 1 diff --git a/proto/README.md b/proto/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/init_env.sh b/scripts/init_env.sh deleted file mode 100644 index eb6138fee..000000000 --- a/scripts/init_env.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/zsh - -export ACC0_MNEMONIC=$(skate get ACC0_MNEMONIC) -export ACC1_MNEMONIC=$(skate get ACC1_MNEMONIC) -export CHAIN_ID=$(skate get CHAIN_ID) -export DENOM=$(skate get DENOM) -export KEYRING=$(skate get KEYRING) -export MONIKER=$(skate get MONIKER) diff --git a/scripts/setup_xcaddy.sh b/scripts/setup_xcaddy.sh deleted file mode 100755 index 13a882eec..000000000 --- a/scripts/setup_xcaddy.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -# Exit immediately if a command exits with a non-zero status. -set -e - -# Function to check if a command exists. -command_exists() { - command -v "$1" >/dev/null 2>&1 -} - -echo "Starting the build process for Caddy with Cloudflare DNS module..." - -# Check if Go is installed -if ! command_exists go; then - echo "Go is not installed. Please install Go before running this script." - exit 1 -fi - -# Set Go environment variables -export GOPATH=$(go env GOPATH) -export GOBIN=$GOPATH/bin -export PATH=$PATH:$GOBIN - -# Install xcaddy if not present -if ! command_exists xcaddy; then - echo "xcaddy not found. Installing xcaddy..." - curl -sSfL https://raw.githubusercontent.com/caddyserver/xcaddy/master/install.sh | bash -s -- -b $GOBIN -fi - -# Build Caddy with the Cloudflare DNS module -echo "Building Caddy with the Cloudflare DNS module..." -xcaddy build --with github.com/caddy-dns/cloudflare -mv caddy ../build/caddy -echo "Caddy has been built successfully with the Cloudflare DNS module." - -# Optional: Move the caddy binary to /usr/local/bin (requires sudo) -# echo "Moving caddy to /usr/local/bin (requires sudo)..." -# sudo mv caddy /usr/local/bin/ - -# echo "Caddy has been installed to /usr/local/bin." diff --git a/scripts/version_bump.sh b/scripts/version_bump.sh deleted file mode 100644 index c918e6c32..000000000 --- a/scripts/version_bump.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -set -e - -# Get the current version from most recent git tag -export VERSION=$(git describe --tags --abbrev=0) - -# Check if the version is a valid semantic version -if ! [[ $VERSION =~ ^v?[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - echo "Invalid version format: $VERSION" - exit 1 -fi - -# Check if the version has already been bumped - diff --git a/workers/handlers/auth.go b/workers/handlers/auth.go new file mode 100644 index 000000000..a41117634 --- /dev/null +++ b/workers/handlers/auth.go @@ -0,0 +1,84 @@ +package handlers + +import ( + "encoding/json" + "fmt" + + "github.com/go-webauthn/webauthn/protocol" + "github.com/labstack/echo/v4" +) + +// ╭───────────────────────────────────────────────────────────╮ +// │ Login Handlers │ +// ╰───────────────────────────────────────────────────────────╯ + +func LoginSubjectStart(e echo.Context) error { + return e.JSON(200, "HandleCredentialAssertion") +} + +func LoginSubjectCheck(e echo.Context) error { + return e.JSON(200, "HandleCredentialAssertion") +} + +func LoginSubjectFinish(e echo.Context) error { + return e.JSON(200, "HandleCredentialAssertion") +} + +// ╭───────────────────────────────────────────────────────────╮ +// │ Register Handlers │ +// ╰───────────────────────────────────────────────────────────╯ + +func RegisterSubjectCheck(e echo.Context) error { + credentialID := e.FormValue("credentialID") + return e.JSON(200, credentialID) +} + +func RegisterSubjectStart(e echo.Context) error { + // Get the serialized credential data from the form + credentialDataJSON := e.FormValue("credentialData") + + // Deserialize the JSON into a temporary struct + var ccr protocol.CredentialCreationResponse + err := json.Unmarshal([]byte(credentialDataJSON), &ccr) + if err != nil { + return e.JSON(500, err.Error()) + } + // + // // Parse the CredentialCreationResponse + // parsedData, err := ccr.Parse() + // if err != nil { + // return e.JSON(500, err.Error()) + // } + // + // // Create the Credential + // // credential := orm.NewCredential(parsedData, e.Request().Host, "") + // + // // Set additional fields + // credential.Controller = "" // Set this to the appropriate controller value + return e.JSON(200, fmt.Sprintf("REGISTER: %s", string(ccr.ID))) +} + +func RegisterSubjectFinish(e echo.Context) error { + // Get the serialized credential data from the form + credentialDataJSON := e.FormValue("credentialData") + + // Deserialize the JSON into a temporary struct + var ccr protocol.CredentialCreationResponse + err := json.Unmarshal([]byte(credentialDataJSON), &ccr) + if err != nil { + return e.JSON(500, err.Error()) + } + // + // // Parse the CredentialCreationResponse + // parsedData, err := ccr.Parse() + // if err != nil { + // return e.JSON(500, err.Error()) + // } + // + // // Create the Credential + // // credential := orm.NewCredential(parsedData, e.Request().Host, "") + // + // // Set additional fields + // credential.Controller = "" // Set this to the appropriate controller value + return e.JSON(200, fmt.Sprintf("REGISTER: %s", string(ccr.ID))) +} diff --git a/pkg/nebula/worker/grant.go b/workers/handlers/openid.go similarity index 96% rename from pkg/nebula/worker/grant.go rename to workers/handlers/openid.go index 77c522171..0f7c8417e 100644 --- a/pkg/nebula/worker/grant.go +++ b/workers/handlers/openid.go @@ -1,4 +1,4 @@ -package worker +package handlers import ( "github.com/labstack/echo/v4" diff --git a/pkg/nebula/worker/sync.go b/workers/handlers/sync.go similarity index 89% rename from pkg/nebula/worker/sync.go rename to workers/handlers/sync.go index 5d009803d..2ff633a17 100644 --- a/pkg/nebula/worker/sync.go +++ b/workers/handlers/sync.go @@ -1,4 +1,4 @@ -package worker +package handlers import "github.com/labstack/echo/v4" diff --git a/workers/routes/client.go b/workers/routes/client.go new file mode 100644 index 000000000..24b886194 --- /dev/null +++ b/workers/routes/client.go @@ -0,0 +1,30 @@ +package routes + +import ( + "github.com/labstack/echo/v4" + + "github.com/onsonr/sonr/nebula/components/auth" + "github.com/onsonr/sonr/nebula/components/home" + "github.com/onsonr/sonr/workers/handlers" +) + +func RegisterClientAPI(e *echo.Echo) { + g1 := e.Group("api") + g1.GET("/register/:subject/start", handlers.RegisterSubjectStart) + g1.POST("/register/:subject/check", handlers.RegisterSubjectCheck) + g1.POST("/register/:subject/finish", handlers.RegisterSubjectFinish) + + g1.GET("/login/:subject/start", handlers.LoginSubjectStart) + g1.POST("/login/:subject/check", handlers.LoginSubjectCheck) + g1.POST("/login/:subject/finish", handlers.LoginSubjectFinish) + + g1.GET("/jwks", handlers.GetJWKS) + g1.GET("/token", handlers.GetToken) + g1.POST("/:origin/grant/:subject", handlers.GrantAuthorization) +} + +func RegisterClientViews(e *echo.Echo) { + e.GET("/home", home.Route) + e.GET("/login", auth.LoginRoute) + e.GET("/register", auth.RegisterRoute) +} diff --git a/workers/routes/proxy.go b/workers/routes/proxy.go new file mode 100644 index 000000000..956fe8d4f --- /dev/null +++ b/workers/routes/proxy.go @@ -0,0 +1,17 @@ +package routes + +import ( + "github.com/labstack/echo/v4" + + "github.com/onsonr/sonr/nebula/components/auth" + "github.com/onsonr/sonr/nebula/components/home" +) + +func RegisterProxyAPI(e *echo.Echo) { +} + +func RegisterProxyViews(e *echo.Echo) { + e.GET("/", home.Route) + e.GET("/login", auth.LoginRoute) + e.GET("/register", auth.RegisterRoute) +} diff --git a/wrangler.toml b/wrangler.toml new file mode 100644 index 000000000..2aca33118 --- /dev/null +++ b/wrangler.toml @@ -0,0 +1,8 @@ +name = "sonr-id" +main = "./cmd/hway/build/worker.mjs" +compatibility_date = "2024-10-07" + +routes = [{ pattern = "sonr.id", custom_domain = true }] + +[build] +command = "make hway-build" diff --git a/x/did/README.md b/x/did/README.md index 8dd3a7772..91ce8c1c2 100644 --- a/x/did/README.md +++ b/x/did/README.md @@ -2,20 +2,6 @@ The Decentralized Identity module is responsible for managing native Sonr Accounts, their derived wallets, and associated user identification information. -## Concepts - -### Account - -An Account represents a user's identity within the Sonr ecosystem. It includes information such as the user's public key, associated wallets, and other identification details. - -### Decentralized Identifier (DID) - -A Decentralized Identifier (DID) is a unique identifier that is created, owned, and controlled by the user. It is used to establish a secure and verifiable digital identity. - -### Verifiable Credential (VC) - -A Verifiable Credential (VC) is a digital statement that can be cryptographically verified. It contains claims about a subject (e.g., a user) and is issued by a trusted authority. - ## State Specify and describe structures expected to marshalled into the store, and their keys @@ -71,3 +57,15 @@ Acceptance tests. ## Appendix Supplementary details referenced elsewhere within the spec. + +### Account + +An Account represents a user's identity within the Sonr ecosystem. It includes information such as the user's public key, associated wallets, and other identification details. + +### Decentralized Identifier (DID) + +A Decentralized Identifier (DID) is a unique identifier that is created, owned, and controlled by the user. It is used to establish a secure and verifiable digital identity. + +### Verifiable Credential (VC) + +A Verifiable Credential (VC) is a digital statement that can be cryptographically verified. It contains claims about a subject (e.g., a user) and is issued by a trusted authority. diff --git a/x/did/types/params.go b/x/did/types/params.go index 309248c95..af24005a5 100644 --- a/x/did/types/params.go +++ b/x/did/types/params.go @@ -4,10 +4,10 @@ import ( "encoding/json" fmt "fmt" - "github.com/onsonr/sonr/pkg/orm/keyalgorithm" - "github.com/onsonr/sonr/pkg/orm/keycurve" - "github.com/onsonr/sonr/pkg/orm/keyencoding" - "github.com/onsonr/sonr/pkg/orm/keyrole" + "github.com/onsonr/sonr/internal/orm/keyalgorithm" + "github.com/onsonr/sonr/internal/orm/keycurve" + "github.com/onsonr/sonr/internal/orm/keyencoding" + "github.com/onsonr/sonr/internal/orm/keyrole" ) // DefaultParams returns default module parameters. diff --git a/x/vault/README.md b/x/vault/README.md index 8bee0b21d..8f785335d 100644 --- a/x/vault/README.md +++ b/x/vault/README.md @@ -4,6 +4,62 @@ The Vault module is responsible for the management of IPFS deployed Decentralize ## Concepts +## State + +Specify and describe structures expected to marshalled into the store, and their keys + +### Account State + +The Account state includes the user's public key, associated wallets, and other identification details. It is stored using the user's DID as the key. + +### Credential State + +The Credential state includes the claims about a subject and is stored using the credential ID as the key. + +## State Transitions + +Standard state transition operations triggered by hooks, messages, etc. + +## Messages + +Specify message structure(s) and expected state machine behaviour(s). + +## Begin Block + +Specify any begin-block operations. + +## End Block + +Specify any end-block operations. + +## Hooks + +Describe available hooks to be called by/from this module. + +## Events + +List and describe event tags used. + +## Client + +List and describe CLI commands and gRPC and REST endpoints. + +## Params + +List all module parameters, their types (in JSON) and identitys. + +## Future Improvements + +Describe future improvements of this module. + +## Tests + +Acceptance tests. + +## Appendix + +Supplementary details referenced elsewhere within the spec. + | Concept | Description | | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Decentralized Web Node (DWN) | A decentralized, distributed, and secure network of nodes that store and share data. It is a decentralized alternative to traditional web hosting services. | @@ -13,9 +69,3 @@ The Vault module is responsible for the management of IPFS deployed Decentralize | WebAuthn (Web Authentication) | A set of APIs that allow websites to request user authentication using biometric or non-biometric factors. | | WebAssembly (Web Assembly) | A binary instruction format for a stack-based virtual machine. | | Verifiable Credential (VC) | A digital statement that can be cryptographically verified. | - -## Operations - -[View on Eraser![](https://app.eraser.io/workspace/ZFigXnzF1bkQR1VBq7Mz/preview?elements=_hAjUxIKPzF4ffIL4Ow_9w&type=embed)](https://app.eraser.io/workspace/ZFigXnzF1bkQR1VBq7Mz?elements=_hAjUxIKPzF4ffIL4Ow_9w) - -View on Eraser
diff --git a/x/vault/keeper/assembly.go b/x/vault/keeper/assembly.go index 4c0c1f1cf..5a7549a20 100644 --- a/x/vault/keeper/assembly.go +++ b/x/vault/keeper/assembly.go @@ -5,7 +5,7 @@ import ( "time" sdk "github.com/cosmos/cosmos-sdk/types" - dwngen "github.com/onsonr/sonr/pkg/dwn/gen" + dwngen "github.com/onsonr/sonr/internal/dwn/gen" "github.com/onsonr/sonr/x/vault/types" ) diff --git a/x/vault/types/params.go b/x/vault/types/params.go index 0c028e4d9..7c0fee1e3 100644 --- a/x/vault/types/params.go +++ b/x/vault/types/params.go @@ -3,7 +3,7 @@ package types import ( "encoding/json" - "github.com/onsonr/sonr/pkg/orm" + "github.com/onsonr/sonr/internal/orm" ) // DefaultParams returns default module parameters. diff --git a/x/vault/types/vault.go b/x/vault/types/vault.go index 2726c0ff8..0e039147d 100644 --- a/x/vault/types/vault.go +++ b/x/vault/types/vault.go @@ -3,8 +3,8 @@ package types import ( "github.com/ipfs/boxo/files" - "github.com/onsonr/sonr/pkg/dwn" - dwngen "github.com/onsonr/sonr/pkg/dwn/gen" + "github.com/onsonr/sonr/internal/dwn" + dwngen "github.com/onsonr/sonr/internal/dwn/gen" ) type Vault struct {