@plutonhq/core-frontend 0.1.20 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/components/Storage/AddStorage/AddStorage.module.scss.js +42 -26
- package/dist-lib/components/Storage/AddStorage/AddStorage.module.scss.js.map +1 -1
- package/dist-lib/components/Storage/StorageAuthSettings/StorageAuthSettings.d.ts.map +1 -1
- package/dist-lib/components/Storage/StorageAuthSettings/StorageAuthSettings.js +119 -53
- package/dist-lib/components/Storage/StorageAuthSettings/StorageAuthSettings.js.map +1 -1
- package/dist-lib/components/Storage/StorageItem/StorageItem.d.ts.map +1 -1
- package/dist-lib/components/Storage/StorageItem/StorageItem.js +1 -1
- package/dist-lib/components/Storage/StorageItem/StorageItem.js.map +1 -1
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.d.ts +1 -0
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.d.ts.map +1 -1
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.js +57 -51
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.js.map +1 -1
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.module.scss.js +8 -4
- package/dist-lib/components/common/form/StoragePicker/StoragePicker.module.scss.js.map +1 -1
- package/dist-lib/services/storage.d.ts +10 -0
- package/dist-lib/services/storage.d.ts.map +1 -1
- package/dist-lib/services/storage.js +55 -20
- package/dist-lib/services/storage.js.map +1 -1
- package/dist-lib/services.js +55 -52
- package/dist-lib/styles/core-frontend.css +1 -1
- package/package.json +1 -1
- package/src/components/Storage/AddStorage/AddStorage.module.scss +74 -0
- package/src/components/Storage/StorageAuthSettings/StorageAuthSettings.tsx +136 -3
- package/src/components/Storage/StorageItem/StorageItem.tsx +0 -1
- package/src/components/common/form/StoragePicker/StoragePicker.module.scss +27 -0
- package/src/components/common/form/StoragePicker/StoragePicker.tsx +19 -5
- package/src/services/storage.ts +49 -0
|
@@ -1,86 +1,92 @@
|
|
|
1
|
-
import { jsx as o, jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import { useGetStorages as
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
const
|
|
11
|
-
const [
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import { jsx as o, jsxs as h } from "react/jsx-runtime";
|
|
2
|
+
import { useState as f, useMemo as F, useEffect as k } from "react";
|
|
3
|
+
import r from "./StoragePicker.module.scss.js";
|
|
4
|
+
import O from "../Select/Select.js";
|
|
5
|
+
import { useGetStorages as U } from "../../../../services/storage.js";
|
|
6
|
+
import b from "../Input/Input.js";
|
|
7
|
+
import j from "../../FolderPicker/FolderPicker.js";
|
|
8
|
+
import q from "../../Icon/Icon.js";
|
|
9
|
+
import V from "../../../Storage/AddStorage/AddStorage.js";
|
|
10
|
+
const H = ({ onUpdate: w, storagePath: N = "", storageId: m, disabled: i = !1, deviceId: $ }) => {
|
|
11
|
+
const [t, g] = f(), [v, P] = f(!1), [y, S] = f(!1), [l, u] = f(() => N), p = (t == null ? void 0 : t.type) === "local", n = (t == null ? void 0 : t.defaultPath) && (t == null ? void 0 : t.defaultPath) !== "/", M = n ? `${t.defaultPath}${l ? `/${l}` : ""}` : l, { data: d } = U(), c = [...(d == null ? void 0 : d.result) || []];
|
|
12
|
+
console.log("allStorages :", c), console.log("selectedStorage :", t);
|
|
13
|
+
const x = F(() => c.map(({ name: a, id: s, type: B }) => ({
|
|
14
|
+
label: a,
|
|
15
|
+
value: s.toString(),
|
|
16
|
+
image: /* @__PURE__ */ o("img", { src: `/providers/${B}.png` })
|
|
17
|
+
})), [c]), A = (e) => {
|
|
18
|
+
if (console.log("storageID :", e), e === "add_new")
|
|
17
19
|
return S(!0);
|
|
18
|
-
const
|
|
19
|
-
(
|
|
20
|
+
const a = c.find((s) => s.id == e);
|
|
21
|
+
(a || e === "local") && g(a);
|
|
20
22
|
};
|
|
21
|
-
return
|
|
22
|
-
if (
|
|
23
|
-
const
|
|
24
|
-
|
|
23
|
+
return k(() => {
|
|
24
|
+
if (c.length > 0 && m) {
|
|
25
|
+
const e = c.find((a) => a.id === m);
|
|
26
|
+
if (g(e), e != null && e.defaultPath && e.defaultPath !== "/") {
|
|
27
|
+
const a = e.defaultPath + "/";
|
|
28
|
+
u((s) => s.startsWith(a) ? s.slice(a.length) : s);
|
|
29
|
+
}
|
|
25
30
|
}
|
|
26
|
-
}, [
|
|
27
|
-
|
|
28
|
-
}, [
|
|
29
|
-
/* @__PURE__ */ o("div", { className:
|
|
30
|
-
/* @__PURE__ */ o("div", { className:
|
|
31
|
-
|
|
31
|
+
}, [d]), k(() => {
|
|
32
|
+
t && w({ storage: t, path: M });
|
|
33
|
+
}, [t, l]), /* @__PURE__ */ h("div", { className: r.storagePicker, children: [
|
|
34
|
+
/* @__PURE__ */ o("div", { className: r.storagePickerInput, children: /* @__PURE__ */ h("div", { children: [
|
|
35
|
+
/* @__PURE__ */ o("div", { className: r.storage, children: /* @__PURE__ */ o(
|
|
36
|
+
O,
|
|
32
37
|
{
|
|
33
|
-
fieldValue:
|
|
38
|
+
fieldValue: t != null && t.id ? t.id : "",
|
|
34
39
|
options: [
|
|
35
40
|
{ label: "Select Storage", value: "", icon: "storages" },
|
|
36
|
-
...
|
|
41
|
+
...x,
|
|
37
42
|
{ label: "+ Add New Storage", value: "add_new", icon: "plus" }
|
|
38
43
|
],
|
|
39
44
|
onUpdate: A,
|
|
40
45
|
full: !0,
|
|
41
|
-
disabled:
|
|
46
|
+
disabled: i
|
|
42
47
|
}
|
|
43
48
|
) }),
|
|
44
|
-
/* @__PURE__ */
|
|
49
|
+
/* @__PURE__ */ h("div", { className: `${r.path} ${n ? r.withBucket : ""}`, children: [
|
|
50
|
+
n && /* @__PURE__ */ o("span", { className: r.defaultPath, title: `Bucket: ${t.defaultPath}`, children: t.defaultPath + "/" }),
|
|
45
51
|
/* @__PURE__ */ o(
|
|
46
|
-
|
|
52
|
+
b,
|
|
47
53
|
{
|
|
48
|
-
disabled:
|
|
49
|
-
fieldValue:
|
|
50
|
-
onUpdate: (
|
|
51
|
-
placeholder:
|
|
54
|
+
disabled: i,
|
|
55
|
+
fieldValue: l,
|
|
56
|
+
onUpdate: (e) => u(e.startsWith("/") ? e.slice(1) : e),
|
|
57
|
+
placeholder: p ? "Select a folder" : n ? "subfolder" : "folder-or-bucket/subfolder",
|
|
52
58
|
full: !0,
|
|
53
|
-
required: !
|
|
54
|
-
error: !
|
|
59
|
+
required: !i && p,
|
|
60
|
+
error: !i && p && !l ? "Required" : ""
|
|
55
61
|
}
|
|
56
62
|
),
|
|
57
|
-
(
|
|
63
|
+
(t == null ? void 0 : t.type) && !i && t.type === "local" && /* @__PURE__ */ o(
|
|
58
64
|
"button",
|
|
59
65
|
{
|
|
60
|
-
className:
|
|
66
|
+
className: r.fileManagerBtn,
|
|
61
67
|
"data-tooltip-id": "appTooltip",
|
|
62
68
|
"data-tooltip-content": "Open FileManager to Select Directory",
|
|
63
69
|
"data-tooltip-place": "top",
|
|
64
|
-
onClick: () =>
|
|
65
|
-
children: /* @__PURE__ */ o(
|
|
70
|
+
onClick: () => P(!0),
|
|
71
|
+
children: /* @__PURE__ */ o(q, { type: "folders", size: 16 })
|
|
66
72
|
}
|
|
67
73
|
)
|
|
68
74
|
] })
|
|
69
75
|
] }) }),
|
|
70
|
-
|
|
71
|
-
|
|
76
|
+
v && !i && /* @__PURE__ */ o(
|
|
77
|
+
j,
|
|
72
78
|
{
|
|
73
|
-
deviceId:
|
|
79
|
+
deviceId: $ || "main",
|
|
74
80
|
title: "Select Path",
|
|
75
|
-
selected:
|
|
76
|
-
close: () =>
|
|
77
|
-
onSelect: (
|
|
81
|
+
selected: l,
|
|
82
|
+
close: () => P(!1),
|
|
83
|
+
onSelect: (e) => u(e)
|
|
78
84
|
}
|
|
79
85
|
),
|
|
80
|
-
y && /* @__PURE__ */ o(
|
|
86
|
+
y && /* @__PURE__ */ o(V, { close: () => S(!1) })
|
|
81
87
|
] });
|
|
82
88
|
};
|
|
83
89
|
export {
|
|
84
|
-
|
|
90
|
+
H as default
|
|
85
91
|
};
|
|
86
92
|
//# sourceMappingURL=StoragePicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoragePicker.js","sources":["../../../../../src/components/common/form/StoragePicker/StoragePicker.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\r\nimport classes from './StoragePicker.module.scss';\r\nimport Select from '../Select/Select';\r\nimport { useGetStorages } from '../../../../services/storage';\r\nimport Input from '../Input/Input';\r\nimport FolderPicker from '../../FolderPicker/FolderPicker';\r\nimport Icon from '../../Icon/Icon';\r\nimport AddStorage from '../../../Storage/AddStorage/AddStorage';\r\n\r\ntype storageItem = { name: string; id: string; type: string };\r\n\r\ninterface StoragePickerProps {\r\n storagePath?: string;\r\n storageId?: string;\r\n disabled?: boolean;\r\n deviceId?: string;\r\n onUpdate: (val: { storage: storageItem; path: string }) => void;\r\n}\r\n\r\nconst StoragePicker = ({ onUpdate, storagePath = '', storageId, disabled = false, deviceId }: StoragePickerProps) => {\r\n const [selectedStorage, setSelectedStorage] = useState<null | storageItem>();\r\n const [showFolderPicker, setShowFolderPicker] = useState(false);\r\n const [showAddStorageModal, setShowAddStorageModal] = useState(false);\r\n const [path, setPath] = useState(() => storagePath);\r\n const isLocalStorage = selectedStorage?.type === 'local';\r\n\r\n const { data: allStorageData } = useGetStorages();\r\n const allUserStorages = (allStorageData?.result as storageItem[]) || [];\r\n const allStorages = [...allUserStorages];\r\n\r\n const storageOptions = useMemo(() => {\r\n const storageOpts = allStorages.map(({ name, id, type }) => ({\r\n label: name,\r\n value: id.toString(),\r\n image: <img src={`/providers/${type}.png`} />,\r\n }));\r\n return storageOpts;\r\n }, [allStorages]);\r\n\r\n const selectStorage = (storageID: string) => {\r\n console.log('storageID :', storageID);\r\n if (storageID === 'add_new') {\r\n return setShowAddStorageModal(true);\r\n }\r\n const theStorage = allStorages.find((s) => s.id == storageID);\r\n if (theStorage || storageID === 'local') {\r\n setSelectedStorage(theStorage);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (allStorages.length > 0 && storageId) {\r\n const currentStorage = allStorages.find((s) => s.id === storageId);\r\n setSelectedStorage(currentStorage);\r\n }\r\n }, [allStorageData]);\r\n\r\n useEffect(() => {\r\n if (selectedStorage) {\r\n onUpdate({ storage: selectedStorage, path });\r\n }\r\n }, [selectedStorage, path]);\r\n\r\n // console.log('Storage path :', path, !disabled && isLocalStorage && !path);\r\n\r\n return (\r\n <div className={classes.storagePicker}>\r\n <div className={classes.storagePickerInput}>\r\n <div>\r\n <div className={classes.storage}>\r\n <Select\r\n fieldValue={selectedStorage?.id ? selectedStorage.id : ''}\r\n options={[\r\n { label: 'Select Storage', value: '', icon: 'storages' },\r\n ...storageOptions,\r\n { label: '+ Add New Storage', value: 'add_new', icon: 'plus' },\r\n ]}\r\n onUpdate={selectStorage}\r\n full={true}\r\n disabled={disabled}\r\n />\r\n </div>\r\n <div className={classes.path}>\r\n <Input\r\n disabled={disabled}\r\n fieldValue={path}\r\n onUpdate={(val) => setPath(val)}\r\n placeholder={isLocalStorage ? 'Select a folder' : `folder-or-bucket/subfolder`}\r\n full={true}\r\n required={!disabled && isLocalStorage}\r\n error={(!disabled && isLocalStorage && !path ? 'Required' : '') as string}\r\n />\r\n {selectedStorage?.type && !disabled && selectedStorage.type === 'local' && (\r\n <button\r\n className={classes.fileManagerBtn}\r\n data-tooltip-id=\"appTooltip\"\r\n data-tooltip-content=\"Open FileManager to Select Directory\"\r\n data-tooltip-place=\"top\"\r\n onClick={() => setShowFolderPicker(true)}\r\n >\r\n <Icon type=\"folders\" size={16} />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n {showFolderPicker && !disabled && (\r\n <FolderPicker\r\n deviceId={deviceId || 'main'}\r\n title=\"Select Path\"\r\n selected={path}\r\n close={() => setShowFolderPicker(false)}\r\n onSelect={(newVal) => setPath(newVal)}\r\n />\r\n )}\r\n {showAddStorageModal && <AddStorage close={() => setShowAddStorageModal(false)} />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default StoragePicker;\r\n"],"names":["StoragePicker","onUpdate","storagePath","storageId","disabled","deviceId","selectedStorage","setSelectedStorage","useState","showFolderPicker","setShowFolderPicker","showAddStorageModal","setShowAddStorageModal","path","setPath","isLocalStorage","allStorageData","useGetStorages","allStorages","storageOptions","useMemo","name","id","type","jsx","selectStorage","storageID","theStorage","s","
|
|
1
|
+
{"version":3,"file":"StoragePicker.js","sources":["../../../../../src/components/common/form/StoragePicker/StoragePicker.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\r\nimport classes from './StoragePicker.module.scss';\r\nimport Select from '../Select/Select';\r\nimport { useGetStorages } from '../../../../services/storage';\r\nimport Input from '../Input/Input';\r\nimport FolderPicker from '../../FolderPicker/FolderPicker';\r\nimport Icon from '../../Icon/Icon';\r\nimport AddStorage from '../../../Storage/AddStorage/AddStorage';\r\n\r\ntype storageItem = { name: string; id: string; type: string; defaultPath?: string };\r\n\r\ninterface StoragePickerProps {\r\n storagePath?: string;\r\n storageId?: string;\r\n disabled?: boolean;\r\n deviceId?: string;\r\n onUpdate: (val: { storage: storageItem; path: string }) => void;\r\n}\r\n\r\nconst StoragePicker = ({ onUpdate, storagePath = '', storageId, disabled = false, deviceId }: StoragePickerProps) => {\r\n const [selectedStorage, setSelectedStorage] = useState<null | storageItem>();\r\n const [showFolderPicker, setShowFolderPicker] = useState(false);\r\n const [showAddStorageModal, setShowAddStorageModal] = useState(false);\r\n const [path, setPath] = useState(() => storagePath);\r\n const isLocalStorage = selectedStorage?.type === 'local';\r\n const hasBucketName = selectedStorage?.defaultPath && selectedStorage?.defaultPath !== '/';\r\n const fullPath = hasBucketName ? `${selectedStorage.defaultPath}${path ? `/${path}` : ''}` : path;\r\n\r\n const { data: allStorageData } = useGetStorages();\r\n const allUserStorages = (allStorageData?.result as storageItem[]) || [];\r\n const allStorages = [...allUserStorages];\r\n\r\n console.log('allStorages :', allStorages);\r\n console.log('selectedStorage :', selectedStorage);\r\n\r\n const storageOptions = useMemo(() => {\r\n const storageOpts = allStorages.map(({ name, id, type }) => ({\r\n label: name,\r\n value: id.toString(),\r\n image: <img src={`/providers/${type}.png`} />,\r\n }));\r\n return storageOpts;\r\n }, [allStorages]);\r\n\r\n const selectStorage = (storageID: string) => {\r\n console.log('storageID :', storageID);\r\n if (storageID === 'add_new') {\r\n return setShowAddStorageModal(true);\r\n }\r\n const theStorage = allStorages.find((s) => s.id == storageID);\r\n if (theStorage || storageID === 'local') {\r\n setSelectedStorage(theStorage);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (allStorages.length > 0 && storageId) {\r\n const currentStorage = allStorages.find((s) => s.id === storageId);\r\n setSelectedStorage(currentStorage);\r\n if (currentStorage?.defaultPath && currentStorage.defaultPath !== '/') {\r\n const prefix = currentStorage.defaultPath + '/';\r\n setPath((prev) => (prev.startsWith(prefix) ? prev.slice(prefix.length) : prev));\r\n }\r\n }\r\n }, [allStorageData]);\r\n\r\n useEffect(() => {\r\n if (selectedStorage) {\r\n onUpdate({ storage: selectedStorage, path: fullPath });\r\n }\r\n }, [selectedStorage, path]);\r\n\r\n // console.log('Storage path :', path, !disabled && isLocalStorage && !path);\r\n\r\n return (\r\n <div className={classes.storagePicker}>\r\n <div className={classes.storagePickerInput}>\r\n <div>\r\n <div className={classes.storage}>\r\n <Select\r\n fieldValue={selectedStorage?.id ? selectedStorage.id : ''}\r\n options={[\r\n { label: 'Select Storage', value: '', icon: 'storages' },\r\n ...storageOptions,\r\n { label: '+ Add New Storage', value: 'add_new', icon: 'plus' },\r\n ]}\r\n onUpdate={selectStorage}\r\n full={true}\r\n disabled={disabled}\r\n />\r\n </div>\r\n <div className={`${classes.path} ${hasBucketName ? classes.withBucket : ''}`}>\r\n {hasBucketName && (\r\n <span className={classes.defaultPath} title={`Bucket: ${selectedStorage.defaultPath}`}>\r\n {selectedStorage.defaultPath + '/'}\r\n </span>\r\n )}\r\n <Input\r\n disabled={disabled}\r\n fieldValue={path}\r\n onUpdate={(val) => setPath(val.startsWith('/') ? val.slice(1) : val)} //if the val starts with a slash remove it\r\n placeholder={isLocalStorage ? 'Select a folder' : hasBucketName ? 'subfolder' : `folder-or-bucket/subfolder`}\r\n full={true}\r\n required={!disabled && isLocalStorage}\r\n error={(!disabled && isLocalStorage && !path ? 'Required' : '') as string}\r\n />\r\n {selectedStorage?.type && !disabled && selectedStorage.type === 'local' && (\r\n <button\r\n className={classes.fileManagerBtn}\r\n data-tooltip-id=\"appTooltip\"\r\n data-tooltip-content=\"Open FileManager to Select Directory\"\r\n data-tooltip-place=\"top\"\r\n onClick={() => setShowFolderPicker(true)}\r\n >\r\n <Icon type=\"folders\" size={16} />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n {showFolderPicker && !disabled && (\r\n <FolderPicker\r\n deviceId={deviceId || 'main'}\r\n title=\"Select Path\"\r\n selected={path}\r\n close={() => setShowFolderPicker(false)}\r\n onSelect={(newVal) => setPath(newVal)}\r\n />\r\n )}\r\n {showAddStorageModal && <AddStorage close={() => setShowAddStorageModal(false)} />}\r\n </div>\r\n );\r\n};\r\n\r\nexport default StoragePicker;\r\n"],"names":["StoragePicker","onUpdate","storagePath","storageId","disabled","deviceId","selectedStorage","setSelectedStorage","useState","showFolderPicker","setShowFolderPicker","showAddStorageModal","setShowAddStorageModal","path","setPath","isLocalStorage","hasBucketName","fullPath","allStorageData","useGetStorages","allStorages","storageOptions","useMemo","name","id","type","jsx","selectStorage","storageID","theStorage","useEffect","currentStorage","s","prefix","prev","jsxs","classes","Select","Input","val","Icon","FolderPicker","newVal","AddStorage"],"mappings":"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"}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
const t = "
|
|
1
|
+
const t = "_storagePicker_kvugu", e = "_storagePickerInput_8qVhl", a = "_storage_VHvA4", r = "_path_5lhxE", s = "_fileManagerBtn_LmfTc", c = "_defaultPath_y5rOr", o = "_withBucket_3LxSW", n = {
|
|
2
2
|
storagePicker: t,
|
|
3
3
|
storagePickerInput: e,
|
|
4
4
|
storage: a,
|
|
5
5
|
path: r,
|
|
6
|
-
fileManagerBtn: s
|
|
6
|
+
fileManagerBtn: s,
|
|
7
|
+
defaultPath: c,
|
|
8
|
+
withBucket: o
|
|
7
9
|
};
|
|
8
10
|
export {
|
|
9
|
-
|
|
11
|
+
n as default,
|
|
12
|
+
c as defaultPath,
|
|
10
13
|
s as fileManagerBtn,
|
|
11
14
|
r as path,
|
|
12
15
|
a as storage,
|
|
13
16
|
t as storagePicker,
|
|
14
|
-
e as storagePickerInput
|
|
17
|
+
e as storagePickerInput,
|
|
18
|
+
o as withBucket
|
|
15
19
|
};
|
|
16
20
|
//# sourceMappingURL=StoragePicker.module.scss.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoragePicker.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StoragePicker.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -29,5 +29,15 @@ export declare function deleteStorage(id: string): Promise<any>;
|
|
|
29
29
|
export declare function useDeleteStorage(): import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
|
|
30
30
|
export declare function verifyStorage(id: string): Promise<any>;
|
|
31
31
|
export declare function useVerifyStorage(): import("@tanstack/react-query").UseMutationResult<any, Error, string, unknown>;
|
|
32
|
+
export declare function startStorageAuthorize(type: string): Promise<{
|
|
33
|
+
sessionId: string;
|
|
34
|
+
}>;
|
|
35
|
+
export declare function getStorageAuthorizeStatus(sessionId: string): Promise<{
|
|
36
|
+
status: 'pending' | 'success' | 'error';
|
|
37
|
+
token?: string;
|
|
38
|
+
error?: string;
|
|
39
|
+
authUrl?: string;
|
|
40
|
+
}>;
|
|
41
|
+
export declare function cancelStorageAuthorize(sessionId: string): Promise<void>;
|
|
32
42
|
export {};
|
|
33
43
|
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/services/storage.ts"],"names":[],"mappings":"AAGA,UAAU,iBAAiB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AACD,UAAU,oBAAoB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE;QAEH,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;QACvD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACJ;AAGD,wBAAsB,oBAAoB,iBAYzC;AAED,wBAAgB,uBAAuB,+DAOtC;AAGD,wBAAsB,cAAc,iBAYnC;AAED,wBAAgB,cAAc,+DAO7B;AAGD,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,gBAY1C;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,8DAOvC;AAGD,wBAAsB,UAAU,CAAC,UAAU,EAAE,iBAAiB,gBAa7D;AAED,wBAAgB,aAAa,8FAS5B;AAGD,wBAAsB,aAAa,CAAC,cAAc,EAAE,oBAAoB,gBAavE;AAED,wBAAgB,gBAAgB,iGAU/B;AAGD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,gBAY7C;AAED,wBAAgB,gBAAgB,mFAU/B;AAGD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,gBAY7C;AAED,wBAAgB,gBAAgB,mFAQ/B"}
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/services/storage.ts"],"names":[],"mappings":"AAGA,UAAU,iBAAiB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACvD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AACD,UAAU,oBAAoB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE;QAEH,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;QACvD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACJ;AAGD,wBAAsB,oBAAoB,iBAYzC;AAED,wBAAgB,uBAAuB,+DAOtC;AAGD,wBAAsB,cAAc,iBAYnC;AAED,wBAAgB,cAAc,+DAO7B;AAGD,wBAAsB,UAAU,CAAC,EAAE,EAAE,MAAM,gBAY1C;AAED,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,8DAOvC;AAGD,wBAAsB,UAAU,CAAC,UAAU,EAAE,iBAAiB,gBAa7D;AAED,wBAAgB,aAAa,8FAS5B;AAGD,wBAAsB,aAAa,CAAC,cAAc,EAAE,oBAAoB,gBAavE;AAED,wBAAgB,gBAAgB,iGAU/B;AAGD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,gBAY7C;AAED,wBAAgB,gBAAgB,mFAU/B;AAGD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,gBAY7C;AAED,wBAAgB,gBAAgB,mFAQ/B;AAGD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAaxF;AAED,wBAAsB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACzE,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC,CAYD;AAED,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAY7E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { useQuery as a, useQueryClient as c, useMutation as
|
|
2
|
-
import { API_URL as
|
|
1
|
+
import { useQuery as a, useQueryClient as c, useMutation as o } from "@tanstack/react-query";
|
|
2
|
+
import { API_URL as s } from "../utils/constants.js";
|
|
3
3
|
async function i() {
|
|
4
|
-
const e = new URL(`${
|
|
4
|
+
const e = new URL(`${s}/storages/available`), n = await (await fetch(e.toString(), {
|
|
5
5
|
method: "GET",
|
|
6
6
|
credentials: "include"
|
|
7
7
|
})).json();
|
|
@@ -18,7 +18,7 @@ function p() {
|
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
async function u() {
|
|
21
|
-
const e = new URL(`${
|
|
21
|
+
const e = new URL(`${s}/storages`), n = await (await fetch(e.toString(), {
|
|
22
22
|
method: "GET",
|
|
23
23
|
credentials: "include"
|
|
24
24
|
})).json();
|
|
@@ -35,7 +35,7 @@ function S() {
|
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
async function d(e) {
|
|
38
|
-
const r = new URL(`${
|
|
38
|
+
const r = new URL(`${s}/storages/${e}`), t = await (await fetch(r.toString(), {
|
|
39
39
|
method: "GET",
|
|
40
40
|
credentials: "include"
|
|
41
41
|
})).json();
|
|
@@ -52,7 +52,7 @@ function j(e) {
|
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
async function l(e) {
|
|
55
|
-
const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${
|
|
55
|
+
const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${s}/storages`, {
|
|
56
56
|
method: "POST",
|
|
57
57
|
credentials: "include",
|
|
58
58
|
headers: r,
|
|
@@ -64,7 +64,7 @@ async function l(e) {
|
|
|
64
64
|
}
|
|
65
65
|
function m() {
|
|
66
66
|
const e = c();
|
|
67
|
-
return
|
|
67
|
+
return o({
|
|
68
68
|
mutationFn: l,
|
|
69
69
|
onSuccess: (r) => {
|
|
70
70
|
console.log("# Storage Added! :", r), e.invalidateQueries({ queryKey: ["storages"] });
|
|
@@ -72,7 +72,7 @@ function m() {
|
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
74
|
async function f(e) {
|
|
75
|
-
const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${
|
|
75
|
+
const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${s}/storages/${e.id}`, {
|
|
76
76
|
method: "PUT",
|
|
77
77
|
credentials: "include",
|
|
78
78
|
headers: r,
|
|
@@ -84,7 +84,7 @@ async function f(e) {
|
|
|
84
84
|
}
|
|
85
85
|
function E() {
|
|
86
86
|
const e = c();
|
|
87
|
-
return
|
|
87
|
+
return o({
|
|
88
88
|
mutationFn: f,
|
|
89
89
|
onSuccess: (r) => {
|
|
90
90
|
console.log("# Storage Updated! :", r), e.invalidateQueries({ queryKey: ["storages"] });
|
|
@@ -92,7 +92,7 @@ function E() {
|
|
|
92
92
|
});
|
|
93
93
|
}
|
|
94
94
|
async function g(e) {
|
|
95
|
-
const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${
|
|
95
|
+
const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${s}/storages/${e}`, {
|
|
96
96
|
method: "DELETE",
|
|
97
97
|
credentials: "include",
|
|
98
98
|
headers: r
|
|
@@ -101,17 +101,17 @@ async function g(e) {
|
|
|
101
101
|
throw new Error(t.error);
|
|
102
102
|
return t;
|
|
103
103
|
}
|
|
104
|
-
function
|
|
104
|
+
function T() {
|
|
105
105
|
const e = c();
|
|
106
|
-
return
|
|
106
|
+
return o({
|
|
107
107
|
mutationFn: g,
|
|
108
108
|
onSuccess: (r) => {
|
|
109
109
|
console.log("# Storage Updated! :", r), e.invalidateQueries({ queryKey: ["storages"] });
|
|
110
110
|
}
|
|
111
111
|
});
|
|
112
112
|
}
|
|
113
|
-
async function
|
|
114
|
-
const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${
|
|
113
|
+
async function h(e) {
|
|
114
|
+
const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${s}/storages/verify/${e}`, {
|
|
115
115
|
method: "POST",
|
|
116
116
|
credentials: "include",
|
|
117
117
|
headers: r
|
|
@@ -120,28 +120,63 @@ async function y(e) {
|
|
|
120
120
|
throw new Error(t.error);
|
|
121
121
|
return t;
|
|
122
122
|
}
|
|
123
|
-
function
|
|
124
|
-
return
|
|
125
|
-
mutationFn:
|
|
123
|
+
function A() {
|
|
124
|
+
return o({
|
|
125
|
+
mutationFn: h,
|
|
126
126
|
onSuccess: (e) => {
|
|
127
127
|
console.log("# Storage Verfied! :", e);
|
|
128
128
|
}
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
|
+
async function $(e) {
|
|
132
|
+
const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${s}/storages/authorize`, {
|
|
133
|
+
method: "POST",
|
|
134
|
+
credentials: "include",
|
|
135
|
+
headers: r,
|
|
136
|
+
body: JSON.stringify({ type: e })
|
|
137
|
+
})).json();
|
|
138
|
+
if (!t.success)
|
|
139
|
+
throw new Error(t.error);
|
|
140
|
+
return t.result;
|
|
141
|
+
}
|
|
142
|
+
async function q(e) {
|
|
143
|
+
const r = new URL(`${s}/storages/authorize/status`);
|
|
144
|
+
r.searchParams.set("sessionId", e);
|
|
145
|
+
const t = await (await fetch(r.toString(), {
|
|
146
|
+
method: "GET",
|
|
147
|
+
credentials: "include"
|
|
148
|
+
})).json();
|
|
149
|
+
if (!t.success)
|
|
150
|
+
throw new Error(t.error);
|
|
151
|
+
return t.result;
|
|
152
|
+
}
|
|
153
|
+
async function O(e) {
|
|
154
|
+
const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${s}/storages/authorize/cancel`, {
|
|
155
|
+
method: "POST",
|
|
156
|
+
credentials: "include",
|
|
157
|
+
headers: r,
|
|
158
|
+
body: JSON.stringify({ sessionId: e })
|
|
159
|
+
})).json();
|
|
160
|
+
if (!t.success)
|
|
161
|
+
throw new Error(t.error);
|
|
162
|
+
}
|
|
131
163
|
export {
|
|
132
164
|
l as addStorage,
|
|
165
|
+
O as cancelStorageAuthorize,
|
|
133
166
|
g as deleteStorage,
|
|
134
167
|
u as getAllStorages,
|
|
135
168
|
i as getAvailableStorages,
|
|
136
169
|
d as getStorage,
|
|
170
|
+
q as getStorageAuthorizeStatus,
|
|
171
|
+
$ as startStorageAuthorize,
|
|
137
172
|
f as updateStorage,
|
|
138
173
|
m as useAddStorage,
|
|
139
|
-
|
|
174
|
+
T as useDeleteStorage,
|
|
140
175
|
p as useGetAvailableStorages,
|
|
141
176
|
j as useGetStorage,
|
|
142
177
|
S as useGetStorages,
|
|
143
178
|
E as useUpdateStorage,
|
|
144
|
-
|
|
145
|
-
|
|
179
|
+
A as useVerifyStorage,
|
|
180
|
+
h as verifyStorage
|
|
146
181
|
};
|
|
147
182
|
//# sourceMappingURL=storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sources":["../../src/services/storage.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { API_URL } from '../utils/constants';\r\n\r\ninterface NewStoragePayload {\r\n name: string;\r\n type: string;\r\n authType: string;\r\n credentials: Record<string, string | number | boolean>;\r\n settings: Record<string, string | number | boolean>;\r\n tags?: string[];\r\n}\r\ninterface UpdateStoragePayload {\r\n id: string;\r\n data: {\r\n // name: string;\r\n type: string;\r\n credentials: Record<string, string | number | boolean>;\r\n settings: Record<string, string | number | boolean>;\r\n tags?: string[];\r\n };\r\n}\r\n\r\n// Get All Storages\r\nexport async function getAvailableStorages() {\r\n const url = new URL(`${API_URL}/storages/available`);\r\n\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetAvailableStorages() {\r\n return useQuery({\r\n queryKey: ['storageSettings'],\r\n queryFn: () => getAvailableStorages(),\r\n refetchOnMount: false,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Get All Storages\r\nexport async function getAllStorages() {\r\n const url = new URL(`${API_URL}/storages`);\r\n\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetStorages() {\r\n return useQuery({\r\n queryKey: ['storages'],\r\n queryFn: () => getAllStorages(),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Get Single Storage\r\nexport async function getStorage(id: string) {\r\n const url = new URL(`${API_URL}/storages/${id}`);\r\n\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetStorage(id: string) {\r\n return useQuery({\r\n queryKey: ['storage', id],\r\n queryFn: () => getStorage(id),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Add New Storage\r\nexport async function addStorage(newStorage: NewStoragePayload) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/storages`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(newStorage),\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useAddStorage() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: addStorage,\r\n onSuccess: (res) => {\r\n console.log('# Storage Added! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['storages'] });\r\n },\r\n });\r\n}\r\n\r\n// Update Storage\r\nexport async function updateStorage(updatedStorage: UpdateStoragePayload) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/storages/${updatedStorage.id}`, {\r\n method: 'PUT',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(updatedStorage.data),\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useUpdateStorage() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: updateStorage,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Nofitication Bubble.\r\n console.log('# Storage Updated! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['storages'] });\r\n },\r\n });\r\n}\r\n\r\n// Remove Storage\r\nexport async function deleteStorage(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/storages/${id}`, {\r\n method: 'DELETE',\r\n credentials: 'include',\r\n headers: header,\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useDeleteStorage() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: deleteStorage,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Nofitication Bubble.\r\n console.log('# Storage Updated! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['storages'] });\r\n },\r\n });\r\n}\r\n\r\n// Verify Storage\r\nexport async function verifyStorage(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/storages/verify/${id}`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useVerifyStorage() {\r\n return useMutation({\r\n mutationFn: verifyStorage,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Nofitication Bubble.\r\n console.log('# Storage Verfied! :', res);\r\n },\r\n });\r\n}\r\n"],"names":["getAvailableStorages","url","API_URL","data","useGetAvailableStorages","useQuery","getAllStorages","useGetStorages","getStorage","id","useGetStorage","addStorage","newStorage","header","useAddStorage","queryClient","useQueryClient","useMutation","res","updateStorage","updatedStorage","useUpdateStorage","deleteStorage","useDeleteStorage","verifyStorage","useVerifyStorage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.js","sources":["../../src/services/storage.ts"],"sourcesContent":["import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';\r\nimport { API_URL } from '../utils/constants';\r\n\r\ninterface NewStoragePayload {\r\n name: string;\r\n type: string;\r\n authType: string;\r\n credentials: Record<string, string | number | boolean>;\r\n settings: Record<string, string | number | boolean>;\r\n tags?: string[];\r\n}\r\ninterface UpdateStoragePayload {\r\n id: string;\r\n data: {\r\n // name: string;\r\n type: string;\r\n credentials: Record<string, string | number | boolean>;\r\n settings: Record<string, string | number | boolean>;\r\n tags?: string[];\r\n };\r\n}\r\n\r\n// Get All Storages\r\nexport async function getAvailableStorages() {\r\n const url = new URL(`${API_URL}/storages/available`);\r\n\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetAvailableStorages() {\r\n return useQuery({\r\n queryKey: ['storageSettings'],\r\n queryFn: () => getAvailableStorages(),\r\n refetchOnMount: false,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Get All Storages\r\nexport async function getAllStorages() {\r\n const url = new URL(`${API_URL}/storages`);\r\n\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetStorages() {\r\n return useQuery({\r\n queryKey: ['storages'],\r\n queryFn: () => getAllStorages(),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Get Single Storage\r\nexport async function getStorage(id: string) {\r\n const url = new URL(`${API_URL}/storages/${id}`);\r\n\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useGetStorage(id: string) {\r\n return useQuery({\r\n queryKey: ['storage', id],\r\n queryFn: () => getStorage(id),\r\n refetchOnMount: true,\r\n retry: false,\r\n });\r\n}\r\n\r\n// Add New Storage\r\nexport async function addStorage(newStorage: NewStoragePayload) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/storages`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(newStorage),\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useAddStorage() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: addStorage,\r\n onSuccess: (res) => {\r\n console.log('# Storage Added! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['storages'] });\r\n },\r\n });\r\n}\r\n\r\n// Update Storage\r\nexport async function updateStorage(updatedStorage: UpdateStoragePayload) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/storages/${updatedStorage.id}`, {\r\n method: 'PUT',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify(updatedStorage.data),\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useUpdateStorage() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: updateStorage,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Nofitication Bubble.\r\n console.log('# Storage Updated! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['storages'] });\r\n },\r\n });\r\n}\r\n\r\n// Remove Storage\r\nexport async function deleteStorage(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/storages/${id}`, {\r\n method: 'DELETE',\r\n credentials: 'include',\r\n headers: header,\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useDeleteStorage() {\r\n const queryClient = useQueryClient();\r\n return useMutation({\r\n mutationFn: deleteStorage,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Nofitication Bubble.\r\n console.log('# Storage Updated! :', res);\r\n queryClient.invalidateQueries({ queryKey: ['storages'] });\r\n },\r\n });\r\n}\r\n\r\n// Verify Storage\r\nexport async function verifyStorage(id: string) {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/storages/verify/${id}`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data;\r\n}\r\n\r\nexport function useVerifyStorage() {\r\n return useMutation({\r\n mutationFn: verifyStorage,\r\n onSuccess: (res) => {\r\n // TODO: Should Display a Nofitication Bubble.\r\n console.log('# Storage Verfied! :', res);\r\n },\r\n });\r\n}\r\n\r\n// ── OAuth Authorization ─────────────────────────────────────────────\r\nexport async function startStorageAuthorize(type: string): Promise<{ sessionId: string }> {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/storages/authorize`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify({ type }),\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data.result;\r\n}\r\n\r\nexport async function getStorageAuthorizeStatus(sessionId: string): Promise<{\r\n status: 'pending' | 'success' | 'error';\r\n token?: string;\r\n error?: string;\r\n authUrl?: string;\r\n}> {\r\n const url = new URL(`${API_URL}/storages/authorize/status`);\r\n url.searchParams.set('sessionId', sessionId);\r\n const res = await fetch(url.toString(), {\r\n method: 'GET',\r\n credentials: 'include',\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n return data.result;\r\n}\r\n\r\nexport async function cancelStorageAuthorize(sessionId: string): Promise<void> {\r\n const header = new Headers({ 'Content-Type': 'application/json', Accept: 'application/json' });\r\n const res = await fetch(`${API_URL}/storages/authorize/cancel`, {\r\n method: 'POST',\r\n credentials: 'include',\r\n headers: header,\r\n body: JSON.stringify({ sessionId }),\r\n });\r\n const data = await res.json();\r\n if (!data.success) {\r\n throw new Error(data.error);\r\n }\r\n}\r\n"],"names":["getAvailableStorages","url","API_URL","data","useGetAvailableStorages","useQuery","getAllStorages","useGetStorages","getStorage","id","useGetStorage","addStorage","newStorage","header","useAddStorage","queryClient","useQueryClient","useMutation","res","updateStorage","updatedStorage","useUpdateStorage","deleteStorage","useDeleteStorage","verifyStorage","useVerifyStorage","startStorageAuthorize","type","getStorageAuthorizeStatus","sessionId","cancelStorageAuthorize"],"mappings":"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"}
|