Commit graph

58 commits

Author SHA1 Message Date
Christian Fehmer
da671337c5
feat(funbox): add polyglot (@fehmer) (#6454)
Add polyglot funbox which let you practice on multiple languages at once
in a single test.

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2025-04-18 16:48:35 +02:00
Jack
cac8835c77
chore: add oxlint (@miodec) (#6455)
Use oxlint for general linting to provide much quicker feedback. Keep
eslint for type-aware rules. Fully switch to oxlint once it supports
type-aware.
2025-04-16 17:18:50 +02:00
Christian Fehmer
f6d9b7c3ef
impr: lazy load chartData on results (@fehmer) (#6428)
Optimize results endpoint by removing heavy or unused data. 

We load the whole result chart data for up to 1000 results each time,
but it is very unlikely the user will view the charts for all old
results. By removing the size in my tests went down from 1152kb to
276kb.

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2025-04-08 13:46:40 +02:00
Christian Fehmer
cef3ff57c7
impr(result page): clicking on daily leaderboard rank opens the leaderboards page the user is on (@fehmer) (#6380)
Co-authored-by: Miodec <jack@monkeytype.com>
2025-03-18 13:18:12 +01:00
Christian Fehmer
9e3f795380
fix: protect against stored xss in custom background url (@fehmer) (#6355)
!nuf

closes #6354
2025-03-12 16:52:57 +01:00
Nad Alaba
932d0e166e
build: fix openapi spec path for docs & stats endpoints on dev (@NadAlaba) (#6343)
### Description

1. fix openapi specification path so that /docs endpoint would work on
dev.

> Error: ENOENT: no such file or directory, stat
'backend/src/static/api/public.html' Stack: Error: ENOENT: no such file
or directory

2. fix openapi specification path so that API Operation would work on
/stats endpoint on dev.

> Cannot read openApi specification from
backend/src/api/routes/../../static/api/openapi.json. Swagger stats will
not fully work.

![stats](https://github.com/user-attachments/assets/82f3e8b4-814c-4ede-ba67-8da53dacad87)

3. remove unneeded `files` & `ts-node` options from `tsconfig.json` in
various places.

> File 'backend/src/types/types.d.ts' not found.
  The file is in the program because:
    Part of 'files' list in tsconfig.json

4. add the missing `pnpm test` script to the funbox package.
2025-03-12 16:20:46 +01:00
Miodec
420d049a59 impr(server): better leaderboard request validation schema
stop mongo from trying to handle pointless queries

!nuf
2025-03-12 13:13:56 +01:00
Christian Fehmer
f80dde4c89
chore(self hosting): run selfhosted backend in prod mode (@fehmer) (#6326)
Co-authored-by: Miodec <jack@monkeytype.com>
2025-03-03 17:43:08 +01:00
Christian Fehmer
2b2d1a153e
build: use tsup instead of esbuild for packages (@fehmer) (#6309) 2025-03-03 13:48:50 +01:00
Christian Fehmer
8a41ccee97
fix: past leaderboard not fetching the users rank (@fehmer) (#6289)
Show the users ranking for the last day on the daily and for the last
week on the weekly leaderboard correctly.

- Fix request query schema for the [daily
rank](https://api.monkeytype.com/docs/internal#tag/leaderboards/operation/leaderboards.getDailyRank)
having pagination
- Fix request query schema for the [weekly
rank](https://api.monkeytype.com/docs/internal#tag/leaderboards/operation/leaderboards.getWeeklyXpRank)
missing the `weeksBefore` parameter
- Fix frontend to include the `daysBefore` or `weeksBefore` parameter on
`rank` calls

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2025-02-21 16:52:20 +01:00
Christian Fehmer
09eb1a2b0e
refactor: use validation on email update modal (@fehmer) (#6272) 2025-02-19 16:27:20 +01:00
Jack
01dee3fe15 feat: leaderboards remake, weekly xp leaderboards (@miodec) (#6250) 2025-02-12 16:34:03 +01:00
Christian Fehmer
e7685c5861
impr: add X-Compatibility-Check header to all responses (@fehmer) (#6262)
!nuf
2025-02-12 14:37:53 +01:00
Miodec
a0c471a28e chore: add captcha to the forgot password modal 2025-02-12 12:12:48 +01:00
dependabot[bot]
ae9c3ca003
chore(deps-dev): bump vitest from 2.0.5 to 2.1.9 (#6242)
Bumps
[vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)
from 2.0.5 to 2.1.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitest-dev/vitest/releases">vitest's
releases</a>.</em></p>
<blockquote>
<h2>v2.1.9</h2>
<p>This release includes security patches for:</p>
<ul>
<li><a
href="https://github.com/vitest-dev/vitest/security/advisories/GHSA-8gvc-j273-4wm5">Browser
mode serves arbitrary files | CVE-2025-24963</a></li>
<li><a
href="https://github.com/vitest-dev/vitest/security/advisories/GHSA-9crc-q9x8-hgqq">Remote
Code Execution when accessing a malicious website while Vitest API
server is listening | CVE-2025-24964</a></li>
</ul>
<h3>   🐞 Bug Fixes</h3>
<ul>
<li>backport <a
href="https://redirect.github.com/vitest-dev/vitest/issues/7317">vitest-dev/vitest#7317</a>
to v2 - by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/pull/7318">vitest-dev/vitest#7318</a></li>
<li>(backport <a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/7340">#7340</a>
to v2) restrict served files from <code>/__screenshot-error</code> - by
<a href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/pull/7343">vitest-dev/vitest#7343</a></li>
</ul>
<h5>    <a
href="https://github.com/vitest-dev/vitest/compare/v2.1.8...v2.1.9">View
changes on GitHub</a></h5>
<h2>v2.1.8</h2>
<h3>   🐞 Bug Fixes</h3>
<ul>
<li>Support Node 21  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> <a
href="https://github.com/vitest-dev/vitest/commit/92f7a2ad"><!-- raw
HTML omitted -->(92f7a)<!-- raw HTML omitted --></a></li>
</ul>
<h5>    <a
href="https://github.com/vitest-dev/vitest/compare/v2.1.7...v2.1.8">View
changes on GitHub</a></h5>
<h2>v2.1.7</h2>
<h3>   🐞 Bug Fixes</h3>
<ul>
<li>Revert support for Vite 6  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> <a
href="https://github.com/vitest-dev/vitest/commit/fbe5c39d"><!-- raw
HTML omitted -->(fbe5c)<!-- raw HTML omitted --></a>
<ul>
<li>This introduced some breaking changes (<a
href="https://redirect.github.com/vitest-dev/vitest/issues/6992">vitest-dev/vitest#6992</a>).
We will enable support for it later. In the meantime, you can still use
<code>pnpm.overrides</code> or yarn resolutions to override the
<code>vite</code> version in the <code>vitest</code> package - the APIs
are compatible.</li>
</ul>
</li>
</ul>
<h5>    <a
href="https://github.com/vitest-dev/vitest/compare/v2.1.6...v2.1.7">View
changes on GitHub</a></h5>
<h2>v2.1.6</h2>
<h2>🚀 Features</h2>
<ul>
<li>Support Vite 6</li>
</ul>
<h5>    <a
href="https://github.com/vitest-dev/vitest/compare/v2.1.5...v2.1.6">View
changes on GitHub</a></h5>
<h2>v2.1.5</h2>
<h3>   🐞 Bug Fixes</h3>
<ul>
<li><code>dangerouslyIgnoreUnhandledErrors</code> without base reporter
 -  by <a
href="https://github.com/AriPerkkio"><code>@​AriPerkkio</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/6808">vitest-dev/vitest#6808</a>
<a href="https://github.com/vitest-dev/vitest/commit/0bf0ab00"><!-- raw
HTML omitted -->(0bf0a)<!-- raw HTML omitted --></a></li>
<li>Capture <code>unhandledRejection</code> even when base reporter is
not used  -  by <a
href="https://github.com/AriPerkkio"><code>@​AriPerkkio</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/6812">vitest-dev/vitest#6812</a>
<a href="https://github.com/vitest-dev/vitest/commit/8878b04d"><!-- raw
HTML omitted -->(8878b)<!-- raw HTML omitted --></a></li>
<li>Don't change the working directory when loading workspace projects
 -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/6811">vitest-dev/vitest#6811</a>
<a href="https://github.com/vitest-dev/vitest/commit/f0aeaca8"><!-- raw
HTML omitted -->(f0aea)<!-- raw HTML omitted --></a></li>
<li>Remove <code>sequence.concurrent</code> from the
<code>RuntimeConfig</code> type  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/6880">vitest-dev/vitest#6880</a>
<a href="https://github.com/vitest-dev/vitest/commit/6af73d93"><!-- raw
HTML omitted -->(6af73)<!-- raw HTML omitted --></a></li>
<li>Stop the runner before restarting, restart on workspace config
change  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/6859">vitest-dev/vitest#6859</a>
<a href="https://github.com/vitest-dev/vitest/commit/b01df47d"><!-- raw
HTML omitted -->(b01df)<!-- raw HTML omitted --></a></li>
<li>Don't rerun on Esc or Ctrl-C during watch filter  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/6895">vitest-dev/vitest#6895</a>
<a href="https://github.com/vitest-dev/vitest/commit/98f76ea7"><!-- raw
HTML omitted -->(98f76)<!-- raw HTML omitted --></a></li>
<li>Print ssrTransform error  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/6885">vitest-dev/vitest#6885</a>
<a href="https://github.com/vitest-dev/vitest/commit/4c96cce7"><!-- raw
HTML omitted -->(4c96c)<!-- raw HTML omitted --></a></li>
<li>Throw an error and a warning if <code>.poll</code>,
<code>.element</code>, <code>.rejects</code>/<code>.resolves</code>, and
<code>locator.*</code> weren't awaited  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/6877">vitest-dev/vitest#6877</a>
<a href="https://github.com/vitest-dev/vitest/commit/93b67c24"><!-- raw
HTML omitted -->(93b67)<!-- raw HTML omitted --></a></li>
<li><strong>browser</strong>:
<ul>
<li>Don't process the default css styles  -  by <a
href="https://github.com/sheremet-va"><code>@​sheremet-va</code></a> in
<a
href="https://redirect.github.com/vitest-dev/vitest/issues/6861">vitest-dev/vitest#6861</a>
<a href="https://github.com/vitest-dev/vitest/commit/0d67f04b"><!-- raw
HTML omitted -->(0d67f)<!-- raw HTML omitted --></a></li>
<li>Support non US key input  -  by <a
href="https://github.com/hi-ogawa"><code>@​hi-ogawa</code></a> in <a
href="https://redirect.github.com/vitest-dev/vitest/issues/6873">vitest-dev/vitest#6873</a>
<a href="https://github.com/vitest-dev/vitest/commit/5969d8da"><!-- raw
HTML omitted -->(5969d)<!-- raw HTML omitted --></a></li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="c9e59a089d"><code>c9e59a0</code></a>
chore: release v2.1.9</li>
<li><a
href="e0fe1d81e2"><code>e0fe1d8</code></a>
fix: backport <a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/7317">#7317</a>
to v2 (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/7318">#7318</a>)</li>
<li><a
href="d69cc75698"><code>d69cc75</code></a>
bump: 2.1.8</li>
<li><a
href="92f7a2ad18"><code>92f7a2a</code></a>
fix: support Node 21</li>
<li><a
href="81ed45b3a4"><code>81ed45b</code></a>
chore: release v2.1.7</li>
<li><a
href="fbe5c39d88"><code>fbe5c39</code></a>
fix: revert support for Vite 6</li>
<li><a
href="b936702deb"><code>b936702</code></a>
bump: 2.1.6</li>
<li><a
href="32f23b98b4"><code>32f23b9</code></a>
chore: release v2.1.5</li>
<li><a
href="417bdb423d"><code>417bdb4</code></a>
fix(browser): init browsers eagerly when tests are running (<a
href="https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest/issues/6876">#6876</a>)</li>
<li><a
href="93b67c24b1"><code>93b67c2</code></a>
fix: throw an error and a warning if <code>.poll</code>,
<code>.element</code>, <code>.rejects</code>/`.resolv...</li>
<li>Additional commits viewable in <a
href="https://github.com/vitest-dev/vitest/commits/v2.1.9/packages/vitest">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=vitest&package-manager=npm_and_yarn&previous-version=2.0.5&new-version=2.1.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/monkeytypegame/monkeytype/network/alerts).

</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Christian Fehmer <cfe@sexy-developer.com>
2025-02-08 13:53:20 +01:00
Miodec
edd2903171 chore: bump eslint version 2025-01-21 11:50:09 +01:00
Miodec
c8fd68a601 refactor: config group definitions
- moved group definitionsg to the shared pacakge
 - made sure typescript will throw errors if a config is left without a group
 - removed the 'missing group' check because its not possible anymore
2025-01-15 00:04:22 +01:00
Miodec
c9789d6b1b feat: add tape margin 2025-01-06 18:02:52 +01:00
Manish Kumar
2431ae3afa
chore: fix typo (@m4dd0c) (#6121) 2024-12-22 00:38:18 +01:00
Tamion
dea95a243c
feat(input): add 'code unindent on backspace' for code languages (@notTamion) (#5991) 2024-11-15 13:31:54 +01:00
Miodec
5e35892e47 fix: unable to enable some layouts due to an incorrect schema
closes #5948
2024-10-16 14:46:54 +02:00
Christian Fehmer
31d1d51d6e
feat: validate username on name update (@fehmer) (#5961) 2024-10-15 14:53:39 +02:00
Jack
b6bd5ba2b4
refactor: remove global type namespaces (@miodec) (#5907)
Remove global types, move types to where they originate from, import
them when needed.
2024-09-23 15:34:16 +02:00
Jack
1509a675b8
refactor: move common util functions to a package (@miodec) (#5894)
Also moves esbuild to a package.
2024-09-20 11:54:14 +02:00
amarnathsama
8a6c81669e
feat(settings): allow partial presets (@amarnathsama, @miodec, @fehmer) (#5813) 2024-09-12 21:42:29 +02:00
Christian Fehmer
4f75a00cb3
impr: use ts-rest for webhook endpoints (@fehmer, @miodec) (#5871)
!nuf
2024-09-11 14:16:34 +02:00
Christian Fehmer
b315836dee
impr: move configuration checks to contracts (@fehmer) (#5851)
!nuf
2024-09-11 11:26:12 +02:00
Miodec
3478c21aa9 fix: lower accuracy requirement for accounts that have opted out of the leaderboards
actually closes #5858
2024-09-10 23:11:29 +02:00
Christian Fehmer
c7b3e2c916
impr: move permission checks to contracts (@fehmer, @miodec) (#5848)
!nuf
2024-09-10 11:35:57 +02:00
Christian Fehmer
b06b9f73e5
refactor: rework rate limiting (@fehmer) (#5845)
!nuf
2024-09-09 10:39:08 +02:00
Christian Fehmer
9c083f2397
fix: unable to update profile with missing values (@fehmer) (#5859) 2024-09-07 13:05:44 +02:00
Miodec
d5fb24fb12 fix(server): get personal bests request mode2 should be optional
!nuf
2024-09-06 15:10:45 +02:00
Christian Fehmer
259894ab9f
impr: use tsrest for user endpoints (@fehmer) (#5815)
!nuf
2024-09-05 17:28:19 +02:00
Christian Fehmer
1804ebcd8a
impr: use tsrest for quotes endpoints (@fehmer) (#5802)
!nuf
2024-08-29 15:42:42 +02:00
Christian Fehmer
65ef5eaba5
refactor: remove ResultOmittableDefaultPropertiesSchema (@fehmer) (#5827) 2024-08-27 13:14:57 +02:00
Christian Fehmer
30d440a70e
impr: use tsrest for dev endpoints (@fehmer) (#5800)
!nuf
2024-08-23 20:03:13 +02:00
Christian Fehmer
e2d574444a
impr: use tsrest for configurations endpoint (@fehmer) (#5796)
!nuf
2024-08-23 19:06:41 +02:00
Christian Fehmer
e03a25fb92
impr: use ts-rest for results endpoint (@fehmer) (#5758)
!nuf
2024-08-23 12:13:50 +02:00
dependabot[bot]
68efbcec21
chore(deps-dev): bump madge from 6.1.0 to 8.0.0 (@dependabot) (#5774)
Bumps [madge](https://github.com/pahen/madge) from 6.1.0 to 8.0.0.
- [Changelog](https://github.com/pahen/madge/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pahen/madge/compare/v6.1.0...v8.0.0)

---
updated-dependencies:
- dependency-name: madge
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jack <jack@monkeytype.com>
2024-08-14 12:21:24 +02:00
Jack
55e183e7bb
impr: add local storage with schema class to improve type safety (@miodec) (#5763)
!nuf
2024-08-12 17:04:01 +02:00
Christian Fehmer
c6e8f413fc
impr: use tsrest for leaderboard endpoints (@fehmer) (#5717)
!nuf
2024-08-12 14:08:17 +02:00
Miodec
295e47638e chore: rebuild all files instead of just what changed 2024-08-09 17:01:10 +02:00
Christian Fehmer
c50535cd0f
impr: use tsrest for public endpoints (@fehmer) (#5716)
!nuf
2024-08-09 12:39:27 +02:00
Christian Fehmer
45d27b5e00
chore: add test for recordClientVersion (@fehmer) (#5746) 2024-08-08 18:27:00 +02:00
Christian Fehmer
2d24fc323e
fix: remove tailing slashes from new endpoint urls (@fehmer) (#5745)
!nuf
2024-08-08 18:12:50 +02:00
Christian Fehmer
f6ec006507
impr: use tsrest for psa endpoints (@fehmer) (#5712)
!nuf
2024-08-08 15:10:26 +02:00
dependabot[bot]
dfdf3fc6cd
chore(deps-dev): bump typescript from 5.3.3 to 5.5.4 (@dependabot) (#5734) 2024-08-08 12:44:22 +02:00
Christian Fehmer
460f803bca
impr: use tsrest for admin endpoint (@fehmer) (#5713)
!nuf
2024-08-08 12:41:07 +02:00
dependabot[bot]
aac2ef1313
chore(deps-dev): bump rimraf from 5.0.9 to 6.0.1 (@dependabot) (#5731)
Bumps [rimraf](https://github.com/isaacs/rimraf) from 5.0.9 to 6.0.1.
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/rimraf/compare/v5.0.9...v6.0.1)

---
updated-dependencies:
- dependency-name: rimraf
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-06 12:11:05 +02:00
Nad Alaba
738574ed33
impr(pace caret): add tags pb mode (@NadAlaba) (#5715)
* impr(pace caret): add tags pb mode (@NadAlaba)

* update modes notice when clear tags from commandline

* remove all mode because it grabs only 1k results

* short circuit tag.active

* update setting name

---------

Co-authored-by: Miodec <jack@monkeytype.com>
2024-08-02 21:50:56 +02:00