@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.
Files changed (27) hide show
  1. package/dist-lib/components/Storage/AddStorage/AddStorage.module.scss.js +42 -26
  2. package/dist-lib/components/Storage/AddStorage/AddStorage.module.scss.js.map +1 -1
  3. package/dist-lib/components/Storage/StorageAuthSettings/StorageAuthSettings.d.ts.map +1 -1
  4. package/dist-lib/components/Storage/StorageAuthSettings/StorageAuthSettings.js +119 -53
  5. package/dist-lib/components/Storage/StorageAuthSettings/StorageAuthSettings.js.map +1 -1
  6. package/dist-lib/components/Storage/StorageItem/StorageItem.d.ts.map +1 -1
  7. package/dist-lib/components/Storage/StorageItem/StorageItem.js +1 -1
  8. package/dist-lib/components/Storage/StorageItem/StorageItem.js.map +1 -1
  9. package/dist-lib/components/common/form/StoragePicker/StoragePicker.d.ts +1 -0
  10. package/dist-lib/components/common/form/StoragePicker/StoragePicker.d.ts.map +1 -1
  11. package/dist-lib/components/common/form/StoragePicker/StoragePicker.js +57 -51
  12. package/dist-lib/components/common/form/StoragePicker/StoragePicker.js.map +1 -1
  13. package/dist-lib/components/common/form/StoragePicker/StoragePicker.module.scss.js +8 -4
  14. package/dist-lib/components/common/form/StoragePicker/StoragePicker.module.scss.js.map +1 -1
  15. package/dist-lib/services/storage.d.ts +10 -0
  16. package/dist-lib/services/storage.d.ts.map +1 -1
  17. package/dist-lib/services/storage.js +55 -20
  18. package/dist-lib/services/storage.js.map +1 -1
  19. package/dist-lib/services.js +55 -52
  20. package/dist-lib/styles/core-frontend.css +1 -1
  21. package/package.json +1 -1
  22. package/src/components/Storage/AddStorage/AddStorage.module.scss +74 -0
  23. package/src/components/Storage/StorageAuthSettings/StorageAuthSettings.tsx +136 -3
  24. package/src/components/Storage/StorageItem/StorageItem.tsx +0 -1
  25. package/src/components/common/form/StoragePicker/StoragePicker.module.scss +27 -0
  26. package/src/components/common/form/StoragePicker/StoragePicker.tsx +19 -5
  27. package/src/services/storage.ts +49 -0
@@ -1,86 +1,92 @@
1
- import { jsx as o, jsxs as f } from "react/jsx-runtime";
2
- import { useState as n, useMemo as O, useEffect as v } from "react";
3
- import i from "./StoragePicker.module.scss.js";
4
- import U from "../Select/Select.js";
5
- import { useGetStorages as x } from "../../../../services/storage.js";
6
- import j from "../Input/Input.js";
7
- import q from "../../FolderPicker/FolderPicker.js";
8
- import V from "../../Icon/Icon.js";
9
- import _ from "../../../Storage/AddStorage/AddStorage.js";
10
- const $ = ({ onUpdate: k, storagePath: P = "", storageId: u, disabled: r = !1, deviceId: w }) => {
11
- const [e, m] = n(), [N, g] = n(!1), [y, S] = n(!1), [a, h] = n(() => P), d = (e == null ? void 0 : e.type) === "local", { data: c } = x(), s = [...(c == null ? void 0 : c.result) || []], M = O(() => s.map(({ name: l, id: p, type: F }) => ({
12
- label: l,
13
- value: p.toString(),
14
- image: /* @__PURE__ */ o("img", { src: `/providers/${F}.png` })
15
- })), [s]), A = (t) => {
16
- if (console.log("storageID :", t), t === "add_new")
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 l = s.find((p) => p.id == t);
19
- (l || t === "local") && m(l);
20
+ const a = c.find((s) => s.id == e);
21
+ (a || e === "local") && g(a);
20
22
  };
21
- return v(() => {
22
- if (s.length > 0 && u) {
23
- const t = s.find((l) => l.id === u);
24
- m(t);
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
- }, [c]), v(() => {
27
- e && k({ storage: e, path: a });
28
- }, [e, a]), /* @__PURE__ */ f("div", { className: i.storagePicker, children: [
29
- /* @__PURE__ */ o("div", { className: i.storagePickerInput, children: /* @__PURE__ */ f("div", { children: [
30
- /* @__PURE__ */ o("div", { className: i.storage, children: /* @__PURE__ */ o(
31
- U,
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: e != null && e.id ? e.id : "",
38
+ fieldValue: t != null && t.id ? t.id : "",
34
39
  options: [
35
40
  { label: "Select Storage", value: "", icon: "storages" },
36
- ...M,
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: r
46
+ disabled: i
42
47
  }
43
48
  ) }),
44
- /* @__PURE__ */ f("div", { className: i.path, children: [
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
- j,
52
+ b,
47
53
  {
48
- disabled: r,
49
- fieldValue: a,
50
- onUpdate: (t) => h(t),
51
- placeholder: d ? "Select a folder" : "folder-or-bucket/subfolder",
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: !r && d,
54
- error: !r && d && !a ? "Required" : ""
59
+ required: !i && p,
60
+ error: !i && p && !l ? "Required" : ""
55
61
  }
56
62
  ),
57
- (e == null ? void 0 : e.type) && !r && e.type === "local" && /* @__PURE__ */ o(
63
+ (t == null ? void 0 : t.type) && !i && t.type === "local" && /* @__PURE__ */ o(
58
64
  "button",
59
65
  {
60
- className: i.fileManagerBtn,
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: () => g(!0),
65
- children: /* @__PURE__ */ o(V, { type: "folders", size: 16 })
70
+ onClick: () => P(!0),
71
+ children: /* @__PURE__ */ o(q, { type: "folders", size: 16 })
66
72
  }
67
73
  )
68
74
  ] })
69
75
  ] }) }),
70
- N && !r && /* @__PURE__ */ o(
71
- q,
76
+ v && !i && /* @__PURE__ */ o(
77
+ j,
72
78
  {
73
- deviceId: w || "main",
79
+ deviceId: $ || "main",
74
80
  title: "Select Path",
75
- selected: a,
76
- close: () => g(!1),
77
- onSelect: (t) => h(t)
81
+ selected: l,
82
+ close: () => P(!1),
83
+ onSelect: (e) => u(e)
78
84
  }
79
85
  ),
80
- y && /* @__PURE__ */ o(_, { close: () => S(!1) })
86
+ y && /* @__PURE__ */ o(V, { close: () => S(!1) })
81
87
  ] });
82
88
  };
83
89
  export {
84
- $ as default
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","useEffect","currentStorage","jsxs","classes","Select","Input","val","Icon","FolderPicker","newVal","AddStorage"],"mappings":"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"}
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 = "_storagePicker_7tEY0", e = "_storagePickerInput_MzxSo", a = "_storage_BfrQ4", r = "_path_d5gAH", s = "_fileManagerBtn_dWMAK", o = {
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
- o as default,
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 s } from "@tanstack/react-query";
2
- import { API_URL as o } from "../utils/constants.js";
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(`${o}/storages/available`), n = await (await fetch(e.toString(), {
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(`${o}/storages`), n = await (await fetch(e.toString(), {
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(`${o}/storages/${e}`), t = await (await fetch(r.toString(), {
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(`${o}/storages`, {
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 s({
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(`${o}/storages/${e.id}`, {
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 s({
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(`${o}/storages/${e}`, {
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 q() {
104
+ function T() {
105
105
  const e = c();
106
- return s({
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 y(e) {
114
- const r = new Headers({ "Content-Type": "application/json", Accept: "application/json" }), t = await (await fetch(`${o}/storages/verify/${e}`, {
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 T() {
124
- return s({
125
- mutationFn: y,
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
- q as useDeleteStorage,
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
- T as useVerifyStorage,
145
- y as verifyStorage
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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"}