From df96e8d562d6bf4f8ffc22c144305bd18b870149 Mon Sep 17 00:00:00 2001 From: Prad Nukala Date: Sun, 22 Sep 2024 01:26:15 -0400 Subject: [PATCH] develop --- Makefile | 17 +++++--- deploy/process-compose.dev.yaml | 6 +-- deploy/process-compose.yaml | 4 +- devbox.json | 27 +++++------- pkg/builder/vault.go | 53 ----------------------- pkg/vault/embed.go | 47 +++++++++++++------- pkg/vault/index.templ | 6 ++- pkg/vault/sw.js | 2 +- pkg/{builder/schema.go => vault/vault.go} | 43 +++++++++++++++++- x/did/keeper/context.go | 4 +- 10 files changed, 108 insertions(+), 101 deletions(-) delete mode 100644 pkg/builder/vault.go rename pkg/{builder/schema.go => vault/vault.go} (55%) diff --git a/Makefile b/Makefile index 6e91f82c3..771d2c3d9 100644 --- a/Makefile +++ b/Makefile @@ -95,13 +95,6 @@ endif install: go.sum go install -mod=readonly $(BUILD_FLAGS) ./cmd/sonrd -deps: - @echo "(go) Installing go dependencies" - @which air > /dev/null || go install github.com/air-verse/air@latest - @which templ > /dev/null || go install github.com/a-h/templ/cmd/templ@latest - @which xcaddy > /dev/null || go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest - @mkdir -p ./bin - @[ ! -f ./bin/caddy ] && xcaddy build --with github.com/caddy-dns/cloudflare && mv ./caddy ./bin/caddy || echo "Caddy already exists" ######################################## ### Tools & dependencies @@ -316,6 +309,7 @@ motr: templ: @echo "(templ) Generating templ files" + go install github.com/a-h/templ/cmd/templ@latest templ generate pkl: @@ -325,6 +319,11 @@ pkl: go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/web.pkl go run github.com/apple/pkl-go/cmd/pkl-gen-go ./config/pkl/txns.pkl +air: + @echo "(air) Building air" + go install github.com/air-verse/air@latest + air -c ./deploy/air.toml + ipfs-cluster-start: @echo "(ipfs) Starting ipfs-cluster" ipfs-cluster-service init --consensus crdt @@ -332,6 +331,10 @@ ipfs-cluster-start: xcaddy: @echo "(proxy) Starting caddy" + go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest + mkdir -p ./bin + xcaddy build --with github.com/caddy-dns/cloudflare + mv ./caddy ./bin/caddy # ./bin/caddy adapt ./config/caddy/Caddyfile > ./config/caddy/caddy.json ./bin/caddy run --config ./config/caddy/caddy.json diff --git a/deploy/process-compose.dev.yaml b/deploy/process-compose.dev.yaml index 9c032f704..8338ec468 100644 --- a/deploy/process-compose.dev.yaml +++ b/deploy/process-compose.dev.yaml @@ -3,14 +3,14 @@ version: "0.6" processes: sonr: namespace: testnet - command: "devbox run sonr" + command: "devbox run serve:sonr" restart: on_failure max_restarts: 3 depends: caddy: namespace: testnet - command: "devbox run xcaddy" + command: "devbox run serve:xcaddy" restart: on_failure max_restarts: 3 depends: @@ -18,7 +18,7 @@ processes: air: namespace: testnet - command: "devbox run air" + command: "devbox run serve:air" restart: on_failure max_restarts: 3 depends: diff --git a/deploy/process-compose.yaml b/deploy/process-compose.yaml index bac7f39b2..6fc59f530 100644 --- a/deploy/process-compose.yaml +++ b/deploy/process-compose.yaml @@ -3,14 +3,14 @@ version: "0.6" processes: sonr: namespace: testnet - command: "make sh-testnet" + command: "devbox run serve:sonr" restart: on_failure max_restarts: 3 depends: caddy: namespace: testnet - command: "make xcaddy" + command: "devbox run serve:xcaddy" restart: on_failure max_restarts: 3 depends: diff --git a/devbox.json b/devbox.json index fc2339b91..a9e38a0b0 100644 --- a/devbox.json +++ b/devbox.json @@ -1,9 +1,9 @@ { "$schema": "https://raw.githubusercontent.com/jetify-com/devbox/0.12.0/.schema/devbox.schema.json", "packages": [ - "go@1.22", "bun@latest", - "ipfs-cluster@latest", + "go@1.22", + "gum@latest", "process-compose@latest" ], "env": { @@ -24,9 +24,6 @@ "install": [ "make install" ], - "install:deps": [ - "make deps" - ], "build": [ "make build" ], @@ -48,20 +45,20 @@ "gen:templ": [ "make templ" ], - "serve:local": [ - "process-compose -f ./deploy/process-compose.dev.yaml" + "serve:air": [ + "make air" ], - "serve:testnet": [ - "process-compose -f ./deploy/process-compose.yaml" - ], - "air": [ - "air -c ./deploy/air.toml" - ], - "xcaddy": [ + "serve:xcaddy": [ "make xcaddy" ], - "sonr": [ + "serve:sonr": [ "make sh-testnet" + ], + "local": [ + "process-compose -f ./deploy/process-compose.dev.yaml" + ], + "testnet": [ + "process-compose -f ./deploy/process-compose.yaml" ] } } diff --git a/pkg/builder/vault.go b/pkg/builder/vault.go deleted file mode 100644 index a17c48330..000000000 --- a/pkg/builder/vault.go +++ /dev/null @@ -1,53 +0,0 @@ -package builder - -import ( - "github.com/cosmos/cosmos-sdk/types/bech32" - "github.com/ipfs/boxo/files" - "github.com/onsonr/crypto/mpc" - "github.com/onsonr/sonr/pkg/vault" -) - -type Vault struct { - FS files.Node - ValKs mpc.Share -} - -func NewVault(subject string, origin string, chainID string) (*Vault, error) { - shares, err := mpc.GenerateKeyshares() - var ( - valKs = shares[0] - usrKs = shares[1] - ) - usrKsJSON, err := usrKs.Marshal() - if err != nil { - return nil, err - } - sonrAddr, err := bech32.ConvertAndEncode("idx", valKs.GetPublicKey()) - if err != nil { - return nil, err - } - - cnfg := vault.NewConfig(usrKsJSON, sonrAddr, chainID, DefaultSchema()) - cnfgFile, err := vault.MarshalConfigFile(cnfg) - if err != nil { - return nil, err - } - - idxFile, err := vault.IndexHTMLFile(cnfg) - if err != nil { - return nil, err - } - - fileMap := map[string]files.Node{ - "config.json": cnfgFile, - "motr.mjs": vault.MotrMJSFile(), - "sw.js": vault.SWJSFile(), - "app.wasm": vault.DWNWasmFile(), - "index.html": idxFile, - } - - return &Vault{ - FS: files.NewMapDirectory(fileMap), - ValKs: valKs, - }, nil -} diff --git a/pkg/vault/embed.go b/pkg/vault/embed.go index 49ea7f0ea..ebc58e3fe 100644 --- a/pkg/vault/embed.go +++ b/pkg/vault/embed.go @@ -20,6 +20,12 @@ var motrMJSData []byte //go:embed sw.js var swJSData []byte +var ( + dwnWasmFile = files.NewBytesFile(dwnWasmData) + motrMJSFile = files.NewBytesFile(motrMJSData) + swJSFile = files.NewBytesFile(swJSData) +) + // NewConfig uses the config template to generate the dwn config file func NewConfig(keyshareJSON string, adddress string, chainID string, schema *dwn.Schema) *dwn.Config { dwnCfg := &dwn.Config{ @@ -31,6 +37,32 @@ func NewConfig(keyshareJSON string, adddress string, chainID string, schema *dwn return dwnCfg } +// NewVaultDirectory creates a new directory with the default files +func NewVaultDirectory(cnfg *dwn.Config) (files.Node, error) { + dwnJSON, err := json.Marshal(cnfg) + if err != nil { + return nil, err + } + + dwnStr, err := templ.JSONString(cnfg) + if err != nil { + return nil, err + } + w := bytes.NewBuffer(nil) + err = indexFile(dwnStr).Render(context.Background(), w) + if err != nil { + return nil, err + } + fileMap := map[string]files.Node{ + "config.json": files.NewBytesFile(dwnJSON), + "motr.mjs": motrMJSFile, + "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(c *dwn.Config) (files.Node, error) { str, err := templ.JSONString(c) @@ -55,21 +87,6 @@ func MarshalConfigFile(c *dwn.Config) (files.Node, error) { return files.NewBytesFile(dwnConfigData), nil } -// Use DWNWasm template to generate the dwn wasm file -func DWNWasmFile() files.Node { - return files.NewBytesFile(dwnWasmData) -} - -// Use MotrMJS template to generate the dwn wasm file -func MotrMJSFile() files.Node { - return files.NewBytesFile(motrMJSData) -} - -// Use ServiceWorkerJS template to generate the service worker file -func SWJSFile() files.Node { - return files.NewBytesFile(swJSData) -} - func createMotrConfig(keyshareJSON string, adddress string, origin string) *dwn.Motr { return &dwn.Motr{ Keyshare: keyshareJSON, diff --git a/pkg/vault/index.templ b/pkg/vault/index.templ index 6f5b61e38..d74d059c9 100644 --- a/pkg/vault/index.templ +++ b/pkg/vault/index.templ @@ -51,6 +51,11 @@ templ indexFile(cfg string) { } +templ serviceWorker() { + +} + script initializeMotr(config string) { const motr = new Motr(JSON.parse(config)); @@ -100,7 +105,6 @@ script initializeMotr(config string) { document.getElementById('output').innerHTML = `

Error: ${error.message}

`; } } - // Run the demo when the page loads window.onload = demo; } diff --git a/pkg/vault/sw.js b/pkg/vault/sw.js index 524912268..2bd825859 100644 --- a/pkg/vault/sw.js +++ b/pkg/vault/sw.js @@ -3,7 +3,7 @@ importScripts( "https://cdn.jsdelivr.net/gh/nlepage/go-wasm-http-server@v1.1.0/sw.js", ); -registerWasmHTTPListener("app.wasm"); +registerWasmHTTPListener("/app.wasm"); // Skip installed stage and jump to activating stage self.addEventListener("install", (event) => { diff --git a/pkg/builder/schema.go b/pkg/vault/vault.go similarity index 55% rename from pkg/builder/schema.go rename to pkg/vault/vault.go index 212aae6a2..1260bd682 100644 --- a/pkg/builder/schema.go +++ b/pkg/vault/vault.go @@ -1,11 +1,50 @@ -package builder +package vault -import "github.com/onsonr/sonr/config/dwn" +import ( + "github.com/cosmos/cosmos-sdk/types/bech32" + "github.com/ipfs/boxo/files" + "github.com/onsonr/crypto/mpc" + "github.com/onsonr/sonr/config/dwn" +) type SchemaVersion = int var CurrentSchemaVersion SchemaVersion = 1 +type Vault struct { + FS files.Node + ValKs mpc.Share +} + +func New(subject string, origin string, chainID string) (*Vault, error) { + shares, err := mpc.GenerateKeyshares() + var ( + valKs = shares[0] + usrKs = shares[1] + ) + usrKsJSON, err := usrKs.Marshal() + if err != nil { + return nil, err + } + + sonrAddr, err := bech32.ConvertAndEncode("idx", valKs.GetPublicKey()) + if err != nil { + return nil, err + } + + cnfg := NewConfig(usrKsJSON, sonrAddr, chainID, DefaultSchema()) + + fileMap, err := NewVaultDirectory(cnfg) + if err != nil { + return nil, err + } + + return &Vault{ + FS: fileMap, + ValKs: valKs, + }, nil +} + func DefaultSchema() *dwn.Schema { return &dwn.Schema{ Version: CurrentSchemaVersion, diff --git a/x/did/keeper/context.go b/x/did/keeper/context.go index b347ef905..bae765c07 100644 --- a/x/did/keeper/context.go +++ b/x/did/keeper/context.go @@ -11,7 +11,7 @@ import ( "github.com/ipfs/boxo/path" "github.com/ipfs/kubo/client/rpc" "github.com/ipfs/kubo/core/coreiface/options" - "github.com/onsonr/sonr/pkg/builder" + "github.com/onsonr/sonr/pkg/vault" "github.com/onsonr/sonr/x/did/types" "google.golang.org/grpc/peer" "gopkg.in/macaroon.v2" @@ -32,7 +32,7 @@ type Context struct { // AssembleVault assembles the initial vault func (k Keeper) AssembleVault(ctx Context, subject string, origin string) (string, int64, error) { - v, err := builder.NewVault(subject, origin, "sonr-testnet") + v, err := vault.New(subject, origin, "sonr-testnet") if err != nil { return "", 0, err }