Files
campaign-manager/README.md

2.2 KiB

Root

  • .gitignore, pnpm-workspace.yaml, package.json (workspace scripts), Cargo.toml (workspace), .npmrc

rulesets/ — @campaign-manager/rulesets workspace package

  • types.ts — Ruleset, SheetData, ValidationResult, DiceAction, StatBlock, VNode interfaces
  • dsa5e/index.ts — DSA5e stub (typed default sheet with attributes, talents, combat, spells)
  • generic/index.ts — Generic stub (name, HP, notes)
  • index.ts — re-exports everything + RULESETS registry map

symbiote/ — Plain Svelte + Vite (target es2022 for top-level await support)

  • vite.config.ts, tsconfig.json, index.html
  • public/manifest.json — valid TaleSpire manifest with colorStyles, fonts, diceFinder, icons extras
  • src/lib/ts-api.d.ts — ambient TS global (storage, dice, players, sync)
  • src/lib/store.ts — accessToken, refreshToken, currentUser, currentGroup, isBoardTransition stores + loadTokens/saveTokens/clearTokens via TS.storage
  • src/lib/api.ts — auto-refresh on 401, suppresses calls during board transition
  • src/App.svelte — currentView store drives view switching
  • src/main.ts — board transition listeners, awaits TS.hasInitialized, mounts App
  • src/views/ — Login, GroupList, GroupDetail, CharacterSheet, RollHistory stubs

web/ — SvelteKit + adapter-static

  • svelte.config.js, vite.config.ts, tsconfig.json, src/app.html
  • src/lib/api.ts — access token in memory, refresh via HttpOnly cookie
  • src/routes/+layout.svelte — silent token refresh on mount, redirects to /login if unauthenticated
  • All routes stubbed: /, /login, /groups, /groups/[id], /groups/[id]/settings, /characters, /characters/[id]

backend/ — Rust + Axum

  • Cargo.toml with all specified dependencies
  • src/main.rs — reads DATABASE_URL/JWT_SECRET, builds Axum router, CORS, tracing, binds :3000
  • src/lib.rs — module entrypoint

Verification results: symbiote build → dist/ with index.html + manifest.json web build → SvelteKit static output cargo check → no errors