Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • elixxir/xxdk-wasm
1 result
Show changes
Commits on Source (16)
Showing
with 210 additions and 176 deletions
......@@ -38,7 +38,6 @@ wasm-test:
- tags
script:
- export PATH=/root/go/bin:$PATH
- echo > utils/utils_js.s
- go mod vendor
- unset SSH_PRIVATE_KEY
- unset $(env | grep '=' | awk -F= '{print $1}' | grep -v PATH | grep -v GO | grep -v HOME)
......
......@@ -11,6 +11,7 @@ build:
GOOS=js GOARCH=wasm go build ./...
update_release:
GOFLAGS="" go get gitlab.com/elixxir/wasm-utils@release
GOFLAGS="" go get gitlab.com/xx_network/primitives@release
GOFLAGS="" go get gitlab.com/elixxir/primitives@release
GOFLAGS="" go get gitlab.com/xx_network/crypto@release
......@@ -18,11 +19,12 @@ update_release:
GOFLAGS="" go get -d gitlab.com/elixxir/client/v4@release
update_master:
GOFLAGS="" go get -d gitlab.com/elixxir/client@master
GOFLAGS="" go get gitlab.com/elixxir/crypto@master
GOFLAGS="" go get gitlab.com/elixxir/wasm-utils@master
GOFLAGS="" go get gitlab.com/xx_network/primitives@master
GOFLAGS="" go get gitlab.com/elixxir/primitives@master
GOFLAGS="" go get gitlab.com/xx_network/crypto@master
GOFLAGS="" go get gitlab.com/xx_network/primitives@master
GOFLAGS="" go get gitlab.com/elixxir/crypto@master
GOFLAGS="" go get -d gitlab.com/elixxir/client/v4@master
binary:
GOOS=js GOARCH=wasm go build -ldflags '-w -s' -trimpath -o xxdk.wasm main.go
......@@ -34,11 +36,16 @@ worker_binaries:
binaries: binary worker_binaries
wasmException = "vendor/gitlab.com/elixxir/wasm-utils/exception"
wasm_tests:
cp utils/utils_js.s utils/utils_js.s.bak
> utils/utils_js.s
cp $(wasmException)/throw_js.s $(wasmException)/throw_js.s.bak
cp $(wasmException)/throws.go $(wasmException)/throws.go.bak
> $(wasmException)/throw_js.s
cp $(wasmException)/throws.dev $(wasmException)/throws.go
-GOOS=js GOARCH=wasm go test -v ./...
mv utils/utils_js.s.bak utils/utils_js.s
mv $(wasmException)/throw_js.s.bak $(wasmException)/throw_js.s
mv $(wasmException)/throws.go.bak $(wasmException)/throws.go
go_tests:
go test ./... -v
......
......@@ -77,7 +77,7 @@ global.Go = class {
go: {
// ...
// func Throw(exception string, message string)
'gitlab.com/elixxir/xxdk-wasm/utils.throw': (sp) => {
'gitlab.com/elixxir/wasm-utils/utils.throw': (sp) => {
const exception = loadString(sp + 8)
const message = loadString(sp + 24)
throw globalThis[exception](message)
......
......@@ -7,8 +7,8 @@ require (
github.com/hack-pad/go-indexeddb v0.2.0
github.com/pkg/errors v0.9.1
github.com/spf13/jwalterweatherman v1.1.0
gitlab.com/elixxir/client/v4 v4.6.3
gitlab.com/elixxir/crypto v0.0.7-0.20230413162806-a99ec4bfea32
gitlab.com/elixxir/client/v4 v4.6.4-0.20230519223444-1d981a1d95aa
gitlab.com/elixxir/crypto v0.0.7-0.20230519214355-b10a9f95d395
gitlab.com/elixxir/primitives v0.0.3-0.20230214180039-9a25e2d3969c
gitlab.com/xx_network/crypto v0.0.5-0.20230214003943-8a09396e95dd
gitlab.com/xx_network/primitives v0.0.4-0.20230310205521-c440e68e34c4
......@@ -22,6 +22,7 @@ require (
github.com/badoux/checkmail v1.2.1 // indirect
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
github.com/cloudflare/circl v1.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect
github.com/elliotchance/orderedmap v1.4.0 // indirect
github.com/fsnotify/fsnotify v1.5.4 // indirect
......@@ -48,6 +49,7 @@ require (
github.com/pelletier/go-toml v1.9.5 // indirect
github.com/pelletier/go-toml/v2 v2.0.2 // indirect
github.com/pkg/profile v1.6.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rs/cors v1.8.2 // indirect
github.com/sethvargo/go-diceware v0.3.0 // indirect
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect
......@@ -57,14 +59,16 @@ require (
github.com/spf13/cobra v1.7.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.12.0 // indirect
github.com/stretchr/testify v1.8.2 // indirect
github.com/subosito/gotenv v1.4.0 // indirect
github.com/ttacon/builder v0.0.0-20170518171403-c099f663e1c2 // indirect
github.com/ttacon/libphonenumber v1.2.1 // indirect
github.com/tyler-smith/go-bip39 v1.1.0 // indirect
github.com/zeebo/blake3 v0.2.3 // indirect
gitlab.com/elixxir/bloomfilter v0.0.0-20230315224936-a4459418f300 // indirect
gitlab.com/elixxir/comms v0.0.4-0.20230310205528-f06faa0d2f0b // indirect
gitlab.com/elixxir/ekv v0.2.1 // indirect
gitlab.com/elixxir/bloomfilter v0.0.0-20230322223210-fa84f6842de8 // indirect
gitlab.com/elixxir/comms v0.0.4-0.20230519211512-4a998f4b0938 // indirect
gitlab.com/elixxir/ekv v0.3.1-0.20230504190918-f5e96603c2e0 // indirect
gitlab.com/elixxir/wasm-utils v0.0.0-20230519212008-29635852d8c7 // indirect
gitlab.com/xx_network/comms v0.0.4-0.20230214180029-5387fb85736d // indirect
gitlab.com/xx_network/ring v0.0.3-0.20220902183151-a7d3b15bc981 // indirect
gitlab.com/yawning/bsaes.git v0.0.0-20190805113838-0a714cd429ec // indirect
......
......@@ -509,20 +509,42 @@ github.com/zeebo/pcg v1.0.1 h1:lyqfGeWiv4ahac6ttHs+I5hwtH/+1mrhlCtVNQM2kHo=
github.com/zeebo/pcg v1.0.1/go.mod h1:09F0S9iiKrwn9rlI5yjLkmrug154/YRW6KnnXVDM/l4=
gitlab.com/elixxir/bloomfilter v0.0.0-20230315224936-a4459418f300 h1:oF3Pkf5NBb48KB89Q4sQXKQCIsWp1IVsqKWHWFsfBRc=
gitlab.com/elixxir/bloomfilter v0.0.0-20230315224936-a4459418f300/go.mod h1:1X8gRIAPDisS3W6Vtr/ymiUmZMJUIwDV1o5DEOo/pzw=
gitlab.com/elixxir/bloomfilter v0.0.0-20230322223210-fa84f6842de8 h1:uAFCyBkXprQoPkcDDfxXtaMyL5x+xSGrAWzR907xROQ=
gitlab.com/elixxir/bloomfilter v0.0.0-20230322223210-fa84f6842de8/go.mod h1:1X8gRIAPDisS3W6Vtr/ymiUmZMJUIwDV1o5DEOo/pzw=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230413171204-002612660098 h1:bdwXgEa0i9KpLiKQdhv6MEWAYLt3MsbNuIzFanVpWLY=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230413171204-002612660098/go.mod h1:G+lN+LvQPGcm5BQnrhnqT1xiRIAzH3OffAM+5oI9SUg=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230425190953-cd51598e9245 h1:pBwoSYD+BFIr5Wyc+PQhqm+fZGsRSNXCpF0z1cQQzK8=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230425190953-cd51598e9245/go.mod h1:G+lN+LvQPGcm5BQnrhnqT1xiRIAzH3OffAM+5oI9SUg=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230511215110-b43e18a47875 h1:u9DlU8xAk0rTvguhWK+6D/MfLHdR+jlDTfGJjiszJDE=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230511215110-b43e18a47875/go.mod h1:dLKU2zSWrZLk/fomAtt1DFGgpTHQAfPdxdXNp3EtRZU=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230512234533-17b97e5a36cc h1:f5lwmwejXTerTUjro9d5Ws1mKGD6ChXHMaBMhB3OhgA=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230512234533-17b97e5a36cc/go.mod h1:dLKU2zSWrZLk/fomAtt1DFGgpTHQAfPdxdXNp3EtRZU=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230515171506-7294c8dd22fa h1:HCt2CMRWlT19OYQkC2xcU2+Saa1ZcH2y4IQeqg3NcX0=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230515171506-7294c8dd22fa/go.mod h1:dLKU2zSWrZLk/fomAtt1DFGgpTHQAfPdxdXNp3EtRZU=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230516202225-832a99a19553 h1:jdEpGIKNmFHMVmqIOnXFUeWObmReM0IOMov4eqD8OY8=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230516202225-832a99a19553/go.mod h1:dLKU2zSWrZLk/fomAtt1DFGgpTHQAfPdxdXNp3EtRZU=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230519185423-524554d6cfd1 h1:Uksd5R1Hk3j7RJqWDyanmD8fOQTL2bBfH0/F8vC6ysI=
gitlab.com/elixxir/client/v4 v4.6.2-0.20230519185423-524554d6cfd1/go.mod h1:dLKU2zSWrZLk/fomAtt1DFGgpTHQAfPdxdXNp3EtRZU=
gitlab.com/elixxir/client/v4 v4.6.3 h1:oUsm5cn2Vnfqz+xwGYKrqFkPNN3sDAyp00EPGhUIA5E=
gitlab.com/elixxir/client/v4 v4.6.3/go.mod h1:G+lN+LvQPGcm5BQnrhnqT1xiRIAzH3OffAM+5oI9SUg=
gitlab.com/elixxir/client/v4 v4.6.4-0.20230519223444-1d981a1d95aa h1:PJylTJ4ol3p3Si9cipFmhhWo0YD4VXMrbHQODJ9ACKE=
gitlab.com/elixxir/client/v4 v4.6.4-0.20230519223444-1d981a1d95aa/go.mod h1:rDC4sLKgj5kuuiJRp8bD1M7r0mlb0ib7q8q1Euct9/k=
gitlab.com/elixxir/comms v0.0.4-0.20230310205528-f06faa0d2f0b h1:8AVK93UEs/aufoqtFgyMVt9gf0oJ8F4pA60ZvEVvG+s=
gitlab.com/elixxir/comms v0.0.4-0.20230310205528-f06faa0d2f0b/go.mod h1:z+qW0D9VpY5QKTd7wRlb5SK4kBNqLYsa4DXBcUXue9Q=
gitlab.com/elixxir/comms v0.0.4-0.20230519211512-4a998f4b0938 h1:f27+QUFiGWrprKm+fstOg3ABkYLpWcZi3+8Lf5eDnqY=
gitlab.com/elixxir/comms v0.0.4-0.20230519211512-4a998f4b0938/go.mod h1:z+qW0D9VpY5QKTd7wRlb5SK4kBNqLYsa4DXBcUXue9Q=
gitlab.com/elixxir/crypto v0.0.7-0.20230413162806-a99ec4bfea32 h1:Had0F7rMPgJJ2BUZoFNgeJq33md9RpV15nvd08Uxdzc=
gitlab.com/elixxir/crypto v0.0.7-0.20230413162806-a99ec4bfea32/go.mod h1:/SLOlvkYVVJf6IU+vEjMLnS7cjjcoTlPV45g6tv6INc=
gitlab.com/elixxir/crypto v0.0.7-0.20230519214355-b10a9f95d395 h1:aOoL0oyocmLUbCBXgF52QhtBXvAi+eXM1d0DrDsFkIg=
gitlab.com/elixxir/crypto v0.0.7-0.20230519214355-b10a9f95d395/go.mod h1:IYInxKr5Q7EH3oNhg1QX1/sTTRNi7L0JkcyfdRegoio=
gitlab.com/elixxir/ekv v0.2.1 h1:dtwbt6KmAXG2Tik5d60iDz2fLhoFBgWwST03p7T+9Is=
gitlab.com/elixxir/ekv v0.2.1/go.mod h1:USLD7xeDnuZEavygdrgzNEwZXeLQJK/w1a+htpN+JEU=
gitlab.com/elixxir/ekv v0.3.1-0.20230504190918-f5e96603c2e0 h1:4d2vg4Sh3N5mR1ta152cg6ybPWHYqsPtkEyJKaDYGnw=
gitlab.com/elixxir/ekv v0.3.1-0.20230504190918-f5e96603c2e0/go.mod h1:EMaUQrsOxvEPQ0/8V/PSkGqFmEC2axBG/uqY0oW2uJM=
gitlab.com/elixxir/primitives v0.0.3-0.20230214180039-9a25e2d3969c h1:muG8ff95woeVVwQoJHCEclxBFB22lc7EixPylEkYDRU=
gitlab.com/elixxir/primitives v0.0.3-0.20230214180039-9a25e2d3969c/go.mod h1:phun4PLkHJA6wcL4JIhhxZztrmCyJHWPNppBP3DUD2Y=
gitlab.com/elixxir/wasm-utils v0.0.0-20230519212008-29635852d8c7 h1:3pimSfFr0uy3OhOMM9IHXZBeG2xJX0nor2yph9xx3oM=
gitlab.com/elixxir/wasm-utils v0.0.0-20230519212008-29635852d8c7/go.mod h1:wB7Vh/7LWUm8wYRBSd+6lxfpk4CnDaHTkLCIVKfL2TA=
gitlab.com/xx_network/comms v0.0.4-0.20230214180029-5387fb85736d h1:AZf2h0fxyO1KxhZPP9//jG3Swb2BcuKbxtNXJgooLss=
gitlab.com/xx_network/comms v0.0.4-0.20230214180029-5387fb85736d/go.mod h1:8cwPyH6G8C4qf/U5KDghn1ksOh79MrNqthjKDrfvbXY=
gitlab.com/xx_network/crypto v0.0.5-0.20230214003943-8a09396e95dd h1:IleH6U5D/c2zF6YL/z3cBKqBPnI5ApNMCtU7ia4t228=
......
......@@ -10,8 +10,9 @@
package main
import (
"crypto/ed25519"
"encoding/json"
"time"
"github.com/pkg/errors"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/v4/channels"
......@@ -24,7 +25,6 @@ import (
"gitlab.com/elixxir/xxdk-wasm/worker"
"gitlab.com/xx_network/crypto/csprng"
"gitlab.com/xx_network/primitives/id"
"time"
)
var zeroUUID = []byte{0, 0, 0, 0, 0, 0, 0, 0}
......@@ -71,8 +71,7 @@ func (m *manager) newWASMEventModelCB(data []byte) ([]byte, error) {
"failed to JSON unmarshal Cipher from main thread: %+v", err)
}
m.model, err = NewWASMEventModel(msg.DatabaseName, encryption,
m.messageReceivedCallback, m.deletedMessageCallback, m.mutedUserCallback)
m.model, err = NewWASMEventModel(msg.DatabaseName, encryption, m)
if err != nil {
return []byte(err.Error()), nil
}
......@@ -80,12 +79,8 @@ func (m *manager) newWASMEventModelCB(data []byte) ([]byte, error) {
return []byte{}, nil
}
// messageReceivedCallback sends calls to the channels.MessageReceivedCallback
// in the main thread.
//
// storeEncryptionStatus adhere to the channels.MessageReceivedCallback type.
func (m *manager) messageReceivedCallback(
uuid uint64, channelID *id.ID, update bool) {
// MessageReceived implements [bindings.ChannelUICallbacks.MessageReceived].
func (m *manager) MessageReceived(uuid int64, channelID []byte, update bool) {
// Package parameters for sending
msg := &wChannels.MessageReceivedCallbackMessage{
UUID: uuid,
......@@ -102,20 +97,13 @@ func (m *manager) messageReceivedCallback(
m.wtm.SendMessage(wChannels.MessageReceivedCallbackTag, data)
}
// deletedMessageCallback sends calls to the channels.DeletedMessageCallback in
// the main thread.
//
// storeEncryptionStatus adhere to the channels.MessageReceivedCallback type.
func (m *manager) deletedMessageCallback(messageID message.ID) {
m.wtm.SendMessage(wChannels.DeletedMessageCallbackTag, messageID.Marshal())
// MessageDeleted implements [bindings.ChannelUICallbacks.MessageDeleted].
func (m *manager) MessageDeleted(messageID []byte) {
m.wtm.SendMessage(wChannels.DeletedMessageCallbackTag, messageID)
}
// mutedUserCallback sends calls to the channels.MutedUserCallback in the main
// thread.
//
// storeEncryptionStatus adhere to the channels.MessageReceivedCallback type.
func (m *manager) mutedUserCallback(
channelID *id.ID, pubKey ed25519.PublicKey, unmute bool) {
// UserMuted implements [bindings.ChannelUICallbacks.UserMuted].
func (m *manager) UserMuted(channelID, pubKey []byte, unmute bool) {
// Package parameters for sending
msg := &wChannels.MuteUserMessage{
ChannelID: channelID,
......@@ -132,6 +120,12 @@ func (m *manager) mutedUserCallback(
m.wtm.SendMessage(wChannels.MutedUserCallbackTag, data)
}
// NicknameUpdate implements [bindings.ChannelUICallbacks.NicknameUpdate]
func (m *manager) NicknameUpdate(channelIdBytes []byte, nickname string,
exists bool) {
jww.FATAL.Panicf("unimplemented")
}
// joinChannelCB is the callback for wasmModel.JoinChannel. Always returns nil;
// meaning, no response is supplied (or expected).
func (m *manager) joinChannelCB(data []byte) ([]byte, error) {
......@@ -368,7 +362,12 @@ func (m *manager) muteUserCB(data []byte) ([]byte, error) {
"failed to JSON unmarshal %T from main thread: %+v", msg, err)
}
m.model.MuteUser(msg.ChannelID, msg.PubKey, msg.Unmute)
channelID := id.ID{}
err = channelID.UnmarshalJSON(msg.ChannelID)
if err != nil {
return nil, err
}
m.model.MuteUser(&channelID, msg.PubKey, msg.Unmute)
return nil, nil
}
......@@ -15,8 +15,8 @@ import (
"gitlab.com/elixxir/client/v4/channels"
cft "gitlab.com/elixxir/client/v4/channelsFileTransfer"
"gitlab.com/elixxir/crypto/fileTransfer"
"gitlab.com/elixxir/wasm-utils/utils"
"gitlab.com/elixxir/xxdk-wasm/indexedDb/impl"
"gitlab.com/elixxir/xxdk-wasm/utils"
"strings"
"time"
)
......
......@@ -21,14 +21,15 @@ import (
"github.com/pkg/errors"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/v4/bindings"
"gitlab.com/elixxir/client/v4/channels"
"gitlab.com/elixxir/client/v4/cmix/rounds"
cryptoBroadcast "gitlab.com/elixxir/crypto/broadcast"
cryptoChannel "gitlab.com/elixxir/crypto/channel"
"gitlab.com/elixxir/crypto/message"
"gitlab.com/elixxir/wasm-utils/utils"
"gitlab.com/elixxir/xxdk-wasm/indexedDb/impl"
wChannels "gitlab.com/elixxir/xxdk-wasm/indexedDb/worker/channels"
"gitlab.com/elixxir/xxdk-wasm/utils"
"gitlab.com/xx_network/primitives/id"
)
......@@ -38,11 +39,9 @@ import (
// NOTE: This model is NOT thread safe - it is the responsibility of the
// caller to ensure that its methods are called sequentially.
type wasmModel struct {
db *idb.Database
cipher cryptoChannel.Cipher
receivedMessageCB wChannels.MessageReceivedCallback
deletedMessageCB wChannels.DeletedMessageCallback
mutedUserCB wChannels.MutedUserCallback
db *idb.Database
cipher cryptoChannel.Cipher
cbs bindings.ChannelUICallbacks
}
// JoinChannel is called whenever a channel is joined locally.
......@@ -161,8 +160,10 @@ func (w *wasmModel) ReceiveMessage(channelID *id.ID, messageID message.ID,
}
}
channelIDBytes := channelID.Marshal()
msgToInsert := buildMessage(
channelID.Marshal(), messageID.Bytes(), nil, nickname,
channelIDBytes, messageID.Bytes(), nil, nickname,
textBytes, pubKey, dmToken, codeset, timestamp, lease, round.ID, mType,
false, hidden, status)
......@@ -172,7 +173,7 @@ func (w *wasmModel) ReceiveMessage(channelID *id.ID, messageID message.ID,
return 0
}
go w.receivedMessageCB(uuid, channelID, false)
go w.cbs.MessageReceived(int64(uuid), channelIDBytes, false)
return uuid
}
......@@ -199,7 +200,9 @@ func (w *wasmModel) ReceiveReply(channelID *id.ID, messageID,
}
}
msgToInsert := buildMessage(channelID.Marshal(), messageID.Bytes(),
channelIDBytes := channelID.Marshal()
msgToInsert := buildMessage(channelIDBytes, messageID.Bytes(),
replyTo.Bytes(), nickname, textBytes, pubKey, dmToken, codeset,
timestamp, lease, round.ID, mType, hidden, false, status)
......@@ -208,7 +211,7 @@ func (w *wasmModel) ReceiveReply(channelID *id.ID, messageID,
jww.ERROR.Printf("Failed to receive reply: %+v", err)
return 0
}
go w.receivedMessageCB(uuid, channelID, false)
go w.cbs.MessageReceived(int64(uuid), channelIDBytes, false)
return uuid
}
......@@ -235,8 +238,9 @@ func (w *wasmModel) ReceiveReaction(channelID *id.ID, messageID,
}
}
channelIDBytes := channelID.Marshal()
msgToInsert := buildMessage(
channelID.Marshal(), messageID.Bytes(), reactionTo.Bytes(), nickname,
channelIDBytes, messageID.Bytes(), reactionTo.Bytes(), nickname,
textBytes, pubKey, dmToken, codeset, timestamp, lease, round.ID, mType,
false, hidden, status)
......@@ -245,7 +249,7 @@ func (w *wasmModel) ReceiveReaction(channelID *id.ID, messageID,
jww.ERROR.Printf("Failed to receive reaction: %+v", err)
return 0
}
go w.receivedMessageCB(uuid, channelID, false)
go w.cbs.MessageReceived(int64(uuid), channelIDBytes, false)
return uuid
}
......@@ -392,9 +396,7 @@ func (w *wasmModel) updateMessage(currentMsg *Message, messageID *message.ID,
if err != nil {
return 0, err
}
channelID := &id.ID{}
copy(channelID[:], currentMsg.ChannelID)
go w.receivedMessageCB(uuid, channelID, true)
go w.cbs.MessageReceived(int64(uuid), currentMsg.ChannelID, true)
return uuid, nil
}
......@@ -492,7 +494,7 @@ func (w *wasmModel) DeleteMessage(messageID message.ID) error {
return err
}
go w.deletedMessageCB(messageID)
go w.cbs.MessageDeleted(messageID.Bytes())
return nil
}
......@@ -500,7 +502,7 @@ func (w *wasmModel) DeleteMessage(messageID message.ID) error {
// MuteUser is called whenever a user is muted or unmuted.
func (w *wasmModel) MuteUser(
channelID *id.ID, pubKey ed25519.PublicKey, unmute bool) {
go w.mutedUserCB(channelID, pubKey, unmute)
go w.cbs.UserMuted(channelID.Marshal(), pubKey, unmute)
}
// valueToMessage is a helper for converting js.Value to Message.
......
......@@ -11,17 +11,17 @@ package main
import (
"bytes"
"crypto/ed25519"
"encoding/json"
"errors"
"fmt"
cft "gitlab.com/elixxir/client/v4/channelsFileTransfer"
"gitlab.com/elixxir/crypto/fileTransfer"
"os"
"strconv"
"testing"
"time"
cft "gitlab.com/elixxir/client/v4/channelsFileTransfer"
"gitlab.com/elixxir/crypto/fileTransfer"
"github.com/hack-pad/go-indexeddb/idb"
jww "github.com/spf13/jwalterweatherman"
......@@ -30,8 +30,8 @@ import (
cryptoBroadcast "gitlab.com/elixxir/crypto/broadcast"
cryptoChannel "gitlab.com/elixxir/crypto/channel"
"gitlab.com/elixxir/crypto/message"
"gitlab.com/elixxir/wasm-utils/storage"
"gitlab.com/elixxir/xxdk-wasm/indexedDb/impl"
"gitlab.com/elixxir/xxdk-wasm/storage"
"gitlab.com/xx_network/crypto/csprng"
"gitlab.com/xx_network/primitives/id"
"gitlab.com/xx_network/primitives/netTime"
......@@ -42,15 +42,19 @@ func TestMain(m *testing.M) {
os.Exit(m.Run())
}
func dummyReceivedMessageCB(uint64, *id.ID, bool) {}
func dummyDeletedMessageCB(message.ID) {}
func dummyMutedUserCB(*id.ID, ed25519.PublicKey, bool) {}
type dummyCbs struct{}
func (c *dummyCbs) MessageReceived(uuid int64, channelID []byte, update bool) {}
func (c *dummyCbs) UserMuted(channelID []byte, pubKey []byte, unmute bool) {}
func (c *dummyCbs) MessageDeleted(messageId []byte) {}
func (c *dummyCbs) NicknameUpdate(channelIdBytes []byte, nickname string,
exists bool) {
}
// Happy path test for receiving, updating, getting, and deleting a File.
func TestWasmModel_ReceiveFile(t *testing.T) {
testString := "TestWasmModel_ReceiveFile"
m, err := newWASMModel(testString, nil,
dummyReceivedMessageCB, dummyDeletedMessageCB, dummyMutedUserCB)
m, err := newWASMModel(testString, nil, &dummyCbs{})
if err != nil {
t.Fatal(err)
}
......@@ -137,7 +141,7 @@ func TestWasmModel_GetMessage(t *testing.T) {
testMsgId := message.DeriveChannelMessageID(&id.ID{1}, 0, []byte(testString))
eventModel, err := newWASMModel(testString, c,
dummyReceivedMessageCB, dummyDeletedMessageCB, dummyMutedUserCB)
&dummyCbs{})
if err != nil {
t.Fatal(err)
}
......@@ -167,8 +171,7 @@ func TestWasmModel_DeleteMessage(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "TestWasmModel_DeleteMessage"
testMsgId := message.DeriveChannelMessageID(&id.ID{1}, 0, []byte(testString))
eventModel, err := newWASMModel(testString, nil, dummyReceivedMessageCB,
dummyDeletedMessageCB, dummyMutedUserCB)
eventModel, err := newWASMModel(testString, nil, &dummyCbs{})
if err != nil {
t.Fatal(err)
}
......@@ -225,7 +228,7 @@ func Test_wasmModel_UpdateSentStatus(t *testing.T) {
testMsgId := message.DeriveChannelMessageID(
&id.ID{1}, 0, []byte(testString))
eventModel, err2 := newWASMModel(testString, c,
dummyReceivedMessageCB, dummyDeletedMessageCB, dummyMutedUserCB)
&dummyCbs{})
if err2 != nil {
t.Fatal(err)
}
......@@ -292,8 +295,7 @@ func Test_wasmModel_JoinChannel_LeaveChannel(t *testing.T) {
}
t.Run("Test_wasmModel_JoinChannel_LeaveChannel"+cs, func(t *testing.T) {
storage.GetLocalStorage().Clear()
eventModel, err2 := newWASMModel("test", c, dummyReceivedMessageCB,
dummyDeletedMessageCB, dummyMutedUserCB)
eventModel, err2 := newWASMModel("test", c, &dummyCbs{})
if err2 != nil {
t.Fatal(err2)
}
......@@ -347,7 +349,7 @@ func Test_wasmModel_UUIDTest(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := "testHello" + cs
eventModel, err2 := newWASMModel(testString, c,
dummyReceivedMessageCB, dummyDeletedMessageCB, dummyMutedUserCB)
&dummyCbs{})
if err2 != nil {
t.Fatal(err2)
}
......@@ -394,7 +396,7 @@ func Test_wasmModel_DuplicateReceives(t *testing.T) {
t.Run(testString, func(t *testing.T) {
storage.GetLocalStorage().Clear()
eventModel, err := newWASMModel(testString, c,
dummyReceivedMessageCB, dummyDeletedMessageCB, dummyMutedUserCB)
&dummyCbs{})
if err != nil {
t.Fatal(err)
}
......@@ -443,7 +445,7 @@ func Test_wasmModel_deleteMsgByChannel(t *testing.T) {
totalMessages := 10
expectedMessages := 5
eventModel, err := newWASMModel(testString, c,
dummyReceivedMessageCB, dummyDeletedMessageCB, dummyMutedUserCB)
&dummyCbs{})
if err != nil {
t.Fatal(err)
}
......@@ -514,7 +516,7 @@ func TestWasmModel_receiveHelper_UniqueIndex(t *testing.T) {
storage.GetLocalStorage().Clear()
testString := fmt.Sprintf("test_receiveHelper_UniqueIndex_%d", i)
eventModel, err := newWASMModel(testString, c,
dummyReceivedMessageCB, dummyDeletedMessageCB, dummyMutedUserCB)
&dummyCbs{})
if err != nil {
t.Fatal(err)
}
......
......@@ -15,32 +15,27 @@ import (
"github.com/hack-pad/go-indexeddb/idb"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/v4/bindings"
"gitlab.com/elixxir/client/v4/channels"
cryptoChannel "gitlab.com/elixxir/crypto/channel"
"gitlab.com/elixxir/xxdk-wasm/indexedDb/impl"
wChannels "gitlab.com/elixxir/xxdk-wasm/indexedDb/worker/channels"
)
// currentVersion is the current version of the IndexedDb runtime. Used for
// migration purposes.
const currentVersion uint = 2
const currentVersion uint = 1
// NewWASMEventModel returns a [channels.EventModel] backed by a wasmModel.
// The name should be a base64 encoding of the users public key. Returns the
// EventModel based on IndexedDb and the database name as reported by IndexedDb.
func NewWASMEventModel(databaseName string, encryption cryptoChannel.Cipher,
messageReceivedCB wChannels.MessageReceivedCallback,
deletedMessageCB wChannels.DeletedMessageCallback,
mutedUserCB wChannels.MutedUserCallback) (channels.EventModel, error) {
return newWASMModel(databaseName, encryption, messageReceivedCB,
deletedMessageCB, mutedUserCB)
channelsCbs bindings.ChannelUICallbacks) (channels.EventModel, error) {
return newWASMModel(databaseName, encryption, channelsCbs)
}
// newWASMModel creates the given [idb.Database] and returns a wasmModel.
func newWASMModel(databaseName string, encryption cryptoChannel.Cipher,
messageReceivedCB wChannels.MessageReceivedCallback,
deletedMessageCB wChannels.DeletedMessageCallback,
mutedUserCB wChannels.MutedUserCallback) (*wasmModel, error) {
channelsCbs bindings.ChannelUICallbacks) (*wasmModel, error) {
// Attempt to open database object
ctx, cancel := impl.NewContext()
defer cancel()
......@@ -62,14 +57,6 @@ func newWASMModel(databaseName string, encryption cryptoChannel.Cipher,
oldVersion = 1
}
if oldVersion == 1 && newVersion >= 2 {
err := v2Upgrade(db)
if err != nil {
return err
}
oldVersion = 2
}
// if oldVersion == 1 && newVersion >= 2 { v2Upgrade(), oldVersion = 2 }
return nil
})
......@@ -86,11 +73,9 @@ func newWASMModel(databaseName string, encryption cryptoChannel.Cipher,
}
wrapper := &wasmModel{
db: db,
cipher: encryption,
receivedMessageCB: messageReceivedCB,
deletedMessageCB: deletedMessageCB,
mutedUserCB: mutedUserCB,
db: db,
cipher: encryption,
cbs: channelsCbs,
}
return wrapper, nil
}
......@@ -150,15 +135,8 @@ func v1Upgrade(db *idb.Database) error {
return err
}
return nil
}
// v1Upgrade performs the v1 -> v2 database upgrade.
//
// This can never be changed without permanently breaking backwards
// compatibility.
func v2Upgrade(db *idb.Database) error {
_, err := db.CreateObjectStore(fileStoreName, idb.ObjectStoreOptions{
// Build File ObjectStore
_, err = db.CreateObjectStore(fileStoreName, idb.ObjectStoreOptions{
KeyPath: js.ValueOf(pkeyName),
AutoIncrement: false,
})
......
......@@ -13,6 +13,7 @@ import (
"bytes"
"crypto/ed25519"
"encoding/json"
"gitlab.com/xx_network/primitives/netTime"
"strings"
"syscall/js"
"time"
......@@ -25,8 +26,8 @@ import (
"gitlab.com/elixxir/client/v4/dm"
cryptoChannel "gitlab.com/elixxir/crypto/channel"
"gitlab.com/elixxir/crypto/message"
"gitlab.com/elixxir/wasm-utils/utils"
"gitlab.com/elixxir/xxdk-wasm/indexedDb/impl"
"gitlab.com/elixxir/xxdk-wasm/utils"
"gitlab.com/xx_network/primitives/id"
)
......@@ -42,16 +43,16 @@ type wasmModel struct {
// upsertConversation is used for joining or updating a Conversation.
func (w *wasmModel) upsertConversation(nickname string,
pubKey ed25519.PublicKey, partnerToken uint32, codeset uint8,
blocked bool) error {
blockedTimestamp *time.Time) error {
parentErr := errors.New("[DM indexedDB] failed to upsertConversation")
// Build object
newConvo := Conversation{
Pubkey: pubKey,
Nickname: nickname,
Token: partnerToken,
CodesetVersion: codeset,
Blocked: blocked,
Pubkey: pubKey,
Nickname: nickname,
Token: partnerToken,
CodesetVersion: codeset,
BlockedTimestamp: blockedTimestamp,
}
// Convert to jsObject
......@@ -231,11 +232,11 @@ func (w *wasmModel) receiveWrapper(messageID message.ID, parentID *message.ID, n
"[DM indexedDB] Joining conversation with %s", nickname)
convoToUpdate = &Conversation{
Pubkey: partnerKey,
Nickname: nickname,
Token: partnerToken,
CodesetVersion: codeset,
Blocked: false,
Pubkey: partnerKey,
Nickname: nickname,
Token: partnerToken,
CodesetVersion: codeset,
BlockedTimestamp: nil,
}
}
} else {
......@@ -268,7 +269,7 @@ func (w *wasmModel) receiveWrapper(messageID message.ID, parentID *message.ID, n
conversationUpdated := convoToUpdate != nil
if conversationUpdated {
err = w.upsertConversation(convoToUpdate.Nickname, convoToUpdate.Pubkey,
convoToUpdate.Token, convoToUpdate.CodesetVersion, convoToUpdate.Blocked)
convoToUpdate.Token, convoToUpdate.CodesetVersion, convoToUpdate.BlockedTimestamp)
if err != nil {
return 0, err
}
......@@ -349,14 +350,20 @@ func (w *wasmModel) UnblockSender(senderPubKey ed25519.PublicKey) {
// setBlocked is a helper for blocking/unblocking a given Conversation.
func (w *wasmModel) setBlocked(senderPubKey ed25519.PublicKey, isBlocked bool) error {
// Get current Conversation and set blocked
// Get current Conversation and set blocked accordingly
resultConvo, err := w.getConversation(senderPubKey)
if err != nil {
return err
}
var timeBlocked *time.Time
if isBlocked {
blockUser := netTime.Now()
timeBlocked = &blockUser
}
return w.upsertConversation(resultConvo.Nickname, resultConvo.Pubkey,
resultConvo.Token, resultConvo.CodesetVersion, isBlocked)
resultConvo.Token, resultConvo.CodesetVersion, timeBlocked)
}
// GetConversation returns the conversation held by the model (receiver).
......@@ -369,11 +376,11 @@ func (w *wasmModel) GetConversation(senderPubKey ed25519.PublicKey) *dm.ModelCon
}
return &dm.ModelConversation{
Pubkey: resultConvo.Pubkey,
Nickname: resultConvo.Nickname,
Token: resultConvo.Token,
CodesetVersion: resultConvo.CodesetVersion,
Blocked: resultConvo.Blocked,
Pubkey: resultConvo.Pubkey,
Nickname: resultConvo.Nickname,
Token: resultConvo.Token,
CodesetVersion: resultConvo.CodesetVersion,
BlockedTimestamp: resultConvo.BlockedTimestamp,
}
}
......@@ -411,11 +418,11 @@ func (w *wasmModel) GetConversations() []dm.ModelConversation {
return nil
}
conversations[i] = dm.ModelConversation{
Pubkey: resultConvo.Pubkey,
Nickname: resultConvo.Nickname,
Token: resultConvo.Token,
CodesetVersion: resultConvo.CodesetVersion,
Blocked: resultConvo.Blocked,
Pubkey: resultConvo.Pubkey,
Nickname: resultConvo.Nickname,
Token: resultConvo.Token,
CodesetVersion: resultConvo.CodesetVersion,
BlockedTimestamp: resultConvo.BlockedTimestamp,
}
}
return conversations
......
......@@ -17,8 +17,8 @@ import (
"gitlab.com/elixxir/client/v4/cmix/rounds"
"gitlab.com/elixxir/client/v4/dm"
"gitlab.com/elixxir/crypto/message"
"gitlab.com/elixxir/wasm-utils/utils"
"gitlab.com/elixxir/xxdk-wasm/indexedDb/impl"
"gitlab.com/elixxir/xxdk-wasm/utils"
"gitlab.com/xx_network/primitives/id"
"os"
"syscall/js"
......@@ -102,7 +102,7 @@ func TestImpl_GetConversations(t *testing.T) {
testBytes := []byte(fmt.Sprintf("%d", i))
testPubKey := ed25519.PublicKey(testBytes)
err = m.upsertConversation("test", testPubKey,
uint32(i), uint8(i), false)
uint32(i), uint8(i), nil)
if err != nil {
t.Fatal(err.Error())
}
......@@ -133,28 +133,28 @@ func TestWasmModel_BlockSender(t *testing.T) {
// Insert a test convo
testPubKey := ed25519.PublicKey{}
err = m.upsertConversation("test", testPubKey, 0, 0, false)
err = m.upsertConversation("test", testPubKey, 0, 0, nil)
if err != nil {
t.Fatal(err.Error())
}
// Default to unblocked
result := m.GetConversation(testPubKey)
if result.Blocked {
if result.BlockedTimestamp != nil {
t.Fatal("Expected blocked to be false")
}
// Now toggle blocked
m.BlockSender(testPubKey)
result = m.GetConversation(testPubKey)
if !result.Blocked {
if result.BlockedTimestamp == nil {
t.Fatal("Expected blocked to be true")
}
// Now toggle blocked again
m.UnblockSender(testPubKey)
result = m.GetConversation(testPubKey)
if result.Blocked {
if result.BlockedTimestamp != nil {
t.Fatal("Expected blocked to be false")
}
}
......@@ -55,9 +55,9 @@ type Message struct {
// message exchange between two recipients.
// A Conversation has many Message.
type Conversation struct {
Pubkey []byte `json:"pub_key"` // Matches convoPkeyName
Nickname string `json:"nickname"`
Token uint32 `json:"token"`
CodesetVersion uint8 `json:"codeset_version"`
Blocked bool `json:"blocked"`
Pubkey []byte `json:"pub_key"` // Matches convoPkeyName
Nickname string `json:"nickname"`
Token uint32 `json:"token"`
CodesetVersion uint8 `json:"codeset_version"`
BlockedTimestamp *time.Time `json:"blocked_timestamp"`
}
......@@ -18,7 +18,7 @@ import (
"github.com/hack-pad/go-indexeddb/idb"
"github.com/pkg/errors"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/xxdk-wasm/utils"
"gitlab.com/elixxir/wasm-utils/utils"
"syscall/js"
"time"
)
......
......@@ -452,16 +452,16 @@ func (w *wasmModel) DeleteMessage(messageID message.ID) error {
// MuteUserMessage is JSON marshalled and sent to the worker for
// [wasmModel.MuteUser].
type MuteUserMessage struct {
ChannelID *id.ID `json:"channelID"`
PubKey ed25519.PublicKey `json:"pubKey"`
Unmute bool `json:"unmute"`
ChannelID []byte `json:"channelID"`
PubKey []byte `json:"pubKey"`
Unmute bool `json:"unmute"`
}
// MuteUser is called whenever a user is muted or unmuted.
func (w *wasmModel) MuteUser(
channelID *id.ID, pubKey ed25519.PublicKey, unmute bool) {
msg := MuteUserMessage{
ChannelID: channelID,
ChannelID: channelID.Marshal(),
PubKey: pubKey,
Unmute: unmute,
}
......
......@@ -10,19 +10,19 @@
package channels
import (
"crypto/ed25519"
"encoding/json"
"github.com/pkg/errors"
"time"
"github.com/pkg/errors"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/client/v4/bindings"
"gitlab.com/elixxir/client/v4/channels"
cryptoChannel "gitlab.com/elixxir/crypto/channel"
"gitlab.com/elixxir/crypto/message"
"gitlab.com/elixxir/xxdk-wasm/storage"
"gitlab.com/elixxir/xxdk-wasm/worker"
"gitlab.com/xx_network/primitives/id"
)
// databaseSuffix is the suffix to be appended to the name of the database.
......@@ -31,26 +31,24 @@ const databaseSuffix = "_speakeasy"
// MessageReceivedCallback is called any time a message is received or updated.
//
// update is true if the row is old and was edited.
type MessageReceivedCallback func(uuid uint64, channelID *id.ID, update bool)
type MessageReceivedCallback func(uuid int64, channelID []byte, update bool)
// DeletedMessageCallback is called any time a message is deleted.
type DeletedMessageCallback func(messageID message.ID)
type DeletedMessageCallback func(messageID []byte)
// MutedUserCallback is called any time a user is muted or unmuted. unmute is
// true if the user has been unmuted and false if they have been muted.
type MutedUserCallback func(
channelID *id.ID, pubKey ed25519.PublicKey, unmute bool)
type MutedUserCallback func(channelID, pubKey []byte, unmute bool)
// NewWASMEventModelBuilder returns an EventModelBuilder which allows
// the channel manager to define the path but the callback is the same
// across the board.
func NewWASMEventModelBuilder(wasmJsPath string,
encryption cryptoChannel.Cipher, messageReceivedCB MessageReceivedCallback,
deletedMessageCB DeletedMessageCallback,
mutedUserCB MutedUserCallback) channels.EventModelBuilder {
encryption cryptoChannel.Cipher,
channelCbs bindings.ChannelUICallbacks) channels.EventModelBuilder {
fn := func(path string) (channels.EventModel, error) {
return NewWASMEventModel(path, wasmJsPath, encryption,
messageReceivedCB, deletedMessageCB, mutedUserCB)
channelCbs)
}
return fn
}
......@@ -65,8 +63,7 @@ type NewWASMEventModelMessage struct {
// NewWASMEventModel returns a [channels.EventModel] backed by a wasmModel.
// The name should be a base64 encoding of the users public key.
func NewWASMEventModel(path, wasmJsPath string, encryption cryptoChannel.Cipher,
messageReceivedCB MessageReceivedCallback,
deletedMessageCB DeletedMessageCallback, mutedUserCB MutedUserCallback) (
channelCbs bindings.ChannelUICallbacks) (
channels.EventModel, error) {
databaseName := path + databaseSuffix
......@@ -77,15 +74,15 @@ func NewWASMEventModel(path, wasmJsPath string, encryption cryptoChannel.Cipher,
// Register handler to manage messages for the MessageReceivedCallback
wm.RegisterCallback(MessageReceivedCallbackTag,
messageReceivedCallbackHandler(messageReceivedCB))
messageReceivedCallbackHandler(channelCbs.MessageReceived))
// Register handler to manage messages for the DeletedMessageCallback
wm.RegisterCallback(DeletedMessageCallbackTag,
deletedMessageCallbackHandler(deletedMessageCB))
deletedMessageCallbackHandler(channelCbs.MessageDeleted))
// Register handler to manage messages for the MutedUserCallback
wm.RegisterCallback(MutedUserCallbackTag,
mutedUserCallbackHandler(mutedUserCB))
mutedUserCallbackHandler(channelCbs.UserMuted))
// Store the database name
err = storage.StoreIndexedDb(databaseName)
......@@ -135,8 +132,8 @@ func NewWASMEventModel(path, wasmJsPath string, encryption cryptoChannel.Cipher,
// MessageReceivedCallbackMessage is JSON marshalled and received from the
// worker for the [MessageReceivedCallback] callback.
type MessageReceivedCallbackMessage struct {
UUID uint64 `json:"uuid"`
ChannelID *id.ID `json:"channelID"`
UUID int64 `json:"uuid"`
ChannelID []byte `json:"channelID"`
Update bool `json:"update"`
}
......@@ -166,7 +163,7 @@ func deletedMessageCallbackHandler(cb DeletedMessageCallback) func(data []byte)
"Failed to JSON unmarshal message ID from worker: %+v", err)
}
cb(messageID)
cb(messageID.Bytes())
}
}
......
......@@ -15,7 +15,7 @@ import (
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/xxdk-wasm/utils"
"gitlab.com/elixxir/wasm-utils/utils"
"gitlab.com/elixxir/xxdk-wasm/worker"
)
......
......@@ -11,15 +11,16 @@ package main
import (
"fmt"
"github.com/spf13/cobra"
"os"
"syscall/js"
"github.com/spf13/cobra"
jww "github.com/spf13/jwalterweatherman"
"gitlab.com/elixxir/wasm-utils/utils"
"gitlab.com/elixxir/xxdk-wasm/logging"
"gitlab.com/elixxir/xxdk-wasm/storage"
"gitlab.com/elixxir/xxdk-wasm/utils"
"gitlab.com/elixxir/xxdk-wasm/wasm"
)
......@@ -147,6 +148,8 @@ func setGlobals() {
// wasm/cmix.go
js.Global().Set("NewCmix", js.FuncOf(wasm.NewCmix))
js.Global().Set("LoadCmix", js.FuncOf(wasm.LoadCmix))
js.Global().Set("LoadSynchronizedCmix",
js.FuncOf(wasm.LoadSynchronizedCmix))
// wasm/delivery.go
js.Global().Set("SetDashboardURL", js.FuncOf(wasm.SetDashboardURL))
......@@ -230,6 +233,8 @@ func setGlobals() {
js.Global().Set("TransmitSingleUse", js.FuncOf(wasm.TransmitSingleUse))
js.Global().Set("Listen", js.FuncOf(wasm.Listen))
// wasm/sync.go
// wasm/timeNow.go
js.Global().Set("SetTimeSource", js.FuncOf(wasm.SetTimeSource))
js.Global().Set("SetOffset", js.FuncOf(wasm.SetOffset))
......@@ -252,7 +257,7 @@ func setGlobals() {
var (
logLevel, fileLogLevel jww.Threshold
maxLogFileSizeMB int
maxLogFileSizeMB int
workerScriptURL, workerName string
)
......
......@@ -12,6 +12,8 @@ package storage
import (
"github.com/pkg/errors"
"os"
"gitlab.com/elixxir/wasm-utils/storage"
)
// Key to store if the database is encrypted or not
......@@ -22,12 +24,15 @@ const databaseEncryptionToggleKey = "xxdkWasmDatabaseEncryptionToggle/"
func StoreIndexedDbEncryptionStatus(
databaseName string, encryptionStatus bool) (
loadedEncryptionStatus bool, err error) {
data, err := GetLocalStorage().GetItem(
databaseEncryptionToggleKey + databaseName)
ls := storage.GetLocalStorage()
data, err := ls.Get(databaseEncryptionToggleKey + databaseName)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
GetLocalStorage().SetItem(
databaseEncryptionToggleKey+databaseName, []byte{1})
keyName := databaseEncryptionToggleKey + databaseName
if err = ls.Set(keyName, []byte{1}); err != nil {
return false,
errors.Wrapf(err, "localStorage: failed to set %q", keyName)
}
return encryptionStatus, nil
} else {
return false, err
......
......@@ -11,8 +11,11 @@ package storage
import (
"encoding/json"
"github.com/pkg/errors"
"os"
"github.com/pkg/errors"
"gitlab.com/elixxir/wasm-utils/storage"
)
const indexedDbListKey = "xxDkWasmIndexedDbList"
......@@ -20,7 +23,7 @@ const indexedDbListKey = "xxDkWasmIndexedDbList"
// GetIndexedDbList returns the list of stored indexedDb databases.
func GetIndexedDbList() (map[string]struct{}, error) {
list := make(map[string]struct{})
listBytes, err := GetLocalStorage().GetItem(indexedDbListKey)
listBytes, err := storage.GetLocalStorage().Get(indexedDbListKey)
if err != nil && !errors.Is(err, os.ErrNotExist) {
return nil, err
} else if err == nil {
......@@ -47,7 +50,11 @@ func StoreIndexedDb(databaseName string) error {
return err
}
GetLocalStorage().SetItem(indexedDbListKey, listBytes)
err = storage.GetLocalStorage().Set(indexedDbListKey, listBytes)
if err != nil {
return errors.Wrapf(err,
"localStorage: failed to set %q", indexedDbListKey)
}
return nil
}