1
- import { NDKEvent , NostrEvent } from "./index.js" ;
1
+ import { NDKEvent , type NDKRawEvent , type NostrEvent } from "./index.js" ;
2
2
import { NDKPrivateKeySigner } from "../signers/private-key" ;
3
3
import { getEventHash } from "nostr-tools" ;
4
4
import { NDKUser } from "../user/index.js" ;
5
- import { NDKSigner } from "../signers/index.js" ;
5
+ import type { NDKSigner } from "../signers/index.js" ;
6
6
import { NDKKind } from "./kinds/index.js" ;
7
- import { NDKEncryptionScheme } from "../types.js" ;
7
+ import type { NDKEncryptionScheme } from "../types.js" ;
8
8
9
9
export type GiftWrapParams = {
10
10
scheme ?: NDKEncryptionScheme ;
@@ -26,16 +26,17 @@ export async function giftWrap(
26
26
signer ?: NDKSigner ,
27
27
params : GiftWrapParams = { }
28
28
) : Promise < NDKEvent > {
29
+ let _signer = signer ;
29
30
params . scheme ??= "nip44" ;
30
- if ( ! signer ) {
31
+ if ( ! _signer ) {
31
32
if ( ! event . ndk ) throw new Error ( "no signer available for giftWrap" ) ;
32
- signer = event . ndk . signer ;
33
+ _signer = event . ndk . signer ;
33
34
}
34
- if ( ! signer ) throw new Error ( "no signer" ) ;
35
- if ( ! signer . encryptionEnabled || ! signer . encryptionEnabled ( params . scheme ) )
35
+ if ( ! _signer ) throw new Error ( "no signer" ) ;
36
+ if ( ! _signer . encryptionEnabled || ! _signer . encryptionEnabled ( params . scheme ) )
36
37
throw new Error ( "signer is not able to giftWrap" ) ;
37
38
const rumor = getRumorEvent ( event , params ?. rumorKind ) ;
38
- const seal = await getSealEvent ( rumor , recipient , signer , params . scheme ) ;
39
+ const seal = await getSealEvent ( rumor , recipient , _signer , params . scheme ) ;
39
40
const wrap = await getWrapEvent ( seal , recipient , params ) ;
40
41
return new NDKEvent ( event . ndk , wrap ) ;
41
42
}
@@ -50,10 +51,11 @@ export async function giftUnwrap(
50
51
signer ?: NDKSigner ,
51
52
scheme : NDKEncryptionScheme = "nip44"
52
53
) : Promise < NDKEvent > {
53
- sender = sender || new NDKUser ( { pubkey : event . pubkey } ) ;
54
- if ( ! signer ) {
54
+ const _sender = sender || new NDKUser ( { pubkey : event . pubkey } ) ;
55
+ let _signer = signer ;
56
+ if ( ! _signer ) {
55
57
if ( ! event . ndk ) throw new Error ( "no signer available for giftUnwrap" ) ;
56
- signer = event . ndk . signer ;
58
+ _signer = event . ndk . signer ;
57
59
}
58
60
if ( ! signer ) throw new Error ( "no signer" ) ;
59
61
try {
@@ -66,20 +68,17 @@ export async function giftUnwrap(
66
68
const rumorSender = new NDKUser ( { pubkey : seal . pubkey } ) ;
67
69
const rumor = JSON . parse ( await signer . decrypt ( rumorSender , seal . content , scheme ) ) ;
68
70
if ( ! rumor ) throw new Error ( "Failed to decrypt seal" ) ;
71
+ if ( rumor . pubkey !== _sender . pubkey ) throw new Error ( "Invalid GiftWrap, sender validation failed!" ) ;
69
72
70
- if ( seal . pubkey === rumor . pubkey ) {
71
- return new NDKEvent ( event . ndk , rumor as NostrEvent ) ;
72
- } else {
73
- return Promise . reject ( "Invalid GiftWrap, sender validation failed!" ) ;
74
- }
73
+ return new NDKEvent ( event . ndk , rumor as NostrEvent ) ;
75
74
} catch ( e ) {
76
75
console . log ( e ) ;
77
76
return Promise . reject ( "Got error unwrapping event! See console log." ) ;
78
77
}
79
78
}
80
79
81
80
function getRumorEvent ( event : NDKEvent , kind ?: number ) : NDKEvent {
82
- let rumor = event . rawEvent ( ) ;
81
+ const rumor = event . rawEvent ( ) as Partial < NDKRawEvent > ;
83
82
rumor . kind = kind || rumor . kind || NDKKind . PrivateDirectMessage ;
84
83
rumor . sig = undefined ;
85
84
rumor . id = getEventHash ( rumor as any ) ;
0 commit comments