diff --git a/apps/manavoxel/apps/web/src/lib/data/local-store.ts b/apps/manavoxel/apps/web/src/lib/data/local-store.ts index 1391666e1..4263774e2 100644 --- a/apps/manavoxel/apps/web/src/lib/data/local-store.ts +++ b/apps/manavoxel/apps/web/src/lib/data/local-store.ts @@ -85,23 +85,30 @@ export function decodeBytes(base64: string): Uint8Array { const SYNC_SERVER_URL = import.meta.env.PUBLIC_SYNC_SERVER_URL || 'http://localhost:3050'; +// @mana/local-store's CollectionDef.guestSeed expects `T[]` (the seed +// array itself), not a lazy producer. The previous three arrow-wrappers +// looked lazy but the framework never awaited them — it iterated them +// as `seed.length`, which against a function silently yielded 0 (dead +// seed). Evaluate once and share. +const guestSeed = generateGuestWorld(); + export const gameStore = createLocalStore({ appId: 'manavoxel', collections: [ { name: 'worlds', indexes: ['creatorId', 'isPublished', 'name', 'template'], - guestSeed: () => generateGuestWorld().worlds, + guestSeed: guestSeed.worlds, }, { name: 'areas', indexes: ['worldId', 'type', '[worldId+name]'], - guestSeed: () => generateGuestWorld().areas, + guestSeed: guestSeed.areas, }, { name: 'items', indexes: ['creatorId', 'rarity', 'isPublished', 'name'], - guestSeed: () => generateGuestWorld().items, + guestSeed: guestSeed.items, }, { name: 'inventories', diff --git a/apps/uload/apps/server/src/routes/analytics.ts b/apps/uload/apps/server/src/routes/analytics.ts index b81e84f47..469b0f332 100644 --- a/apps/uload/apps/server/src/routes/analytics.ts +++ b/apps/uload/apps/server/src/routes/analytics.ts @@ -1,9 +1,9 @@ import { Hono } from 'hono'; +import type { AuthVariables } from '@mana/shared-hono'; import type { AnalyticsService } from '../services/analytics'; -import type { AuthUser } from '../middleware/jwt-auth'; export function createAnalyticsRoutes(analyticsService: AnalyticsService) { - return new Hono<{ Variables: { user: AuthUser } }>() + return new Hono<{ Variables: AuthVariables }>() .get('/:linkId', async (c) => { const linkId = c.req.param('linkId'); const stats = await analyticsService.getClickStats(linkId); diff --git a/apps/uload/apps/server/src/routes/email.ts b/apps/uload/apps/server/src/routes/email.ts index 56d302873..1b04b72c2 100644 --- a/apps/uload/apps/server/src/routes/email.ts +++ b/apps/uload/apps/server/src/routes/email.ts @@ -1,8 +1,8 @@ import { Hono } from 'hono'; -import type { AuthUser } from '../middleware/jwt-auth'; +import type { AuthVariables } from '@mana/shared-hono'; export function createEmailRoutes() { - return new Hono<{ Variables: { user: AuthUser } }>().post('/send-invitation', async (c) => { + return new Hono<{ Variables: AuthVariables }>().post('/send-invitation', async (c) => { // TODO: Implement with Resend return c.json({ error: 'Email not configured yet' }, 501); }); diff --git a/packages/shared-ai/src/planner/loop.ts b/packages/shared-ai/src/planner/loop.ts index 0a12241e2..d3bf8b525 100644 --- a/packages/shared-ai/src/planner/loop.ts +++ b/packages/shared-ai/src/planner/loop.ts @@ -10,7 +10,8 @@ * ``onToolCall`` callback. The loop itself stays pure. */ -import type { ToolSchema, ToolSpec } from '../tools/function-schema'; +import type { ToolSchema } from '../tools/schemas'; +import type { ToolSpec } from '../tools/function-schema'; import { toolsToFunctionSchemas } from '../tools/function-schema'; // ─── Chat-message contract ────────────────────────────────────────── diff --git a/packages/shared-hono/src/credits.ts b/packages/shared-hono/src/credits.ts index 1fec7da5c..c090513f6 100644 --- a/packages/shared-hono/src/credits.ts +++ b/packages/shared-hono/src/credits.ts @@ -42,7 +42,7 @@ async function callCredits(path: string, options: RequestInit = {}): Promise< }, }); if (!res.ok) return null; - return res.json(); + return (await res.json()) as T; } catch (error) { console.error('[credits] Request failed:', error); return null; diff --git a/packages/shared-logger/src/index.ts b/packages/shared-logger/src/index.ts index f789d7d2f..aa13acdc5 100644 --- a/packages/shared-logger/src/index.ts +++ b/packages/shared-logger/src/index.ts @@ -15,7 +15,10 @@ declare const __DEV__: boolean | undefined; const isDevelopment = typeof __DEV__ !== 'undefined' ? __DEV__ : process.env.NODE_ENV === 'development'; -const isBrowser = typeof window !== 'undefined'; +// Use a globalThis indirection instead of `typeof window` so this module +// stays compilable under tsconfigs that don't pull in the DOM lib (e.g. +// Bun-only services consuming shared-logger via workspace source imports). +const isBrowser = typeof (globalThis as { window?: unknown }).window !== 'undefined'; const useJson = process.env.LOGGER_FORMAT === 'json' || diff --git a/packages/shared-logger/tsconfig.json b/packages/shared-logger/tsconfig.json index d92f40466..ded446c46 100644 --- a/packages/shared-logger/tsconfig.json +++ b/packages/shared-logger/tsconfig.json @@ -3,6 +3,7 @@ "target": "ES2022", "module": "ESNext", "moduleResolution": "bundler", + "lib": ["ES2022", "DOM"], "esModuleInterop": true, "strict": true, "skipLibCheck": true,