108 lines
2.9 KiB
JavaScript
108 lines
2.9 KiB
JavaScript
import Alpine from 'alpinejs';
|
|
import jsonFormatHighlight from 'json-format-highlight';
|
|
import { KINDS } from '../utilities/utils';
|
|
|
|
storage = browser.storage.local;
|
|
|
|
window.addEventListener('beforeunload', () => {
|
|
browser.runtime.sendMessage({ kind: 'closePrompt' });
|
|
return true;
|
|
});
|
|
|
|
Alpine.data('permission', () => ({
|
|
host: '',
|
|
permission: '',
|
|
key: '',
|
|
event: '',
|
|
remember: false,
|
|
|
|
async init() {
|
|
let qs = new URLSearchParams(location.search);
|
|
console.log(location.search);
|
|
this.host = qs.get('host');
|
|
this.permission = qs.get('kind');
|
|
this.key = qs.get('uuid');
|
|
this.event = JSON.parse(qs.get('payload'));
|
|
},
|
|
|
|
async allow() {
|
|
console.log('allowing');
|
|
await browser.runtime.sendMessage({
|
|
kind: 'allowed',
|
|
payload: this.key,
|
|
origKind: this.permission,
|
|
event: this.event,
|
|
remember: this.remember,
|
|
host: this.host,
|
|
});
|
|
console.log('closing');
|
|
await this.close();
|
|
},
|
|
|
|
async deny() {
|
|
await browser.runtime.sendMessage({
|
|
kind: 'denied',
|
|
payload: this.key,
|
|
origKind: this.permission,
|
|
event: this.event,
|
|
remember: this.remember,
|
|
host: this.host,
|
|
});
|
|
await this.close();
|
|
},
|
|
|
|
async close() {
|
|
let tab = await browser.tabs.getCurrent();
|
|
console.log('closing current tab: ', tab.id);
|
|
await browser.tabs.update(tab.openerTabId, { active: true });
|
|
window.close();
|
|
},
|
|
|
|
async openNip() {
|
|
await browser.tabs.create({ url: this.eventInfo.nip, active: true });
|
|
},
|
|
|
|
get humanPermission() {
|
|
switch (this.permission) {
|
|
case 'getPubKey':
|
|
return 'Read public key';
|
|
case 'signEvent':
|
|
return 'Sign event';
|
|
case 'getRelays':
|
|
return 'Read relay list';
|
|
case 'nip04.encrypt':
|
|
return 'Encrypt private message (NIP-04)';
|
|
case 'nip04.decrypt':
|
|
return 'Decrypt private message (NIP-04)';
|
|
case 'nip44.encrypt':
|
|
return 'Encrypt private message (NIP-44)';
|
|
case 'nip44.decrypt':
|
|
return 'Decrypt private message (NIP-44)';
|
|
default:
|
|
break;
|
|
}
|
|
},
|
|
|
|
get humanEvent() {
|
|
return jsonFormatHighlight(this.event);
|
|
},
|
|
|
|
get isSigningEvent() {
|
|
return this.permission === 'signEvent';
|
|
},
|
|
|
|
get eventInfo() {
|
|
if (!this.isSigningEvent) {
|
|
return {};
|
|
}
|
|
|
|
let [kind, desc, nip] = KINDS.find(([kind, desc, nip]) => {
|
|
return kind === this.event.kind;
|
|
}) || ['Unknown', 'Unknown', 'https://github.com/nostr-protocol/nips'];
|
|
|
|
return { kind, desc, nip };
|
|
},
|
|
}));
|
|
|
|
Alpine.start();
|