feat: makes NDK parameter optional
This commit is contained in:
@@ -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!,
|
||||
|
||||
Reference in New Issue
Block a user