@priceos/react 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -111,7 +111,7 @@ function PriceOSProvider({ children, getBearerToken, backendUrl, logLevel }) {
|
|
|
111
111
|
);
|
|
112
112
|
}
|
|
113
113
|
function useCustomer(options = {}) {
|
|
114
|
-
const { errorOnNotFound = false, swr } = options;
|
|
114
|
+
const { enabled = true, errorOnNotFound = false, swr } = options;
|
|
115
115
|
const { getBearerToken, backendUrl, logLevel = DEFAULT_LOG_LEVEL } = (0, import_react.useContext)(PriceOSContext);
|
|
116
116
|
const fetcher = async (url) => {
|
|
117
117
|
let bearerToken;
|
|
@@ -130,8 +130,9 @@ function useCustomer(options = {}) {
|
|
|
130
130
|
});
|
|
131
131
|
return requestCustomer(fetch, url, logLevel, errorOnNotFound, bearerToken);
|
|
132
132
|
};
|
|
133
|
+
const key = enabled ? buildUrl(backendUrl ?? DEFAULT_BACKEND_URL) : null;
|
|
133
134
|
const { data, error, isLoading, mutate } = (0, import_swr.default)(
|
|
134
|
-
|
|
135
|
+
key,
|
|
135
136
|
fetcher,
|
|
136
137
|
swr
|
|
137
138
|
);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createContext, createElement, useContext, type ReactNode } from \"react\";\nimport useSWR, { type SWRConfiguration } from \"swr\";\nimport type { GetCustomerResponse } from \"priceos\";\n\nexport type PriceOSLogLevel = \"none\" | \"error\" | \"warn\" | \"info\" | \"debug\";\n\nexport type UseCustomerOptions = {\n errorOnNotFound?: boolean;\n swr?: SWRConfiguration<GetCustomerResponse | null, Error>;\n};\n\nexport type PriceOSProviderProps = {\n children: ReactNode;\n getBearerToken?: () => Promise<string | null | undefined>;\n backendUrl?: string;\n logLevel?: PriceOSLogLevel;\n};\n\nexport type UseCustomerResult = {\n customer: GetCustomerResponse | null;\n error: Error | null;\n loading: boolean;\n refetch: () => Promise<void>;\n};\n\nconst DEFAULT_BACKEND_URL = \"/api/priceos\";\nconst DEFAULT_LOG_LEVEL: PriceOSLogLevel = \"error\";\nconst LOG_LEVEL_RANK: Record<Exclude<PriceOSLogLevel, \"none\">, number> = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n};\nconst LOG_PREFIX = \"[priceos/react]\";\n\ntype PriceOSContextValue = {\n getBearerToken?: () => Promise<string | null | undefined>;\n backendUrl?: string;\n logLevel?: PriceOSLogLevel;\n};\n\nconst PriceOSContext = createContext<PriceOSContextValue>({});\n\nconst normalizeBaseUrl = (baseUrl: string) => baseUrl.replace(/\\/$/, \"\");\n\nconst buildUrl = (backendUrl: string) => {\n const normalizedBase = normalizeBaseUrl(backendUrl);\n return `${normalizedBase}/v1/customer`;\n};\n\nconst shouldLog = (currentLevel: PriceOSLogLevel, targetLevel: Exclude<PriceOSLogLevel, \"none\">) => {\n if (currentLevel === \"none\") return false;\n return LOG_LEVEL_RANK[targetLevel] <= LOG_LEVEL_RANK[currentLevel];\n};\n\nconst logMessage = (\n currentLevel: PriceOSLogLevel,\n level: Exclude<PriceOSLogLevel, \"none\">,\n message: string,\n details?: unknown\n) => {\n if (!shouldLog(currentLevel, level)) return;\n const logger =\n level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.info;\n if (details === undefined) {\n logger(LOG_PREFIX, message);\n return;\n }\n logger(LOG_PREFIX, message, details);\n};\n\nconst requestCustomer = async (\n fetchFn: typeof fetch,\n url: string,\n logLevel: PriceOSLogLevel,\n errorOnNotFound: boolean,\n bearerToken?: string | null\n): Promise<GetCustomerResponse | null> => {\n logMessage(logLevel, \"debug\", \"Requesting customer\", { url, hasBearerToken: Boolean(bearerToken) });\n const headers = bearerToken ? { Authorization: `Bearer ${bearerToken}` } : undefined;\n const response = await fetchFn(url, headers ? { headers } : undefined);\n logMessage(logLevel, \"info\", \"Customer request completed\", { url, status: response.status });\n const text = await response.text();\n let data: unknown = null;\n let parseFailed = false;\n if (text) {\n try {\n data = JSON.parse(text) as unknown;\n } catch {\n parseFailed = true;\n logMessage(logLevel, \"warn\", \"Customer response is not JSON\", {\n url,\n status: response.status,\n bodyPreview: text.slice(0, 300),\n });\n }\n }\n if (!response.ok) {\n if (response.status === 404 && !errorOnNotFound) {\n logMessage(logLevel, \"info\", \"Customer not found\", { url, status: response.status });\n return null;\n }\n const message =\n !parseFailed && data && typeof data === \"object\" && \"error\" in data\n ? String((data as { error?: unknown }).error)\n : text || response.statusText;\n logMessage(logLevel, \"error\", \"Customer request failed\", {\n url,\n status: response.status,\n message,\n });\n throw new Error(message || \"Request failed\");\n }\n if (parseFailed) {\n throw new Error(\"Invalid JSON response\");\n }\n logMessage(logLevel, \"debug\", \"Customer request succeeded\", { url, hasCustomer: Boolean(data) });\n return data as GetCustomerResponse | null;\n};\n\nexport function PriceOSProvider({ children, getBearerToken, backendUrl, logLevel }: PriceOSProviderProps) {\n return createElement(\n PriceOSContext.Provider,\n { value: { getBearerToken, backendUrl, logLevel } },\n children\n );\n}\n\nexport function useCustomer(options: UseCustomerOptions = {}): UseCustomerResult {\n const { errorOnNotFound = false, swr } = options;\n const { getBearerToken, backendUrl, logLevel = DEFAULT_LOG_LEVEL } = useContext(PriceOSContext);\n const fetcher = async (url: string) => {\n let bearerToken: string | null | undefined;\n try {\n bearerToken = getBearerToken ? await getBearerToken() : undefined;\n } catch (error) {\n logMessage(logLevel, \"error\", \"Failed to resolve bearer token\", {\n url,\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n logMessage(logLevel, \"debug\", \"Resolved bearer token\", {\n url,\n hasBearerToken: Boolean(bearerToken),\n });\n return requestCustomer(fetch, url, logLevel, errorOnNotFound, bearerToken);\n };\n const { data, error, isLoading, mutate } = useSWR(\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createContext, createElement, useContext, type ReactNode } from \"react\";\nimport useSWR, { type SWRConfiguration } from \"swr\";\nimport type { GetCustomerResponse } from \"priceos\";\n\nexport type PriceOSLogLevel = \"none\" | \"error\" | \"warn\" | \"info\" | \"debug\";\n\nexport type UseCustomerOptions = {\n enabled?: boolean;\n errorOnNotFound?: boolean;\n swr?: SWRConfiguration<GetCustomerResponse | null, Error>;\n};\n\nexport type PriceOSProviderProps = {\n children: ReactNode;\n getBearerToken?: () => Promise<string | null | undefined>;\n backendUrl?: string;\n logLevel?: PriceOSLogLevel;\n};\n\nexport type UseCustomerResult = {\n customer: GetCustomerResponse | null;\n error: Error | null;\n loading: boolean;\n refetch: () => Promise<void>;\n};\n\nconst DEFAULT_BACKEND_URL = \"/api/priceos\";\nconst DEFAULT_LOG_LEVEL: PriceOSLogLevel = \"error\";\nconst LOG_LEVEL_RANK: Record<Exclude<PriceOSLogLevel, \"none\">, number> = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n};\nconst LOG_PREFIX = \"[priceos/react]\";\n\ntype PriceOSContextValue = {\n getBearerToken?: () => Promise<string | null | undefined>;\n backendUrl?: string;\n logLevel?: PriceOSLogLevel;\n};\n\nconst PriceOSContext = createContext<PriceOSContextValue>({});\n\nconst normalizeBaseUrl = (baseUrl: string) => baseUrl.replace(/\\/$/, \"\");\n\nconst buildUrl = (backendUrl: string) => {\n const normalizedBase = normalizeBaseUrl(backendUrl);\n return `${normalizedBase}/v1/customer`;\n};\n\nconst shouldLog = (currentLevel: PriceOSLogLevel, targetLevel: Exclude<PriceOSLogLevel, \"none\">) => {\n if (currentLevel === \"none\") return false;\n return LOG_LEVEL_RANK[targetLevel] <= LOG_LEVEL_RANK[currentLevel];\n};\n\nconst logMessage = (\n currentLevel: PriceOSLogLevel,\n level: Exclude<PriceOSLogLevel, \"none\">,\n message: string,\n details?: unknown\n) => {\n if (!shouldLog(currentLevel, level)) return;\n const logger =\n level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.info;\n if (details === undefined) {\n logger(LOG_PREFIX, message);\n return;\n }\n logger(LOG_PREFIX, message, details);\n};\n\nconst requestCustomer = async (\n fetchFn: typeof fetch,\n url: string,\n logLevel: PriceOSLogLevel,\n errorOnNotFound: boolean,\n bearerToken?: string | null\n): Promise<GetCustomerResponse | null> => {\n logMessage(logLevel, \"debug\", \"Requesting customer\", { url, hasBearerToken: Boolean(bearerToken) });\n const headers = bearerToken ? { Authorization: `Bearer ${bearerToken}` } : undefined;\n const response = await fetchFn(url, headers ? { headers } : undefined);\n logMessage(logLevel, \"info\", \"Customer request completed\", { url, status: response.status });\n const text = await response.text();\n let data: unknown = null;\n let parseFailed = false;\n if (text) {\n try {\n data = JSON.parse(text) as unknown;\n } catch {\n parseFailed = true;\n logMessage(logLevel, \"warn\", \"Customer response is not JSON\", {\n url,\n status: response.status,\n bodyPreview: text.slice(0, 300),\n });\n }\n }\n if (!response.ok) {\n if (response.status === 404 && !errorOnNotFound) {\n logMessage(logLevel, \"info\", \"Customer not found\", { url, status: response.status });\n return null;\n }\n const message =\n !parseFailed && data && typeof data === \"object\" && \"error\" in data\n ? String((data as { error?: unknown }).error)\n : text || response.statusText;\n logMessage(logLevel, \"error\", \"Customer request failed\", {\n url,\n status: response.status,\n message,\n });\n throw new Error(message || \"Request failed\");\n }\n if (parseFailed) {\n throw new Error(\"Invalid JSON response\");\n }\n logMessage(logLevel, \"debug\", \"Customer request succeeded\", { url, hasCustomer: Boolean(data) });\n return data as GetCustomerResponse | null;\n};\n\nexport function PriceOSProvider({ children, getBearerToken, backendUrl, logLevel }: PriceOSProviderProps) {\n return createElement(\n PriceOSContext.Provider,\n { value: { getBearerToken, backendUrl, logLevel } },\n children\n );\n}\n\nexport function useCustomer(options: UseCustomerOptions = {}): UseCustomerResult {\n const { enabled = true, errorOnNotFound = false, swr } = options;\n const { getBearerToken, backendUrl, logLevel = DEFAULT_LOG_LEVEL } = useContext(PriceOSContext);\n const fetcher = async (url: string) => {\n let bearerToken: string | null | undefined;\n try {\n bearerToken = getBearerToken ? await getBearerToken() : undefined;\n } catch (error) {\n logMessage(logLevel, \"error\", \"Failed to resolve bearer token\", {\n url,\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n logMessage(logLevel, \"debug\", \"Resolved bearer token\", {\n url,\n hasBearerToken: Boolean(bearerToken),\n });\n return requestCustomer(fetch, url, logLevel, errorOnNotFound, bearerToken);\n };\n const key = enabled ? buildUrl(backendUrl ?? DEFAULT_BACKEND_URL) : null;\n const { data, error, isLoading, mutate } = useSWR(\n key,\n fetcher,\n swr\n );\n\n return {\n customer: data ?? null,\n error,\n loading: isLoading,\n refetch: async () => {\n await mutate();\n },\n };\n}\n"],"mappings":"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","names":["error","useSWR"]}
|
package/dist/index.d.cts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -76,7 +76,7 @@ function PriceOSProvider({ children, getBearerToken, backendUrl, logLevel }) {
|
|
|
76
76
|
);
|
|
77
77
|
}
|
|
78
78
|
function useCustomer(options = {}) {
|
|
79
|
-
const { errorOnNotFound = false, swr } = options;
|
|
79
|
+
const { enabled = true, errorOnNotFound = false, swr } = options;
|
|
80
80
|
const { getBearerToken, backendUrl, logLevel = DEFAULT_LOG_LEVEL } = useContext(PriceOSContext);
|
|
81
81
|
const fetcher = async (url) => {
|
|
82
82
|
let bearerToken;
|
|
@@ -95,8 +95,9 @@ function useCustomer(options = {}) {
|
|
|
95
95
|
});
|
|
96
96
|
return requestCustomer(fetch, url, logLevel, errorOnNotFound, bearerToken);
|
|
97
97
|
};
|
|
98
|
+
const key = enabled ? buildUrl(backendUrl ?? DEFAULT_BACKEND_URL) : null;
|
|
98
99
|
const { data, error, isLoading, mutate } = useSWR(
|
|
99
|
-
|
|
100
|
+
key,
|
|
100
101
|
fetcher,
|
|
101
102
|
swr
|
|
102
103
|
);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createContext, createElement, useContext, type ReactNode } from \"react\";\nimport useSWR, { type SWRConfiguration } from \"swr\";\nimport type { GetCustomerResponse } from \"priceos\";\n\nexport type PriceOSLogLevel = \"none\" | \"error\" | \"warn\" | \"info\" | \"debug\";\n\nexport type UseCustomerOptions = {\n errorOnNotFound?: boolean;\n swr?: SWRConfiguration<GetCustomerResponse | null, Error>;\n};\n\nexport type PriceOSProviderProps = {\n children: ReactNode;\n getBearerToken?: () => Promise<string | null | undefined>;\n backendUrl?: string;\n logLevel?: PriceOSLogLevel;\n};\n\nexport type UseCustomerResult = {\n customer: GetCustomerResponse | null;\n error: Error | null;\n loading: boolean;\n refetch: () => Promise<void>;\n};\n\nconst DEFAULT_BACKEND_URL = \"/api/priceos\";\nconst DEFAULT_LOG_LEVEL: PriceOSLogLevel = \"error\";\nconst LOG_LEVEL_RANK: Record<Exclude<PriceOSLogLevel, \"none\">, number> = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n};\nconst LOG_PREFIX = \"[priceos/react]\";\n\ntype PriceOSContextValue = {\n getBearerToken?: () => Promise<string | null | undefined>;\n backendUrl?: string;\n logLevel?: PriceOSLogLevel;\n};\n\nconst PriceOSContext = createContext<PriceOSContextValue>({});\n\nconst normalizeBaseUrl = (baseUrl: string) => baseUrl.replace(/\\/$/, \"\");\n\nconst buildUrl = (backendUrl: string) => {\n const normalizedBase = normalizeBaseUrl(backendUrl);\n return `${normalizedBase}/v1/customer`;\n};\n\nconst shouldLog = (currentLevel: PriceOSLogLevel, targetLevel: Exclude<PriceOSLogLevel, \"none\">) => {\n if (currentLevel === \"none\") return false;\n return LOG_LEVEL_RANK[targetLevel] <= LOG_LEVEL_RANK[currentLevel];\n};\n\nconst logMessage = (\n currentLevel: PriceOSLogLevel,\n level: Exclude<PriceOSLogLevel, \"none\">,\n message: string,\n details?: unknown\n) => {\n if (!shouldLog(currentLevel, level)) return;\n const logger =\n level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.info;\n if (details === undefined) {\n logger(LOG_PREFIX, message);\n return;\n }\n logger(LOG_PREFIX, message, details);\n};\n\nconst requestCustomer = async (\n fetchFn: typeof fetch,\n url: string,\n logLevel: PriceOSLogLevel,\n errorOnNotFound: boolean,\n bearerToken?: string | null\n): Promise<GetCustomerResponse | null> => {\n logMessage(logLevel, \"debug\", \"Requesting customer\", { url, hasBearerToken: Boolean(bearerToken) });\n const headers = bearerToken ? { Authorization: `Bearer ${bearerToken}` } : undefined;\n const response = await fetchFn(url, headers ? { headers } : undefined);\n logMessage(logLevel, \"info\", \"Customer request completed\", { url, status: response.status });\n const text = await response.text();\n let data: unknown = null;\n let parseFailed = false;\n if (text) {\n try {\n data = JSON.parse(text) as unknown;\n } catch {\n parseFailed = true;\n logMessage(logLevel, \"warn\", \"Customer response is not JSON\", {\n url,\n status: response.status,\n bodyPreview: text.slice(0, 300),\n });\n }\n }\n if (!response.ok) {\n if (response.status === 404 && !errorOnNotFound) {\n logMessage(logLevel, \"info\", \"Customer not found\", { url, status: response.status });\n return null;\n }\n const message =\n !parseFailed && data && typeof data === \"object\" && \"error\" in data\n ? String((data as { error?: unknown }).error)\n : text || response.statusText;\n logMessage(logLevel, \"error\", \"Customer request failed\", {\n url,\n status: response.status,\n message,\n });\n throw new Error(message || \"Request failed\");\n }\n if (parseFailed) {\n throw new Error(\"Invalid JSON response\");\n }\n logMessage(logLevel, \"debug\", \"Customer request succeeded\", { url, hasCustomer: Boolean(data) });\n return data as GetCustomerResponse | null;\n};\n\nexport function PriceOSProvider({ children, getBearerToken, backendUrl, logLevel }: PriceOSProviderProps) {\n return createElement(\n PriceOSContext.Provider,\n { value: { getBearerToken, backendUrl, logLevel } },\n children\n );\n}\n\nexport function useCustomer(options: UseCustomerOptions = {}): UseCustomerResult {\n const { errorOnNotFound = false, swr } = options;\n const { getBearerToken, backendUrl, logLevel = DEFAULT_LOG_LEVEL } = useContext(PriceOSContext);\n const fetcher = async (url: string) => {\n let bearerToken: string | null | undefined;\n try {\n bearerToken = getBearerToken ? await getBearerToken() : undefined;\n } catch (error) {\n logMessage(logLevel, \"error\", \"Failed to resolve bearer token\", {\n url,\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n logMessage(logLevel, \"debug\", \"Resolved bearer token\", {\n url,\n hasBearerToken: Boolean(bearerToken),\n });\n return requestCustomer(fetch, url, logLevel, errorOnNotFound, bearerToken);\n };\n const { data, error, isLoading, mutate } = useSWR(\n
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createContext, createElement, useContext, type ReactNode } from \"react\";\nimport useSWR, { type SWRConfiguration } from \"swr\";\nimport type { GetCustomerResponse } from \"priceos\";\n\nexport type PriceOSLogLevel = \"none\" | \"error\" | \"warn\" | \"info\" | \"debug\";\n\nexport type UseCustomerOptions = {\n enabled?: boolean;\n errorOnNotFound?: boolean;\n swr?: SWRConfiguration<GetCustomerResponse | null, Error>;\n};\n\nexport type PriceOSProviderProps = {\n children: ReactNode;\n getBearerToken?: () => Promise<string | null | undefined>;\n backendUrl?: string;\n logLevel?: PriceOSLogLevel;\n};\n\nexport type UseCustomerResult = {\n customer: GetCustomerResponse | null;\n error: Error | null;\n loading: boolean;\n refetch: () => Promise<void>;\n};\n\nconst DEFAULT_BACKEND_URL = \"/api/priceos\";\nconst DEFAULT_LOG_LEVEL: PriceOSLogLevel = \"error\";\nconst LOG_LEVEL_RANK: Record<Exclude<PriceOSLogLevel, \"none\">, number> = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n};\nconst LOG_PREFIX = \"[priceos/react]\";\n\ntype PriceOSContextValue = {\n getBearerToken?: () => Promise<string | null | undefined>;\n backendUrl?: string;\n logLevel?: PriceOSLogLevel;\n};\n\nconst PriceOSContext = createContext<PriceOSContextValue>({});\n\nconst normalizeBaseUrl = (baseUrl: string) => baseUrl.replace(/\\/$/, \"\");\n\nconst buildUrl = (backendUrl: string) => {\n const normalizedBase = normalizeBaseUrl(backendUrl);\n return `${normalizedBase}/v1/customer`;\n};\n\nconst shouldLog = (currentLevel: PriceOSLogLevel, targetLevel: Exclude<PriceOSLogLevel, \"none\">) => {\n if (currentLevel === \"none\") return false;\n return LOG_LEVEL_RANK[targetLevel] <= LOG_LEVEL_RANK[currentLevel];\n};\n\nconst logMessage = (\n currentLevel: PriceOSLogLevel,\n level: Exclude<PriceOSLogLevel, \"none\">,\n message: string,\n details?: unknown\n) => {\n if (!shouldLog(currentLevel, level)) return;\n const logger =\n level === \"error\" ? console.error : level === \"warn\" ? console.warn : console.info;\n if (details === undefined) {\n logger(LOG_PREFIX, message);\n return;\n }\n logger(LOG_PREFIX, message, details);\n};\n\nconst requestCustomer = async (\n fetchFn: typeof fetch,\n url: string,\n logLevel: PriceOSLogLevel,\n errorOnNotFound: boolean,\n bearerToken?: string | null\n): Promise<GetCustomerResponse | null> => {\n logMessage(logLevel, \"debug\", \"Requesting customer\", { url, hasBearerToken: Boolean(bearerToken) });\n const headers = bearerToken ? { Authorization: `Bearer ${bearerToken}` } : undefined;\n const response = await fetchFn(url, headers ? { headers } : undefined);\n logMessage(logLevel, \"info\", \"Customer request completed\", { url, status: response.status });\n const text = await response.text();\n let data: unknown = null;\n let parseFailed = false;\n if (text) {\n try {\n data = JSON.parse(text) as unknown;\n } catch {\n parseFailed = true;\n logMessage(logLevel, \"warn\", \"Customer response is not JSON\", {\n url,\n status: response.status,\n bodyPreview: text.slice(0, 300),\n });\n }\n }\n if (!response.ok) {\n if (response.status === 404 && !errorOnNotFound) {\n logMessage(logLevel, \"info\", \"Customer not found\", { url, status: response.status });\n return null;\n }\n const message =\n !parseFailed && data && typeof data === \"object\" && \"error\" in data\n ? String((data as { error?: unknown }).error)\n : text || response.statusText;\n logMessage(logLevel, \"error\", \"Customer request failed\", {\n url,\n status: response.status,\n message,\n });\n throw new Error(message || \"Request failed\");\n }\n if (parseFailed) {\n throw new Error(\"Invalid JSON response\");\n }\n logMessage(logLevel, \"debug\", \"Customer request succeeded\", { url, hasCustomer: Boolean(data) });\n return data as GetCustomerResponse | null;\n};\n\nexport function PriceOSProvider({ children, getBearerToken, backendUrl, logLevel }: PriceOSProviderProps) {\n return createElement(\n PriceOSContext.Provider,\n { value: { getBearerToken, backendUrl, logLevel } },\n children\n );\n}\n\nexport function useCustomer(options: UseCustomerOptions = {}): UseCustomerResult {\n const { enabled = true, errorOnNotFound = false, swr } = options;\n const { getBearerToken, backendUrl, logLevel = DEFAULT_LOG_LEVEL } = useContext(PriceOSContext);\n const fetcher = async (url: string) => {\n let bearerToken: string | null | undefined;\n try {\n bearerToken = getBearerToken ? await getBearerToken() : undefined;\n } catch (error) {\n logMessage(logLevel, \"error\", \"Failed to resolve bearer token\", {\n url,\n error: error instanceof Error ? error.message : String(error),\n });\n throw error;\n }\n logMessage(logLevel, \"debug\", \"Resolved bearer token\", {\n url,\n hasBearerToken: Boolean(bearerToken),\n });\n return requestCustomer(fetch, url, logLevel, errorOnNotFound, bearerToken);\n };\n const key = enabled ? buildUrl(backendUrl ?? DEFAULT_BACKEND_URL) : null;\n const { data, error, isLoading, mutate } = useSWR(\n key,\n fetcher,\n swr\n );\n\n return {\n customer: data ?? null,\n error,\n loading: isLoading,\n refetch: async () => {\n await mutate();\n },\n };\n}\n"],"mappings":"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","names":["error"]}
|