Add pack registry #434

Merged
LunarTides merged 66 commits from registry into main 2025-12-26 11:53:15 +00:00
LunarTides commented 2025-12-06 12:21:50 +00:00 (Migrated from github.com)

Closes #427

I have a few ideas about what features the registry can support:

Necessary

These are absolutely necessary for this PR to land.

  • Packs
    • Add Pack db column.
    • Parse meta.jsonc.
    • Add fields to the row.
    • Add likes.
    • Add dislikes.
    • Allow showing the code in packs.
    • Approved by. Allows seeing who approved the version.
    • Self-moderation
      • Edit
        • Allow changing metadata from the pack page.
      • Delete
        • Versions
          • Handle deleting all versions manually.
        • All
    • Moderation
      • Un(list)
    • Reporting
  • Cards
    • Add Card db column.
    • Add card representation. See how it looks like in Hearthstone.js, and Vanilla, as an actual card.
      • Parse color tags.
    • Reporting
  • Searching
    • Search packs by uuid or name.
    • Search cards by uuid or name.
      • Show the pack the card is from.
      • Order by download count.
    • Add support for searching in-game.
  • Add versions.
    • Add versions for packs.
    • Add versions for cards.
    • Add isLatestVersion on packs / cards.
    • Make pack names non-unique for packs with the same uuid.
    • Validate semver for pack version.
    • Save packs to /static/assets/packs/{packUUID}/{packVersion}/{packUUID}.7z
  • Download.
    • Route / API
    • Disallow accessing /static/assets directly.
    • Add download count.
    • Add support for downloading in-game.
  • Upload
    • Parse blueprints after extracting pack.
    • Add all bp fields to the row.
    • Connect authors to accounts if possible. Allow connecting author accounts after the fact on the pack's page.
    • Add limiting who can edit the pack.
    • Add support for uploading in-game.
  • Bugs
    • Search packs doesn't show loading, it waits for the result before loading the page.
  • Other
    • TODO
      • Upload
        • Parse enchantment priority correctly.
        • Guard against symlinks.
        • Guard against zip bombs.
        • Validate metadata with zod.
        • Reject proprietary packs.
        • Delete pack from db if adding cards goes wrong.
        • Validate card (blueprint) with zod.
        • Add support for links.
      • Search filter packs by approved.
      • Make searching smarter.
      • Add pagination to search frontend.
      • Color names / rarity of cards by their rarity.
      • Show heropowers in cards.
      • Add proper support for requires.
    • Add components folder for easy reuse.
    • Add proper API so that it can be queried from the game.
    • Add links to the other pages (#428 #435)
    • Add new CI workflow for the website.
  • Moderation tools
    • Add approving packs (toggleable)

Extra

These will still be done, but they're less important.

  • Profile
    • About me, pronouns, etc...
    • See packs and cards
      • Waiting for approval tag.
    • Reporting
    • Self-moderation
      • Delete account
    • Moderation tools
      • Delete pack
      • Rename pack
      • Ban account
      • ...
  • Comments
    • Add support for commenting on:
      • Packs
        • Display comments
        • Like comments
        • Post comment
        • Authors can heart comments on their profile. (Can NOT delete.)
      • Cards
        • Authors can heart comments on their profile. (Can NOT delete.)
      • User profile
        • User can delete / heart comments on their profile.
    • Likes
    • Reporting
    • Self-moderation.
    • Moderation.
  • Notifications
    • Your pack has been approved! (Click to view)
    • You have been given moderator status.
    • You have been mentioned in the comments of a pack.
  • Moderation tools
    • Add review tools for approving packs.
      • GitHub-style tree to view files and folders. Click on the left to copy link. (Use # navigation.)
        • Internal notes. (This line looks suspicious. Can you look at it @ExampleModerator?)
    • Dashboard.
      • Search
      • Delete pack
      • Rename pack
      • Ban account
        • Delete comments or orphan them (show commenter as "Deleted User").
      • Settings
        • Page size
        • Enable approve system
        • Max pack size
        • Max pack file amount
        • Pack allowed extensions
        • ...
      • ...
    • Event system. Alert moderator when an event happens. This is so that I get alerted every time someone uploads a pack, so that I can review it. (RSS feed?)
      • Discord bot?

Summary by CodeRabbit

  • New Features

    • Added comprehensive pack and card registry site with user authentication, pack uploads, and versioning.
    • Added search functionality for packs and cards.
    • Added user profiles, comments, and like/dislike interactions for packs.
    • Added admin/moderator dashboard for pack approval and management.
    • Added notifications system for user interactions.
  • Dependencies

    • Added 7zip-min for archive handling; removed strip-ansi dependency.

✏️ Tip: You can customize this high-level summary in your review settings.

Closes #427 I have a few ideas about what features the registry can support: ### Necessary > These are absolutely necessary for this PR to land. - [x] Packs - [x] Add `Pack` db column. - [x] Parse `meta.jsonc`. - [x] Add fields to the row. - [x] Add likes. - [x] Add dislikes. - [x] Allow showing the code in packs. - [x] Approved by. Allows seeing who approved the version. - [ ] Self-moderation - [ ] Edit - [ ] Allow changing metadata from the pack page. - [x] Delete - [x] Versions - [ ] Handle deleting all versions manually. - [x] All - [ ] Moderation - [ ] Un(list) - [ ] Reporting - [x] Cards - [x] Add `Card` db column. - [ ] Add card representation. See how it looks like in Hearthstone.js, and Vanilla, as an actual *card*. - [ ] Parse color tags. - [ ] Reporting - [x] Searching - [x] Search packs by uuid or name. - [x] Search cards by uuid or name. - [x] Show the pack the card is from. - [x] Order by download count. - [ ] Add support for searching in-game. - [x] Add versions. - [x] Add versions for packs. - [x] Add versions for cards. - [x] Add `isLatestVersion` on packs / cards. - [x] Make pack names non-unique for packs with the same uuid. - [x] Validate semver for pack version. - [x] Save packs to `/static/assets/packs/{packUUID}/{packVersion}/{packUUID}.7z` - [x] Download. - [x] Route / API - [x] Disallow accessing `/static/assets` directly. - [x] Add download count. - [ ] Add support for downloading in-game. - [x] Upload - [x] Parse blueprints after extracting pack. - [x] Add *all* bp fields to the row. - [ ] Connect authors to accounts if possible. Allow connecting author accounts after the fact on the pack's page. - [ ] Add limiting who can edit the pack. - [ ] Add support for uploading in-game. - [ ] Bugs - [ ] Search packs doesn't show loading, it waits for the result before loading the page. - [ ] Other - [ ] TODO - [ ] Upload - [ ] Parse enchantment priority correctly. - [ ] Guard against symlinks. - [ ] Guard against zip bombs. - [ ] Validate metadata with zod. - [ ] Reject proprietary packs. - [ ] Delete pack from db if adding cards goes wrong. - [ ] Validate card (blueprint) with zod. - [ ] Add support for links. - [x] Search filter packs by approved. - [ ] Make searching smarter. - [ ] Add pagination to search frontend. - [ ] Color names / rarity of cards by their rarity. - [ ] Show heropowers in cards. - [ ] Add proper support for requires. - [ ] Add components folder for easy reuse. - [x] Add proper API so that it can be queried from the game. - [ ] Add links to the other pages (#428 #435) - [ ] Add new CI workflow for the website. - [ ] Moderation tools - [x] Add approving packs (toggleable) ### Extra > These will still be done, but they're less important. - [x] Profile - [x] About me, pronouns, etc... - [x] See packs ~~and cards~~ - [x] Waiting for approval tag. - [ ] Reporting - [ ] Self-moderation - [ ] Delete account - [ ] Moderation tools - [ ] Delete pack - [ ] Rename pack - [ ] Ban account - [ ] ... - [ ] Comments - [ ] Add support for commenting on: - [x] Packs - [x] Display comments - [x] Like comments - [x] Post comment - [x] Authors can heart comments on their profile. (Can NOT delete.) - [ ] Cards - [ ] Authors can heart comments on their profile. (Can NOT delete.) - [ ] User profile - [ ] User can delete / heart comments on their profile. - [x] Likes - [ ] Reporting - [x] Self-moderation. - [ ] Moderation. - [x] Notifications - [x] Your pack has been approved! (Click to view) - [x] You have been given moderator status. - [ ] You have been mentioned in the comments of a pack. - [ ] Moderation tools - [x] Add review tools for approving packs. - [ ] GitHub-style tree to view files and folders. Click on the left to copy link. (Use # navigation.) - [ ] Internal notes. (This line looks suspicious. Can you look at it @ExampleModerator?) - [ ] Dashboard. - [ ] Search - [ ] Delete pack - [ ] Rename pack - [ ] Ban account - [ ] Delete comments or orphan them (show commenter as "Deleted User"). - [ ] Settings - [ ] Page size - [ ] Enable approve system - [ ] Max pack size - [ ] Max pack file amount - [ ] Pack allowed extensions - [ ] ... - [ ] ... - [x] Event system. Alert moderator when an event happens. This is so that I get alerted every time someone uploads a pack, so that I can review it. (RSS feed?) - [ ] Discord bot? <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added comprehensive pack and card registry site with user authentication, pack uploads, and versioning. * Added search functionality for packs and cards. * Added user profiles, comments, and like/dislike interactions for packs. * Added admin/moderator dashboard for pack approval and management. * Added notifications system for user interactions. * **Dependencies** * Added `7zip-min` for archive handling; removed `strip-ansi` dependency. <sub>✏️ Tip: You can customize this high-level summary in your review settings.</sub> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
coderabbitai[bot] commented 2025-12-06 12:21:55 +00:00 (Migrated from github.com)

Caution

Review failed

The pull request is closed.

📝 Walkthrough

Walkthrough

Introduces a comprehensive web-based pack registry system under sites/registry/ with PostgreSQL database, token-based authentication, REST API endpoints, and Svelte UI components. Updates root tooling to support 7zip compression and Bun's native ANSI stripping.

Changes

Cohort / File(s) Summary
Root Configuration Updates
.gitignore, biome.json, package.json, tsconfig.json
Added packs archive patterns to gitignore; excluded sites directories from linter; updated dependencies (added 7zip-min, removed strip-ansi/typescript/generate-changelog); updated TypeScript config (esnext target, module preservation).
Tooling Updates
src/functions/color.ts, tools/packager.ts
Replaced strip-ansi with Bun.stripANSI; refactored packager to support 7zip compression, UUID-based pack identification, metadata discovery, and unpacking workflows.
Registry Site Configuration
sites/registry/.env.example, .gitignore, .npmrc, .prettierignore, .prettierrc, compose.yaml, drizzle.config.ts, eslint.config.js, package.json, svelte.config.js, tsconfig.json, vite.config.ts
Established project scaffolding with Docker Compose PostgreSQL setup, Drizzle ORM configuration, ESLint/Prettier styling rules, SvelteKit + Vite build tooling.
Database Schema & Server Utilities
sites/registry/src/lib/db/schema.ts, src/lib/db/index.ts, src/lib/db/pack.ts, src/lib/db/comment.ts, src/lib/db/setting.ts
Defined comprehensive Drizzle schema (users, sessions, packs, cards, comments, notifications); implemented data loaders with access control, like/dislike aggregation, and setting management.
Authentication & Authorization
sites/registry/src/lib/server/auth.ts, src/lib/user.ts, src/lib/pack.ts
Implemented token-based session management (generation, validation, renewal, cookie handling); added role-based access control helpers and pack/user censoring utilities.
API Routes: Authentication & Users
sites/registry/src/routes/api/v1/user/login/+server.ts, register/+server.ts, [uuid]/+server.ts, sites/registry/src/routes/+page.server.ts
Provided login/registration endpoints with Argon2 password hashing, user profile management with role changes and notifications, and logout handler.
API Routes: Pack Operations
sites/registry/src/routes/api/v1/pack/[uuid]/+server.ts, upload/+server.ts, like/+server.ts, dislike/+server.ts
Implemented pack CRUD (delete), file upload with 7z validation and archive inspection, pack like/dislike interactions with per-user state tracking.
API Routes: Pack Versions & Downloads
sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/+server.ts, approve/+server.ts, cards/+server.ts, download/+server.ts, files/+server.ts, files/[...path]/+server.ts
Exposed version management (delete, approve with notifications), card listing, archive download with 7zip compression, and recursive file tree retrieval.
API Routes: Comments & Interactions
sites/registry/src/routes/api/v1/pack/[uuid]/comments/+server.ts, [commentId]/+server.ts, [commentId]/like/+server.ts, [commentId]/dislike/+server.ts, [commentId]/heart/+server.ts
Implemented paginated comment posting/deletion, like/dislike toggles, and heart (favorite) interactions with author notifications.
API Routes: Search & Notifications
sites/registry/src/routes/api/v1/search/packs/+server.ts, cards/+server.ts, notifications/+server.ts, [uuid]/+server.ts, clear/+server.ts, feeds/packs/waiting-for-approval.xml/+server.ts
Built search endpoints (packs/cards by name with pagination), notification fetch/delete/clear, and moderator RSS feed for approval queue.
Shared UI Components
sites/registry/src/lib/components/badge.svelte, card-big.svelte, card-small.svelte, file-tree.svelte, pack-big.svelte, pack-small.svelte, user-big.svelte
Created reusable Svelte components for cards, packs, users, file browsers, and badges with conditional rendering for metadata, stats, and moderation controls.
Page Routes: Authentication & Dashboard
sites/registry/src/routes/login/+page.server.ts, +page.svelte, dashboard/**/+layout.server.ts, dashboard/packs/+page.svelte, dashboard/admin/settings/+page.svelte
Provided login form with superforms validation, moderator/admin role guards, and dashboard shell pages.
Page Routes: Pack Detail & Versions
sites/registry/src/routes/pack/[uuid]/+layout.server.ts, +page.server.ts, +page.svelte, versions/+page.svelte, versions/[version]/+layout.server.ts, versions/[version]/+layout.svelte, versions/[version]/+page.svelte, versions/[version]/files/+page.server.ts, versions/all/+page.server.ts
Implemented pack detail pages with comment threads, version browsing, file tree exploration, like/dislike actions, and version deletion/approval workflows.
Page Routes: Card & User Profiles
sites/registry/src/routes/card/[uuid]/+layout.server.ts, +page.svelte, versions/+page.svelte, versions/[version]/+page.svelte, user/[uuid]/+layout.server.ts, +page.server.ts, +page.svelte
Created card detail pages with version history, and user profile pages showing packs and metadata with edit controls.
Page Routes: Search & Notifications
sites/registry/src/routes/search/+page.server.ts, +page.svelte, notifications/+page.server.ts, +page.svelte, [uuid]/+page.server.ts
Built search results page with packs/cards, and notifications listing with delete/clear actions.
Page Routes: Upload & Layout
sites/registry/src/routes/upload/+page.server.ts, +page.svelte, +layout.server.ts, +layout.svelte, +page.svelte, app.d.ts, app.html, hooks.server.ts, layout.css
Added pack upload form, global layout with navigation, user avatar display, notifications bell, search bar, and session middleware for auth/settings initialization.
Static Assets
sites/registry/static/robots.txt
Added SEO-friendly robots.txt allowing all user agents.

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant Client as Browser
    participant Server as SvelteKit Server
    participant DB as PostgreSQL
    participant FS as File System

    rect rgba(100, 200, 100, 0.1)
    note over User,FS: Pack Upload Flow
    User->>Client: Select .7z file
    Client->>Server: POST /api/v1/pack/[uuid]/upload (binary)
    Server->>Server: Validate magic bytes (7z)
    Server->>FS: Extract archive to temp dir
    Server->>Server: Validate archive contents<br/>(meta.jsonc, max files, size)
    Server->>Server: Parse metadata & cards
    Server->>DB: Check existing pack versions
    alt New Pack
        Server->>DB: Insert pack + cards records
        Server->>DB: Set isLatestVersion=true
    else Existing Pack (newer version)
        Server->>DB: Mark old versions isLatestVersion=false
        Server->>DB: Insert new pack + cards
        Server->>DB: Set new as isLatestVersion=true
    end
    Server->>FS: Move archive to static/assets/packs/
    Server->>Client: Return 200 with pack metadata
    end

    rect rgba(100, 150, 200, 0.1)
    note over User,FS: Pack Approval Flow (Moderator)
    User->>Client: View waiting-for-approval feed
    Client->>Server: GET /api/v1/feeds/packs/waiting-for-approval.xml
    Server->>DB: Query packs WHERE approved=false
    Server->>Client: Return RSS feed
    User->>Client: Click approve on pack version
    Client->>Server: POST /api/v1/pack/[uuid]/versions/[version]/approve
    Server->>Server: Check moderator role
    Server->>DB: Update pack approved=true, approvedBy=userId
    Server->>DB: Cascade mark previous versions isLatestVersion=false
    Server->>DB: Create notifications for pack authors
    Server->>Client: Return 200
    end

    rect rgba(200, 100, 100, 0.1)
    note over User,FS: Authentication Flow
    User->>Client: Submit login form
    Client->>Server: POST /api/v1/user/login
    Server->>DB: Query user by username
    alt User Not Found
        Server->>Client: 403 Forbidden
    else User Found
        Server->>Server: Verify password (Argon2)
        alt Password Invalid
            Server->>Client: 403 Forbidden
        else Password Valid
            Server->>Server: generateSessionToken()
            Server->>DB: createSession(token, userId)
            Server->>Client: Set auth-session cookie
            Server->>Client: 200 with user data
        end
    end
    end

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

  • #427: Directly implements the "Add npm-like registry for packs" feature with database schema, authentication, pack/card management, search, upload/download, moderation tools, and approval workflows.
  • #438: Both PRs modify tools/packager.ts to handle 7zip-based pack discovery, import/export, and compression workflows.

Suggested labels

scope: feature


🐰 A registry is born, with cards and packs so fine,
Users upload their creations, moderation makes them shine,
Comments flow and hearts abound, versions tagged with care,
From database to interface, a marketplace so fair!

Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch registry

📜 Recent review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 89102c8f36 and 34fec4be0b.

Files ignored due to path filters (3)
  • bun.lock is excluded by !**/*.lock
  • sites/registry/bun.lock is excluded by !**/*.lock
  • sites/registry/src/lib/assets/favicon.svg is excluded by !**/*.svg
📒 Files selected for processing (108)
  • .gitignore
  • biome.json
  • package.json
  • sites/registry/.env.example
  • sites/registry/.gitignore
  • sites/registry/.npmrc
  • sites/registry/.prettierignore
  • sites/registry/.prettierrc
  • sites/registry/README.md
  • sites/registry/compose.yaml
  • sites/registry/drizzle.config.ts
  • sites/registry/eslint.config.js
  • sites/registry/package.json
  • sites/registry/src/app.d.ts
  • sites/registry/src/app.html
  • sites/registry/src/hooks.server.ts
  • sites/registry/src/lib/api/schemas.ts
  • sites/registry/src/lib/api/types.ts
  • sites/registry/src/lib/components/badge.svelte
  • sites/registry/src/lib/components/card-big.svelte
  • sites/registry/src/lib/components/card-small.svelte
  • sites/registry/src/lib/components/file-tree.svelte
  • sites/registry/src/lib/components/pack-big.svelte
  • sites/registry/src/lib/components/pack-small.svelte
  • sites/registry/src/lib/components/user-big.svelte
  • sites/registry/src/lib/db/schema.ts
  • sites/registry/src/lib/index.ts
  • sites/registry/src/lib/pack.ts
  • sites/registry/src/lib/server/auth.ts
  • sites/registry/src/lib/server/db/comment.ts
  • sites/registry/src/lib/server/db/index.ts
  • sites/registry/src/lib/server/db/pack.ts
  • sites/registry/src/lib/server/db/setting.ts
  • sites/registry/src/lib/user.ts
  • sites/registry/src/routes/+layout.server.ts
  • sites/registry/src/routes/+layout.svelte
  • sites/registry/src/routes/+page.server.ts
  • sites/registry/src/routes/+page.svelte
  • sites/registry/src/routes/api/v1/feeds/packs/waiting-for-approval.xml/+server.ts
  • sites/registry/src/routes/api/v1/notifications/+server.ts
  • sites/registry/src/routes/api/v1/notifications/[uuid]/+server.ts
  • sites/registry/src/routes/api/v1/notifications/clear/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/comments/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/comments/[commentId]/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/comments/[commentId]/dislike/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/comments/[commentId]/heart/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/comments/[commentId]/like/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/dislike/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/like/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/upload/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/approve/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/cards/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/download/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/files/+server.ts
  • sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/files/[...path]/+server.ts
  • sites/registry/src/routes/api/v1/search/cards/+server.ts
  • sites/registry/src/routes/api/v1/search/packs/+server.ts
  • sites/registry/src/routes/api/v1/user/[uuid]/+server.ts
  • sites/registry/src/routes/api/v1/user/login/+server.ts
  • sites/registry/src/routes/api/v1/user/register/+server.ts
  • sites/registry/src/routes/card/[uuid]/+layout.server.ts
  • sites/registry/src/routes/card/[uuid]/+page.svelte
  • sites/registry/src/routes/card/[uuid]/versions/+page.svelte
  • sites/registry/src/routes/card/[uuid]/versions/[version]/+page.svelte
  • sites/registry/src/routes/dashboard/+layout.server.ts
  • sites/registry/src/routes/dashboard/+layout.svelte
  • sites/registry/src/routes/dashboard/admin/+layout.server.ts
  • sites/registry/src/routes/dashboard/admin/settings/+page.svelte
  • sites/registry/src/routes/dashboard/packs/+page.svelte
  • sites/registry/src/routes/layout.css
  • sites/registry/src/routes/login/+page.server.ts
  • sites/registry/src/routes/login/+page.svelte
  • sites/registry/src/routes/notifications/+page.server.ts
  • sites/registry/src/routes/notifications/+page.svelte
  • sites/registry/src/routes/notifications/[uuid]/+page.server.ts
  • sites/registry/src/routes/pack/[uuid]/+layout.server.ts
  • sites/registry/src/routes/pack/[uuid]/+page.server.ts
  • sites/registry/src/routes/pack/[uuid]/+page.svelte
  • sites/registry/src/routes/pack/[uuid]/comments/+page.server.ts
  • sites/registry/src/routes/pack/[uuid]/comments/[commentId]/+page.server.ts
  • sites/registry/src/routes/pack/[uuid]/edit/+page.svelte
  • sites/registry/src/routes/pack/[uuid]/versions/+page.svelte
  • sites/registry/src/routes/pack/[uuid]/versions/[version]/+layout.server.ts
  • sites/registry/src/routes/pack/[uuid]/versions/[version]/+layout.svelte
  • sites/registry/src/routes/pack/[uuid]/versions/[version]/+page.server.ts
  • sites/registry/src/routes/pack/[uuid]/versions/[version]/+page.svelte
  • sites/registry/src/routes/pack/[uuid]/versions/[version]/files/+page.server.ts
  • sites/registry/src/routes/pack/[uuid]/versions/[version]/files/[...path]/+page.server.ts
  • sites/registry/src/routes/pack/[uuid]/versions/[version]/files/[...path]/+page.svelte
  • sites/registry/src/routes/pack/[uuid]/versions/all/+page.server.ts
  • sites/registry/src/routes/pack/[uuid]/versions/all/+page.svelte
  • sites/registry/src/routes/search/+page.server.ts
  • sites/registry/src/routes/search/+page.svelte
  • sites/registry/src/routes/upload/+page.server.ts
  • sites/registry/src/routes/upload/+page.svelte
  • sites/registry/src/routes/user/[uuid]/+layout.server.ts
  • sites/registry/src/routes/user/[uuid]/+page.server.ts
  • sites/registry/src/routes/user/[uuid]/+page.svelte
  • sites/registry/src/routes/user/[uuid]/delete/+page.svelte
  • sites/registry/static/robots.txt
  • sites/registry/svelte.config.js
  • sites/registry/tsconfig.json
  • sites/registry/vite.config.ts
  • src/functions/color.ts
  • tools/packager.ts
  • tsconfig.json

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

<!-- This is an auto-generated comment: summarize by coderabbit.ai --> <!-- This is an auto-generated comment: failure by coderabbit.ai --> > [!CAUTION] > ## Review failed > > The pull request is closed. <!-- end of auto-generated comment: failure by coderabbit.ai --> <!-- walkthrough_start --> <details> <summary>📝 Walkthrough</summary> ## Walkthrough Introduces a comprehensive web-based pack registry system under `sites/registry/` with PostgreSQL database, token-based authentication, REST API endpoints, and Svelte UI components. Updates root tooling to support 7zip compression and Bun's native ANSI stripping. ## Changes | Cohort / File(s) | Summary | |---|---| | **Root Configuration Updates** <br> `.gitignore`, `biome.json`, `package.json`, `tsconfig.json` | Added packs archive patterns to gitignore; excluded sites directories from linter; updated dependencies (added 7zip-min, removed strip-ansi/typescript/generate-changelog); updated TypeScript config (esnext target, module preservation). | | **Tooling Updates** <br> `src/functions/color.ts`, `tools/packager.ts` | Replaced strip-ansi with Bun.stripANSI; refactored packager to support 7zip compression, UUID-based pack identification, metadata discovery, and unpacking workflows. | | **Registry Site Configuration** <br> `sites/registry/.env.example`, `.gitignore`, `.npmrc`, `.prettierignore`, `.prettierrc`, `compose.yaml`, `drizzle.config.ts`, `eslint.config.js`, `package.json`, `svelte.config.js`, `tsconfig.json`, `vite.config.ts` | Established project scaffolding with Docker Compose PostgreSQL setup, Drizzle ORM configuration, ESLint/Prettier styling rules, SvelteKit + Vite build tooling. | | **Database Schema & Server Utilities** <br> `sites/registry/src/lib/db/schema.ts`, `src/lib/db/index.ts`, `src/lib/db/pack.ts`, `src/lib/db/comment.ts`, `src/lib/db/setting.ts` | Defined comprehensive Drizzle schema (users, sessions, packs, cards, comments, notifications); implemented data loaders with access control, like/dislike aggregation, and setting management. | | **Authentication & Authorization** <br> `sites/registry/src/lib/server/auth.ts`, `src/lib/user.ts`, `src/lib/pack.ts` | Implemented token-based session management (generation, validation, renewal, cookie handling); added role-based access control helpers and pack/user censoring utilities. | | **API Routes: Authentication & Users** <br> `sites/registry/src/routes/api/v1/user/login/+server.ts`, `register/+server.ts`, `[uuid]/+server.ts`, `sites/registry/src/routes/+page.server.ts` | Provided login/registration endpoints with Argon2 password hashing, user profile management with role changes and notifications, and logout handler. | | **API Routes: Pack Operations** <br> `sites/registry/src/routes/api/v1/pack/[uuid]/+server.ts`, `upload/+server.ts`, `like/+server.ts`, `dislike/+server.ts` | Implemented pack CRUD (delete), file upload with 7z validation and archive inspection, pack like/dislike interactions with per-user state tracking. | | **API Routes: Pack Versions & Downloads** <br> `sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/+server.ts`, `approve/+server.ts`, `cards/+server.ts`, `download/+server.ts`, `files/+server.ts`, `files/[...path]/+server.ts` | Exposed version management (delete, approve with notifications), card listing, archive download with 7zip compression, and recursive file tree retrieval. | | **API Routes: Comments & Interactions** <br> `sites/registry/src/routes/api/v1/pack/[uuid]/comments/+server.ts`, `[commentId]/+server.ts`, `[commentId]/like/+server.ts`, `[commentId]/dislike/+server.ts`, `[commentId]/heart/+server.ts` | Implemented paginated comment posting/deletion, like/dislike toggles, and heart (favorite) interactions with author notifications. | | **API Routes: Search & Notifications** <br> `sites/registry/src/routes/api/v1/search/packs/+server.ts`, `cards/+server.ts`, `notifications/+server.ts`, `[uuid]/+server.ts`, `clear/+server.ts`, `feeds/packs/waiting-for-approval.xml/+server.ts` | Built search endpoints (packs/cards by name with pagination), notification fetch/delete/clear, and moderator RSS feed for approval queue. | | **Shared UI Components** <br> `sites/registry/src/lib/components/badge.svelte`, `card-big.svelte`, `card-small.svelte`, `file-tree.svelte`, `pack-big.svelte`, `pack-small.svelte`, `user-big.svelte` | Created reusable Svelte components for cards, packs, users, file browsers, and badges with conditional rendering for metadata, stats, and moderation controls. | | **Page Routes: Authentication & Dashboard** <br> `sites/registry/src/routes/login/+page.server.ts`, `+page.svelte`, `dashboard/**/+layout.server.ts`, `dashboard/packs/+page.svelte`, `dashboard/admin/settings/+page.svelte` | Provided login form with superforms validation, moderator/admin role guards, and dashboard shell pages. | | **Page Routes: Pack Detail & Versions** <br> `sites/registry/src/routes/pack/[uuid]/+layout.server.ts`, `+page.server.ts`, `+page.svelte`, `versions/+page.svelte`, `versions/[version]/+layout.server.ts`, `versions/[version]/+layout.svelte`, `versions/[version]/+page.svelte`, `versions/[version]/files/+page.server.ts`, `versions/all/+page.server.ts` | Implemented pack detail pages with comment threads, version browsing, file tree exploration, like/dislike actions, and version deletion/approval workflows. | | **Page Routes: Card & User Profiles** <br> `sites/registry/src/routes/card/[uuid]/+layout.server.ts`, `+page.svelte`, `versions/+page.svelte`, `versions/[version]/+page.svelte`, `user/[uuid]/+layout.server.ts`, `+page.server.ts`, `+page.svelte` | Created card detail pages with version history, and user profile pages showing packs and metadata with edit controls. | | **Page Routes: Search & Notifications** <br> `sites/registry/src/routes/search/+page.server.ts`, `+page.svelte`, `notifications/+page.server.ts`, `+page.svelte`, `[uuid]/+page.server.ts` | Built search results page with packs/cards, and notifications listing with delete/clear actions. | | **Page Routes: Upload & Layout** <br> `sites/registry/src/routes/upload/+page.server.ts`, `+page.svelte`, `+layout.server.ts`, `+layout.svelte`, `+page.svelte`, `app.d.ts`, `app.html`, `hooks.server.ts`, `layout.css` | Added pack upload form, global layout with navigation, user avatar display, notifications bell, search bar, and session middleware for auth/settings initialization. | | **Static Assets** <br> `sites/registry/static/robots.txt` | Added SEO-friendly robots.txt allowing all user agents. | ## Sequence Diagram(s) ```mermaid sequenceDiagram actor User participant Client as Browser participant Server as SvelteKit Server participant DB as PostgreSQL participant FS as File System rect rgba(100, 200, 100, 0.1) note over User,FS: Pack Upload Flow User->>Client: Select .7z file Client->>Server: POST /api/v1/pack/[uuid]/upload (binary) Server->>Server: Validate magic bytes (7z) Server->>FS: Extract archive to temp dir Server->>Server: Validate archive contents<br/>(meta.jsonc, max files, size) Server->>Server: Parse metadata & cards Server->>DB: Check existing pack versions alt New Pack Server->>DB: Insert pack + cards records Server->>DB: Set isLatestVersion=true else Existing Pack (newer version) Server->>DB: Mark old versions isLatestVersion=false Server->>DB: Insert new pack + cards Server->>DB: Set new as isLatestVersion=true end Server->>FS: Move archive to static/assets/packs/ Server->>Client: Return 200 with pack metadata end rect rgba(100, 150, 200, 0.1) note over User,FS: Pack Approval Flow (Moderator) User->>Client: View waiting-for-approval feed Client->>Server: GET /api/v1/feeds/packs/waiting-for-approval.xml Server->>DB: Query packs WHERE approved=false Server->>Client: Return RSS feed User->>Client: Click approve on pack version Client->>Server: POST /api/v1/pack/[uuid]/versions/[version]/approve Server->>Server: Check moderator role Server->>DB: Update pack approved=true, approvedBy=userId Server->>DB: Cascade mark previous versions isLatestVersion=false Server->>DB: Create notifications for pack authors Server->>Client: Return 200 end rect rgba(200, 100, 100, 0.1) note over User,FS: Authentication Flow User->>Client: Submit login form Client->>Server: POST /api/v1/user/login Server->>DB: Query user by username alt User Not Found Server->>Client: 403 Forbidden else User Found Server->>Server: Verify password (Argon2) alt Password Invalid Server->>Client: 403 Forbidden else Password Valid Server->>Server: generateSessionToken() Server->>DB: createSession(token, userId) Server->>Client: Set auth-session cookie Server->>Client: 200 with user data end end end ``` ## Estimated code review effort 🎯 5 (Critical) | ⏱️ ~120 minutes ## Possibly related issues - `#427`: Directly implements the "Add npm-like registry for packs" feature with database schema, authentication, pack/card management, search, upload/download, moderation tools, and approval workflows. ## Possibly related PRs - `#438`: Both PRs modify `tools/packager.ts` to handle 7zip-based pack discovery, import/export, and compression workflows. ## Suggested labels `scope: feature` --- > 🐰 *A registry is born, with cards and packs so fine,* > *Users upload their creations, moderation makes them shine,* > *Comments flow and hearts abound, versions tagged with care,* > *From database to interface, a marketplace so fair!* </details> <!-- walkthrough_end --> <!-- finishing_touch_checkbox_start --> <details> <summary>✨ Finishing touches</summary> - [ ] <!-- {"checkboxId": "7962f53c-55bc-4827-bfbf-6a18da830691"} --> 📝 Generate docstrings <details> <summary>🧪 Generate unit tests (beta)</summary> - [ ] <!-- {"checkboxId": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} --> Create PR with unit tests - [ ] <!-- {"checkboxId": "07f1e7d6-8a8e-4e23-9900-8731c2c87f58", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} --> Post copyable unit tests in a comment - [ ] <!-- {"checkboxId": "6ba7b810-9dad-11d1-80b4-00c04fd430c8", "radioGroupId": "utg-output-choice-group-unknown_comment_id"} --> Commit unit tests in branch `registry` </details> </details> <!-- finishing_touch_checkbox_end --> --- <details> <summary>📜 Recent review details</summary> **Configuration used**: defaults **Review profile**: CHILL **Plan**: Pro <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 89102c8f364cb5b561fa7104cbd463e12a4be4c7 and 34fec4be0bd9f9fb6da953f5fdc4ce742305e328. </details> <details> <summary>⛔ Files ignored due to path filters (3)</summary> * `bun.lock` is excluded by `!**/*.lock` * `sites/registry/bun.lock` is excluded by `!**/*.lock` * `sites/registry/src/lib/assets/favicon.svg` is excluded by `!**/*.svg` </details> <details> <summary>📒 Files selected for processing (108)</summary> * `.gitignore` * `biome.json` * `package.json` * `sites/registry/.env.example` * `sites/registry/.gitignore` * `sites/registry/.npmrc` * `sites/registry/.prettierignore` * `sites/registry/.prettierrc` * `sites/registry/README.md` * `sites/registry/compose.yaml` * `sites/registry/drizzle.config.ts` * `sites/registry/eslint.config.js` * `sites/registry/package.json` * `sites/registry/src/app.d.ts` * `sites/registry/src/app.html` * `sites/registry/src/hooks.server.ts` * `sites/registry/src/lib/api/schemas.ts` * `sites/registry/src/lib/api/types.ts` * `sites/registry/src/lib/components/badge.svelte` * `sites/registry/src/lib/components/card-big.svelte` * `sites/registry/src/lib/components/card-small.svelte` * `sites/registry/src/lib/components/file-tree.svelte` * `sites/registry/src/lib/components/pack-big.svelte` * `sites/registry/src/lib/components/pack-small.svelte` * `sites/registry/src/lib/components/user-big.svelte` * `sites/registry/src/lib/db/schema.ts` * `sites/registry/src/lib/index.ts` * `sites/registry/src/lib/pack.ts` * `sites/registry/src/lib/server/auth.ts` * `sites/registry/src/lib/server/db/comment.ts` * `sites/registry/src/lib/server/db/index.ts` * `sites/registry/src/lib/server/db/pack.ts` * `sites/registry/src/lib/server/db/setting.ts` * `sites/registry/src/lib/user.ts` * `sites/registry/src/routes/+layout.server.ts` * `sites/registry/src/routes/+layout.svelte` * `sites/registry/src/routes/+page.server.ts` * `sites/registry/src/routes/+page.svelte` * `sites/registry/src/routes/api/v1/feeds/packs/waiting-for-approval.xml/+server.ts` * `sites/registry/src/routes/api/v1/notifications/+server.ts` * `sites/registry/src/routes/api/v1/notifications/[uuid]/+server.ts` * `sites/registry/src/routes/api/v1/notifications/clear/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/comments/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/comments/[commentId]/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/comments/[commentId]/dislike/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/comments/[commentId]/heart/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/comments/[commentId]/like/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/dislike/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/like/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/upload/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/approve/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/cards/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/download/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/files/+server.ts` * `sites/registry/src/routes/api/v1/pack/[uuid]/versions/[version]/files/[...path]/+server.ts` * `sites/registry/src/routes/api/v1/search/cards/+server.ts` * `sites/registry/src/routes/api/v1/search/packs/+server.ts` * `sites/registry/src/routes/api/v1/user/[uuid]/+server.ts` * `sites/registry/src/routes/api/v1/user/login/+server.ts` * `sites/registry/src/routes/api/v1/user/register/+server.ts` * `sites/registry/src/routes/card/[uuid]/+layout.server.ts` * `sites/registry/src/routes/card/[uuid]/+page.svelte` * `sites/registry/src/routes/card/[uuid]/versions/+page.svelte` * `sites/registry/src/routes/card/[uuid]/versions/[version]/+page.svelte` * `sites/registry/src/routes/dashboard/+layout.server.ts` * `sites/registry/src/routes/dashboard/+layout.svelte` * `sites/registry/src/routes/dashboard/admin/+layout.server.ts` * `sites/registry/src/routes/dashboard/admin/settings/+page.svelte` * `sites/registry/src/routes/dashboard/packs/+page.svelte` * `sites/registry/src/routes/layout.css` * `sites/registry/src/routes/login/+page.server.ts` * `sites/registry/src/routes/login/+page.svelte` * `sites/registry/src/routes/notifications/+page.server.ts` * `sites/registry/src/routes/notifications/+page.svelte` * `sites/registry/src/routes/notifications/[uuid]/+page.server.ts` * `sites/registry/src/routes/pack/[uuid]/+layout.server.ts` * `sites/registry/src/routes/pack/[uuid]/+page.server.ts` * `sites/registry/src/routes/pack/[uuid]/+page.svelte` * `sites/registry/src/routes/pack/[uuid]/comments/+page.server.ts` * `sites/registry/src/routes/pack/[uuid]/comments/[commentId]/+page.server.ts` * `sites/registry/src/routes/pack/[uuid]/edit/+page.svelte` * `sites/registry/src/routes/pack/[uuid]/versions/+page.svelte` * `sites/registry/src/routes/pack/[uuid]/versions/[version]/+layout.server.ts` * `sites/registry/src/routes/pack/[uuid]/versions/[version]/+layout.svelte` * `sites/registry/src/routes/pack/[uuid]/versions/[version]/+page.server.ts` * `sites/registry/src/routes/pack/[uuid]/versions/[version]/+page.svelte` * `sites/registry/src/routes/pack/[uuid]/versions/[version]/files/+page.server.ts` * `sites/registry/src/routes/pack/[uuid]/versions/[version]/files/[...path]/+page.server.ts` * `sites/registry/src/routes/pack/[uuid]/versions/[version]/files/[...path]/+page.svelte` * `sites/registry/src/routes/pack/[uuid]/versions/all/+page.server.ts` * `sites/registry/src/routes/pack/[uuid]/versions/all/+page.svelte` * `sites/registry/src/routes/search/+page.server.ts` * `sites/registry/src/routes/search/+page.svelte` * `sites/registry/src/routes/upload/+page.server.ts` * `sites/registry/src/routes/upload/+page.svelte` * `sites/registry/src/routes/user/[uuid]/+layout.server.ts` * `sites/registry/src/routes/user/[uuid]/+page.server.ts` * `sites/registry/src/routes/user/[uuid]/+page.svelte` * `sites/registry/src/routes/user/[uuid]/delete/+page.svelte` * `sites/registry/static/robots.txt` * `sites/registry/svelte.config.js` * `sites/registry/tsconfig.json` * `sites/registry/vite.config.ts` * `src/functions/color.ts` * `tools/packager.ts` * `tsconfig.json` </details> </details> <!-- tips_start --> --- Thanks for using [CodeRabbit](https://coderabbit.ai?utm_source=oss&utm_medium=github&utm_campaign=LunarTides/Hearthstone.js&utm_content=434)! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. <details> <summary>❤️ Share</summary> - [X](https://twitter.com/intent/tweet?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A&url=https%3A//coderabbit.ai) - [Mastodon](https://mastodon.social/share?text=I%20just%20used%20%40coderabbitai%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20the%20proprietary%20code.%20Check%20it%20out%3A%20https%3A%2F%2Fcoderabbit.ai) - [Reddit](https://www.reddit.com/submit?title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&text=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code.%20Check%20it%20out%3A%20https%3A//coderabbit.ai) - [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fcoderabbit.ai&mini=true&title=Great%20tool%20for%20code%20review%20-%20CodeRabbit&summary=I%20just%20used%20CodeRabbit%20for%20my%20code%20review%2C%20and%20it%27s%20fantastic%21%20It%27s%20free%20for%20OSS%20and%20offers%20a%20free%20trial%20for%20proprietary%20code) </details> <sub>Comment `@coderabbitai help` to get the list of available commands and usage tips.</sub> <!-- tips_end --> <!-- internal state start --> <!-- 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 --> <!-- internal state end -->
LunarTides commented 2025-12-17 07:05:29 +00:00 (Migrated from github.com)

I need to do some cleaning up and resolving todo comments, since there's a lot. Duplicate code, lack of consistent i18n, bugs gallore, etc... I'm surprised this only adds ~4.5k loc with this level of quality. Then again, fixing these issues might cause the loc to spike, not that it matters too much...

Either way, none of this code can be shipped as is. The potential for bugs is way too high.

I need to do some cleaning up and resolving todo comments, since there's a *lot*. Duplicate code, lack of consistent i18n, bugs gallore, etc... I'm surprised this only adds ~4.5k loc with this level of quality. Then again, fixing these issues might cause the loc to spike, not that it matters too much... Either way, *none* of this code can be shipped as is. The potential for bugs is *way* too high.
LunarTides commented 2025-12-26 11:52:51 +00:00 (Migrated from github.com)

Merging so that I can deploy to Vercel. See #443

Merging so that I can deploy to Vercel. See #443
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
LunarTides/Hearthstone.js!434
No description provided.