aboutsummaryrefslogtreecommitdiff
path: root/extension/src/bg-api/options.ts
diff options
context:
space:
mode:
Diffstat (limited to 'extension/src/bg-api/options.ts')
-rw-r--r--extension/src/bg-api/options.ts80
1 files changed, 80 insertions, 0 deletions
diff --git a/extension/src/bg-api/options.ts b/extension/src/bg-api/options.ts
new file mode 100644
index 0000000..4313f35
--- /dev/null
+++ b/extension/src/bg-api/options.ts
@@ -0,0 +1,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;
+ }
+})()