Commit graph

76 commits

Author SHA1 Message Date
wdunn001
0348d10602 community: M4 -- game-server registry and issue reports
GameServer/GameServerStatusHistory/Issue/IssueComment models, a
strategy-per-probe_type ServerProbe (tcp_connect/http_get/presence_inferred,
mirroring script-library's game-server-registry-probe.py including the
integer ConnectTimeout fix), the bundled verified registry seed (WoW, EQEmu,
the Goldberg relay, Impostor, OpenDAoC), and full player+admin UI at
/community/servers and /community/issues. Featured flag pins the
persistent-world servers (WoW/EQEmu/OpenDAoC) to a compact status panel
surfaced on the community landing page. Scheduled sweep respects a
circuit-breaker backoff and never probes on page load; the relay is never
network-probed, only liveness-checked over ssh.
2026-08-03 03:19:54 -04:00
wdunn001
933ff37ccb community: M5 -- mods catalog and achievement definitions/display
Some checks failed
Server CI / Lint (push) Failing after 6m33s
Server CI / Typecheck (push) Successful in 7m42s
Adds the M5 slice of the community layer: Mod/ModVersion/ModDependency/
ModInstallation/ModInstalledFile/AchievementDefinition (migration
m5_mods_achievements). Gods/Users are referenced as plain soft columns
(gameId/uploaderId/identityId), not Prisma relations, following the
concurrent-edit-avoidance pattern devices.prisma established -- content.prisma
and user.prisma only grow a comment each.

Mods: syncs from script-library/scripts/archive-mod.py's _index/catalog.json
(read-only bind mount, homelab-compose/drop-stack/docker-compose.yml) into
Mod/ModVersion/ModDependency, resolves dependency refs into real Mod rows
where archived, and exposes a topologically-ordered install-plan resolver
with cycle/conflict/unresolved-dependency detection
(GET /mods/:id/versions/:v/plan). The install manifest
(ModInstallation/ModInstalledFile) records created/overwrote/skipped per
file so an uninstall plan is exact, computed server-side from what was
recorded, applied by the caller. Downloads stream directly off the mount
(GET /mods/:id/versions/:v/download) since cdn.quasarke.net has no
file_server wired to /mnt/local24/game-mods yet -- documented as a known gap
in server/internal/community/README.md, deliberately not fixed by editing
the live Caddyfile. A manual add form covers the DESIGN.md open-question #4
fallback (no upload write path exists).

Achievements: imports gbe_fork's archived generate_emu_config output
(/mnt/local24/game-tools/goldberg/schemas, also read-only mounted) via
goldbergAdapter.ts, copying icons into Drop's own object store
(objectHandler.createFromSource, same mechanism as Steam cover art) so
nothing is hotlinked. Display joins AchievementDefinition against M2's
already-landed AchievementUnlock by (steamAppId, apiName), exactly the join
key M2 designed it around -- no stub needed, M2's table was already in the
tree. Verified against real fixtures: appid 245170 (Skullgirls) importing
45/45 definitions with 90 icons, and 274190 (Broforce) importing 17/17.

Pages: /community/mods, /community/mods/:slug, /community/mods/new,
/community/achievements, /community/games/:gameId (achievement grid +
per-title mods, completion %). Small additive nav links on /community's
index rather than touching the actively-changing shared game-detail page.
2026-08-03 01:16:25 -04:00
wdunn001
0a41fd429e Dockerfile: add a memory-pressure escape hatch for the typecheck step
Some checks failed
Server CI / Typecheck (push) Failing after 3h14m3s
Server CI / Lint (push) Failing after 3h10m52s
Observed on .88 (2026-08-02): docker build got through deps install,
Prisma generate, and the client bundle fine, then got OOM-killed (exit 143)
during vue-tsc's full-project typecheck -- the host had ~600Mi free and a
fully-exhausted 2GB swap at the time (osrm-routed alone holds ~47GB RSS on
that shared box). This isn't a code problem; it's the single most
memory-hungry step of `nuxt build` landing on an already-saturated host.

--build-arg SKIP_TYPECHECK=true (env NUXT_BUILD_SKIP_TYPECHECK) skips it.
Off by default -- this is a resource-pressure escape hatch for a
contended host, not a reason to stop typechecking; re-run
`pnpm run typecheck` separately once there's headroom.
2026-08-02 01:03:09 -04:00
wdunn001
faa8b7d61c community: fold /community into the fork, source-build the three JS patches
Some checks are pending
Deploy website to GitHub Pages / deploy (push) Blocked by required conditions
Deploy website to GitHub Pages / build (push) Waiting to run
Server CI / Typecheck (push) Waiting to run
Server CI / Lint (push) Waiting to run
Replaces the server/pages/community.vue stub ({{ $t("todo") }}) with real
Nuxt pages: a unified Drop+RomM title browser, an admin catalog-sync panel,
and a profile page with playtime rails. Corrects the original architecture
mistake of building this as a separate service at community.quasarke.net --
now that we own the fork's source, community is ordinary Nuxt pages instead
of a sidecar with its own auth/DB/vhost.

Data model: one new table, CommunityTitle, for the RomM catalog (ported
from drop-community M1's Title spine). Drop's own Game/User/Playtime models
already ARE the title/identity/playtime spine for Drop content, so nothing
new was needed there -- profile playtime rails read real, already-existing
Playtime rows, no wrapper/ingest milestone required to populate them.
RommAdapter (server/server/internal/community/rommAdapter.ts) reads RomM's
MariaDB directly via the community_ro read-only role, same deviation and
same reasoning as M1's adapter (RomM's /api/roms needs a browser session,
no service-account key). TitleSyncService runs every 6h
(scheduledTasks.communityTitleSync) and via an admin "Sync now" button
(system:community:sync ACL) -- never deletes, hides instead.

Also folds the three post-build JS patches
(homelab-compose/drop-stack/patch-{launcher-button,telemetry-snippet,
footer-links}.js) into source now that the fork builds from source instead
of patching upstream's prebuilt image:
  - library/game/[id]/index.vue: the "Open in Launcher" button gets a real
    @click handler (drop://open with a timeout fallback to /download).
  - plugins/telemetry.client.ts: OpenPanel RUM injected via a Nuxt client
    plugin instead of appending to the compiled entry chunk.
  - UserFooter.vue + admin/library source-help links + error.vue + the
    Weblate link: repointed at our own infra. The Discord/social link
    used to point at community.quasarke.net; that service is retired, so
    it now points at /community directly.
2026-08-02 00:12:06 -04:00
DecDuck
e881da5ce3
move base to libraries 2026-03-30 19:38:14 +11:00
DecDuck
6b294949b9
Add and fix missing projects 2026-03-30 19:34:34 +11:00
Husky
e4a295f767 Series of small fixes (#346)
* migrate bufbuild config to v2

* fix localdir lookup

* fix old oidc redirect path

* rework twemoji path stuff

* fix torrential cmd

* fix broken lock file

* align dev server port with nginx

* bump pnpm

* bump nuxt

* make translations lazy loaded

* format numbers via i18n

* fix prisma breaking if extension already exists
2026-02-09 16:27:31 +00:00
DecDuck
6b8d150770 Game specialisation & delta versions (#323)
* feat: game specialisation, auto-guess extensions

* fix: enforce specialisation specific schema at API level

* fix: lint

* feat: partial work on depot endpoints

* feat: bump torrential

* feat: dummy version creation for depot uploads

* fix: lint

* fix: types

* fix: lint

* feat: depot version import

* fix: lint

* fix: remove any type

* fix: lint

* fix: push update interval

* fix: cpu usage calculation

* feat: delta version support

* feat: style tweaks for selectlaunch.vue

* fix: lint
2026-01-23 16:04:38 +11:00
Husky
526a8e69dd Add ODIC Back-Channel Logout (#304)
* prevent returning expired sessions

* add issuer to ODIC creds

* get id token in ODIC

* make session signin return session

* working backchannel logout?

* require https for ODIC provider

* handle wellknown not being https

* find session api progress

* fix windows build

* return session token on session

* switch OIDC to #searchSessions

* update pnpm

* switch to using message on error obj

* move odic callback

* fix type errors

* redirect old oidc callback

* make redirect url a URL

* remove scheduled task downloadCleanup

* fix session search for oidc

* fix signin result

* cleanup code

* ignore data dir

* fix lint error
2026-01-20 09:50:04 +11:00
DecDuck
60730f05c5 Fix MFA superlevel redirect & ViewTransition (#314)
* feat: fix mfa superlevel & viewtransition

* fix: lint
2026-01-15 15:34:17 +11:00
Husky
752409b561 Switch to nuxt assets for emojis (#311)
* switch to nuxt assets for emojis

* add auth to emoji endpoint

* fix cache control header

* fix type error
2026-01-14 14:49:58 +11:00
DecDuck
038507fa74 Depot API & v4 (#298)
* feat: nginx + torrential basics & services system

* fix: lint + i18n

* fix: update torrential to remove openssl

* feat: add torrential to Docker build

* feat: move to self hosted runner

* fix: move off self-hosted runner

* fix: update nginx.conf

* feat: torrential cache invalidation

* fix: update torrential for cache invalidation

* feat: integrity check task

* fix: lint

* feat: move to version ids

* fix: client fixes and client-side checks

* feat: new depot apis and version id fixes

* feat: update torrential

* feat: droplet bump and remove unsafe update functions

* fix: lint

* feat: v4 featureset: emulators, multi-launch commands

* fix: lint

* fix: mobile ui for game editor

* feat: launch options

* fix: lint

* fix: remove axios, use $fetch

* feat: metadata and task api improvements

* feat: task actions

* fix: slight styling issue

* feat: fix style and lints

* feat: totp backend routes

* feat: oidc groups

* fix: update drop-base

* feat: creation of passkeys & totp

* feat: totp signin

* feat: webauthn mfa/signin

* feat: launch selecting ui

* fix: manually running tasks

* feat: update add company game modal to use new SelectorGame

* feat: executor selector

* fix(docker): update rust to rust nightly for torrential build (#305)

* feat: new version ui

* feat: move package lookup to build time to allow for deno dev

* fix: lint

* feat: localisation cleanup

* feat: apply localisation cleanup

* feat: potential i18n refactor logic

* feat: remove args from commands

* fix: lint

* fix: lockfile

---------

Co-authored-by: Aden Lindsay <140392385+AdenMGB@users.noreply.github.com>
2026-01-13 15:32:39 +11:00
DecDuck
7717a54ff0 Fix 7z archives with spaces (#288)
* fix: ignore imported versions

* fix: bump droplet for 7z fixes
2025-11-20 14:02:56 +11:00
Hicks-99
b902678e79 Add Steam metadata provider (#232) (#250)
* feat(metadata): add Steam metadata provider (#232)

* style(steam): remove emojis from log messages
2025-09-21 10:43:35 +10:00
DecDuck
1ff82979ea Preallocate download streams (#229)
* feat: pre-allocate streams for high-latency downloads

* fix: update drop-base

* fix: remove debug latency

* fix: lint
2025-08-31 14:50:56 +10:00
DecDuck
3c5fe2e651 v2 download API and Admin UI fixes (#177)
* fix: small ui fixes

* feat: #171

* fix: improvements to library scanning on admin UI

* feat: v2 download API

* fix: add download context cleanup

* fix: lint
2025-08-09 15:45:39 +10:00
DecDuck
2555eff993 Store overhaul (#142)
* feat: small library tweaks + company page

* feat: new store view

* fix: ci merge error

* feat: add genres to store page

* feat: sorting

* feat: lock game/version imports while their tasks are running

* feat: feature games

* feat: tag based filtering

* fix: make tags alphabetical

* refactor: move a bunch of i18n to common

* feat: add localizations for everything

* fix: title description on panel

* fix: feature carousel text

* fix: i18n footer strings

* feat: add tag page

* fix: develop merge

* feat: offline games support (don't error out if provider throws)

* feat: tag management

* feat: show library next to game import + small fixes

* feat: most of the company and tag managers

* feat: company text field editing

* fix: small fixes + tsgo experiemental

* feat: upload icon and banner

* feat: store infinite scrolling and bulk import mode

* fix: lint

* fix: add drop-base to prettier ignore
2025-07-30 13:40:49 +10:00
Husky
58da16c551 Update Prisma to 6.11 (#133)
* chore: update prisma to 6.11

more prisma future proofing due to experimental features

* chore: update dependencies

twemoji - new unicode update
argon2 - bux fixes
vue3-carousel - improve mobile experiance
vue-tsc - more stable

* fix: incorrect prisma version in docker

Also remove default value for BUILD_DROP_VERSION, that is now handled in nuxt config

* fix: no logging in prod

* chore: optimize docker builds even more

* fix: revert adoption of prisma driverAdapters

see: https://github.com/prisma/prisma/issues/27486

* chore: optimize dockerignore some more

* Fix `pino-pretty` not being included in build (#135)

* Remove `pino` from frontend

* Fix for downloads and removing of library source (#136)

* fix: downloads and removing library source

* fix: linting

* Fix max file size of 4GB (update droplet) (#137)

* Fix manual metadata import (#138)

* chore(deps): bump vue-i18n from 10.0.7 to 10.0.8 (#140)

Bumps [vue-i18n](https://github.com/intlify/vue-i18n/tree/HEAD/packages/vue-i18n) from 10.0.7 to 10.0.8.
- [Release notes](https://github.com/intlify/vue-i18n/releases)
- [Changelog](https://github.com/intlify/vue-i18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/intlify/vue-i18n/commits/v10.0.8/packages/vue-i18n)

---
updated-dependencies:
- dependency-name: vue-i18n
  dependency-version: 10.0.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump @intlify/core from 10.0.7 to 10.0.8 (#139)

---
updated-dependencies:
- dependency-name: "@intlify/core"
  dependency-version: 10.0.8
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Small fixes (#141)

* fix: save task as Json rather than string

* fix: pull objects before creating game in database

* fix: strips relative dirs from version information

* fix: #132

* fix: lint

* fix: news object ids and small tweaks

* fix: notification styling errors

* fix: lint

* fix: build issues by regenerating lockfile

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: DecDuck <declanahofmeyr@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-25 21:28:00 +10:00
Husky
81eaeb6b9b Logging (#131)
* ci: pull version from package.json on build

* fix: implicit any type

* feat: inital support for logger

* style: fix lint

* feat: move more logging over to pino

* fix: logging around company importing
2025-07-09 12:01:23 +10:00
DecDuck
f92e475703 Combined fixes (#116)
* fix: missing CheckIcon import in LanguageSelector

* fix: #114 and error handling

* fix: #97

* fix: lint

* feat: #104

* fix: #72
2025-06-10 10:08:01 +10:00
Husky
7b75b9e66a Various bug fixes (#102)
* feat: set lang in html head

* fix: add # in front of git ref

* fix: remove unused vars from example env

* fix: package name and license field

* fix: enable sourcemap for client and server

* fix: emojis not showing in prod

this is extremely cursed, but it works

* chore: refactor auth manager

* feat: disable invitations if simple auth disabled

* feat: add drop version to footer

* feat: translate auth endpoints

* chore: move oidc module

* feat: add weekly tasks

enabled object cleanup as weekly task

* feat: add timestamp to task log msgs

* feat: add guard to prevent invalid progress %

* fix: add missing global scope to i18n components

* feat: set base url for i18n

* feat: switch task log to json format

* ci: run ci on develop branch only

* fix: UserWidget text not updating #109

* fix: EXTERNAL_URL being computed at build

* feat: add basic language outlines for translation

* feat: add more english dialects
2025-06-08 13:49:43 +10:00
DecDuck
124f1ccbc0 Fix: Broken footer links #96 (#98)
* fix: footer links

* fix: lint
2025-06-07 17:21:07 +10:00
Husky
2233aec23f i18n Support and Task improvements (#80)
* fix: release workflow

* feat: move mostly to internal tasks system

* feat: migrate object clean to new task system

* fix: release not  getting good base version

* chore: set version v0.3.0

* chore: style

* feat: basic task concurrency

* feat: temp pages to fill in page links

* feat: inital i18n support

* feat: localize store page

* chore: style

* fix: weblate doesn't like multifile thing

* fix: update nuxt

* feat: improved error logging

* fix: using old task api

* feat: basic translation docs

* feat: add i18n eslint plugin

* feat: translate store and auth pages

* feat: more translation progress

* feat: admin dash i18n progress

* feat: enable update check by default in prod

* fix: using wrong i18n keys

* fix: crash in library sources page

* feat: finish i18n work

* fix: missing i18n translations

* feat: use twemoji for emojis

* feat: sanatize object ids

* fix: EmojiText's alt text

* fix: UserWidget not using links

* feat: cache and auth for emoji api

* fix: add more missing translations
2025-06-05 09:53:30 +10:00
DecDuck
00cab7db0d chore: move more admin over to arktype validators 2025-05-30 13:17:21 +10:00
DecDuck
27bf90bed0 fix: various fixes 2025-05-30 10:29:55 +10:00
Huskydog9988
7656dc51b5 feat: allow clients to fetch drop version 2025-05-29 13:29:19 -04:00
Huskydog9988
3fbcc2e886 feat: update checker based gh releases 2025-05-14 16:07:25 -04:00
Huskydog9988
fc9cbe4fa0 feat: new unified data folder 2025-05-10 16:18:28 -04:00
Huskydog9988
e26d5b2fb2 feat: openapi support plus more api validation 2025-05-10 15:16:26 -04:00
Huskydog9988
9adbc157ab feat: unified cache handler 2025-05-07 22:26:34 -04:00
Huskydog9988
1b11427300 docs: why timeline was disabled 2025-05-07 21:45:13 -04:00
Huskydog9988
ad89257023 fix: don't set own script csp 2025-04-17 20:57:27 -04:00
Huskydog9988
bc5ab53b50 fix: last eslint errors 2025-04-15 21:43:27 -04:00
Huskydog9988
1e19ccb442 feat: add eslint and prettier 2025-04-13 21:43:35 -04:00
Huskydog9988
d2760a1c68 feat: add nonce to scripts 2025-04-07 20:01:57 -04:00
Huskydog9988
531d5a9a97 feat: enable nuxt dev tools 2025-04-07 19:57:00 -04:00
Huskydog9988
2b92d75a4b refactor: move tsconfig to nuxt config 2025-04-07 19:55:33 -04:00
Huskydog9988
6c02b03814 feat: sleak transition from store page to item 2025-04-07 16:17:55 -04:00
Huskydog9988
04fa0a570e fix: don't prerender auth routes 2025-04-06 14:28:03 -04:00
DecDuck
d92c5a6ec2 Merge branch 'better-ci' of https://github.com/Huskydog9988/drop into Huskydog9988-better-ci 2025-04-05 14:22:21 +11:00
DecDuck
b261e12139 fix: fix types, remove @nuxt/image because of broken types 2025-04-05 14:21:37 +11:00
Huskydog9988
bdfa4818f1 feat: typecheck in dev 2025-04-04 18:52:34 -04:00
Huskydog9988
e86f6e94f5 fix: auth prerender 2025-04-04 18:51:01 -04:00
DecDuck
bf38921f54 feat: add yarn typecheck and fix all types 2025-04-05 09:40:05 +11:00
Huskydog9988
4134777264 Merge remote-tracking branch 'origin/develop' into db-store 2025-04-03 19:21:05 -04:00
Huskydog9988
3a50e3ebae refactor: session handler 2025-04-03 19:15:33 -04:00
DecDuck
ec93dfe3c2 fix: renable nuxt-security with xss validator off 2025-04-01 21:20:54 +11:00
DecDuck
6fe8bf1e76 feat: add cloud save backend 2025-04-01 21:08:57 +11:00
DecDuck
57403a88ff fix: $dropFetch SSR and rate limiting 2025-04-01 12:02:34 +11:00
DecDuck
5654a87233 fix: public assets 2025-03-24 12:55:07 +11:00