@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.
Files changed (159) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +0 -0
  3. package/dist/AuthenticatedClient/AuthenticatedClient.d.ts +6 -0
  4. package/dist/AuthenticatedClient/AuthenticatedClient.d.ts.map +1 -0
  5. package/dist/AuthenticatedClient/AuthenticatedClient.js +98 -0
  6. package/dist/AuthenticatedClient/AuthenticatedClient.js.map +1 -0
  7. package/dist/AuthenticatedClient/index.d.ts +3 -0
  8. package/dist/AuthenticatedClient/index.d.ts.map +1 -0
  9. package/dist/AuthenticatedClient/index.js +3 -0
  10. package/dist/AuthenticatedClient/index.js.map +1 -0
  11. package/dist/Client/Client.d.ts +12 -0
  12. package/dist/Client/Client.d.ts.map +1 -0
  13. package/dist/Client/Client.js +13 -0
  14. package/dist/Client/Client.js.map +1 -0
  15. package/dist/Client/index.d.ts +3 -0
  16. package/dist/Client/index.d.ts.map +1 -0
  17. package/dist/Client/index.js +3 -0
  18. package/dist/Client/index.js.map +1 -0
  19. package/dist/ClientMenu/ClientMenu.d.ts +7 -0
  20. package/dist/ClientMenu/ClientMenu.d.ts.map +1 -0
  21. package/dist/ClientMenu/ClientMenu.js +9 -0
  22. package/dist/ClientMenu/ClientMenu.js.map +1 -0
  23. package/dist/ClientMenu/index.d.ts +1 -0
  24. package/dist/ClientMenu/index.d.ts.map +1 -0
  25. package/dist/ClientMenu/index.js +2 -0
  26. package/dist/ClientMenu/index.js.map +1 -0
  27. package/dist/ClientMetadata/ClientMetadata.d.ts +14 -0
  28. package/dist/ClientMetadata/ClientMetadata.d.ts.map +1 -0
  29. package/dist/ClientMetadata/ClientMetadata.js +12 -0
  30. package/dist/ClientMetadata/ClientMetadata.js.map +1 -0
  31. package/dist/ClientMetadata/index.d.ts +3 -0
  32. package/dist/ClientMetadata/index.d.ts.map +1 -0
  33. package/dist/ClientMetadata/index.js +3 -0
  34. package/dist/ClientMetadata/index.js.map +1 -0
  35. package/dist/CollectionShortcuts/CollectionShortcuts.d.ts +13 -0
  36. package/dist/CollectionShortcuts/CollectionShortcuts.d.ts.map +1 -0
  37. package/dist/CollectionShortcuts/CollectionShortcuts.js +22 -0
  38. package/dist/CollectionShortcuts/CollectionShortcuts.js.map +1 -0
  39. package/dist/CollectionShortcuts/index.d.ts +3 -0
  40. package/dist/CollectionShortcuts/index.d.ts.map +1 -0
  41. package/dist/CollectionShortcuts/index.js +3 -0
  42. package/dist/CollectionShortcuts/index.js.map +1 -0
  43. package/dist/CollectionView/CollectionView.d.ts +13 -0
  44. package/dist/CollectionView/CollectionView.d.ts.map +1 -0
  45. package/dist/CollectionView/CollectionView.js +12 -0
  46. package/dist/CollectionView/CollectionView.js.map +1 -0
  47. package/dist/CollectionView/index.d.ts +2 -0
  48. package/dist/CollectionView/index.d.ts.map +1 -0
  49. package/dist/CollectionView/index.js +2 -0
  50. package/dist/CollectionView/index.js.map +1 -0
  51. package/dist/LabeledIconButton/LabeledIconButton.d.ts +10 -0
  52. package/dist/LabeledIconButton/LabeledIconButton.d.ts.map +1 -0
  53. package/dist/LabeledIconButton/LabeledIconButton.js +11 -0
  54. package/dist/LabeledIconButton/LabeledIconButton.js.map +1 -0
  55. package/dist/LabeledIconButton/index.d.ts +2 -0
  56. package/dist/LabeledIconButton/index.d.ts.map +1 -0
  57. package/dist/LabeledIconButton/index.js +2 -0
  58. package/dist/LabeledIconButton/index.js.map +1 -0
  59. package/dist/ObjectInput/ObjectInput.d.ts +18 -0
  60. package/dist/ObjectInput/ObjectInput.d.ts.map +1 -0
  61. package/dist/ObjectInput/ObjectInput.js +46 -0
  62. package/dist/ObjectInput/ObjectInput.js.map +1 -0
  63. package/dist/ObjectInput/StartAdornment.d.ts +9 -0
  64. package/dist/ObjectInput/StartAdornment.d.ts.map +1 -0
  65. package/dist/ObjectInput/StartAdornment.js +13 -0
  66. package/dist/ObjectInput/StartAdornment.js.map +1 -0
  67. package/dist/ObjectInput/index.d.ts +3 -0
  68. package/dist/ObjectInput/index.d.ts.map +1 -0
  69. package/dist/ObjectInput/index.js +3 -0
  70. package/dist/ObjectInput/index.js.map +1 -0
  71. package/dist/ObjectUpload/ObjectUpload.d.ts +27 -0
  72. package/dist/ObjectUpload/ObjectUpload.d.ts.map +1 -0
  73. package/dist/ObjectUpload/ObjectUpload.js +177 -0
  74. package/dist/ObjectUpload/ObjectUpload.js.map +1 -0
  75. package/dist/ObjectUpload/index.d.ts +3 -0
  76. package/dist/ObjectUpload/index.d.ts.map +1 -0
  77. package/dist/ObjectUpload/index.js +3 -0
  78. package/dist/ObjectUpload/index.js.map +1 -0
  79. package/dist/ObjectView/ObjectView.d.ts +18 -0
  80. package/dist/ObjectView/ObjectView.d.ts.map +1 -0
  81. package/dist/ObjectView/ObjectView.js +115 -0
  82. package/dist/ObjectView/ObjectView.js.map +1 -0
  83. package/dist/ObjectView/index.d.ts +3 -0
  84. package/dist/ObjectView/index.d.ts.map +1 -0
  85. package/dist/ObjectView/index.js +3 -0
  86. package/dist/ObjectView/index.js.map +1 -0
  87. package/dist/PelicanClientProvider/PelicanClientContext.d.ts +26 -0
  88. package/dist/PelicanClientProvider/PelicanClientContext.d.ts.map +1 -0
  89. package/dist/PelicanClientProvider/PelicanClientContext.js +4 -0
  90. package/dist/PelicanClientProvider/PelicanClientContext.js.map +1 -0
  91. package/dist/PelicanClientProvider/PelicanClientProvider.d.ts +15 -0
  92. package/dist/PelicanClientProvider/PelicanClientProvider.d.ts.map +1 -0
  93. package/dist/PelicanClientProvider/PelicanClientProvider.js +377 -0
  94. package/dist/PelicanClientProvider/PelicanClientProvider.js.map +1 -0
  95. package/dist/PelicanClientProvider/index.d.ts +6 -0
  96. package/dist/PelicanClientProvider/index.d.ts.map +1 -0
  97. package/dist/PelicanClientProvider/index.js +4 -0
  98. package/dist/PelicanClientProvider/index.js.map +1 -0
  99. package/dist/PelicanClientProvider/usePelicanClient.d.ts +21 -0
  100. package/dist/PelicanClientProvider/usePelicanClient.d.ts.map +1 -0
  101. package/dist/PelicanClientProvider/usePelicanClient.js +29 -0
  102. package/dist/PelicanClientProvider/usePelicanClient.js.map +1 -0
  103. package/dist/PermissionIcon/PermissionIcon.d.ts +7 -0
  104. package/dist/PermissionIcon/PermissionIcon.d.ts.map +1 -0
  105. package/dist/PermissionIcon/PermissionIcon.js +16 -0
  106. package/dist/PermissionIcon/PermissionIcon.js.map +1 -0
  107. package/dist/PermissionIcon/index.d.ts +2 -0
  108. package/dist/PermissionIcon/index.d.ts.map +1 -0
  109. package/dist/PermissionIcon/index.js +2 -0
  110. package/dist/PermissionIcon/index.js.map +1 -0
  111. package/dist/PublicClient/PublicClient.d.ts +6 -0
  112. package/dist/PublicClient/PublicClient.d.ts.map +1 -0
  113. package/dist/PublicClient/PublicClient.js +33 -0
  114. package/dist/PublicClient/PublicClient.js.map +1 -0
  115. package/dist/PublicClient/index.d.ts +3 -0
  116. package/dist/PublicClient/index.d.ts.map +1 -0
  117. package/dist/PublicClient/index.js +3 -0
  118. package/dist/PublicClient/index.js.map +1 -0
  119. package/dist/index.d.ts +3 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +3 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/usePelicanClient/index.d.ts +3 -0
  124. package/dist/usePelicanClient/index.d.ts.map +1 -0
  125. package/dist/usePelicanClient/index.js +3 -0
  126. package/dist/usePelicanClient/index.js.map +1 -0
  127. package/dist/usePelicanClient/useAuthExchange.d.ts +41 -0
  128. package/dist/usePelicanClient/useAuthExchange.d.ts.map +1 -0
  129. package/dist/usePelicanClient/useAuthExchange.js +89 -0
  130. package/dist/usePelicanClient/useAuthExchange.js.map +1 -0
  131. package/dist/usePelicanClient/useCodeVerifier.d.ts +12 -0
  132. package/dist/usePelicanClient/useCodeVerifier.d.ts.map +1 -0
  133. package/dist/usePelicanClient/useCodeVerifier.js +37 -0
  134. package/dist/usePelicanClient/useCodeVerifier.js.map +1 -0
  135. package/dist/usePelicanClient/useEventCallback.d.ts +18 -0
  136. package/dist/usePelicanClient/useEventCallback.d.ts.map +1 -0
  137. package/dist/usePelicanClient/useEventCallback.js +12 -0
  138. package/dist/usePelicanClient/useEventCallback.js.map +1 -0
  139. package/dist/usePelicanClient/useEventListener.d.ts +7 -0
  140. package/dist/usePelicanClient/useEventListener.d.ts.map +1 -0
  141. package/dist/usePelicanClient/useEventListener.js +57 -0
  142. package/dist/usePelicanClient/useEventListener.js.map +1 -0
  143. package/dist/usePelicanClient/useIsomorphicLayoutEffect.d.ts +16 -0
  144. package/dist/usePelicanClient/useIsomorphicLayoutEffect.d.ts.map +1 -0
  145. package/dist/usePelicanClient/useIsomorphicLayoutEffect.js +16 -0
  146. package/dist/usePelicanClient/useIsomorphicLayoutEffect.js.map +1 -0
  147. package/dist/usePelicanClient/usePelicanClient.d.ts +27 -0
  148. package/dist/usePelicanClient/usePelicanClient.d.ts.map +1 -0
  149. package/dist/usePelicanClient/usePelicanClient.js +245 -0
  150. package/dist/usePelicanClient/usePelicanClient.js.map +1 -0
  151. package/dist/usePelicanClient/useSessionStorage.d.ts +39 -0
  152. package/dist/usePelicanClient/useSessionStorage.d.ts.map +1 -0
  153. package/dist/usePelicanClient/useSessionStorage.js +121 -0
  154. package/dist/usePelicanClient/useSessionStorage.js.map +1 -0
  155. package/dist/usePelicanClient/util.d.ts +1 -0
  156. package/dist/usePelicanClient/util.d.ts.map +1 -0
  157. package/dist/usePelicanClient/util.js +2 -0
  158. package/dist/usePelicanClient/util.js.map +1 -0
  159. 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,4 @@
1
+ import { createContext } from "react";
2
+ export const PelicanClientContext = createContext(null);
3
+ PelicanClientContext.displayName = "PelicanClientContext";
4
+ //# sourceMappingURL=PelicanClientContext.js.map
@@ -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,4 @@
1
+ export { PelicanClientProvider } from "./PelicanClientProvider";
2
+ export { PelicanClientContext } from "./PelicanClientContext";
3
+ export { usePelicanClient } from "./usePelicanClient";
4
+ //# sourceMappingURL=index.js.map
@@ -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,2 @@
1
+ export { default } from './PermissionIcon';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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,2 @@
1
+ export { default } from './PermissionIcon';
2
+ //# sourceMappingURL=index.js.map
@@ -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,6 @@
1
+ /**
2
+ * A public Pelican client, with authentication features disabled.
3
+ */
4
+ declare function PublicClient(): import("react/jsx-runtime").JSX.Element;
5
+ export default PublicClient;
6
+ //# sourceMappingURL=PublicClient.d.ts.map
@@ -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"}