Files
nostr-connect/extension/common.js
monlovesmango 11c792e9d6 default permissions to empty object
if there are no existing permissions, updatePermissions will error when setting the host permissions. this defaults permissions to empty object (exactly like readPermissions does)
2022-12-15 18:31:50 -03:00

84 lines
2.1 KiB
JavaScript

import browser from 'webextension-polyfill'
export const PERMISSIONS_REQUIRED = {
getPublicKey: 1,
getRelays: 5,
signEvent: 10,
'nip04.encrypt': 20,
'nip04.decrypt': 20
}
const ORDERED_PERMISSIONS = [
[1, ['getPublicKey']],
[5, ['getRelays']],
[10, ['signEvent']],
[20, ['nip04.encrypt']],
[20, ['nip04.decrypt']]
]
const PERMISSION_NAMES = {
getPublicKey: 'read your public key',
getRelays: 'read your list of preferred relays',
signEvent: 'sign events using your private key',
'nip04.encrypt': 'encrypt messages to peers',
'nip04.decrypt': 'decrypt messages from peers'
}
export function getAllowedCapabilities(permission) {
let requestedMethods = []
for (let i = 0; i < ORDERED_PERMISSIONS.length; i++) {
let [perm, methods] = ORDERED_PERMISSIONS[i]
if (perm > permission) break
requestedMethods = requestedMethods.concat(methods)
}
if (requestedMethods.length === 0) return 'nothing'
return requestedMethods.map(method => PERMISSION_NAMES[method])
}
export function getPermissionsString(permission) {
let capabilities = getAllowedCapabilities(permission)
if (capabilities.length === 0) return 'none'
if (capabilities.length === 1) return capabilities[0]
return (
capabilities.slice(0, -1).join(', ') +
' and ' +
capabilities[capabilities.length - 1]
)
}
export async function readPermissions() {
let {permissions = {}} = await browser.storage.local.get('permissions')
// delete expired
var needsUpdate = false
for (let host in permissions) {
if (
permissions[host].condition === 'expirable' &&
permissions[host].created_at < Date.now() / 1000 - 5 * 60
) {
delete permissions[host]
needsUpdate = true
}
}
if (needsUpdate) browser.storage.local.set({permissions})
return permissions
}
export async function readPermissionLevel(host) {
return (await readPermissions())[host]?.level || 0
}
export async function updatePermission(host, permission) {
let {permissions = {}} = await browser.storage.local.get('permissions')
permissions[host] = {
...permission,
created_at: Math.round(Date.now() / 1000)
}
browser.storage.local.set({permissions})
}