"use client"; import { z } from "zod"; import { StorageKeys } from "@/data/storage/storage_keys"; import { Result, SessionAsyncUtil, type Result as ResultT } from "@/utils"; const ChatScrollSessionSchema = z.object({ scrollTop: z.number(), scrollHeight: z.number(), clientHeight: z.number(), distanceFromBottom: z.number(), savedAt: z.number(), }); export type ChatScrollSession = z.output; export class ChatScrollSessionStorage { private constructor() {} static setSnapshot(snapshot: ChatScrollSession): Promise> { return SessionAsyncUtil.setJson( StorageKeys.chatScrollSession, snapshot, ChatScrollSessionSchema, ); } static getSnapshot(): Promise> { return SessionAsyncUtil.getJson( StorageKeys.chatScrollSession, ChatScrollSessionSchema, ); } static clearSnapshot(): Promise> { return SessionAsyncUtil.remove(StorageKeys.chatScrollSession); } static async consumeSnapshot(): Promise> { const result = await ChatScrollSessionStorage.getSnapshot(); const cleared = await ChatScrollSessionStorage.clearSnapshot(); if (Result.isErr(result)) return result; if (Result.isErr(cleared)) return cleared; return result; } }