Release Healer Man 0.1.12

This commit is contained in:
phenom committed 2026-09-01 14:35:56 -04:00
1 parent 13970d03c8
commit 65e24f644e
201 files changed
+5061 -123

No files matched your search

+19 -6
View File
@@ -3,8 +3,10 @@ import type { PlayerSession } from "../app/types";
import { requestOnlineJson } from "../app/onlineAccountClient";
import {
DEFAULT_MANASTORM_ADMIN_CONFIG,
LEGACY_MANASTORM_ADMIN_CACHE_KEY,
MANASTORM_ADMIN_CACHE_KEY,
normalizeManastormAdminConfig,
publicManastormAdminConfig,
resolvedBossAdminCatalog,
type ManastormAdminConfig,
type PublishedManastormAdminConfig,
@@ -14,13 +16,16 @@ interface CachedPayload extends PublishedManastormAdminConfig {}
function readCache(): CachedPayload {
try {
const raw = typeof window !== "undefined" ? window.localStorage.getItem(MANASTORM_ADMIN_CACHE_KEY) : null;
const raw = typeof window !== "undefined"
? window.localStorage.getItem(MANASTORM_ADMIN_CACHE_KEY)
?? window.localStorage.getItem(LEGACY_MANASTORM_ADMIN_CACHE_KEY)
: null;
const parsed = raw ? JSON.parse(raw) as Partial<CachedPayload> : null;
if (!parsed || !Number.isInteger(parsed.revision) || (parsed.revision ?? -1) < 0) throw new Error("missing cache");
return {
revision: parsed.revision!,
updatedAt: typeof parsed.updatedAt === "number" ? parsed.updatedAt : null,
config: normalizeManastormAdminConfig(parsed.config),
config: publicManastormAdminConfig(normalizeManastormAdminConfig(parsed.config)),
};
} catch {
return { revision: 0, updatedAt: null, config: DEFAULT_MANASTORM_ADMIN_CONFIG };
@@ -29,7 +34,10 @@ function readCache(): CachedPayload {
function writeCache(payload: PublishedManastormAdminConfig): void {
try {
window.localStorage.setItem(MANASTORM_ADMIN_CACHE_KEY, JSON.stringify(payload));
window.localStorage.setItem(MANASTORM_ADMIN_CACHE_KEY, JSON.stringify({
...payload,
config: publicManastormAdminConfig(payload.config),
}));
} catch {
// Private browsing and storage quotas must not prevent play.
}
@@ -42,7 +50,7 @@ export interface ManastormAdminState extends PublishedManastormAdminConfig {
readonly error: string | null;
readonly editingBossKey: string | null;
readonly dirty: boolean;
refresh: () => Promise<void>;
refresh: (session?: PlayerSession | null) => Promise<void>;
replaceDraft: (config: ManastormAdminConfig) => void;
resetDraft: () => void;
publish: (session: PlayerSession | null) => Promise<boolean>;
@@ -59,10 +67,15 @@ export const useManastormAdminStore = create<ManastormAdminState>((set, get) =>
error: null,
editingBossKey: null,
dirty: false,
refresh: async () => {
refresh: async (session = null) => {
set({ loading: true, error: null });
try {
const payload = await requestOnlineJson<PublishedManastormAdminConfig>("/api/manastorm-config");
const gm = Boolean(session?.accessToken && session.roles?.includes("gm"));
const payload = await requestOnlineJson<PublishedManastormAdminConfig>(
gm ? "/api/gm/manastorm-config" : "/api/manastorm-config",
{},
gm ? session?.accessToken : undefined,
);
const normalized = { ...payload, config: normalizeManastormAdminConfig(payload.config) };
writeCache(normalized);
set({ ...normalized, draft: normalized.config, dirty: false, loading: false });