59 lines
1.3 KiB
JavaScript
59 lines
1.3 KiB
JavaScript
window.nostr = {
|
|
_requests: {},
|
|
_pubkey: null,
|
|
|
|
async getPublicKey() {
|
|
if (this._pubkey) return this._pubkey
|
|
this._pubkey = await this._call('getPublicKey', {})
|
|
return this._pubkey
|
|
},
|
|
|
|
async signEvent(event) {
|
|
return this._call('signEvent', {event})
|
|
},
|
|
|
|
_call(type, params) {
|
|
return new Promise((resolve, reject) => {
|
|
let id = Math.random().toString().slice(4)
|
|
this._requests[id] = {resolve, reject}
|
|
window.postMessage(
|
|
{
|
|
id,
|
|
ext: 'nos2x',
|
|
type,
|
|
params
|
|
},
|
|
'*'
|
|
)
|
|
})
|
|
},
|
|
|
|
nip04: {
|
|
encrypt(peer, plaintext) {
|
|
return window.nostr._call('nip04.encrypt', {peer, plaintext})
|
|
},
|
|
|
|
decrypt(peer, ciphertext) {
|
|
return window.nostr._call('nip04.decrypt', {peer, ciphertext})
|
|
}
|
|
}
|
|
}
|
|
|
|
window.addEventListener('message', message => {
|
|
if (
|
|
!message.data ||
|
|
!message.data.response ||
|
|
message.data.ext !== 'nos2x' ||
|
|
!window.nostr._requests[message.data.id]
|
|
)
|
|
return
|
|
|
|
if (message.data.response.error) {
|
|
let error = new Error('nos2x: ' + message.data.response.error.message)
|
|
error.stack = message.data.response.error.stack
|
|
window.nostr._requests[message.data.id].reject(error)
|
|
} else {
|
|
window.nostr._requests[message.data.id].resolve(message.data.response)
|
|
}
|
|
})
|