import { SaveSlot, SaveSlotList, SaveSlotMeta } from '@rpgjs/common'; import { RpgPlayer } from '../Player/Player'; export declare const SaveStorageToken = "SaveStorageToken"; export type SaveSlotIndex = number | "auto"; export interface SaveRequestContext { reason?: "manual" | "auto" | "load"; source?: string; } export interface AutoSaveStrategy { canSave?: (player: RpgPlayer, context?: SaveRequestContext) => boolean; canLoad?: (player: RpgPlayer, context?: SaveRequestContext) => boolean; shouldAutoSave?: (player: RpgPlayer, context?: SaveRequestContext) => boolean; getDefaultSlot?: (player: RpgPlayer, context?: SaveRequestContext) => number | null; } export interface SaveStorageStrategy { list(player: RpgPlayer): Promise; get(player: RpgPlayer, index: number): Promise; save(player: RpgPlayer, index: number, snapshot: string, meta: SaveSlotMeta): Promise; delete?(player: RpgPlayer, index: number): Promise; } export declare class InMemorySaveStorageStrategy implements SaveStorageStrategy { private slotsByPlayer; list(player: RpgPlayer): Promise; get(player: RpgPlayer, index: number): Promise; save(player: RpgPlayer, index: number, snapshot: string, meta: SaveSlotMeta): Promise; delete(player: RpgPlayer, index: number): Promise; private getSlots; private stripSnapshots; } export declare const AutoSaveToken = "AutoSaveToken"; export declare function resolveSaveStorageStrategy(): SaveStorageStrategy; export declare function resolveAutoSaveStrategy(): AutoSaveStrategy; export declare function resolveSaveSlot(slot: SaveSlotIndex | undefined, policy: AutoSaveStrategy, player: RpgPlayer, context?: SaveRequestContext): number | null; export declare function shouldAutoSave(player: RpgPlayer, context?: SaveRequestContext): boolean; export declare function buildSaveSlotMeta(player: RpgPlayer, overrides?: SaveSlotMeta): SaveSlotMeta; export declare function provideSaveStorage(strategy: SaveStorageStrategy): { provide: string; useValue: SaveStorageStrategy; }; export declare function provideAutoSave(strategy: AutoSaveStrategy): { provide: string; useValue: AutoSaveStrategy; };