@konemono/nostr-login 1.10.13 → 1.10.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@konemono/nostr-login",
3
- "version": "1.10.13",
3
+ "version": "1.10.15",
4
4
  "description": "",
5
5
  "main": "./dist/index.esm.js",
6
6
  "types": "./dist/index.d.ts",
@@ -703,20 +703,59 @@ class AuthNostrService extends EventEmitter implements Signer {
703
703
  event.id = getEventHash(event);
704
704
  event.sig = await this.localSigner.sign(event);
705
705
  } else {
706
- // リレー接続を確認・再接続
707
- if (this.ndk.pool.stats().connected === 0) {
708
- console.log('NDK relays disconnected, reconnecting...');
709
- await this.ndk.connect();
710
- }
706
+ await this.ensureSigner();
711
707
 
712
- event.pubkey = this.signer?.remotePubkey;
708
+ event.pubkey = this.signer!.remotePubkey;
713
709
  event.id = getEventHash(event);
714
- event.sig = await this.signer?.sign(event);
710
+ event.sig = await this.signer!.sign(event);
715
711
  }
716
712
  console.log('signed', { event });
717
713
  return event;
718
714
  }
719
715
 
716
+ private async ensureSigner() {
717
+ // signerがキャンセル等で破棄されている場合は再初期化
718
+ if (!this.signer && this.params.userInfo) {
719
+ console.log('Signer was destroyed, reinitializing...');
720
+ await this.initSigner(this.params.userInfo);
721
+ }
722
+
723
+ if (!this.signer) {
724
+ throw new Error('No signer available');
725
+ }
726
+
727
+ // リレー接続を確認・再接続
728
+ const stats = this.ndk.pool.stats();
729
+ console.log('NDK pool stats:', stats);
730
+
731
+ if (stats.connected === 0) {
732
+ console.log('NDK relays disconnected, forcing reconnection...');
733
+
734
+ // 既存のリレーを一度切断してから再接続
735
+ for (const relay of this.ndk.pool.relays.values()) {
736
+ try {
737
+ relay.disconnect();
738
+ } catch (e) {
739
+ console.log('Error disconnecting relay:', e);
740
+ }
741
+ }
742
+
743
+ // 少し待ってから再接続
744
+ await new Promise(resolve => setTimeout(resolve, 100));
745
+ await this.ndk.connect();
746
+
747
+ // 接続を待つ
748
+ await new Promise(resolve => setTimeout(resolve, 500));
749
+
750
+ const newStats = this.ndk.pool.stats();
751
+ console.log('NDK pool stats after reconnect:', newStats);
752
+
753
+ if (newStats.connected === 0) {
754
+ throw new Error('Failed to reconnect to relays');
755
+ }
756
+ }
757
+ }
758
+
720
759
  private async codec_call(method: string, pubkey: string, param: string) {
721
760
  return new Promise<string>((resolve, reject) => {
722
761
  this.signer!.rpc.sendRequest(this.signer!.remotePubkey!, method, [pubkey, param], 24133, (response: NDKRpcResponse) => {
@@ -733,6 +772,7 @@ class AuthNostrService extends EventEmitter implements Signer {
733
772
  if (this.localSigner) {
734
773
  return this.localSigner.encrypt(new NDKUser({ pubkey }), plaintext);
735
774
  } else {
775
+ await this.ensureSigner();
736
776
  return this.signer!.encrypt(new NDKUser({ pubkey }), plaintext);
737
777
  }
738
778
  }
@@ -744,7 +784,7 @@ class AuthNostrService extends EventEmitter implements Signer {
744
784
  // decrypt is broken in ndk v2.3.1, and latest
745
785
  // ndk v2.8.1 doesn't allow to override connect easily,
746
786
  // so we reimplement and fix decrypt here as a temporary fix
747
-
787
+ await this.ensureSigner();
748
788
  return this.codec_call('nip04_decrypt', pubkey, ciphertext);
749
789
  }
750
790
  }
@@ -754,6 +794,7 @@ class AuthNostrService extends EventEmitter implements Signer {
754
794
  return this.nip44Codec.encrypt(this.localSigner.privateKey!, pubkey, plaintext);
755
795
  } else {
756
796
  // no support of nip44 in ndk yet
797
+ await this.ensureSigner();
757
798
  return this.codec_call('nip44_encrypt', pubkey, plaintext);
758
799
  }
759
800
  }
@@ -763,6 +804,7 @@ class AuthNostrService extends EventEmitter implements Signer {
763
804
  return this.nip44Codec.decrypt(this.localSigner.privateKey!, pubkey, ciphertext);
764
805
  } else {
765
806
  // no support of nip44 in ndk yet
807
+ await this.ensureSigner();
766
808
  return this.codec_call('nip44_decrypt', pubkey, ciphertext);
767
809
  }
768
810
  }
@@ -16,7 +16,7 @@ class ProcessManager extends EventEmitter {
16
16
  reject(new Error('Cancelled by user'));
17
17
  }
18
18
  this.pendingCalls.clear();
19
-
19
+
20
20
  // タイマーとカウントをリセットして次の署名要求に備える
21
21
  if (this.callTimer) {
22
22
  clearTimeout(this.callTimer);