implement wasm/js specific database engine

This commit is contained in:
2025-12-03 12:31:25 +00:00
parent c8fac06f24
commit 0a61f274d5
59 changed files with 8651 additions and 38 deletions

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (
@@ -72,8 +74,14 @@ func NewDatabaseWithConfig(
return nil, fmt.Errorf("neo4j database backend not available (import _ \"next.orly.dev/pkg/neo4j\")")
}
return newNeo4jDatabase(ctx, cancel, cfg)
case "wasmdb", "indexeddb", "wasm":
// Use the wasmdb implementation (IndexedDB backend for WebAssembly)
if newWasmDBDatabase == nil {
return nil, fmt.Errorf("wasmdb database backend not available (import _ \"next.orly.dev/pkg/wasmdb\")")
}
return newWasmDBDatabase(ctx, cancel, cfg)
default:
return nil, fmt.Errorf("unsupported database type: %s (supported: badger, dgraph, neo4j)", dbType)
return nil, fmt.Errorf("unsupported database type: %s (supported: badger, dgraph, neo4j, wasmdb)", dbType)
}
}
@@ -96,3 +104,13 @@ var newNeo4jDatabase func(context.Context, context.CancelFunc, *DatabaseConfig)
func RegisterNeo4jFactory(factory func(context.Context, context.CancelFunc, *DatabaseConfig) (Database, error)) {
newNeo4jDatabase = factory
}
// newWasmDBDatabase creates a wasmdb database instance (IndexedDB backend for WebAssembly)
// This is defined here to avoid import cycles
var newWasmDBDatabase func(context.Context, context.CancelFunc, *DatabaseConfig) (Database, error)
// RegisterWasmDBFactory registers the wasmdb database factory
// This is called from the wasmdb package's init() function
func RegisterWasmDBFactory(factory func(context.Context, context.CancelFunc, *DatabaseConfig) (Database, error)) {
newWasmDBDatabase = factory
}

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
// Package database provides shared import utilities for events
package database

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (
@@ -11,13 +13,6 @@ import (
"git.mleku.dev/mleku/nostr/encoders/hex"
)
// NIP43Membership represents membership metadata for NIP-43
type NIP43Membership struct {
Pubkey []byte
AddedAt time.Time
InviteCode string
}
// Database key prefixes for NIP-43
const (
nip43MemberPrefix = "nip43:member:"

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (

View File

@@ -1,3 +1,5 @@
//go:build !(js && wasm)
package database
import (
@@ -12,13 +14,6 @@ import (
"github.com/dgraph-io/badger/v4"
)
type Subscription struct {
TrialEnd time.Time `json:"trial_end"`
PaidUntil time.Time `json:"paid_until"`
BlossomLevel string `json:"blossom_level,omitempty"` // Service level name (e.g., "basic", "premium")
BlossomStorage int64 `json:"blossom_storage,omitempty"` // Storage quota in MB
}
func (d *D) GetSubscription(pubkey []byte) (*Subscription, error) {
key := fmt.Sprintf("sub:%s", hex.EncodeToString(pubkey))
var sub *Subscription
@@ -122,13 +117,6 @@ func (d *D) ExtendSubscription(pubkey []byte, days int) error {
)
}
type Payment struct {
Amount int64 `json:"amount"`
Timestamp time.Time `json:"timestamp"`
Invoice string `json:"invoice"`
Preimage string `json:"preimage"`
}
func (d *D) RecordPayment(
pubkey []byte, amount int64, invoice, preimage string,
) error {