浏览代码

chore: format

Timothy Jaeryang Baek 2 月之前
父节点
当前提交
9f27d7710b

+ 1 - 3
backend/open_webui/main.py

@@ -1186,9 +1186,7 @@ async def get_app_config(request: Request):
                     "client_id": GOOGLE_DRIVE_CLIENT_ID.value,
                     "api_key": GOOGLE_DRIVE_API_KEY.value,
                 },
-                "onedrive": {
-                    "client_id": ONEDRIVE_CLIENT_ID.value
-                }
+                "onedrive": {"client_id": ONEDRIVE_CLIENT_ID.value},
             }
             if user is not None
             else {}

+ 0 - 1
src/lib/components/admin/Settings/Documents.svelte

@@ -667,7 +667,6 @@
 			</div>
 		</div>
 
-
 		<hr class=" border-gray-100 dark:border-gray-850" />
 
 		<div class=" ">

+ 1 - 2
src/lib/components/chat/ChatPlaceholder.svelte

@@ -127,8 +127,7 @@
 		<div class=" w-full font-primary" in:fade={{ duration: 200, delay: 300 }}>
 			<Suggestions
 				className="grid grid-cols-2"
-				suggestionPrompts={
-					atSelectedModel?.info?.meta?.suggestion_prompts ??
+				suggestionPrompts={atSelectedModel?.info?.meta?.suggestion_prompts ??
 					models[selectedModelIdx]?.info?.meta?.suggestion_prompts ??
 					$config?.default_prompt_suggestions ??
 					[]}

+ 70 - 19
src/lib/components/chat/MessageInput/InputMenu.svelte

@@ -5,7 +5,7 @@
 
 	import { config, user, tools as _tools, mobile } from '$lib/stores';
 	import { createPicker } from '$lib/utils/google-drive-picker';
-	
+
 	import { getTools } from '$lib/apis/tools';
 
 	import Dropdown from '$lib/components/common/Dropdown.svelte';
@@ -236,31 +236,82 @@
 					}}
 				>
 					<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" class="w-5 h-5" fill="none">
-						<mask id="mask0_87_7796" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="6" width="32" height="20">
-							<path d="M7.82979 26C3.50549 26 0 22.5675 0 18.3333C0 14.1921 3.35322 10.8179 7.54613 10.6716C9.27535 7.87166 12.4144 6 16 6C20.6308 6 24.5169 9.12183 25.5829 13.3335C29.1316 13.3603 32 16.1855 32 19.6667C32 23.0527 29 26 25.8723 25.9914L7.82979 26Z" fill="#C4C4C4"/>
+						<mask
+							id="mask0_87_7796"
+							style="mask-type:alpha"
+							maskUnits="userSpaceOnUse"
+							x="0"
+							y="6"
+							width="32"
+							height="20"
+						>
+							<path
+								d="M7.82979 26C3.50549 26 0 22.5675 0 18.3333C0 14.1921 3.35322 10.8179 7.54613 10.6716C9.27535 7.87166 12.4144 6 16 6C20.6308 6 24.5169 9.12183 25.5829 13.3335C29.1316 13.3603 32 16.1855 32 19.6667C32 23.0527 29 26 25.8723 25.9914L7.82979 26Z"
+								fill="#C4C4C4"
+							/>
 						</mask>
 						<g mask="url(#mask0_87_7796)">
-							<path d="M7.83017 26.0001C5.37824 26.0001 3.18957 24.8966 1.75391 23.1691L18.0429 16.3335L30.7089 23.4647C29.5926 24.9211 27.9066 26.0001 26.0004 25.9915C23.1254 26.0001 12.0629 26.0001 7.83017 26.0001Z" fill="url(#paint0_linear_87_7796)"/>
-							<path d="M25.5785 13.3149L18.043 16.3334L30.709 23.4647C31.5199 22.4065 32.0004 21.0916 32.0004 19.6669C32.0004 16.1857 29.1321 13.3605 25.5833 13.3337C25.5817 13.3274 25.5801 13.3212 25.5785 13.3149Z" fill="url(#paint1_linear_87_7796)"/>
-							<path d="M7.06445 10.7028L18.0423 16.3333L25.5779 13.3148C24.5051 9.11261 20.6237 6 15.9997 6C12.4141 6 9.27508 7.87166 7.54586 10.6716C7.3841 10.6773 7.22358 10.6877 7.06445 10.7028Z" fill="url(#paint2_linear_87_7796)"/>
-							<path d="M1.7535 23.1687L18.0425 16.3331L7.06471 10.7026C3.09947 11.0792 0 14.3517 0 18.3331C0 20.1665 0.657197 21.8495 1.7535 23.1687Z" fill="url(#paint3_linear_87_7796)"/>
+							<path
+								d="M7.83017 26.0001C5.37824 26.0001 3.18957 24.8966 1.75391 23.1691L18.0429 16.3335L30.7089 23.4647C29.5926 24.9211 27.9066 26.0001 26.0004 25.9915C23.1254 26.0001 12.0629 26.0001 7.83017 26.0001Z"
+								fill="url(#paint0_linear_87_7796)"
+							/>
+							<path
+								d="M25.5785 13.3149L18.043 16.3334L30.709 23.4647C31.5199 22.4065 32.0004 21.0916 32.0004 19.6669C32.0004 16.1857 29.1321 13.3605 25.5833 13.3337C25.5817 13.3274 25.5801 13.3212 25.5785 13.3149Z"
+								fill="url(#paint1_linear_87_7796)"
+							/>
+							<path
+								d="M7.06445 10.7028L18.0423 16.3333L25.5779 13.3148C24.5051 9.11261 20.6237 6 15.9997 6C12.4141 6 9.27508 7.87166 7.54586 10.6716C7.3841 10.6773 7.22358 10.6877 7.06445 10.7028Z"
+								fill="url(#paint2_linear_87_7796)"
+							/>
+							<path
+								d="M1.7535 23.1687L18.0425 16.3331L7.06471 10.7026C3.09947 11.0792 0 14.3517 0 18.3331C0 20.1665 0.657197 21.8495 1.7535 23.1687Z"
+								fill="url(#paint3_linear_87_7796)"
+							/>
 						</g>
 						<defs>
-							<linearGradient id="paint0_linear_87_7796" x1="4.42591" y1="24.6668" x2="27.2309" y2="23.2764" gradientUnits="userSpaceOnUse">
-								<stop stop-color="#2086B8"/>
-								<stop offset="1" stop-color="#46D3F6"/>
+							<linearGradient
+								id="paint0_linear_87_7796"
+								x1="4.42591"
+								y1="24.6668"
+								x2="27.2309"
+								y2="23.2764"
+								gradientUnits="userSpaceOnUse"
+							>
+								<stop stop-color="#2086B8" />
+								<stop offset="1" stop-color="#46D3F6" />
 							</linearGradient>
-							<linearGradient id="paint1_linear_87_7796" x1="23.8302" y1="19.6668" x2="30.2108" y2="15.2082" gradientUnits="userSpaceOnUse">
-								<stop stop-color="#1694DB"/>
-								<stop offset="1" stop-color="#62C3FE"/>
+							<linearGradient
+								id="paint1_linear_87_7796"
+								x1="23.8302"
+								y1="19.6668"
+								x2="30.2108"
+								y2="15.2082"
+								gradientUnits="userSpaceOnUse"
+							>
+								<stop stop-color="#1694DB" />
+								<stop offset="1" stop-color="#62C3FE" />
 							</linearGradient>
-							<linearGradient id="paint2_linear_87_7796" x1="8.51037" y1="7.33333" x2="23.3335" y2="15.9348" gradientUnits="userSpaceOnUse">
-								<stop stop-color="#0D3D78"/>
-								<stop offset="1" stop-color="#063B83"/>
+							<linearGradient
+								id="paint2_linear_87_7796"
+								x1="8.51037"
+								y1="7.33333"
+								x2="23.3335"
+								y2="15.9348"
+								gradientUnits="userSpaceOnUse"
+							>
+								<stop stop-color="#0D3D78" />
+								<stop offset="1" stop-color="#063B83" />
 							</linearGradient>
-							<linearGradient id="paint3_linear_87_7796" x1="-0.340429" y1="19.9998" x2="14.5634" y2="14.4649" gradientUnits="userSpaceOnUse">
-								<stop stop-color="#16589B"/>
-								<stop offset="1" stop-color="#1464B7"/>
+							<linearGradient
+								id="paint3_linear_87_7796"
+								x1="-0.340429"
+								y1="19.9998"
+								x2="14.5634"
+								y2="14.4649"
+								gradientUnits="userSpaceOnUse"
+							>
+								<stop stop-color="#16589B" />
+								<stop offset="1" stop-color="#1464B7" />
 							</linearGradient>
 						</defs>
 					</svg>

+ 1 - 1
src/lib/components/chat/Messages.svelte

@@ -350,7 +350,7 @@
 	{#if Object.keys(history?.messages ?? {}).length == 0}
 		<ChatPlaceholder
 			modelIds={selectedModels}
-			atSelectedModel={atSelectedModel}
+			{atSelectedModel}
 			submitPrompt={async (p) => {
 				let text = p;
 

+ 1 - 2
src/lib/components/chat/Placeholder.svelte

@@ -213,8 +213,7 @@
 	<div class="mx-auto max-w-2xl font-primary" in:fade={{ duration: 200, delay: 200 }}>
 		<div class="mx-5">
 			<Suggestions
-				suggestionPrompts={
-					atSelectedModel?.info?.meta?.suggestion_prompts ??
+				suggestionPrompts={atSelectedModel?.info?.meta?.suggestion_prompts ??
 					models[selectedModelIdx]?.info?.meta?.suggestion_prompts ??
 					$config?.default_prompt_suggestions ??
 					[]}

+ 2 - 2
src/lib/i18n/locales/ka-GE/translation.json

@@ -622,7 +622,7 @@
 	"Loading Kokoro.js...": "",
 	"Local": "ლოკალური",
 	"Local Models": "ლოკალური მოდელები",
-  "Location access not allowed": "",
+	"Location access not allowed": "",
 	"Lost": "წაგება",
 	"LTR": "LTR",
 	"Made by Open WebUI Community": "შექმნილია OpenWebUI საზოგადოების მიერ",
@@ -726,7 +726,7 @@
 	"Ollama API settings updated": "",
 	"Ollama Version": "Ollama ვერსია",
 	"On": "ჩართული",
-  "OneDrive": "",
+	"OneDrive": "",
 	"Only alphanumeric characters and hyphens are allowed": "",
 	"Only alphanumeric characters and hyphens are allowed in the command string.": "ბრძანების სტრიქონში დაშვებულია, მხოლოდ, ალფარიცხვითი სიმბოლოები და ტირეები.",
 	"Only collections can be edited, create a new knowledge base to edit/add documents.": "",

+ 7 - 7
src/lib/utils/index.ts

@@ -279,9 +279,9 @@ export const generateInitialsImage = (name) => {
 	const initials =
 		sanitizedName.length > 0
 			? sanitizedName[0] +
-			(sanitizedName.split(' ').length > 1
-				? sanitizedName[sanitizedName.lastIndexOf(' ') + 1]
-				: '')
+				(sanitizedName.split(' ').length > 1
+					? sanitizedName[sanitizedName.lastIndexOf(' ') + 1]
+					: '')
 			: '';
 
 	ctx.fillText(initials.toUpperCase(), canvas.width / 2, canvas.height / 2);
@@ -348,10 +348,10 @@ export const compareVersion = (latest, current) => {
 	return current === '0.0.0'
 		? false
 		: current.localeCompare(latest, undefined, {
-			numeric: true,
-			sensitivity: 'case',
-			caseFirst: 'upper'
-		}) < 0;
+				numeric: true,
+				sensitivity: 'case',
+				caseFirst: 'upper'
+			}) < 0;
 };
 
 export const findWordIndices = (text) => {

+ 227 - 227
src/lib/utils/onedrive-file-picker.ts

@@ -1,266 +1,266 @@
 let CLIENT_ID = '';
 
 async function getCredentials() {
-  if (CLIENT_ID) return;
-  const response = await fetch('/api/config');
-  if (!response.ok) {
-    throw new Error('Failed to fetch OneDrive credentials');
-  }
-  const config = await response.json();
-  CLIENT_ID = config.onedrive?.client_id;
-  if (!CLIENT_ID) {
-    throw new Error('OneDrive client ID not configured');
-  }
+	if (CLIENT_ID) return;
+	const response = await fetch('/api/config');
+	if (!response.ok) {
+		throw new Error('Failed to fetch OneDrive credentials');
+	}
+	const config = await response.json();
+	CLIENT_ID = config.onedrive?.client_id;
+	if (!CLIENT_ID) {
+		throw new Error('OneDrive client ID not configured');
+	}
 }
 
 function loadMsalScript(): Promise<void> {
-  return new Promise((resolve, reject) => {
-    const win = window;
-    if (win.msal) {
-      resolve();
-      return;
-    }
-    const script = document.createElement('script');
-    script.src = 'https://alcdn.msauth.net/browser/2.19.0/js/msal-browser.min.js';
-    script.async = true;
-    script.onload = () => resolve();
-    script.onerror = () => reject(new Error('Failed to load MSAL script'));
-    document.head.appendChild(script);
-  });
+	return new Promise((resolve, reject) => {
+		const win = window;
+		if (win.msal) {
+			resolve();
+			return;
+		}
+		const script = document.createElement('script');
+		script.src = 'https://alcdn.msauth.net/browser/2.19.0/js/msal-browser.min.js';
+		script.async = true;
+		script.onload = () => resolve();
+		script.onerror = () => reject(new Error('Failed to load MSAL script'));
+		document.head.appendChild(script);
+	});
 }
 
 let msalInstance: any;
 
 // Initialize MSAL authentication
 async function initializeMsal() {
-  if (!CLIENT_ID) {
-    await getCredentials();
-  }
-  const msalParams = {
-    auth: {
-      authority: 'https://login.microsoftonline.com/consumers',
-      clientId: CLIENT_ID
-    }
-  };
-  try {
-    await loadMsalScript();
-    const win = window;
-    msalInstance = new win.msal.PublicClientApplication(msalParams);
-    if (msalInstance.initialize) {
-      await msalInstance.initialize();
-    }
-  } catch (error) {
-    console.error('MSAL initialization error:', error);
-  }
+	if (!CLIENT_ID) {
+		await getCredentials();
+	}
+	const msalParams = {
+		auth: {
+			authority: 'https://login.microsoftonline.com/consumers',
+			clientId: CLIENT_ID
+		}
+	};
+	try {
+		await loadMsalScript();
+		const win = window;
+		msalInstance = new win.msal.PublicClientApplication(msalParams);
+		if (msalInstance.initialize) {
+			await msalInstance.initialize();
+		}
+	} catch (error) {
+		console.error('MSAL initialization error:', error);
+	}
 }
 
 // Retrieve OneDrive access token
 async function getToken(): Promise<string> {
-  const authParams = { scopes: ['OneDrive.ReadWrite'] };
-  let accessToken = '';
-  try {
-    await initializeMsal();
-    const resp = await msalInstance.acquireTokenSilent(authParams);
-    accessToken = resp.accessToken;
-  } catch (err) {
-    const resp = await msalInstance.loginPopup(authParams);
-    msalInstance.setActiveAccount(resp.account);
-    if (resp.idToken) {
-      const resp2 = await msalInstance.acquireTokenSilent(authParams);
-      accessToken = resp2.accessToken;
-    }
-  }
-  return accessToken;
+	const authParams = { scopes: ['OneDrive.ReadWrite'] };
+	let accessToken = '';
+	try {
+		await initializeMsal();
+		const resp = await msalInstance.acquireTokenSilent(authParams);
+		accessToken = resp.accessToken;
+	} catch (err) {
+		const resp = await msalInstance.loginPopup(authParams);
+		msalInstance.setActiveAccount(resp.account);
+		if (resp.idToken) {
+			const resp2 = await msalInstance.acquireTokenSilent(authParams);
+			accessToken = resp2.accessToken;
+		}
+	}
+	return accessToken;
 }
 
-const baseUrl = "https://onedrive.live.com/picker";
+const baseUrl = 'https://onedrive.live.com/picker';
 const params = {
-  sdk: '8.0',
-  entry: {
-    oneDrive: {
-      files: {}
-    }
-  },
-  authentication: {},
-  messaging: {
-    origin: window?.location?.origin,
-    channelId: crypto.randomUUID()
-  },
-  typesAndSources: {
-    mode: 'files',
-    pivots: {
-      oneDrive: true,
-      recent: true
-    }
-  }
+	sdk: '8.0',
+	entry: {
+		oneDrive: {
+			files: {}
+		}
+	},
+	authentication: {},
+	messaging: {
+		origin: window?.location?.origin,
+		channelId: crypto.randomUUID()
+	},
+	typesAndSources: {
+		mode: 'files',
+		pivots: {
+			oneDrive: true,
+			recent: true
+		}
+	}
 };
 
 // Download file from OneDrive
 async function downloadOneDriveFile(fileInfo: any): Promise<Blob> {
-  const accessToken = await getToken();
-  if (!accessToken) {
-    throw new Error('Unable to retrieve OneDrive access token.');
-  }
-  const fileInfoUrl = `${fileInfo["@sharePoint.endpoint"]}/drives/${fileInfo.parentReference.driveId}/items/${fileInfo.id}`;
-  const response = await fetch(fileInfoUrl, {
-    headers: {
-      'Authorization': `Bearer ${accessToken}`
-    }
-  });
-  if (!response.ok) {
-    throw new Error('Failed to fetch file information.');
-  }
-  const fileData = await response.json();
-  const downloadUrl = fileData['@content.downloadUrl'];
-  const downloadResponse = await fetch(downloadUrl);
-  if (!downloadResponse.ok) {
-    throw new Error('Failed to download file.');
-  }
-  return await downloadResponse.blob();
+	const accessToken = await getToken();
+	if (!accessToken) {
+		throw new Error('Unable to retrieve OneDrive access token.');
+	}
+	const fileInfoUrl = `${fileInfo['@sharePoint.endpoint']}/drives/${fileInfo.parentReference.driveId}/items/${fileInfo.id}`;
+	const response = await fetch(fileInfoUrl, {
+		headers: {
+			Authorization: `Bearer ${accessToken}`
+		}
+	});
+	if (!response.ok) {
+		throw new Error('Failed to fetch file information.');
+	}
+	const fileData = await response.json();
+	const downloadUrl = fileData['@content.downloadUrl'];
+	const downloadResponse = await fetch(downloadUrl);
+	if (!downloadResponse.ok) {
+		throw new Error('Failed to download file.');
+	}
+	return await downloadResponse.blob();
 }
 
 // Open OneDrive file picker and return selected file metadata
 export async function openOneDrivePicker(): Promise<any | null> {
-  if (typeof window === 'undefined') {
-    throw new Error('Not in browser environment');
-  }
-  return new Promise((resolve, reject) => {
-    let pickerWindow: Window | null = null;
-    let channelPort: MessagePort | null = null;
+	if (typeof window === 'undefined') {
+		throw new Error('Not in browser environment');
+	}
+	return new Promise((resolve, reject) => {
+		let pickerWindow: Window | null = null;
+		let channelPort: MessagePort | null = null;
 
-    const handleWindowMessage = (event: MessageEvent) => {
-      if (event.source !== pickerWindow) return;
-      const message = event.data;
-      if (message?.type === 'initialize' && message?.channelId === params.messaging.channelId) {
-        channelPort = event.ports?.[0];
-        if (!channelPort) return;
-        channelPort.addEventListener('message', handlePortMessage);
-        channelPort.start();
-        channelPort.postMessage({ type: 'activate' });
-      }
-    };
+		const handleWindowMessage = (event: MessageEvent) => {
+			if (event.source !== pickerWindow) return;
+			const message = event.data;
+			if (message?.type === 'initialize' && message?.channelId === params.messaging.channelId) {
+				channelPort = event.ports?.[0];
+				if (!channelPort) return;
+				channelPort.addEventListener('message', handlePortMessage);
+				channelPort.start();
+				channelPort.postMessage({ type: 'activate' });
+			}
+		};
 
-    const handlePortMessage = async (portEvent: MessageEvent) => {
-      const portData = portEvent.data;
-      switch (portData.type) {
-        case 'notification':
-          break;
-        case 'command': {
-          channelPort?.postMessage({ type: 'acknowledge', id: portData.id });
-          const command = portData.data;
-          switch (command.command) {
-            case 'authenticate': {
-              try {
-                const newToken = await getToken();
-                if (newToken) {
-                  channelPort?.postMessage({
-                    type: 'result',
-                    id: portData.id,
-                    data: { result: 'token', token: newToken }
-                  });
-                } else {
-                  throw new Error('Could not retrieve auth token');
-                }
-              } catch (err) {
-                console.error(err);
-                channelPort?.postMessage({
-                  result: 'error',
-                  error: { code: 'tokenError', message: 'Failed to get token' },
-                  isExpected: true
-                });
-              }
-              break;
-            }
-            case 'close': {
-              cleanup();
-              resolve(null);
-              break;
-            }
-            case 'pick': {
-              channelPort?.postMessage({
-                type: 'result',
-                id: portData.id,
-                data: { result: 'success' }
-              });
-              cleanup();
-              resolve(command);
-              break;
-            }
-            default: {
-              console.warn('Unsupported command:', command);
-              channelPort?.postMessage({
-                result: 'error',
-                error: { code: 'unsupportedCommand', message: command.command },
-                isExpected: true
-              });
-              break;
-            }
-          }
-          break;
-        }
-      }
-    };
+		const handlePortMessage = async (portEvent: MessageEvent) => {
+			const portData = portEvent.data;
+			switch (portData.type) {
+				case 'notification':
+					break;
+				case 'command': {
+					channelPort?.postMessage({ type: 'acknowledge', id: portData.id });
+					const command = portData.data;
+					switch (command.command) {
+						case 'authenticate': {
+							try {
+								const newToken = await getToken();
+								if (newToken) {
+									channelPort?.postMessage({
+										type: 'result',
+										id: portData.id,
+										data: { result: 'token', token: newToken }
+									});
+								} else {
+									throw new Error('Could not retrieve auth token');
+								}
+							} catch (err) {
+								console.error(err);
+								channelPort?.postMessage({
+									result: 'error',
+									error: { code: 'tokenError', message: 'Failed to get token' },
+									isExpected: true
+								});
+							}
+							break;
+						}
+						case 'close': {
+							cleanup();
+							resolve(null);
+							break;
+						}
+						case 'pick': {
+							channelPort?.postMessage({
+								type: 'result',
+								id: portData.id,
+								data: { result: 'success' }
+							});
+							cleanup();
+							resolve(command);
+							break;
+						}
+						default: {
+							console.warn('Unsupported command:', command);
+							channelPort?.postMessage({
+								result: 'error',
+								error: { code: 'unsupportedCommand', message: command.command },
+								isExpected: true
+							});
+							break;
+						}
+					}
+					break;
+				}
+			}
+		};
 
-    function cleanup() {
-      window.removeEventListener('message', handleWindowMessage);
-      if (channelPort) {
-        channelPort.removeEventListener('message', handlePortMessage);
-      }
-      if (pickerWindow) {
-        pickerWindow.close();
-        pickerWindow = null;
-      }
-    }
+		function cleanup() {
+			window.removeEventListener('message', handleWindowMessage);
+			if (channelPort) {
+				channelPort.removeEventListener('message', handlePortMessage);
+			}
+			if (pickerWindow) {
+				pickerWindow.close();
+				pickerWindow = null;
+			}
+		}
 
-    const initializePicker = async () => {
-      try {
-        const authToken = await getToken();
-        if (!authToken) {
-          return reject(new Error('Failed to acquire access token'));
-        }
-        pickerWindow = window.open('', 'OneDrivePicker', 'width=800,height=600');
-        if (!pickerWindow) {
-          return reject(new Error('Failed to open OneDrive picker window'));
-        }
-        const queryString = new URLSearchParams({
-          filePicker: JSON.stringify(params)
-        });
-        const url = `${baseUrl}?${queryString.toString()}`;
-        const form = pickerWindow.document.createElement('form');
-        form.setAttribute('action', url);
-        form.setAttribute('method', 'POST');
-        const input = pickerWindow.document.createElement('input');
-        input.setAttribute('type', 'hidden');
-        input.setAttribute('name', 'access_token');
-        input.setAttribute('value', authToken);
-        form.appendChild(input);
-        pickerWindow.document.body.appendChild(form);
-        form.submit();
-        window.addEventListener('message', handleWindowMessage);
-      } catch (err) {
-        if (pickerWindow) pickerWindow.close();
-        reject(err);
-      }
-    };
+		const initializePicker = async () => {
+			try {
+				const authToken = await getToken();
+				if (!authToken) {
+					return reject(new Error('Failed to acquire access token'));
+				}
+				pickerWindow = window.open('', 'OneDrivePicker', 'width=800,height=600');
+				if (!pickerWindow) {
+					return reject(new Error('Failed to open OneDrive picker window'));
+				}
+				const queryString = new URLSearchParams({
+					filePicker: JSON.stringify(params)
+				});
+				const url = `${baseUrl}?${queryString.toString()}`;
+				const form = pickerWindow.document.createElement('form');
+				form.setAttribute('action', url);
+				form.setAttribute('method', 'POST');
+				const input = pickerWindow.document.createElement('input');
+				input.setAttribute('type', 'hidden');
+				input.setAttribute('name', 'access_token');
+				input.setAttribute('value', authToken);
+				form.appendChild(input);
+				pickerWindow.document.body.appendChild(form);
+				form.submit();
+				window.addEventListener('message', handleWindowMessage);
+			} catch (err) {
+				if (pickerWindow) pickerWindow.close();
+				reject(err);
+			}
+		};
 
-    initializePicker();
-  });
+		initializePicker();
+	});
 }
 
 // Pick and download file from OneDrive
 export async function pickAndDownloadFile(): Promise<{ blob: Blob; name: string } | null> {
-  try {
-    const pickerResult = await openOneDrivePicker();
-    if (!pickerResult || !pickerResult.items || pickerResult.items.length === 0) {
-      return null;
-    }
-    const selectedFile = pickerResult.items[0];
-    const blob = await downloadOneDriveFile(selectedFile);
-    return { blob, name: selectedFile.name };
-  } catch (error) {
-    console.error('Error occurred during OneDrive file pick/download:', error);
-    throw error;
-  }
+	try {
+		const pickerResult = await openOneDrivePicker();
+		if (!pickerResult || !pickerResult.items || pickerResult.items.length === 0) {
+			return null;
+		}
+		const selectedFile = pickerResult.items[0];
+		const blob = await downloadOneDriveFile(selectedFile);
+		return { blob, name: selectedFile.name };
+	} catch (error) {
+		console.error('Error occurred during OneDrive file pick/download:', error);
+		throw error;
+	}
 }
 
 export { downloadOneDriveFile };