UNPKG

@powrldgr/raydium-sdk-v2

Version:

An SDK for building applications on top of Raydium.

71 lines (63 loc) 2 kB
export const SESSION_KEY = "ray_tab_hash"; export const STORAGE_KEY = "ray_req_hash"; export const getSessionKey = (): string => { if (typeof window === undefined) return ""; let key = sessionStorage.getItem(SESSION_KEY); // new a session key if (!key) { key = `ray-${Date.now()}`; sessionStorage.setItem(SESSION_KEY, key); } return key; }; export interface ResHistory { status: number; url: string; params?: any; data: any; logCount?: number; time: number; session: string; removeLastLog?: boolean; } export const updateReqHistory = async ({ logCount = 1000, removeLastLog, ...resData }: Omit<ResHistory, "time" | "session">): Promise<void> => { if (typeof window === undefined) return new Promise((resolve) => resolve()); const data: ResHistory[] = JSON.parse(localStorage.getItem(STORAGE_KEY) || "[]").slice(0, logCount - 1); // means retry last save error if (removeLastLog) data.pop(); // if data > 1kb if (new Blob([JSON.stringify(resData.data)]).size > 1024) resData.data = JSON.stringify(resData.data).substring(0, 200) + "..."; data.unshift({ ...resData, time: Date.now(), session: getSessionKey() }); try { localStorage.setItem(STORAGE_KEY, JSON.stringify(data)); } catch { // if retry failed, empty request data if (removeLastLog) { let success = false; const resStr = JSON.stringify(resData.data).substring(0, 100); data[0].data = resStr + (resStr.length > 100 ? "..." : ""); while (!success) { data.pop(); const resStr = JSON.stringify(resData.data).substring(0, 100); data[0].data = resStr + (resStr.length > 100 ? "..." : ""); try { localStorage.setItem(STORAGE_KEY, JSON.stringify(data)); success = true; } catch { success = false; } } return new Promise((resolve) => resolve()); } return updateReqHistory({ ...resData, logCount, removeLastLog: true, }); } };