@gen3/core 0.12.44 → 0.12.45

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 (61) hide show
  1. package/dist/cjs/index.js +500 -158
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/server.js +26 -14
  4. package/dist/cjs/server.js.map +1 -1
  5. package/dist/dts/features/cart/cartSelectors.d.ts +12 -0
  6. package/dist/dts/features/cart/cartSelectors.d.ts.map +1 -1
  7. package/dist/dts/features/cohort/cohortManagerSelector.d.ts +12 -0
  8. package/dist/dts/features/cohort/cohortManagerSelector.d.ts.map +1 -1
  9. package/dist/dts/features/cohort/cohortManagerSlice.d.ts +3 -0
  10. package/dist/dts/features/cohort/cohortManagerSlice.d.ts.map +1 -1
  11. package/dist/dts/features/fence/fetchFence.d.ts +1 -1
  12. package/dist/dts/features/fence/fetchFence.d.ts.map +1 -1
  13. package/dist/dts/features/fence/index.d.ts +2 -2
  14. package/dist/dts/features/fence/index.d.ts.map +1 -1
  15. package/dist/dts/features/fence/jwtApi.d.ts +184 -1
  16. package/dist/dts/features/fence/jwtApi.d.ts.map +1 -1
  17. package/dist/dts/features/fence/utils.d.ts.map +1 -1
  18. package/dist/dts/features/gen3/gen3Api.d.ts.map +1 -1
  19. package/dist/dts/features/notifications/index.d.ts +2 -0
  20. package/dist/dts/features/notifications/index.d.ts.map +1 -0
  21. package/dist/dts/features/notifications/notificationService.d.ts +42 -0
  22. package/dist/dts/features/notifications/notificationService.d.ts.map +1 -0
  23. package/dist/dts/features/submission/submissionApi.d.ts +186 -1
  24. package/dist/dts/features/submission/submissionApi.d.ts.map +1 -1
  25. package/dist/dts/features/user/userSliceRTK.d.ts +9 -0
  26. package/dist/dts/features/user/userSliceRTK.d.ts.map +1 -1
  27. package/dist/dts/features/workspace/index.d.ts +7 -3
  28. package/dist/dts/features/workspace/index.d.ts.map +1 -1
  29. package/dist/dts/features/workspace/jegKernelSelector.d.ts +162 -0
  30. package/dist/dts/features/workspace/jegKernelSelector.d.ts.map +1 -0
  31. package/dist/dts/features/workspace/jegKernelSlice.d.ts +482 -0
  32. package/dist/dts/features/workspace/jegKernelSlice.d.ts.map +1 -0
  33. package/dist/dts/features/workspace/jegWorkspaceSlice.d.ts +16 -0
  34. package/dist/dts/features/workspace/jegWorkspaceSlice.d.ts.map +1 -0
  35. package/dist/dts/features/workspace/tieredWorkspaceSlice.d.ts +14 -0
  36. package/dist/dts/features/workspace/tieredWorkspaceSlice.d.ts.map +1 -0
  37. package/dist/dts/features/workspace/types.d.ts +11 -1
  38. package/dist/dts/features/workspace/types.d.ts.map +1 -1
  39. package/dist/dts/features/workspace/workspaceSlice.d.ts +1 -1
  40. package/dist/dts/features/workspace/workspaceSlice.d.ts.map +1 -1
  41. package/dist/dts/hooks.d.ts +6 -0
  42. package/dist/dts/hooks.d.ts.map +1 -1
  43. package/dist/dts/index.d.ts +1 -0
  44. package/dist/dts/index.d.ts.map +1 -1
  45. package/dist/dts/reducers.d.ts +37 -31
  46. package/dist/dts/reducers.d.ts.map +1 -1
  47. package/dist/dts/store.d.ts +12 -0
  48. package/dist/dts/store.d.ts.map +1 -1
  49. package/dist/dts/utils/index.d.ts +3 -2
  50. package/dist/dts/utils/index.d.ts.map +1 -1
  51. package/dist/dts/utils/normalizeRtkError.d.ts +14 -0
  52. package/dist/dts/utils/normalizeRtkError.d.ts.map +1 -0
  53. package/dist/dts/utils/time.d.ts +14 -0
  54. package/dist/dts/utils/time.d.ts.map +1 -1
  55. package/dist/esm/index.js +473 -159
  56. package/dist/esm/index.js.map +1 -1
  57. package/dist/esm/server.js +26 -14
  58. package/dist/esm/server.js.map +1 -1
  59. package/dist/index.d.ts +11159 -10453
  60. package/dist/server.d.ts +1 -1
  61. package/package.json +3 -3
@@ -58,12 +58,22 @@ const isFetchError = (obj)=>{
58
58
  * Template for fence error response dict
59
59
  * @returns: An error dict response from a RESTFUL API request
60
60
  */ const buildFetchError = async (res, request)=>{
61
+ let text = '';
62
+ if (!res.bodyUsed) {
63
+ try {
64
+ text = await res.text();
65
+ } catch (err) {
66
+ if (process.env.NODE_ENV !== 'production') {
67
+ console.warn('[buildFetchError] Failed to read response body:', err);
68
+ }
69
+ }
70
+ }
61
71
  return {
62
- url: res.url,
72
+ url: res.url || '(unknown)',
63
73
  status: res.status,
64
74
  statusText: res.statusText,
65
- text: await res.text(),
66
- request: request
75
+ text,
76
+ request
67
77
  };
68
78
  };
69
79
 
@@ -81,13 +91,11 @@ const isFetchError = (obj)=>{
81
91
  * @returns {Promise<Gen3FenceResponse<T>>} A promise that resolves to the parsed data and response status
82
92
  * or rejects with an error if the request fails.
83
93
  * @throws {Error} Throws an error if the fetch request fails or the response is not successful.
84
- */ const fetchFence = async ({ endpoint, headers, body = {}, method = 'GET', isJSON = true }, useService = false)=>{
85
- let url = `${GEN3_FENCE_API}${endpoint}`;
86
- if (useService) {
87
- url = `${GEN3_FENCE_SERVICE}/${endpoint}`;
88
- }
94
+ */ const fetchFence = async ({ endpoint, headers, body = undefined, method = 'GET', isJSON = true }, useService = false)=>{
95
+ const base = useService ? GEN3_FENCE_SERVICE : GEN3_FENCE_API;
96
+ const url = `${base.replace(/\/$/, '')}/${endpoint.replace(/^\//, '')}`;
89
97
  const res = await fetch(url, {
90
- method: method,
98
+ method,
91
99
  credentials: 'include',
92
100
  headers: {
93
101
  // Ensure Content-Type is set for JSON POSTs, but allow overrides via 'headers'
@@ -96,12 +104,16 @@ const isFetchError = (obj)=>{
96
104
  } : {},
97
105
  ...headers
98
106
  },
99
- body: 'POST' === method ? JSON.stringify(body) : null
107
+ ...method === 'POST' && body ? {
108
+ body: JSON.stringify(body)
109
+ } : {}
100
110
  });
101
- if (res.ok) return {
102
- data: isJSON ? await res.json() : await res.text(),
103
- status: res.status
104
- };
111
+ if (res.ok) {
112
+ return {
113
+ data: isJSON ? await res.json() : await res.text(),
114
+ status: res.status
115
+ };
116
+ }
105
117
  throw await buildFetchError(res, {
106
118
  endpoint,
107
119
  method,
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sources":["../../src/constants.ts","../../src/features/authz/fetchAuthz.ts","../../src/features/fence/utils.ts","../../src/features/fence/fetchFence.ts"],"sourcesContent":["export const GEN3_COMMONS_NAME =\n process.env.NEXT_PUBLIC_GEN3_COMMONS_NAME || 'gen3';\nexport const GEN3_API = process.env.NEXT_PUBLIC_GEN3_API || '';\nexport const GEN3_DOMAIN = process.env.NEXT_PUBLIC_GEN3_DOMAIN || '';\nexport const GUID_PREFIX_PATTERN = /^dg.[a-zA-Z0-9]+\\//;\n\n/**\n * Service Specific Constants\n */\nexport const GEN3_GUPPY_API =\n process.env.NEXT_PUBLIC_GEN3_GUPPY_API || `${GEN3_API}/guppy`;\nexport const GEN3_MDS_API =\n process.env.NEXT_PUBLIC_GEN3_MDS_API || `${GEN3_API}/mds`;\nexport const GEN3_DOWNLOADS_ENDPOINT =\n process.env.NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT || 'downloads';\nexport const GEN3_FENCE_API =\n process.env.NEXT_PUBLIC_GEN3_FENCE_API || `${GEN3_API}/user`;\nexport const GEN3_FENCE_SERVICE =\n process.env.GEN3_FENCE_SERVICE || 'http://fence-service';\nexport const GEN3_INDEXD_API =\n process.env.NEXT_PUBLIC_GEN3_INDEXD_API || `${GEN3_API}/index`;\nexport const GEN3_AI_SEARCH_API =\n process.env.NEXT_PUBLIC_GEN3_AI_SEARCH_API || `${GEN3_API}/ai-search`;\nexport const GEN3_AUTHZ_API =\n process.env.NEXT_PUBLIC_GEN3_AUTHZ_API || `${GEN3_API}/authz`;\nexport const GEN3_AUTHZ_SERVICE =\n process.env.GEN3_AUTHZ_SERVICE || 'http://arborist-service';\nexport const GEN3_REDIRECT_URL =\n process.env.NEXT_PUBLIC_GEN3_REDIRECT_URL || GEN3_API;\nexport const GEN3_WORKSPACE_API =\n process.env.NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API ||\n `${GEN3_API}/lw-workspace`;\nexport const GEN3_SUBMISSION_API =\n process.env.NEXT_PUBLIC_GEN3_SUBMISSION_API ||\n `${GEN3_API}/api/v0/submission`;\nexport const GEN3_WTS_API =\n process.env.NEXT_PUBLIC_GEN3_WTS_API || `${GEN3_API}/wts`;\nexport const GEN3_DATA_LIBRARY_API =\n process.env.NEXT_PUBLIC_GEN3_DATA_LIBRARY_API || `${GEN3_API}/library/lists`;\nexport const GEN3_CROSSWALK_API =\n process.env.NEXT_PUBLIC_GEN3_CROSSWALK_API || `${GEN3_API}/mds`;\nexport const GEN3_SOWER_API =\n process.env.NEXT_PUBLIC_GEN3_SOWER_API || `${GEN3_API}/job`;\nexport const GEN3_MANIFEST_API =\n process.env.NEXT_PUBLIC_GEN3_MANIFEST_API || `${GEN3_API}/manifests`;\nexport const GEN3_REQUESTOR_API =\n process.env.NEXT_PUBLIC_GEN3_REQUESTOR_API || `${GEN3_API}/requestor`;\nexport const GEN3_ANALYSIS_API =\n process.env.NEXT_PUBLIC_GEN3_ANALYSIS_API || `${GEN3_API}/analysis/v0`;\n\nexport enum Accessibility {\n ACCESSIBLE = 'accessible',\n UNACCESSIBLE = 'unaccessible',\n ALL = 'all',\n}\n\nexport const FILE_FORMATS = {\n JSON: 'json',\n TSV: 'tsv',\n CSV: 'csv',\n};\n\nexport const FILE_DELIMITERS = {\n tsv: '\\t',\n csv: ',',\n};\n\nexport const CART_LIMIT = 80000;\n","import { GEN3_AUTHZ_API, GEN3_AUTHZ_SERVICE } from '../../constants';\nimport { AuthzResourceResponse } from './types';\n\n/**\n * Low-level helper to fetch Arborist resources for the current user.\n * Adds an Authorization header when a token is provided and normalizes the response\n * to a simple string[] of resource paths.\n *\n * token { string | null } - access token to use for authorization\n * useService { boolean } - use the arborist service endpoint instead of the public arborist API\n */\nexport async function fetchArboristResources(\n token: string | null,\n useService: boolean = false,\n): Promise<string[]> {\n const headers: Record<string, string> = {};\n\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n\n const url = useService\n ? `${GEN3_AUTHZ_SERVICE}/resource`\n : `${GEN3_AUTHZ_API}/resources`;\n const res = await fetch(url, { headers });\n\n if (!res.ok) {\n console.error(\n '@gen3/core:fetchArboristResources /resource failed:',\n res.status,\n await res.text(),\n );\n return [];\n }\n\n const data = (await res.json()) as AuthzResourceResponse;\n return data.resources ?? [];\n}\n","import { FetchError } from './types';\n\nexport const isFetchError = <T>(obj: unknown): obj is FetchError<T> => {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n\n const { url, status, statusText, text } = obj as Partial<FetchError<T>>;\n\n return (\n typeof url === 'string' &&\n typeof status === 'number' &&\n typeof statusText === 'string' &&\n typeof text === 'string'\n );\n};\n\n/**\n * Template for fence error response dict\n * @returns: An error dict response from a RESTFUL API request\n */\nexport const buildFetchError = async <T>(\n res: Response,\n request?: T,\n): Promise<FetchError<T>> => {\n return {\n url: res.url,\n status: res.status,\n statusText: res.statusText,\n text: await res.text(),\n request: request,\n };\n};\n","import { type FetchRequest, type Gen3FenceResponse } from './types';\nimport { GEN3_FENCE_API, GEN3_FENCE_SERVICE } from '../../constants';\nimport { buildFetchError } from './utils';\n\n/**\n * Performs an asynchronous HTTP request to the Gen3 Fence API and processes the response.\n *\n * @template T The expected type of the response data.\n * @param {FetchRequest} options The options for the fetch request.\n * @param {string} options.endpoint The API endpoint to which the request will be sent.\n * @param {Record<string, string>} options.headers An object representing the HTTP headers to include in the request.\n * @param {Record<string, any>} [options.body={}] The request body to send with the fetch, used if the HTTP method is POST.\n * @param {string} [options.method='GET'] The HTTP method for the request (e.g., 'GET', 'POST').\n * @param {boolean} [options.isJSON=true] Determines if the response should be parsed as JSON or returned as plain text.\n * @param useService { boolean } Uses fence_service instead of public fence API\n * @returns {Promise<Gen3FenceResponse<T>>} A promise that resolves to the parsed data and response status\n * or rejects with an error if the request fails.\n * @throws {Error} Throws an error if the fetch request fails or the response is not successful.\n */\nexport const fetchFence = async <T>(\n { endpoint, headers, body = {}, method = 'GET', isJSON = true }: FetchRequest,\n useService: boolean = false,\n): Promise<Gen3FenceResponse<T>> => {\n let url = `${GEN3_FENCE_API}${endpoint}`;\n if (useService) {\n url = `${GEN3_FENCE_SERVICE}/${endpoint}`;\n }\n\n const res = await fetch(url, {\n method: method,\n credentials: 'include',\n headers: {\n // Ensure Content-Type is set for JSON POSTs, but allow overrides via 'headers'\n ...(method === 'POST' ? { 'Content-Type': 'application/json' } : {}),\n ...headers,\n },\n body: 'POST' === method ? JSON.stringify(body) : null,\n // REMOVED: next: { revalidate: 360 } - Auth requests should not be cached by default\n });\n\n if (res.ok)\n return {\n data: isJSON ? await res.json() : await res.text(),\n status: res.status,\n };\n throw await buildFetchError(res, {\n endpoint,\n method,\n headers,\n body,\n });\n};\n"],"names":["GEN3_COMMONS_NAME","process","env","NEXT_PUBLIC_GEN3_COMMONS_NAME","GEN3_API","NEXT_PUBLIC_GEN3_API","GEN3_DOMAIN","NEXT_PUBLIC_GEN3_DOMAIN","GEN3_GUPPY_API","NEXT_PUBLIC_GEN3_GUPPY_API","GEN3_MDS_API","NEXT_PUBLIC_GEN3_MDS_API","GEN3_DOWNLOADS_ENDPOINT","NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT","GEN3_FENCE_API","NEXT_PUBLIC_GEN3_FENCE_API","GEN3_FENCE_SERVICE","NEXT_PUBLIC_GEN3_INDEXD_API","NEXT_PUBLIC_GEN3_AI_SEARCH_API","GEN3_AUTHZ_API","NEXT_PUBLIC_GEN3_AUTHZ_API","GEN3_AUTHZ_SERVICE","GEN3_REDIRECT_URL","NEXT_PUBLIC_GEN3_REDIRECT_URL","GEN3_WORKSPACE_API","NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API","GEN3_SUBMISSION_API","NEXT_PUBLIC_GEN3_SUBMISSION_API","NEXT_PUBLIC_GEN3_WTS_API","NEXT_PUBLIC_GEN3_DATA_LIBRARY_API","GEN3_CROSSWALK_API","NEXT_PUBLIC_GEN3_CROSSWALK_API","GEN3_SOWER_API","NEXT_PUBLIC_GEN3_SOWER_API","GEN3_MANIFEST_API","NEXT_PUBLIC_GEN3_MANIFEST_API","NEXT_PUBLIC_GEN3_REQUESTOR_API","NEXT_PUBLIC_GEN3_ANALYSIS_API","fetchArboristResources","token","useService","headers","Authorization","url","res","fetch","ok","console","error","status","text","data","json","resources","isFetchError","obj","statusText","buildFetchError","request","fetchFence","endpoint","body","method","isJSON","credentials","JSON","stringify"],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sources":["../../src/constants.ts","../../src/features/authz/fetchAuthz.ts","../../src/features/fence/utils.ts","../../src/features/fence/fetchFence.ts"],"sourcesContent":["export const GEN3_COMMONS_NAME =\n process.env.NEXT_PUBLIC_GEN3_COMMONS_NAME || 'gen3';\nexport const GEN3_API = process.env.NEXT_PUBLIC_GEN3_API || '';\nexport const GEN3_DOMAIN = process.env.NEXT_PUBLIC_GEN3_DOMAIN || '';\nexport const GUID_PREFIX_PATTERN = /^dg.[a-zA-Z0-9]+\\//;\n\n/**\n * Service Specific Constants\n */\nexport const GEN3_GUPPY_API =\n process.env.NEXT_PUBLIC_GEN3_GUPPY_API || `${GEN3_API}/guppy`;\nexport const GEN3_MDS_API =\n process.env.NEXT_PUBLIC_GEN3_MDS_API || `${GEN3_API}/mds`;\nexport const GEN3_DOWNLOADS_ENDPOINT =\n process.env.NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT || 'downloads';\nexport const GEN3_FENCE_API =\n process.env.NEXT_PUBLIC_GEN3_FENCE_API || `${GEN3_API}/user`;\nexport const GEN3_FENCE_SERVICE =\n process.env.GEN3_FENCE_SERVICE || 'http://fence-service';\nexport const GEN3_INDEXD_API =\n process.env.NEXT_PUBLIC_GEN3_INDEXD_API || `${GEN3_API}/index`;\nexport const GEN3_AI_SEARCH_API =\n process.env.NEXT_PUBLIC_GEN3_AI_SEARCH_API || `${GEN3_API}/ai-search`;\nexport const GEN3_AUTHZ_API =\n process.env.NEXT_PUBLIC_GEN3_AUTHZ_API || `${GEN3_API}/authz`;\nexport const GEN3_AUTHZ_SERVICE =\n process.env.GEN3_AUTHZ_SERVICE || 'http://arborist-service';\nexport const GEN3_REDIRECT_URL =\n process.env.NEXT_PUBLIC_GEN3_REDIRECT_URL || GEN3_API;\nexport const GEN3_WORKSPACE_API =\n process.env.NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API ||\n `${GEN3_API}/lw-workspace`;\nexport const GEN3_SUBMISSION_API =\n process.env.NEXT_PUBLIC_GEN3_SUBMISSION_API ||\n `${GEN3_API}/api/v0/submission`;\nexport const GEN3_WTS_API =\n process.env.NEXT_PUBLIC_GEN3_WTS_API || `${GEN3_API}/wts`;\nexport const GEN3_DATA_LIBRARY_API =\n process.env.NEXT_PUBLIC_GEN3_DATA_LIBRARY_API || `${GEN3_API}/library/lists`;\nexport const GEN3_CROSSWALK_API =\n process.env.NEXT_PUBLIC_GEN3_CROSSWALK_API || `${GEN3_API}/mds`;\nexport const GEN3_SOWER_API =\n process.env.NEXT_PUBLIC_GEN3_SOWER_API || `${GEN3_API}/job`;\nexport const GEN3_MANIFEST_API =\n process.env.NEXT_PUBLIC_GEN3_MANIFEST_API || `${GEN3_API}/manifests`;\nexport const GEN3_REQUESTOR_API =\n process.env.NEXT_PUBLIC_GEN3_REQUESTOR_API || `${GEN3_API}/requestor`;\nexport const GEN3_ANALYSIS_API =\n process.env.NEXT_PUBLIC_GEN3_ANALYSIS_API || `${GEN3_API}/analysis/v0`;\n\nexport enum Accessibility {\n ACCESSIBLE = 'accessible',\n UNACCESSIBLE = 'unaccessible',\n ALL = 'all',\n}\n\nexport const FILE_FORMATS = {\n JSON: 'json',\n TSV: 'tsv',\n CSV: 'csv',\n};\n\nexport const FILE_DELIMITERS = {\n tsv: '\\t',\n csv: ',',\n};\n\nexport const CART_LIMIT = 80000;\n","import { GEN3_AUTHZ_API, GEN3_AUTHZ_SERVICE } from '../../constants';\nimport { AuthzResourceResponse } from './types';\n\n/**\n * Low-level helper to fetch Arborist resources for the current user.\n * Adds an Authorization header when a token is provided and normalizes the response\n * to a simple string[] of resource paths.\n *\n * token { string | null } - access token to use for authorization\n * useService { boolean } - use the arborist service endpoint instead of the public arborist API\n */\nexport async function fetchArboristResources(\n token: string | null,\n useService: boolean = false,\n): Promise<string[]> {\n const headers: Record<string, string> = {};\n\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n\n const url = useService\n ? `${GEN3_AUTHZ_SERVICE}/resource`\n : `${GEN3_AUTHZ_API}/resources`;\n const res = await fetch(url, { headers });\n\n if (!res.ok) {\n console.error(\n '@gen3/core:fetchArboristResources /resource failed:',\n res.status,\n await res.text(),\n );\n return [];\n }\n\n const data = (await res.json()) as AuthzResourceResponse;\n return data.resources ?? [];\n}\n","import { FetchError } from './types';\n\nexport const isFetchError = <T>(obj: unknown): obj is FetchError<T> => {\n if (typeof obj !== 'object' || obj === null) {\n return false;\n }\n\n const { url, status, statusText, text } = obj as Partial<FetchError<T>>;\n\n return (\n typeof url === 'string' &&\n typeof status === 'number' &&\n typeof statusText === 'string' &&\n typeof text === 'string'\n );\n};\n\n/**\n * Template for fence error response dict\n * @returns: An error dict response from a RESTFUL API request\n */\nexport const buildFetchError = async <T>(\n res: Response,\n request?: T,\n): Promise<FetchError<T>> => {\n let text = '';\n if (!res.bodyUsed) {\n try {\n text = await res.text();\n } catch (err) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[buildFetchError] Failed to read response body:', err);\n }\n }\n }\n return {\n url: res.url || '(unknown)',\n status: res.status,\n statusText: res.statusText,\n text,\n request,\n };\n};\n","import { type FetchRequest, type Gen3FenceResponse } from './types';\nimport { GEN3_FENCE_API, GEN3_FENCE_SERVICE } from '../../constants';\nimport { buildFetchError } from './utils';\n\n/**\n * Performs an asynchronous HTTP request to the Gen3 Fence API and processes the response.\n *\n * @template T The expected type of the response data.\n * @param {FetchRequest} options The options for the fetch request.\n * @param {string} options.endpoint The API endpoint to which the request will be sent.\n * @param {Record<string, string>} options.headers An object representing the HTTP headers to include in the request.\n * @param {Record<string, any>} [options.body={}] The request body to send with the fetch, used if the HTTP method is POST.\n * @param {string} [options.method='GET'] The HTTP method for the request (e.g., 'GET', 'POST').\n * @param {boolean} [options.isJSON=true] Determines if the response should be parsed as JSON or returned as plain text.\n * @param useService { boolean } Uses fence_service instead of public fence API\n * @returns {Promise<Gen3FenceResponse<T>>} A promise that resolves to the parsed data and response status\n * or rejects with an error if the request fails.\n * @throws {Error} Throws an error if the fetch request fails or the response is not successful.\n */\nexport const fetchFence = async <T>(\n {\n endpoint,\n headers,\n body = undefined,\n method = 'GET',\n isJSON = true,\n }: FetchRequest,\n useService = false,\n): Promise<Gen3FenceResponse<T>> => {\n const base = useService ? GEN3_FENCE_SERVICE : GEN3_FENCE_API;\n const url = `${base.replace(/\\/$/, '')}/${endpoint.replace(/^\\//, '')}`;\n\n const res = await fetch(url, {\n method,\n credentials: 'include',\n headers: {\n // Ensure Content-Type is set for JSON POSTs, but allow overrides via 'headers'\n ...(method === 'POST' ? { 'Content-Type': 'application/json' } : {}),\n ...headers,\n },\n ...(method === 'POST' && body ? { body: JSON.stringify(body) } : {}),\n });\n\n if (res.ok) {\n return {\n data: isJSON ? await res.json() : await res.text(),\n status: res.status,\n };\n }\n\n throw await buildFetchError(res, { endpoint, method, headers, body });\n};\n"],"names":["GEN3_COMMONS_NAME","process","env","NEXT_PUBLIC_GEN3_COMMONS_NAME","GEN3_API","NEXT_PUBLIC_GEN3_API","GEN3_DOMAIN","NEXT_PUBLIC_GEN3_DOMAIN","GEN3_GUPPY_API","NEXT_PUBLIC_GEN3_GUPPY_API","GEN3_MDS_API","NEXT_PUBLIC_GEN3_MDS_API","GEN3_DOWNLOADS_ENDPOINT","NEXT_PUBLIC_GEN3_DOWNLOADS_ENDPOINT","GEN3_FENCE_API","NEXT_PUBLIC_GEN3_FENCE_API","GEN3_FENCE_SERVICE","NEXT_PUBLIC_GEN3_INDEXD_API","NEXT_PUBLIC_GEN3_AI_SEARCH_API","GEN3_AUTHZ_API","NEXT_PUBLIC_GEN3_AUTHZ_API","GEN3_AUTHZ_SERVICE","GEN3_REDIRECT_URL","NEXT_PUBLIC_GEN3_REDIRECT_URL","GEN3_WORKSPACE_API","NEXT_PUBLIC_GEN3_WORKSPACE_STATUS_API","GEN3_SUBMISSION_API","NEXT_PUBLIC_GEN3_SUBMISSION_API","NEXT_PUBLIC_GEN3_WTS_API","NEXT_PUBLIC_GEN3_DATA_LIBRARY_API","GEN3_CROSSWALK_API","NEXT_PUBLIC_GEN3_CROSSWALK_API","GEN3_SOWER_API","NEXT_PUBLIC_GEN3_SOWER_API","GEN3_MANIFEST_API","NEXT_PUBLIC_GEN3_MANIFEST_API","NEXT_PUBLIC_GEN3_REQUESTOR_API","NEXT_PUBLIC_GEN3_ANALYSIS_API","fetchArboristResources","token","useService","headers","Authorization","url","res","fetch","ok","console","error","status","text","data","json","resources","isFetchError","obj","statusText","buildFetchError","request","bodyUsed","err","NODE_ENV","warn","fetchFence","endpoint","body","undefined","method","isJSON","base","replace","credentials","JSON","stringify"],"mappings":"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"}