aboutsummaryrefslogtreecommitdiff
path: root/extension/src/bg-api/options.ts
blob: 4313f3586cfa143b4daebab61552ba8187df44a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// Copyright (C) 2023 Vaughn Nugent
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.


import { apiCall } from "@vnuge/vnlib.browser";
import { useManagment as _mgmt, useStatus as _sts } from "./bg-api"
import { sendMessage } from "webext-bridge/options"
import { truncate } from "lodash";
import { NostrIdentiy, PluginConfig } from "./types";

enum HistoryType {
    get = 'get',
    clear = 'clear',
    remove = 'remove',
    push = 'push'
}

interface HistoryMessage{
    readonly action: string,
    readonly event?: any
}

export const useManagment = (() => {
    const mgmt = _mgmt(sendMessage);    

    const saveSiteConfig = async (config: PluginConfig) => {
        await apiCall(async ({ toaster }) => {
            //Send the login request to the background script
            await sendMessage('setSiteConfig', { ...config }, 'background')

            toaster.form.info({
                title: 'Saved',
                text: 'Site config saved'
            })
        })
    }

    const deleteIdentity = async (key: NostrIdentiy) => {
        await apiCall(async ({ toaster }) => {
            //Delete the desired key async, if it fails it will throw
            await sendMessage('deleteKey', { ...key }, 'background')

            toaster.form.success({
                title: 'Success',
                text: `Successfully delete key ${truncate(key.Id, { length: 7 })}`
            })
        })
    }

    return () => {
        return {
            ...mgmt,
            saveSiteConfig,
            deleteIdentity
        }
    }
})()

export const useStatus = (() => {
    //Bypass the window focus check for the options page
    const status = _sts(sendMessage, true);
    return () => {
        const refs = status.toRefs();
        //run status when called and dont await
        status.update();
        return refs;
    }
})()