@pelicanplatform/components 1.0.0
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/LICENSE +201 -0
- package/README.md +0 -0
- package/dist/AuthenticatedClient/AuthenticatedClient.d.ts +6 -0
- package/dist/AuthenticatedClient/AuthenticatedClient.d.ts.map +1 -0
- package/dist/AuthenticatedClient/AuthenticatedClient.js +98 -0
- package/dist/AuthenticatedClient/AuthenticatedClient.js.map +1 -0
- package/dist/AuthenticatedClient/index.d.ts +3 -0
- package/dist/AuthenticatedClient/index.d.ts.map +1 -0
- package/dist/AuthenticatedClient/index.js +3 -0
- package/dist/AuthenticatedClient/index.js.map +1 -0
- package/dist/Client/Client.d.ts +12 -0
- package/dist/Client/Client.d.ts.map +1 -0
- package/dist/Client/Client.js +13 -0
- package/dist/Client/Client.js.map +1 -0
- package/dist/Client/index.d.ts +3 -0
- package/dist/Client/index.d.ts.map +1 -0
- package/dist/Client/index.js +3 -0
- package/dist/Client/index.js.map +1 -0
- package/dist/ClientMenu/ClientMenu.d.ts +7 -0
- package/dist/ClientMenu/ClientMenu.d.ts.map +1 -0
- package/dist/ClientMenu/ClientMenu.js +9 -0
- package/dist/ClientMenu/ClientMenu.js.map +1 -0
- package/dist/ClientMenu/index.d.ts +1 -0
- package/dist/ClientMenu/index.d.ts.map +1 -0
- package/dist/ClientMenu/index.js +2 -0
- package/dist/ClientMenu/index.js.map +1 -0
- package/dist/ClientMetadata/ClientMetadata.d.ts +14 -0
- package/dist/ClientMetadata/ClientMetadata.d.ts.map +1 -0
- package/dist/ClientMetadata/ClientMetadata.js +12 -0
- package/dist/ClientMetadata/ClientMetadata.js.map +1 -0
- package/dist/ClientMetadata/index.d.ts +3 -0
- package/dist/ClientMetadata/index.d.ts.map +1 -0
- package/dist/ClientMetadata/index.js +3 -0
- package/dist/ClientMetadata/index.js.map +1 -0
- package/dist/CollectionShortcuts/CollectionShortcuts.d.ts +13 -0
- package/dist/CollectionShortcuts/CollectionShortcuts.d.ts.map +1 -0
- package/dist/CollectionShortcuts/CollectionShortcuts.js +22 -0
- package/dist/CollectionShortcuts/CollectionShortcuts.js.map +1 -0
- package/dist/CollectionShortcuts/index.d.ts +3 -0
- package/dist/CollectionShortcuts/index.d.ts.map +1 -0
- package/dist/CollectionShortcuts/index.js +3 -0
- package/dist/CollectionShortcuts/index.js.map +1 -0
- package/dist/CollectionView/CollectionView.d.ts +13 -0
- package/dist/CollectionView/CollectionView.d.ts.map +1 -0
- package/dist/CollectionView/CollectionView.js +12 -0
- package/dist/CollectionView/CollectionView.js.map +1 -0
- package/dist/CollectionView/index.d.ts +2 -0
- package/dist/CollectionView/index.d.ts.map +1 -0
- package/dist/CollectionView/index.js +2 -0
- package/dist/CollectionView/index.js.map +1 -0
- package/dist/LabeledIconButton/LabeledIconButton.d.ts +10 -0
- package/dist/LabeledIconButton/LabeledIconButton.d.ts.map +1 -0
- package/dist/LabeledIconButton/LabeledIconButton.js +11 -0
- package/dist/LabeledIconButton/LabeledIconButton.js.map +1 -0
- package/dist/LabeledIconButton/index.d.ts +2 -0
- package/dist/LabeledIconButton/index.d.ts.map +1 -0
- package/dist/LabeledIconButton/index.js +2 -0
- package/dist/LabeledIconButton/index.js.map +1 -0
- package/dist/ObjectInput/ObjectInput.d.ts +18 -0
- package/dist/ObjectInput/ObjectInput.d.ts.map +1 -0
- package/dist/ObjectInput/ObjectInput.js +46 -0
- package/dist/ObjectInput/ObjectInput.js.map +1 -0
- package/dist/ObjectInput/StartAdornment.d.ts +9 -0
- package/dist/ObjectInput/StartAdornment.d.ts.map +1 -0
- package/dist/ObjectInput/StartAdornment.js +13 -0
- package/dist/ObjectInput/StartAdornment.js.map +1 -0
- package/dist/ObjectInput/index.d.ts +3 -0
- package/dist/ObjectInput/index.d.ts.map +1 -0
- package/dist/ObjectInput/index.js +3 -0
- package/dist/ObjectInput/index.js.map +1 -0
- package/dist/ObjectUpload/ObjectUpload.d.ts +27 -0
- package/dist/ObjectUpload/ObjectUpload.d.ts.map +1 -0
- package/dist/ObjectUpload/ObjectUpload.js +177 -0
- package/dist/ObjectUpload/ObjectUpload.js.map +1 -0
- package/dist/ObjectUpload/index.d.ts +3 -0
- package/dist/ObjectUpload/index.d.ts.map +1 -0
- package/dist/ObjectUpload/index.js +3 -0
- package/dist/ObjectUpload/index.js.map +1 -0
- package/dist/ObjectView/ObjectView.d.ts +18 -0
- package/dist/ObjectView/ObjectView.d.ts.map +1 -0
- package/dist/ObjectView/ObjectView.js +115 -0
- package/dist/ObjectView/ObjectView.js.map +1 -0
- package/dist/ObjectView/index.d.ts +3 -0
- package/dist/ObjectView/index.d.ts.map +1 -0
- package/dist/ObjectView/index.js +3 -0
- package/dist/ObjectView/index.js.map +1 -0
- package/dist/PelicanClientProvider/PelicanClientContext.d.ts +26 -0
- package/dist/PelicanClientProvider/PelicanClientContext.d.ts.map +1 -0
- package/dist/PelicanClientProvider/PelicanClientContext.js +4 -0
- package/dist/PelicanClientProvider/PelicanClientContext.js.map +1 -0
- package/dist/PelicanClientProvider/PelicanClientProvider.d.ts +15 -0
- package/dist/PelicanClientProvider/PelicanClientProvider.d.ts.map +1 -0
- package/dist/PelicanClientProvider/PelicanClientProvider.js +377 -0
- package/dist/PelicanClientProvider/PelicanClientProvider.js.map +1 -0
- package/dist/PelicanClientProvider/index.d.ts +6 -0
- package/dist/PelicanClientProvider/index.d.ts.map +1 -0
- package/dist/PelicanClientProvider/index.js +4 -0
- package/dist/PelicanClientProvider/index.js.map +1 -0
- package/dist/PelicanClientProvider/usePelicanClient.d.ts +21 -0
- package/dist/PelicanClientProvider/usePelicanClient.d.ts.map +1 -0
- package/dist/PelicanClientProvider/usePelicanClient.js +29 -0
- package/dist/PelicanClientProvider/usePelicanClient.js.map +1 -0
- package/dist/PermissionIcon/PermissionIcon.d.ts +7 -0
- package/dist/PermissionIcon/PermissionIcon.d.ts.map +1 -0
- package/dist/PermissionIcon/PermissionIcon.js +16 -0
- package/dist/PermissionIcon/PermissionIcon.js.map +1 -0
- package/dist/PermissionIcon/index.d.ts +2 -0
- package/dist/PermissionIcon/index.d.ts.map +1 -0
- package/dist/PermissionIcon/index.js +2 -0
- package/dist/PermissionIcon/index.js.map +1 -0
- package/dist/PublicClient/PublicClient.d.ts +6 -0
- package/dist/PublicClient/PublicClient.d.ts.map +1 -0
- package/dist/PublicClient/PublicClient.js +33 -0
- package/dist/PublicClient/PublicClient.js.map +1 -0
- package/dist/PublicClient/index.d.ts +3 -0
- package/dist/PublicClient/index.d.ts.map +1 -0
- package/dist/PublicClient/index.js +3 -0
- package/dist/PublicClient/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/usePelicanClient/index.d.ts +3 -0
- package/dist/usePelicanClient/index.d.ts.map +1 -0
- package/dist/usePelicanClient/index.js +3 -0
- package/dist/usePelicanClient/index.js.map +1 -0
- package/dist/usePelicanClient/useAuthExchange.d.ts +41 -0
- package/dist/usePelicanClient/useAuthExchange.d.ts.map +1 -0
- package/dist/usePelicanClient/useAuthExchange.js +89 -0
- package/dist/usePelicanClient/useAuthExchange.js.map +1 -0
- package/dist/usePelicanClient/useCodeVerifier.d.ts +12 -0
- package/dist/usePelicanClient/useCodeVerifier.d.ts.map +1 -0
- package/dist/usePelicanClient/useCodeVerifier.js +37 -0
- package/dist/usePelicanClient/useCodeVerifier.js.map +1 -0
- package/dist/usePelicanClient/useEventCallback.d.ts +18 -0
- package/dist/usePelicanClient/useEventCallback.d.ts.map +1 -0
- package/dist/usePelicanClient/useEventCallback.js +12 -0
- package/dist/usePelicanClient/useEventCallback.js.map +1 -0
- package/dist/usePelicanClient/useEventListener.d.ts +7 -0
- package/dist/usePelicanClient/useEventListener.d.ts.map +1 -0
- package/dist/usePelicanClient/useEventListener.js +57 -0
- package/dist/usePelicanClient/useEventListener.js.map +1 -0
- package/dist/usePelicanClient/useIsomorphicLayoutEffect.d.ts +16 -0
- package/dist/usePelicanClient/useIsomorphicLayoutEffect.d.ts.map +1 -0
- package/dist/usePelicanClient/useIsomorphicLayoutEffect.js +16 -0
- package/dist/usePelicanClient/useIsomorphicLayoutEffect.js.map +1 -0
- package/dist/usePelicanClient/usePelicanClient.d.ts +27 -0
- package/dist/usePelicanClient/usePelicanClient.d.ts.map +1 -0
- package/dist/usePelicanClient/usePelicanClient.js +245 -0
- package/dist/usePelicanClient/usePelicanClient.js.map +1 -0
- package/dist/usePelicanClient/useSessionStorage.d.ts +39 -0
- package/dist/usePelicanClient/useSessionStorage.d.ts.map +1 -0
- package/dist/usePelicanClient/useSessionStorage.js +121 -0
- package/dist/usePelicanClient/useSessionStorage.js.map +1 -0
- package/dist/usePelicanClient/util.d.ts +1 -0
- package/dist/usePelicanClient/util.d.ts.map +1 -0
- package/dist/usePelicanClient/util.js +2 -0
- package/dist/usePelicanClient/util.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Federation, Namespace, Collection, ObjectList } from "@pelicanplatform/web-client";
|
|
2
|
+
export interface PelicanClientContextValue {
|
|
3
|
+
loading: boolean;
|
|
4
|
+
error: string | null;
|
|
5
|
+
authorizationRequired: boolean;
|
|
6
|
+
authorized: boolean;
|
|
7
|
+
setError: (error: string | null) => void;
|
|
8
|
+
objectUrl: string;
|
|
9
|
+
federationHostname: string | null;
|
|
10
|
+
objectPath: string | null;
|
|
11
|
+
federation: Federation | null;
|
|
12
|
+
namespace: Namespace | null;
|
|
13
|
+
collections: Collection[];
|
|
14
|
+
ensureMetadata: (targetObjectUrl: string) => Promise<{
|
|
15
|
+
federation: Federation;
|
|
16
|
+
namespace: Namespace | null;
|
|
17
|
+
}>;
|
|
18
|
+
getObjectList: (targetObjectUrl?: string, forceRefresh?: boolean) => Promise<ObjectList[]>;
|
|
19
|
+
invalidateObjectListCache: (targetObjectUrl?: string) => void;
|
|
20
|
+
handleDownload: (downloadObjectUrl: string) => Promise<void>;
|
|
21
|
+
handleUpload: (file: File, uploadObjectUrl?: string) => Promise<void>;
|
|
22
|
+
handleLogin: () => Promise<void>;
|
|
23
|
+
setObjectUrl: (url: string) => void;
|
|
24
|
+
}
|
|
25
|
+
export declare const PelicanClientContext: import("react").Context<PelicanClientContextValue | null>;
|
|
26
|
+
//# sourceMappingURL=PelicanClientContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PelicanClientContext.d.ts","sourceRoot":"","sources":["../../src/PelicanClientProvider/PelicanClientContext.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE5F,MAAM,WAAW,yBAAyB;IAExC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,UAAU,EAAE,OAAO,CAAC;IAGpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAGzC,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAG1B,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,UAAU,EAAE,CAAC;IAG1B,cAAc,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC;QACnD,UAAU,EAAE,UAAU,CAAC;QACvB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAA;KAC5B,CAAC,CAAC;IAGH,aAAa,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3F,yBAAyB,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,cAAc,EAAE,CAAC,iBAAiB,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjC,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,eAAO,MAAM,oBAAoB,2DAAwD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PelicanClientContext.js","sourceRoot":"","sources":["../../src/PelicanClientProvider/PelicanClientContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAwCtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAmC,IAAI,CAAC,CAAC;AAE1F,oBAAoB,CAAC,WAAW,GAAG,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface PelicanClientProviderProps {
|
|
3
|
+
/** Initial object URL */
|
|
4
|
+
initialObjectUrl?: string;
|
|
5
|
+
/** Whether to enable authentication features */
|
|
6
|
+
enableAuth?: boolean;
|
|
7
|
+
/** Child components that will have access to the context */
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Provider component that manages Pelican client state and provides it to child components.
|
|
12
|
+
* Wrap your app or component tree with this provider to enable usePelicanClient hook.
|
|
13
|
+
*/
|
|
14
|
+
export declare function PelicanClientProvider({ initialObjectUrl, enableAuth, children }: PelicanClientProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=PelicanClientProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PelicanClientProvider.d.ts","sourceRoot":"","sources":["../../src/PelicanClientProvider/PelicanClientProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAyBjF,MAAM,WAAW,0BAA0B;IACzC,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACE,gBAAqB,EACrB,UAAiB,EACjB,QAAQ,EACT,EAAE,0BAA0B,2CAgblE"}
|
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { UnauthenticatedError, downloadResponse, fetchFederation, fetchNamespace, get, list, parseObjectUrl, put, startAuthorizationCodeFlow, verifyToken, getTokenCollections } from "@pelicanplatform/web-client";
|
|
5
|
+
import { PelicanClientContext } from "./PelicanClientContext";
|
|
6
|
+
import { useSessionStorage } from "../usePelicanClient/useSessionStorage";
|
|
7
|
+
import { useCodeVerifier } from "../usePelicanClient/useCodeVerifier";
|
|
8
|
+
import { useAuthExchange } from "../usePelicanClient/useAuthExchange";
|
|
9
|
+
/**
|
|
10
|
+
* Provider component that manages Pelican client state and provides it to child components.
|
|
11
|
+
* Wrap your app or component tree with this provider to enable usePelicanClient hook.
|
|
12
|
+
*/
|
|
13
|
+
export function PelicanClientProvider({ initialObjectUrl = "", enableAuth = true, children }) {
|
|
14
|
+
const [objectUrl, setObjectUrl] = useState(initialObjectUrl);
|
|
15
|
+
const [loading, setLoading] = useState(true);
|
|
16
|
+
const [error, setError] = useState(null);
|
|
17
|
+
const [federations, setFederations] = useSessionStorage("pelican-wc-federations", {});
|
|
18
|
+
const [prefixToNamespace, setPrefixToNamespace] = useSessionStorage("pelican-wc-p2n", {});
|
|
19
|
+
const [authorizationRequired, setAuthorizationRequired] = useState(!enableAuth);
|
|
20
|
+
const [currentNamespace, setCurrentNamespace] = useState(null);
|
|
21
|
+
// Store in-flight metadata fetch promises to prevent duplicate concurrent requests
|
|
22
|
+
const metadataPromises = useRef(new Map());
|
|
23
|
+
// Cache for object list responses to avoid redundant requests
|
|
24
|
+
const objectListCache = useRef(new Map());
|
|
25
|
+
// Cache TTL in milliseconds (5 minutes)
|
|
26
|
+
const OBJECT_LIST_CACHE_TTL = 5 * 60 * 1000;
|
|
27
|
+
// Handle OAuth authorization code exchange
|
|
28
|
+
const [codeVerifier, ensureCodeVerifier] = useCodeVerifier();
|
|
29
|
+
const { loading: authLoading } = useAuthExchange({
|
|
30
|
+
enabled: enableAuth,
|
|
31
|
+
codeVerifier: codeVerifier,
|
|
32
|
+
getNamespace: (federationHostname, namespacePrefix) => {
|
|
33
|
+
var _a;
|
|
34
|
+
return (_a = federations[federationHostname]) === null || _a === void 0 ? void 0 : _a.namespaces[namespacePrefix];
|
|
35
|
+
},
|
|
36
|
+
onTokenReceived: (result) => {
|
|
37
|
+
var _a;
|
|
38
|
+
const newNamespace = {
|
|
39
|
+
...(_a = federations[result.federationHostname]) === null || _a === void 0 ? void 0 : _a.namespaces[result.namespacePrefix],
|
|
40
|
+
token: result.token
|
|
41
|
+
};
|
|
42
|
+
setActiveNamespace(newNamespace);
|
|
43
|
+
setFederations((f) => {
|
|
44
|
+
var _a;
|
|
45
|
+
return ({
|
|
46
|
+
...f,
|
|
47
|
+
[result.federationHostname]: {
|
|
48
|
+
...f[result.federationHostname],
|
|
49
|
+
namespaces: {
|
|
50
|
+
...(_a = f[result.federationHostname]) === null || _a === void 0 ? void 0 : _a.namespaces,
|
|
51
|
+
[result.namespacePrefix]: newNamespace,
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
const { federationHostname, objectPath } = useMemo(() => {
|
|
59
|
+
try {
|
|
60
|
+
return parseObjectUrl(objectUrl);
|
|
61
|
+
}
|
|
62
|
+
catch (_a) {
|
|
63
|
+
return { federationHostname: null, objectPath: null };
|
|
64
|
+
}
|
|
65
|
+
}, [objectUrl]);
|
|
66
|
+
const federation = federationHostname && federations
|
|
67
|
+
? federations[federationHostname] || null
|
|
68
|
+
: null;
|
|
69
|
+
/**
|
|
70
|
+
* There is a brief blip when the derived namespace is null before metadata is loaded.
|
|
71
|
+
* To avoid losing the namespace in that case we keep track of the last active namespace.
|
|
72
|
+
*/
|
|
73
|
+
const [activeNamespace, setActiveNamespace] = useState(null);
|
|
74
|
+
const derivedNamespace = useMemo(() => {
|
|
75
|
+
var _a, _b;
|
|
76
|
+
if (!objectPath || !federation)
|
|
77
|
+
return null;
|
|
78
|
+
const namespaceKey = (_a = prefixToNamespace === null || prefixToNamespace === void 0 ? void 0 : prefixToNamespace[objectPath]) === null || _a === void 0 ? void 0 : _a.namespace;
|
|
79
|
+
if (!namespaceKey)
|
|
80
|
+
return null;
|
|
81
|
+
return ((_b = federation.namespaces) === null || _b === void 0 ? void 0 : _b[namespaceKey]) || null;
|
|
82
|
+
}, [prefixToNamespace, objectPath, federation]);
|
|
83
|
+
const namespace = derivedNamespace || activeNamespace;
|
|
84
|
+
const prevCollectionsRef = useRef([]);
|
|
85
|
+
const collections = useMemo(() => {
|
|
86
|
+
if ((!verifyToken(namespace === null || namespace === void 0 ? void 0 : namespace.token) && prevCollectionsRef.current.length > 0) || !namespace) {
|
|
87
|
+
prevCollectionsRef.current = [];
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const newCollections = getTokenCollections(namespace);
|
|
91
|
+
if (JSON.stringify(prevCollectionsRef.current) !== JSON.stringify(newCollections)) {
|
|
92
|
+
prevCollectionsRef.current = newCollections;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return prevCollectionsRef.current;
|
|
96
|
+
}, [namespace]);
|
|
97
|
+
const authorized = collections.length > 0 || !authorizationRequired || !enableAuth;
|
|
98
|
+
/**
|
|
99
|
+
* Helper function to remove expired tokens from state.
|
|
100
|
+
*/
|
|
101
|
+
const cleanExpiredTokens = useCallback(() => {
|
|
102
|
+
setFederations((prevFederations) => {
|
|
103
|
+
const updatedFederations = {};
|
|
104
|
+
for (const [fedKey, federation] of Object.entries(prevFederations)) {
|
|
105
|
+
const updatedNamespaces = {};
|
|
106
|
+
for (const [nsKey, namespace] of Object.entries(federation.namespaces)) {
|
|
107
|
+
const updatedNamespace = { ...namespace };
|
|
108
|
+
if (namespace.token && !verifyToken(namespace.token)) {
|
|
109
|
+
console.log(`Removing expired token for namespace: ${nsKey} in federation: ${fedKey}`);
|
|
110
|
+
delete updatedNamespace.token;
|
|
111
|
+
}
|
|
112
|
+
updatedNamespaces[nsKey] = namespace;
|
|
113
|
+
}
|
|
114
|
+
updatedFederations[fedKey] = {
|
|
115
|
+
...federation,
|
|
116
|
+
namespaces: updatedNamespaces
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return updatedFederations;
|
|
120
|
+
});
|
|
121
|
+
}, []);
|
|
122
|
+
/**
|
|
123
|
+
* Helper function to ensure federation and namespace metadata is available.
|
|
124
|
+
* Fetches on-demand if not in cache. Deduplicates concurrent requests for the same URL.
|
|
125
|
+
*/
|
|
126
|
+
const ensureMetadata = useCallback(async (targetObjectUrl) => {
|
|
127
|
+
var _a;
|
|
128
|
+
const { federationHostname, objectPath } = parseObjectUrl(targetObjectUrl);
|
|
129
|
+
if (!federationHostname || !objectPath) {
|
|
130
|
+
throw new Error(`Invalid object URL: ${targetObjectUrl}`);
|
|
131
|
+
}
|
|
132
|
+
const cacheKey = `${federationHostname}:${objectPath}`;
|
|
133
|
+
// Check if there's already an in-flight request for this URL
|
|
134
|
+
const existingPromise = metadataPromises.current.get(cacheKey);
|
|
135
|
+
if (existingPromise) {
|
|
136
|
+
console.log(`Reusing in-flight request for ${cacheKey}`);
|
|
137
|
+
return existingPromise;
|
|
138
|
+
}
|
|
139
|
+
// Check if we already have both federation and namespace in cache
|
|
140
|
+
const _federation = federations[federationHostname];
|
|
141
|
+
const namespaceKey = (_a = prefixToNamespace[objectPath]) === null || _a === void 0 ? void 0 : _a.namespace;
|
|
142
|
+
const _namespace = namespaceKey && _federation
|
|
143
|
+
? _federation.namespaces[namespaceKey]
|
|
144
|
+
: null;
|
|
145
|
+
if (_federation && _namespace) {
|
|
146
|
+
return { federation: _federation, namespace: _namespace };
|
|
147
|
+
}
|
|
148
|
+
// Create a new promise for this fetch operation
|
|
149
|
+
const fetchPromise = (async () => {
|
|
150
|
+
var _a;
|
|
151
|
+
try {
|
|
152
|
+
let federation = federations[federationHostname];
|
|
153
|
+
if (!federation) {
|
|
154
|
+
federation = await fetchFederation(federationHostname);
|
|
155
|
+
console.log("Adding federation:", federation.hostname);
|
|
156
|
+
setFederations((prev) => ({
|
|
157
|
+
...prev,
|
|
158
|
+
[federationHostname]: federation
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
// Check if we have already mapped that object prefix to a namespace
|
|
162
|
+
const namespaceKey = (_a = prefixToNamespace[objectPath]) === null || _a === void 0 ? void 0 : _a.namespace;
|
|
163
|
+
let namespace = namespaceKey ? federation.namespaces[namespaceKey] : null;
|
|
164
|
+
// If it is not mapped, fetch the namespace metadata and map it
|
|
165
|
+
if (!namespace) {
|
|
166
|
+
namespace = await fetchNamespace(objectPath, federation);
|
|
167
|
+
setActiveNamespace((p) => {
|
|
168
|
+
if (p && p.prefix === namespace.prefix) {
|
|
169
|
+
console.log("Namespace unchanged, reusing previous reference");
|
|
170
|
+
return p;
|
|
171
|
+
}
|
|
172
|
+
console.log("Namespace changed, updating value", p, namespace);
|
|
173
|
+
return namespace;
|
|
174
|
+
});
|
|
175
|
+
setPrefixToNamespace((prev) => ({
|
|
176
|
+
...prev,
|
|
177
|
+
[objectPath]: {
|
|
178
|
+
federation: federationHostname,
|
|
179
|
+
namespace: namespace.prefix
|
|
180
|
+
}
|
|
181
|
+
}));
|
|
182
|
+
// If the namespace doesn't exist in the federation yet, add it
|
|
183
|
+
if (namespace && !(namespace.prefix in federation.namespaces)) {
|
|
184
|
+
console.log("Adding namespace:", namespace.prefix, "to federation:", federation.hostname);
|
|
185
|
+
setFederations((prev) => ({
|
|
186
|
+
...prev,
|
|
187
|
+
[federationHostname]: {
|
|
188
|
+
...federation,
|
|
189
|
+
namespaces: {
|
|
190
|
+
...federation.namespaces,
|
|
191
|
+
[namespace.prefix]: namespace
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return { federation, namespace };
|
|
198
|
+
}
|
|
199
|
+
catch (e) {
|
|
200
|
+
setError("Couldn't fetch metadata: " + e);
|
|
201
|
+
throw e;
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
metadataPromises.current.delete(cacheKey);
|
|
205
|
+
}
|
|
206
|
+
})();
|
|
207
|
+
metadataPromises.current.set(cacheKey, fetchPromise);
|
|
208
|
+
return fetchPromise;
|
|
209
|
+
}, [federations, prefixToNamespace]);
|
|
210
|
+
// Store the latest ensureMetadata function in a ref
|
|
211
|
+
const ensureMetadataRef = useRef(ensureMetadata);
|
|
212
|
+
useEffect(() => {
|
|
213
|
+
ensureMetadataRef.current = ensureMetadata;
|
|
214
|
+
}, [ensureMetadata]);
|
|
215
|
+
// Pull Federation and Namespace Metadata as needed for the current objectUrl
|
|
216
|
+
useEffect(() => {
|
|
217
|
+
(async () => {
|
|
218
|
+
setLoading(true);
|
|
219
|
+
const { federationHostname, objectPath } = parseObjectUrl(objectUrl);
|
|
220
|
+
if (!objectUrl || !federationHostname || !objectPath) {
|
|
221
|
+
setLoading(false);
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
await ensureMetadataRef.current(objectUrl);
|
|
226
|
+
}
|
|
227
|
+
catch (e) {
|
|
228
|
+
setError(`Failed to fetch metadata for ${objectUrl}: ${e}`);
|
|
229
|
+
}
|
|
230
|
+
setLoading(false);
|
|
231
|
+
})();
|
|
232
|
+
}, [objectUrl]);
|
|
233
|
+
/**
|
|
234
|
+
* Get the list of objects at the specified URL.
|
|
235
|
+
* Results are cached with a TTL to avoid redundant requests.
|
|
236
|
+
*/
|
|
237
|
+
const getObjectList = useCallback(async (targetObjectUrl, forceRefresh = false) => {
|
|
238
|
+
try {
|
|
239
|
+
const urlToFetch = targetObjectUrl || objectUrl;
|
|
240
|
+
// Check cache first (unless force refresh is requested)
|
|
241
|
+
if (!forceRefresh) {
|
|
242
|
+
const cached = objectListCache.current.get(urlToFetch);
|
|
243
|
+
if (cached && Date.now() - cached.timestamp < OBJECT_LIST_CACHE_TTL) {
|
|
244
|
+
console.log(`Using cached object list for ${urlToFetch}`);
|
|
245
|
+
return cached.data;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
const { federationHostname, objectPath } = parseObjectUrl(urlToFetch);
|
|
249
|
+
const { federation, namespace } = await ensureMetadataRef.current(objectUrl);
|
|
250
|
+
if (!federation || !namespace) {
|
|
251
|
+
throw new Error("Federation or Namespace metadata is missing");
|
|
252
|
+
}
|
|
253
|
+
let objects = await list(urlToFetch, federation, namespace);
|
|
254
|
+
// No longer need authorization
|
|
255
|
+
setAuthorizationRequired(false);
|
|
256
|
+
// add parent directory entry
|
|
257
|
+
const pathParts = objectPath.split("/").filter((p) => p.length > 0);
|
|
258
|
+
if (pathParts.length > 0) {
|
|
259
|
+
const parentParts = pathParts.slice(0, -1);
|
|
260
|
+
const parentPath = parentParts.length > 0 ? "/" + parentParts.join("/") : "";
|
|
261
|
+
objects.push({
|
|
262
|
+
href: parentPath || "/",
|
|
263
|
+
getcontentlength: 0,
|
|
264
|
+
getlastmodified: "",
|
|
265
|
+
resourcetype: "collection",
|
|
266
|
+
iscollection: true,
|
|
267
|
+
executable: "",
|
|
268
|
+
status: "",
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
const objectPathWithoutSlash = objectPath.replace(/\/+$/, "");
|
|
272
|
+
objects = objects.filter((obj) => obj.href !== objectPathWithoutSlash && obj.href !== "");
|
|
273
|
+
objects.reverse();
|
|
274
|
+
// Cache the result
|
|
275
|
+
objectListCache.current.set(urlToFetch, {
|
|
276
|
+
data: objects,
|
|
277
|
+
timestamp: Date.now()
|
|
278
|
+
});
|
|
279
|
+
return objects;
|
|
280
|
+
}
|
|
281
|
+
catch (e) {
|
|
282
|
+
if (e instanceof UnauthenticatedError) {
|
|
283
|
+
setAuthorizationRequired(true);
|
|
284
|
+
cleanExpiredTokens();
|
|
285
|
+
return [];
|
|
286
|
+
}
|
|
287
|
+
setError(`Failed to fetch object list for ${targetObjectUrl || objectUrl}: ${e}`);
|
|
288
|
+
return [];
|
|
289
|
+
}
|
|
290
|
+
}, [objectUrl, OBJECT_LIST_CACHE_TTL]);
|
|
291
|
+
/**
|
|
292
|
+
* Invalidate the object list cache for a specific URL or all URLs.
|
|
293
|
+
*/
|
|
294
|
+
const invalidateObjectListCache = useCallback((targetObjectUrl) => {
|
|
295
|
+
if (targetObjectUrl) {
|
|
296
|
+
objectListCache.current.delete(targetObjectUrl);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
objectListCache.current.clear();
|
|
300
|
+
}
|
|
301
|
+
}, []);
|
|
302
|
+
const handleDownload = useCallback(async (downloadObjectUrl) => {
|
|
303
|
+
try {
|
|
304
|
+
const { federation, namespace } = await ensureMetadataRef.current(objectUrl);
|
|
305
|
+
if (!federation || !namespace)
|
|
306
|
+
return;
|
|
307
|
+
const response = await get(downloadObjectUrl, federation, namespace);
|
|
308
|
+
downloadResponse(response);
|
|
309
|
+
}
|
|
310
|
+
catch (e) {
|
|
311
|
+
if (e instanceof UnauthenticatedError) {
|
|
312
|
+
setAuthorizationRequired(true);
|
|
313
|
+
cleanExpiredTokens();
|
|
314
|
+
}
|
|
315
|
+
setError(`Download failed: ${e}`);
|
|
316
|
+
throw e;
|
|
317
|
+
}
|
|
318
|
+
}, []);
|
|
319
|
+
const handleUpload = useCallback(async (file, uploadObjectUrl) => {
|
|
320
|
+
try {
|
|
321
|
+
const targetUrl = uploadObjectUrl || objectUrl;
|
|
322
|
+
const { federation, namespace } = await ensureMetadataRef.current(objectUrl);
|
|
323
|
+
if (!federation || !namespace)
|
|
324
|
+
return;
|
|
325
|
+
const finalUploadUrl = targetUrl.endsWith("/")
|
|
326
|
+
? `${targetUrl}${file.name}`
|
|
327
|
+
: `${targetUrl}/${file.name}`;
|
|
328
|
+
await put(finalUploadUrl, file, federation, namespace);
|
|
329
|
+
// Invalidate cache for the directory after successful upload
|
|
330
|
+
invalidateObjectListCache(targetUrl);
|
|
331
|
+
}
|
|
332
|
+
catch (e) {
|
|
333
|
+
if (e instanceof UnauthenticatedError) {
|
|
334
|
+
setAuthorizationRequired(true);
|
|
335
|
+
cleanExpiredTokens();
|
|
336
|
+
}
|
|
337
|
+
setError(`Upload failed: ${e}`);
|
|
338
|
+
throw e;
|
|
339
|
+
}
|
|
340
|
+
}, [objectUrl, invalidateObjectListCache]);
|
|
341
|
+
const handleLogin = useCallback(async () => {
|
|
342
|
+
try {
|
|
343
|
+
const { federation, namespace } = await ensureMetadataRef.current(objectUrl);
|
|
344
|
+
if (!federation || !namespace)
|
|
345
|
+
return;
|
|
346
|
+
if (!enableAuth)
|
|
347
|
+
return;
|
|
348
|
+
await startAuthorizationCodeFlow(ensureCodeVerifier(), namespace, federation, { objectUrl });
|
|
349
|
+
}
|
|
350
|
+
catch (e) {
|
|
351
|
+
setError(`Login failed: ${e}`);
|
|
352
|
+
throw e;
|
|
353
|
+
}
|
|
354
|
+
}, [objectUrl, ensureCodeVerifier, enableAuth]);
|
|
355
|
+
const contextValue = {
|
|
356
|
+
loading: loading || authLoading,
|
|
357
|
+
error,
|
|
358
|
+
setError,
|
|
359
|
+
authorizationRequired,
|
|
360
|
+
authorized,
|
|
361
|
+
objectUrl,
|
|
362
|
+
federationHostname,
|
|
363
|
+
objectPath,
|
|
364
|
+
federation,
|
|
365
|
+
namespace,
|
|
366
|
+
collections,
|
|
367
|
+
ensureMetadata,
|
|
368
|
+
getObjectList,
|
|
369
|
+
invalidateObjectListCache,
|
|
370
|
+
handleDownload,
|
|
371
|
+
handleUpload,
|
|
372
|
+
handleLogin,
|
|
373
|
+
setObjectUrl,
|
|
374
|
+
};
|
|
375
|
+
return (_jsx(PelicanClientContext.Provider, { value: contextValue, children: children }));
|
|
376
|
+
}
|
|
377
|
+
//# sourceMappingURL=PelicanClientProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PelicanClientProvider.js","sourceRoot":"","sources":["../../src/PelicanClientProvider/PelicanClientProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { PelicanClientProvider } from "./PelicanClientProvider";
|
|
2
|
+
export type { PelicanClientProviderProps } from "./PelicanClientProvider";
|
|
3
|
+
export { PelicanClientContext } from "./PelicanClientContext";
|
|
4
|
+
export type { PelicanClientContextValue } from "./PelicanClientContext";
|
|
5
|
+
export { usePelicanClient } from "./usePelicanClient";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/PelicanClientProvider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/PelicanClientProvider/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PelicanClientContextValue } from "./PelicanClientContext";
|
|
2
|
+
/**
|
|
3
|
+
* Hook to access the Pelican client context.
|
|
4
|
+
* Must be used within a PelicanClientProvider.
|
|
5
|
+
*
|
|
6
|
+
* @throws Error if used outside of PelicanClientProvider
|
|
7
|
+
* @returns The Pelican client context value with state and actions
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* function MyComponent() {
|
|
11
|
+
* const { handleDownload, loading, federation } = usePelicanClient();
|
|
12
|
+
*
|
|
13
|
+
* return (
|
|
14
|
+
* <button onClick={() => handleDownload('pelican://...')}>
|
|
15
|
+
* Download {loading ? '...' : ''}
|
|
16
|
+
* </button>
|
|
17
|
+
* );
|
|
18
|
+
* }
|
|
19
|
+
*/
|
|
20
|
+
export declare function usePelicanClient(): PelicanClientContextValue;
|
|
21
|
+
//# sourceMappingURL=usePelicanClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePelicanClient.d.ts","sourceRoot":"","sources":["../../src/PelicanClientProvider/usePelicanClient.tsx"],"names":[],"mappings":"AACA,OAAO,EAAwB,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAEzF;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,IAAI,yBAAyB,CAW5D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useContext } from "react";
|
|
2
|
+
import { PelicanClientContext } from "./PelicanClientContext";
|
|
3
|
+
/**
|
|
4
|
+
* Hook to access the Pelican client context.
|
|
5
|
+
* Must be used within a PelicanClientProvider.
|
|
6
|
+
*
|
|
7
|
+
* @throws Error if used outside of PelicanClientProvider
|
|
8
|
+
* @returns The Pelican client context value with state and actions
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* function MyComponent() {
|
|
12
|
+
* const { handleDownload, loading, federation } = usePelicanClient();
|
|
13
|
+
*
|
|
14
|
+
* return (
|
|
15
|
+
* <button onClick={() => handleDownload('pelican://...')}>
|
|
16
|
+
* Download {loading ? '...' : ''}
|
|
17
|
+
* </button>
|
|
18
|
+
* );
|
|
19
|
+
* }
|
|
20
|
+
*/
|
|
21
|
+
export function usePelicanClient() {
|
|
22
|
+
const context = useContext(PelicanClientContext);
|
|
23
|
+
if (!context) {
|
|
24
|
+
throw new Error("usePelicanClient must be used within a PelicanClientProvider. " +
|
|
25
|
+
"Wrap your component tree with <PelicanClientProvider>.");
|
|
26
|
+
}
|
|
27
|
+
return context;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=usePelicanClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePelicanClient.js","sourceRoot":"","sources":["../../src/PelicanClientProvider/usePelicanClient.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAA6B,MAAM,wBAAwB,CAAC;AAEzF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,gEAAgE;YAChE,wDAAwD,CACzD,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CollectionPermission } from "@pelicanplatform/web-client";
|
|
2
|
+
interface PermissionIconProps {
|
|
3
|
+
permission: CollectionPermission;
|
|
4
|
+
}
|
|
5
|
+
declare function PermissionIcon({ permission }: PermissionIconProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export default PermissionIcon;
|
|
7
|
+
//# sourceMappingURL=PermissionIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionIcon.d.ts","sourceRoot":"","sources":["../../src/PermissionIcon/PermissionIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AAGjE,UAAU,mBAAmB;IACzB,UAAU,EAAE,oBAAoB,CAAA;CACnC;AAED,iBAAS,cAAc,CAAC,EAAC,UAAU,EAAC,EAAE,mBAAmB,2CAWxD;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Visibility, Edit, AdminPanelSettings, Block } from "@mui/icons-material";
|
|
3
|
+
function PermissionIcon({ permission }) {
|
|
4
|
+
switch (permission) {
|
|
5
|
+
case 'read':
|
|
6
|
+
return _jsx(Visibility, { "aria-label": "Read Permission" });
|
|
7
|
+
case 'modify':
|
|
8
|
+
return _jsx(Edit, { "aria-label": "Modify Permission" });
|
|
9
|
+
case 'create':
|
|
10
|
+
return _jsx(AdminPanelSettings, { "aria-label": "Create Permission" });
|
|
11
|
+
default:
|
|
12
|
+
return _jsx(Block, { "aria-label": "No Permission" });
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export default PermissionIcon;
|
|
16
|
+
//# sourceMappingURL=PermissionIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionIcon.js","sourceRoot":"","sources":["../../src/PermissionIcon/PermissionIcon.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAMlF,SAAS,cAAc,CAAC,EAAC,UAAU,EAAsB;IACrD,QAAQ,UAAU,EAAE,CAAC;QACjB,KAAK,MAAM;YACP,OAAO,KAAC,UAAU,kBAAY,iBAAiB,GAAG,CAAC;QACvD,KAAK,QAAQ;YACT,OAAO,KAAC,IAAI,kBAAY,mBAAmB,GAAG,CAAC;QACnD,KAAK,QAAQ;YACT,OAAO,KAAC,kBAAkB,kBAAY,mBAAmB,GAAG,CAAC;QACjE;YACI,OAAO,KAAC,KAAK,kBAAY,eAAe,GAAG,CAAC;IACpD,CAAC;AACL,CAAC;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/PermissionIcon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/PermissionIcon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PublicClient.d.ts","sourceRoot":"","sources":["../../src/PublicClient/PublicClient.tsx"],"names":[],"mappings":"AASA;;GAEG;AACH,iBAAS,YAAY,4CAoCpB;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { Box } from "@mui/material";
|
|
4
|
+
import { usePelicanClient } from "../PelicanClientProvider";
|
|
5
|
+
import { useEffect, useMemo, useState } from "react";
|
|
6
|
+
import { parseObjectUrl } from "@pelicanplatform/web-client";
|
|
7
|
+
/**
|
|
8
|
+
* A public Pelican client, with authentication features disabled.
|
|
9
|
+
*/
|
|
10
|
+
function PublicClient() {
|
|
11
|
+
const { objectUrl, handleDownload, handleUpload, federation, namespace, getObjectList } = usePelicanClient();
|
|
12
|
+
const [objectList, setObjectList] = useState([]);
|
|
13
|
+
const updateObjectList = async (o) => {
|
|
14
|
+
setObjectList(await getObjectList(o, false));
|
|
15
|
+
};
|
|
16
|
+
// On mount attempt to load the object list
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
updateObjectList(objectUrl);
|
|
19
|
+
}, []);
|
|
20
|
+
const collectionPath = useMemo(() => {
|
|
21
|
+
// If no namespace this can't be determined
|
|
22
|
+
if (!namespace)
|
|
23
|
+
return undefined;
|
|
24
|
+
try {
|
|
25
|
+
const { objectPath } = parseObjectUrl(objectUrl);
|
|
26
|
+
return objectPath.replace(namespace.prefix, "");
|
|
27
|
+
}
|
|
28
|
+
catch (_a) { }
|
|
29
|
+
}, [namespace, objectUrl]);
|
|
30
|
+
return (_jsx(Box, { children: "TODO" }));
|
|
31
|
+
}
|
|
32
|
+
export default PublicClient;
|
|
33
|
+
//# sourceMappingURL=PublicClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PublicClient.js","sourceRoot":"","sources":["../../src/PublicClient/PublicClient.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAC,gBAAgB,EAAC,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACnD,OAAO,EAAa,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAGvE;;GAEG;AACH,SAAS,YAAY;IAEnB,MAAM,EACJ,SAAS,EACT,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,EACT,aAAa,EACd,GAAG,gBAAgB,EAAE,CAAC;IAEvB,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAe,EAAE,CAAC,CAAC;IAE/D,MAAM,gBAAgB,GAAG,KAAK,EAAE,CAAS,EAAE,EAAE;QAC3C,aAAa,CAAC,MAAM,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAA;IAED,2CAA2C;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,2CAA2C;QAC3C,IAAI,CAAC,SAAS;YAAE,OAAO,SAAS,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,EAAC,UAAU,EAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACjD,CAAC;QAAC,WAAM,CAAC,CAAA,CAAC;IACZ,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAE3B,OAAO,CACL,KAAC,GAAG,uBAEE,CACP,CAAC;AACJ,CAAC;AAED,eAAe,YAAY,CAAC"}
|