@konemono/nostr-login 1.9.0 → 1.9.1
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
|
@@ -30,12 +30,14 @@ export class AmberDirectSigner implements Signer {
|
|
|
30
30
|
public async getPublicKey(id?: string): Promise<string> {
|
|
31
31
|
id = id || Math.random().toString(36).substring(7);
|
|
32
32
|
const url = this.generateUrl('', 'get_public_key', id);
|
|
33
|
-
console.log('
|
|
33
|
+
console.log('[AmberDirectSigner] Requesting public key, URL:', url.substring(0, 100) + '...');
|
|
34
34
|
window.open(url, '_blank', 'width=400,height=600');
|
|
35
35
|
return new Promise((resolve, reject) => {
|
|
36
36
|
const timer = setTimeout(() => {
|
|
37
37
|
AmberDirectSigner.pendingResolves.delete(id!);
|
|
38
|
-
|
|
38
|
+
const error = new Error('[AmberDirectSigner] getPublicKey timeout after 20s');
|
|
39
|
+
console.error(error.message);
|
|
40
|
+
reject(error);
|
|
39
41
|
}, 20000);
|
|
40
42
|
AmberDirectSigner.pendingResolves.set(id!, { resolve, timer });
|
|
41
43
|
});
|
|
@@ -208,9 +210,11 @@ export class AmberDirectSigner implements Signer {
|
|
|
208
210
|
if (entry) {
|
|
209
211
|
this.pendingResolves.delete(id);
|
|
210
212
|
if (entry.timer) clearTimeout(entry.timer);
|
|
213
|
+
console.log('[AmberDirectSigner] Resolving pending:', { id, type, resultLen: result.length });
|
|
211
214
|
entry.resolve(result);
|
|
212
215
|
return true;
|
|
213
216
|
}
|
|
217
|
+
console.warn('[AmberDirectSigner] No pending resolve found for:', id);
|
|
214
218
|
return false;
|
|
215
219
|
}
|
|
216
220
|
|
|
@@ -76,26 +76,31 @@ class AuthNostrService extends EventEmitter implements Signer {
|
|
|
76
76
|
decrypt: this.decrypt44.bind(this),
|
|
77
77
|
};
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
// Amberレスポンス検出: ポップアップから戻った時
|
|
81
80
|
const check = () => {
|
|
81
|
+
console.log('[AuthNostrService] Checking Amber response');
|
|
82
82
|
this.checkAmberResponse();
|
|
83
83
|
};
|
|
84
84
|
|
|
85
|
+
// 主要なイベントで検出(ポーリングは廃止)
|
|
85
86
|
window.addEventListener('focus', check);
|
|
86
87
|
window.addEventListener('visibilitychange', () => {
|
|
87
|
-
if (document.visibilityState === 'visible')
|
|
88
|
+
if (document.visibilityState === 'visible') {
|
|
89
|
+
console.log('[AuthNostrService] Page visible, checking Amber response');
|
|
90
|
+
check();
|
|
91
|
+
}
|
|
88
92
|
});
|
|
89
93
|
window.addEventListener('popstate', check);
|
|
90
94
|
window.addEventListener('hashchange', check);
|
|
91
95
|
|
|
92
|
-
//
|
|
93
|
-
|
|
96
|
+
// 初期チェック
|
|
97
|
+
setTimeout(check, 100);
|
|
94
98
|
|
|
99
|
+
// ポップアップからのメッセージ受信
|
|
95
100
|
window.addEventListener('message', event => {
|
|
96
101
|
if (event.data && event.data.method === 'amberResponse') {
|
|
97
102
|
const { id, type, result } = event.data;
|
|
98
|
-
console.log('Amber response received via message', { id, type, result });
|
|
103
|
+
console.log('[AuthNostrService] Amber response received via message', { id, type, result });
|
|
99
104
|
this.handleAmberResponse({ id, type, result });
|
|
100
105
|
}
|
|
101
106
|
});
|
|
@@ -104,9 +109,11 @@ class AuthNostrService extends EventEmitter implements Signer {
|
|
|
104
109
|
private checkAmberResponse() {
|
|
105
110
|
const response = AmberDirectSigner.parseResponse();
|
|
106
111
|
if (response) {
|
|
112
|
+
console.log('[AuthNostrService] Amber response detected', response);
|
|
113
|
+
|
|
107
114
|
// If we have an opener and it's not the same window, we are in a popup
|
|
108
115
|
if (window.opener && window.opener !== window) {
|
|
109
|
-
console.log('
|
|
116
|
+
console.log('[AuthNostrService] In popup, sending response back to opener');
|
|
110
117
|
window.opener.postMessage({ method: 'amberResponse', ...response }, window.location.origin);
|
|
111
118
|
window.close();
|
|
112
119
|
return;
|
|
@@ -119,10 +126,13 @@ class AuthNostrService extends EventEmitter implements Signer {
|
|
|
119
126
|
private handledAmberIds: Set<string> = new Set();
|
|
120
127
|
|
|
121
128
|
private handleAmberResponse(response: { id: string; type: string; result: string }) {
|
|
122
|
-
if (this.handledAmberIds.has(response.id))
|
|
129
|
+
if (this.handledAmberIds.has(response.id)) {
|
|
130
|
+
console.log('[AuthNostrService] Amber response already handled:', response.id);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
123
133
|
this.handledAmberIds.add(response.id);
|
|
124
134
|
|
|
125
|
-
console.log('Handling Amber response', response);
|
|
135
|
+
console.log('[AuthNostrService] Handling Amber response:', response);
|
|
126
136
|
|
|
127
137
|
// Stop the "Connecting..." spinner
|
|
128
138
|
this.emit('onAuthUrl', { url: '' });
|
|
@@ -130,7 +140,7 @@ class AuthNostrService extends EventEmitter implements Signer {
|
|
|
130
140
|
// Resolve pending promises if any (for non-reload cases)
|
|
131
141
|
const resolved = AmberDirectSigner.resolvePending(response.id, response.type, response.result);
|
|
132
142
|
if (resolved) {
|
|
133
|
-
console.log('Resolved pending Amber promise
|
|
143
|
+
console.log('[AuthNostrService] Resolved pending Amber promise');
|
|
134
144
|
}
|
|
135
145
|
|
|
136
146
|
if (response.type === 'get_public_key' || response.type.includes('pub')) {
|
|
@@ -141,7 +151,7 @@ class AuthNostrService extends EventEmitter implements Signer {
|
|
|
141
151
|
relays: [],
|
|
142
152
|
signerPubkey: '',
|
|
143
153
|
};
|
|
144
|
-
console.log('Amber login success', info);
|
|
154
|
+
console.log('[AuthNostrService] Amber login success:', info);
|
|
145
155
|
this.onAuth('login', info);
|
|
146
156
|
}
|
|
147
157
|
|
|
@@ -162,7 +172,7 @@ class AuthNostrService extends EventEmitter implements Signer {
|
|
|
162
172
|
}
|
|
163
173
|
|
|
164
174
|
if (changed) {
|
|
165
|
-
console.log('Cleaning up Amber response URL'
|
|
175
|
+
console.log('[AuthNostrService] Cleaning up Amber response URL');
|
|
166
176
|
window.history.replaceState({}, '', url.toString());
|
|
167
177
|
}
|
|
168
178
|
}
|
|
@@ -419,8 +429,16 @@ class AuthNostrService extends EventEmitter implements Signer {
|
|
|
419
429
|
}
|
|
420
430
|
|
|
421
431
|
public async setAmber(info: Info) {
|
|
432
|
+
console.log('setAmber', info);
|
|
433
|
+
|
|
434
|
+
// クリア
|
|
422
435
|
this.releaseSigner();
|
|
423
436
|
this.amberSigner = new AmberDirectSigner(info.pubkey);
|
|
437
|
+
|
|
438
|
+
// Amberは署名リクエストをウォレットに投げるだけなので、特別な初期化は不要
|
|
439
|
+
// signEventなどが直接amberSignerを使用する
|
|
440
|
+
|
|
441
|
+
// 認証完了
|
|
424
442
|
this.onAuth('login', info);
|
|
425
443
|
}
|
|
426
444
|
|