From 112b80f8073a31d8930fa66c1bb88b92a9c0bd77 Mon Sep 17 00:00:00 2001 From: Norman Meier Date: Sun, 9 Jun 2024 19:59:09 +0200 Subject: [PATCH] feat: wasm support Signed-off-by: Norman Meier --- baseorbitdb/keystore.go | 36 +++++++++++++++++++++++++++ baseorbitdb/keystore_js.go | 14 +++++++++++ baseorbitdb/orbitdb.go | 23 +++-------------- cache/cacheleveldown/leveldown.go | 3 +++ cache/cacheleveldown/leveldown_js.go | 14 +++++++++++ tests/create_open_test.go | 2 ++ tests/docs_test.go | 2 ++ tests/eventlog_test.go | 2 ++ tests/keyvalue_test.go | 2 ++ tests/persistence_test.go | 2 ++ tests/replicate_automatically_test.go | 2 ++ tests/replicate_test.go | 4 ++- tests/replication_status_test.go | 2 ++ tests/testing_test.go | 2 ++ tests/write_permissions_test.go | 2 ++ 15 files changed, 92 insertions(+), 20 deletions(-) create mode 100644 baseorbitdb/keystore.go create mode 100644 baseorbitdb/keystore_js.go create mode 100644 cache/cacheleveldown/leveldown_js.go diff --git a/baseorbitdb/keystore.go b/baseorbitdb/keystore.go new file mode 100644 index 0000000..fc826e5 --- /dev/null +++ b/baseorbitdb/keystore.go @@ -0,0 +1,36 @@ +//go:build !js + +package baseorbitdb + +import ( + "fmt" + "path" + + "berty.tech/go-ipfs-log/keystore" + "berty.tech/go-orbit-db/cache/cacheleveldown" + leveldb "github.com/ipfs/go-ds-leveldb" + "github.com/libp2p/go-libp2p/core/peer" +) + +func NewKeystore(id peer.ID, directory string) (*keystore.Keystore, func() error, error) { + var err error + var ds *leveldb.Datastore + + // create new datastore + if directory == cacheleveldown.InMemoryDirectory { + ds, err = leveldb.NewDatastore("", nil) + } else { + ds, err = leveldb.NewDatastore(path.Join(directory, id.String(), "/keystore"), nil) + } + + if err != nil { + return nil, nil, fmt.Errorf("unable to create data store used by keystore: %w", err) + } + + ks, err := keystore.NewKeystore(ds) + if err != nil { + return nil, nil, fmt.Errorf("unable to create keystore: %w", err) + } + + return ks, ds.Close, nil +} diff --git a/baseorbitdb/keystore_js.go b/baseorbitdb/keystore_js.go new file mode 100644 index 0000000..00e9351 --- /dev/null +++ b/baseorbitdb/keystore_js.go @@ -0,0 +1,14 @@ +//go:build js + +package baseorbitdb + +import ( + "errors" + + "berty.tech/go-ipfs-log/keystore" + "github.com/libp2p/go-libp2p/core/peer" +) + +func NewKeystore(id peer.ID, directory string) (*keystore.Keystore, func() error, error) { + return nil, nil, errors.New("can't create default keystore in js") +} diff --git a/baseorbitdb/orbitdb.go b/baseorbitdb/orbitdb.go index 5461242..3f510a0 100644 --- a/baseorbitdb/orbitdb.go +++ b/baseorbitdb/orbitdb.go @@ -24,7 +24,7 @@ import ( "berty.tech/go-orbit-db/utils" cid "github.com/ipfs/go-cid" datastore "github.com/ipfs/go-datastore" - leveldb "github.com/ipfs/go-ds-leveldb" + cbornode "github.com/ipfs/go-ipld-cbor" coreapi "github.com/ipfs/interface-go-ipfs-core" "github.com/libp2p/go-libp2p/core/event" @@ -429,27 +429,12 @@ func NewOrbitDB(ctx context.Context, ipfs coreapi.CoreAPI, options *NewOrbitDBOp } if options.Keystore == nil { - var err error - var ds *leveldb.Datastore - - // create new datastore - if *options.Directory == cacheleveldown.InMemoryDirectory { - ds, err = leveldb.NewDatastore("", nil) - } else { - ds, err = leveldb.NewDatastore(path.Join(*options.Directory, id.String(), "/keystore"), nil) - } - + ks, closeKeystore, err := NewKeystore(id, *options.Directory) if err != nil { - return nil, fmt.Errorf("unable to create data store used by keystore: %w", err) - } - - ks, err := keystore.NewKeystore(ds) - if err != nil { - return nil, fmt.Errorf("unable to create keystore: %w", err) + return nil, err } - options.Keystore = ks - options.CloseKeystore = ds.Close + options.CloseKeystore = closeKeystore } if options.ID == nil { diff --git a/cache/cacheleveldown/leveldown.go b/cache/cacheleveldown/leveldown.go index 8400367..2e6b4d2 100644 --- a/cache/cacheleveldown/leveldown.go +++ b/cache/cacheleveldown/leveldown.go @@ -1,3 +1,5 @@ +//go:build !js + package cacheleveldown import ( @@ -11,6 +13,7 @@ import ( "berty.tech/go-orbit-db/cache" datastore "github.com/ipfs/go-datastore" "github.com/ipfs/go-datastore/query" + leveldb "github.com/ipfs/go-ds-leveldb" "go.uber.org/zap" ) diff --git a/cache/cacheleveldown/leveldown_js.go b/cache/cacheleveldown/leveldown_js.go new file mode 100644 index 0000000..acde4ae --- /dev/null +++ b/cache/cacheleveldown/leveldown_js.go @@ -0,0 +1,14 @@ +//go:build js + +package cacheleveldown + +import ( + "berty.tech/go-orbit-db/cache" +) + +var InMemoryDirectory = ":memory:" + +// New Creates a new leveldb data store +func New(opts *cache.Options) cache.Interface { + panic("cacheleveldown not implemented in js") +} diff --git a/tests/create_open_test.go b/tests/create_open_test.go index e5a4646..6bffa2c 100644 --- a/tests/create_open_test.go +++ b/tests/create_open_test.go @@ -1,3 +1,5 @@ +//go:build !js + package tests import ( diff --git a/tests/docs_test.go b/tests/docs_test.go index 021991a..5e6aeda 100644 --- a/tests/docs_test.go +++ b/tests/docs_test.go @@ -1,3 +1,5 @@ +//go:build !js + package tests import ( diff --git a/tests/eventlog_test.go b/tests/eventlog_test.go index e33bd82..be16543 100644 --- a/tests/eventlog_test.go +++ b/tests/eventlog_test.go @@ -1,3 +1,5 @@ +//go:build !js + package tests import ( diff --git a/tests/keyvalue_test.go b/tests/keyvalue_test.go index e156a01..b5c951e 100644 --- a/tests/keyvalue_test.go +++ b/tests/keyvalue_test.go @@ -1,3 +1,5 @@ +//go:build !js + package tests import ( diff --git a/tests/persistence_test.go b/tests/persistence_test.go index 005f9df..5b9f74f 100644 --- a/tests/persistence_test.go +++ b/tests/persistence_test.go @@ -1,3 +1,5 @@ +//go:build !js + package tests import ( diff --git a/tests/replicate_automatically_test.go b/tests/replicate_automatically_test.go index 96b6926..8746621 100644 --- a/tests/replicate_automatically_test.go +++ b/tests/replicate_automatically_test.go @@ -1,3 +1,5 @@ +//go:build !js + package tests import ( diff --git a/tests/replicate_test.go b/tests/replicate_test.go index f069a7a..0f7fb67 100644 --- a/tests/replicate_test.go +++ b/tests/replicate_test.go @@ -1,3 +1,5 @@ +//go:build !js + package tests import ( @@ -15,8 +17,8 @@ import ( "berty.tech/go-orbit-db/pubsub/pubsubraw" orbitstores "berty.tech/go-orbit-db/stores" "berty.tech/go-orbit-db/stores/operation" - "github.com/libp2p/go-libp2p/p2p/host/eventbus" "github.com/libp2p/go-libp2p/core/event" + "github.com/libp2p/go-libp2p/p2p/host/eventbus" mocknet "github.com/libp2p/go-libp2p/p2p/net/mock" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/tests/replication_status_test.go b/tests/replication_status_test.go index 53f71bb..4d0902f 100644 --- a/tests/replication_status_test.go +++ b/tests/replication_status_test.go @@ -1,3 +1,5 @@ +//go:build !js + package tests import ( diff --git a/tests/testing_test.go b/tests/testing_test.go index b80a39d..2680749 100644 --- a/tests/testing_test.go +++ b/tests/testing_test.go @@ -1,3 +1,5 @@ +//go:build !js + package tests import ( diff --git a/tests/write_permissions_test.go b/tests/write_permissions_test.go index 9f2d668..c8d21b2 100644 --- a/tests/write_permissions_test.go +++ b/tests/write_permissions_test.go @@ -1,3 +1,5 @@ +//go:build !js + package tests import (