package main import ( "fmt" "syscall/js" "go.jolheiser.com/go-spectre" ) const defaultScoper = "com.lyndir.masterpassword" var Scoper string //go:generate go build -ldflags "-X 'main.Scoper=$PWA_SPECTRE_SCOPER'" -o ../assets/spectre.wasm func main() { if Scoper == "" { Scoper = defaultScoper } scoper := spectre.SimpleScoper{ Key: Scoper, } js.Global().Set("spectre", spectreWrapper(scoper)) js.Global().Set("defaultScoper", Scoper == defaultScoper) fmt.Println("Spectre Init") <-make(chan struct{}) } func spectreWrapper(scoper spectre.Scoper) js.Func { spectreFunc := js.FuncOf(func(this js.Value, args []js.Value) interface{} { if len(args) != 2 { return "Invalid number of arguments" } s, err := spectre.New(args[0].String(), args[1].String(), spectre.WithScoper(scoper)) if err != nil { return err.Error() } return map[string]interface{}{ // Site(site, counter, scope, template) "Site": js.FuncOf(func(this js.Value, args []js.Value) interface{} { if len(args) != 4 { return "Invalid number of arguments" } scope, err := spectre.ParseScope(args[2].String()) if err != nil { return err.Error() } template, err := spectre.ParseTemplate(args[3].String()) if err != nil { return err.Error() } return s.Site(args[0].String(), spectre.WithCounter(args[1].Int()), spectre.WithScope(scope), spectre.WithTemplate(template), ) }), } }) return spectreFunc }