feat: makes NDK parameter optional

This commit is contained in:
Gringo
2026-03-03 15:46:01 +01:00
parent dcf5523012
commit 46283d9a87
4 changed files with 65 additions and 11 deletions
@@ -7,10 +7,20 @@ import 'decrypt_blob.dart';
import 'package:ndk/ndk.dart';
Future<Uint8List> fetchBlob({
required Ndk ndk,
required FileMetadata fileMetadata,
Ndk? ndk,
}) async {
final blobResponse = await ndk.blossom.getBlob(
final ndk0 =
ndk ??
Ndk(
NdkConfig(
eventVerifier: Bip340EventVerifier(),
cache: MemCacheManager(),
bootstrapRelays: [],
),
);
final blobResponse = await ndk0.blossom.getBlob(
sha256: fileMetadata.x,
serverUrls: Constants.blossomServers,
);
@@ -21,5 +31,7 @@ Future<Uint8List> fetchBlob({
nonce: fileMetadata.nonce,
);
if (ndk == null) await ndk0.destroy();
return decryptedBytes;
}
@@ -1,17 +1,29 @@
import 'dart:convert';
import 'package:file_transfer_sdk/file_transfer_sdk.dart';
import 'package:file_transfer_sdk/src/constants.dart';
import 'package:ndk/ndk.dart';
import 'package:ndk/shared/nips/nip01/bip340.dart';
Future<FileMetadata> fetchFileMetadata({
required Ndk ndk,
required SharedFile sharedFile,
Ndk? ndk,
}) async {
final ndk0 =
ndk ??
Ndk(
NdkConfig(
eventVerifier: Bip340EventVerifier(),
cache: MemCacheManager(),
bootstrapRelays: [],
),
);
final decodedNevent = Nip19.decodeNevent(sharedFile.nevent);
final query = ndk.requests.query(
final query = ndk0.requests.query(
filter: Filter(ids: [decodedNevent.eventId]),
explicitRelays: Constants.relays,
);
Nip01Event? event;
@@ -39,5 +51,7 @@ Future<FileMetadata> fetchFileMetadata({
.map((tag) => List<String>.from(tag as List))
.toList();
if (ndk == null) await ndk0.destroy();
return FileMetadata.fromTags(tags);
}
@@ -10,23 +10,41 @@ import 'package:ndk/ndk.dart';
import 'package:ndk/shared/nips/nip01/bip340.dart';
Future<SharedFile> shareFile({
required Ndk ndk,
required Uint8List bytes,
String? contentType,
String? filename,
Ndk? ndk,
}) async {
final ndk0 =
ndk ??
Ndk(
NdkConfig(
eventVerifier: Bip340EventVerifier(),
cache: MemCacheManager(),
bootstrapRelays: [],
),
);
if (ndk == null) {
final keyPair = Bip340.generatePrivateKey();
ndk0.accounts.loginPrivateKey(
pubkey: keyPair.publicKey,
privkey: keyPair.privateKey!,
);
}
final recipientKeyPair = Bip340.generatePrivateKey();
final encryptedBlob = await encryptBlob(bytes);
final blobDescriptor = await uploadBlob(
ndk: ndk,
ndk: ndk0,
data: encryptedBlob.bytes,
contentType: contentType,
);
final event = await createEvent(
ndk: ndk,
ndk: ndk0,
descriptor: blobDescriptor!,
recipientPubkey: recipientKeyPair.publicKey,
key: encryptedBlob.key,
@@ -34,7 +52,7 @@ Future<SharedFile> shareFile({
filename: filename,
);
await ndk.broadcast
await ndk0.broadcast
.broadcast(nostrEvent: event, specificRelays: Constants.relays)
.broadcastDoneFuture;
@@ -45,5 +63,7 @@ Future<SharedFile> shareFile({
final nsec = Nip19.encodePrivateKey(recipientKeyPair.privateKey!);
if (ndk == null) await ndk0.destroy();
return SharedFile(nevent: nevent, encodedPrivateKey: nsec);
}
@@ -8,13 +8,21 @@ import 'package:ndk/shared/nips/nip01/bip340.dart';
import 'package:test/test.dart';
void main() {
test("First test", () async {
test("Test without shared NDK instance", () async {
final originalData = Uint8List.fromList('Hello, World!'.codeUnits);
final share = await shareFile(bytes: originalData);
final fileMetadata = await fetchFileMetadata(sharedFile: share);
final fetchedData = await fetchBlob(fileMetadata: fileMetadata);
expect(fetchedData, originalData);
});
test("Test with shared NDK instance", () async {
final ndk = Ndk(
NdkConfig(eventVerifier: Bip340EventVerifier(), cache: MemCacheManager()),
);
final keyPair = Bip340.generatePrivateKey();
ndk.accounts.loginPrivateKey(
pubkey: keyPair.publicKey,
privkey: keyPair.privateKey!,