7745 Commits

Author SHA1 Message Date
dependabot[bot]
dd945daa1a chore(ci): bump nixbuild/nix-quick-install-action from 26 to 34 (#3524) 2025-09-26 13:52:23 +02:00
dependabot[bot]
0fe38e206b chore(ci): bump github/codeql-action from 2 to 3 (#3523) 2025-09-26 13:52:14 +02:00
dependabot[bot]
373657339c chore(ci): bump actions/checkout from 4 to 5 (#3521) 2025-09-26 13:52:02 +02:00
dependabot[bot]
3833158107 chore(ci): bump peter-evans/create-pull-request from 6 to 7 (#3520) 2025-09-26 13:51:55 +02:00
David Barroso
4c93094e4d chore(ci): enable dependabot for github actions (#3519) 2025-09-26 13:35:03 +02:00
David Barroso
2ba53e4fef chore(ci): minor improvements (#3518) 2025-09-26 13:28:01 +02:00
David Barroso
23bd2f8d4f chore(storage): integrate storage code into nhost/nhost (#3515) 2025-09-26 12:46:35 +02:00
robertkasza
a14d1e4f22 chore(dashboard): fix defects in basetable form and add comment to columns (#3475) 2025-09-26 11:28:33 +02:00
David Barroso
7509bd8a96 Merge branch 'storage' 2025-09-26 09:31:47 +02:00
David Barroso
0c820d4173 feat(cli): import nhost/cli into ./cli/ (#3506)
Co-authored-by: nhost-build <98952681+nhost-build@users.noreply.github.com>
Co-authored-by: szilarddoro <szilarddoro@users.noreply.github.com>
Co-authored-by: nunopato <nunopato@users.noreply.github.com>
Co-authored-by: Nuno Pato <nunopato@gmail.com>
Co-authored-by: Szilárd Dóró <doroszilard@gmail.com>
Co-authored-by: Alex Duval <alexduval71@gmail.com>
Co-authored-by: dbarrosop <dbarrosop@users.noreply.github.com>
Co-authored-by: constance-seedstash <123984067+constance-seedstash@users.noreply.github.com>
Co-authored-by: onehassan <onehassan@users.noreply.github.com>
Co-authored-by: Ibrahim Ahmed <abeahmed2@gmail.com>
Co-authored-by: Nestor Manrique <nes.manrique@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Siddhant <94226898+S1D007@users.noreply.github.com>
Co-authored-by: dbm03 <dbm03@users.noreply.github.com>
Co-authored-by: Rene Cruces <52537668+renecruces@users.noreply.github.com>
Co-authored-by: David BM <correodelnino@gmail.com>
Co-authored-by: Nikhil Iyer <iyer.h.nikhil@gmail.com>
cli@1.32.0
2025-09-26 08:37:28 +02:00
David BM
72401ae1a7 chore(ci): add e2e remote schema name repository variable to CI workflow (#3502) 2025-09-25 19:36:16 +02:00
David Barroso
0b560dcb52 feat(storage): import nhost/hasura-storage into ./services/storage/ 2025-09-25 16:56:32 +02:00
David Barroso
51619dbf87 feat: generate server boilerplate from openapi schema (#245) 2025-09-25 16:33:50 +02:00
David Barroso
73b60a14e5 fix(ci): check for tag using the correct format (#3495)
### **PR Type**
Bug fix


___

### **Description**
- Declare `TAG_NAME` from make release-tag-name

- Use `TAG_NAME` in git tag existence check

- Update echo messages to reference correct tag


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Compute TAG_NAME"] --> B["Compute VERSION"]
  B --> C["Check if tag exists"]
  C -->|exists| D["Skip release preparation"]
  C -->|not exists| E["Proceed with release"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>ci_update_changelog.yaml</strong><dd><code>Use TAG_NAME
for tag existence check</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.github/workflows/ci_update_changelog.yaml

<ul><li>Declare <code>TAG_NAME</code> variable using make
release-tag-name<br> <li> Replace <code>${{ matrix.project }}</code>
with <code>TAG_NAME</code> in grep<br> <li> Update echo commands to
reference <code>TAG_NAME</code> correctly</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3495/files#diff-399add8ac39ae1cd7ae2f4f8ceb89290f6f43e25b7b2c499da61dd68a5cf2f16">+3/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-24 17:09:16 +02:00
David Barroso
f4ce851abe fix(ci): fixed ci_create_release.yaml (#3493)
### **PR Type**
Bug fix


___

### **Description**
- Add `cd $PROJECT` before make in CI workflow

- Ensure `make release-tag-name` runs in correct directory


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Extract VERSION"] --> B["Change to project directory"]
  B --> C["Run make release-tag-name"]
  C --> D["Set project_name output"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>ci_create_release.yaml</strong><dd><code>Change to
project directory before make</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.github/workflows/ci_create_release.yaml

<ul><li>Insert <code>cd $PROJECT</code> before <code>make
release-tag-name</code><br> <li> Ensure <code>make</code> runs in the
repository subdirectory</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3493/files#diff-9f32bd5671fcb04c5f1b35ea33677c4704302536e0c4ff9e06b514dc9b3d4f0c">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-24 16:55:35 +02:00
github-actions[bot]
cc88dbc4bd release(packages/nhost-js): nhost/nhost-js (#3491)
Automated release preparation for packages/nhost-js version
nhost/nhost-js

Changes:
- Updated CHANGELOG.md

Co-authored-by: dbarrosop <dbarrosop@users.noreply.github.com>
@nhost/nhost-js@4.0.1
2025-09-24 15:47:51 +02:00
David Barroso
a6a5ecdad9 chore(docs): update README (#3492)
### **PR Type**
Documentation


___

### **Description**
- Update root README code examples

- Switch to `createClient` API and adjust auth methods

- Change GraphQL request syntax to object form

- Simplify install commands in package README


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>README.md</strong><dd><code>Revise root README examples
and links</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

README.md

<ul><li>Changed code block language to TypeScript<br> <li> Replaced
<code>NhostClient</code> with <code>createClient</code> import<br> <li>
Updated auth and GraphQL usage methods<br> <li> Updated JS/TS client
link and removed integrations section</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3492/files#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5">+21/-25</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>README.md</strong><dd><code>Simplify installation
commands</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

packages/nhost-js/README.md

- Removed `@beta` tag from npm/yarn/pnpm install commands


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3492/files#diff-32a1491b95260b677b05569fe11db6fe14aa7b380c7ef6422041949311f103a2">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-24 15:42:41 +02:00
David Barroso
069896c2d9 feat(ci): finalize release workflow for the dashboard (#3487)
### **PR Type**
Enhancement


___

### **Description**
- Refactor CI release job to dedicated dashboard workflow

- Add dashboard_release workflow orchestrating release steps
  - deploy-vercel, build_artifacts, push-docker, bump-cli

- Introduce reusable Docker push workflow with manifest support


___

### Diagram Walkthrough


```mermaid
flowchart LR
  CIREL["ci_release: dashboard job"] --> DASHREL["dashboard_release workflow"]
  DASHREL --> DV["deploy-vercel"]
  DASHREL --> BA["build_artifacts"]
  BA --> PD["push-docker"]
  PD --> BC["bump-cli"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>ci_release.yaml</strong><dd><code>Use dedicated
dashboard_release workflow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>

.github/workflows/ci_release.yaml

<ul><li>swapped wf_deploy_vercel usage for dashboard_release<br> <li>
replaced ENVIRONMENT input with VERSION<br> <li> added GH_PAT secret to
dashboard job</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3487/files#diff-456777492a189272b53f8abd0ea4e8c333b25cf1673b8b109c0a1834d874bdb5">+3/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>dashboard_release.yaml</strong><dd><code>Add
dashboard_release workflow file</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.github/workflows/dashboard_release.yaml

<ul><li>define workflow_call inputs and required secrets<br> <li>
orchestrate deploy-vercel, build_artifacts, push-docker, bump-cli<br>
<li> create CLI bump pull request via GH PAT</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3487/files#diff-f33ddb04ba86d7edd932817968a516bcff40c33dab67da25fc786a98ac0ee91e">+105/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>wf_docker_push_image.yaml</strong><dd><code>Add
reusable Docker push workflow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

.github/workflows/wf_docker_push_image.yaml

<ul><li>define Docker push reusable workflow inputs and secrets<br> <li>
checkout code, download artifacts, compute version<br> <li> push
multi-arch images and manifest to Docker registry</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3487/files#diff-a0b87bcebe9e143aeb58a882e2bcf531709c6950d6845ababf624eb125eed691">+79/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
@nhost/nhost-js@4.0.0 @nhost/dashboard@2.37.1
2025-09-24 14:50:55 +02:00
David Barroso
754541a24b chore(ci): release dashboard workflow (#3486)
### **PR Type**
Other


___

### **Description**
- Reset dashboard package version to dev


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>package.json</strong><dd><code>Reset dashboard package
version</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

dashboard/package.json

- Bump version from 2.37.0 to 0.0.0-dev


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3486/files#diff-2d8d55c799cd71f1b35e831f075f8178ed1734c4820a2ad548b4dd24d6938d7c">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-24 14:50:55 +02:00
David Barroso
e7978b0346 feat(ci): work on changelog and release process (#3485)
### **PR Type**
Enhancement


___

### **Description**
- Add CI release workflows
  - create, update, publish workflows

- Integrate git-cliff changelog automation

- Introduce PR template guidelines

- Remove outdated config files


___

### Diagram Walkthrough


```mermaid
flowchart LR
  PushMain["Push to main"] --> UpdateChangelog["ci_update_changelog"]
  UpdateChangelog --> ReleasePR["Release pull request"]
  ReleasePR --> CreateRelease["ci_create_release"]
  CreateRelease --> GitHubRelease["GitHub Release created"]
  GitHubRelease --> Deploy["ci_release deployment"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Configuration
changes</strong></td><td><details><summary>6 files</summary><table>
<tr>
<td><strong>CODEOWNERS</strong><dd><code>Remove outdated CODEOWNERS
configurations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-3d36a1bf06148bc6ba1ce2ed3d19de32ea708d955fed212c0d27c536f0bd4da7">+0/-14</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>action.yaml</strong><dd><code>Remove dependency install
composite action</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-342d59190b4737ee45e2062eb625ada477bcea5b4a843b25900ad55d7982f200">+0/-59</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ci_create_release.yaml</strong><dd><code>Create release
workflow on PR merge</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-9f32bd5671fcb04c5f1b35ea33677c4704302536e0c4ff9e06b514dc9b3d4f0c">+90/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ci_release.yaml</strong><dd><code>Add post-release
deployment workflow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-456777492a189272b53f8abd0ea4e8c333b25cf1673b8b109c0a1834d874bdb5">+64/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ci_update_changelog.yaml</strong><dd><code>Add changelog
update workflow on push</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-399add8ac39ae1cd7ae2f4f8ceb89290f6f43e25b7b2c499da61dd68a5cf2f16">+90/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>cliff.toml</strong><dd><code>Add git-cliff
configuration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-e1372c8b03c40942b5d828a90975054cb8aaed3b38189f434396f922ec41a584">+90/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>PULL_REQUEST_TEMPLATE.md</strong><dd><code>Add pull request
template guidelines</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-18813c86948efc57e661623d7ba48ff94325c9b5421ec9177f724922dd553a35">+39/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Build
config</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>general.makefile</strong><dd><code>Include release makefile
integration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-c9e82023881afc6d45e6190871a40f2d137adb43e368fc461560c74a50c15a5d">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>release.makefile</strong><dd><code>Add git-cliff changelog
targets</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-119f857b7a496c134136ef627cb83ba58b87363125b483fe25524ab66820dcd2">+25/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>3 files</summary><table>
<tr>
  <td><strong>dashboard_changelog.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-f500aa853d257ead7ba7e28d92191a2d18ab32a43c6e121d1e64454513a9de14">+0/-39</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>nhost-js_changelog.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-f89bdd0c84297962882877ff469844b0541e95cb6437c9247722704af02ca426">+0/-32</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>wf_check_changelog.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3485/files#diff-099ad6009f7d08d3b6534abe4abf8c8a75f6c3761d4117751fc35093affd7456">+0/-64</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-24 14:50:55 +02:00
David Barroso
894cd29d6b chore (docs): address feedback and change reactnative tutorial to use blank template (#3481) 2025-09-24 14:50:55 +02:00
David Barroso
d570084d24 chore (docs): udpate graphql documentation to include example with variables (#3478)
### **PR Type**
Tests, Documentation


___

### **Description**
- Add GraphQL request test with variables support

- Update qql test to include variables option

- Extend SDK docstrings with variables usage section

- Enhance documentation with variables example


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>docstrings.test.ts</strong><dd><code>Enhance tests with
variables usage</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

packages/nhost-js/src/graphql/__tests__/docstrings.test.ts

<ul><li>Added new "request with variables" test case<br> <li> Modified
qql test to pass variables in request<br> <li> Removed obsolete
commented test data</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3478/files#diff-c7b7dab18f108770bcff06dc83cc9a34a5ee72c5021a035129a264a968f7d5ff">+58/-39</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>index.ts</strong><dd><code>Document variables in
GraphQL client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

packages/nhost-js/src/graphql/index.ts

<ul><li>Inserted "Using Variables" section in SDK docstrings<br> <li>
Added includeCode references for variables examples<br> <li> Adjusted
snippet ranges for variable usage</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3478/files#diff-6124d7be08592679e7ba8ae19ab28f3fca0d9a8fcd04c62f130eb8038eeb29e4">+11/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>graphql.mdx</strong><dd><code>Add variables example to
user docs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

docs/reference/javascript/nhost-js/graphql.mdx

<ul><li>Added "Using Variables" section with code example<br> <li>
Demonstrated passing variables to GraphQL requests<br> <li> Updated qql
example to show variable usage</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3478/files#diff-be11be6441756582b629e0f4f6acef5c1bb59d749c3fa3202043f7cf345696a2">+66/-3</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-24 14:50:55 +02:00
David Barroso
8c71dd9db9 feat (docs): add tutorials for supported frameworks (#3469)
### **PR Type**
Enhancement


___

### **Description**
- Add cross-framework Todos CRUD examples

- Introduce file upload/download tutorials

- Provide unified AuthProvider context implementations

- Include email templates and backend actions


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>19
files</summary><table>
<tr>
<td><strong>Todos.tsx</strong><dd><code>Add web demo Todos CRUD
page</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-53f3b3d582fef21d5ec90cb590b73afcf09407071dba60883ed1ed7360955fc5">+648/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>todos.tsx</strong><dd><code>Add React Native tutorial
Todos</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-3f6be5ef4f443091687addd404fe71f219498b9db7dea992d18d78b4f1b6ffa3">+561/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>commonStyles.ts</strong><dd><code>Add common React Native
tutorial styles</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-bf0de16179ecc80a8e88e223c890dc2c73c30b4a9b7cadd62e910ca015ce342b">+667/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Todos.tsx</strong><dd><code>Add React tutorial Todos
page</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-be700e4847b0a745821f156c381e583097f2083123065a45a20611c2ba1876a7">+504/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>files.tsx</strong><dd><code>Add React Native tutorial file
upload</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-d116805053a943f271a3297d06d14dba39c0f5775080e67e1e9e2778c176e9da">+454/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Files.tsx</strong><dd><code>Add React tutorial Files
page</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-cdbca4ed68690df84463df7765dff52c85a60502f175c19519c8b42474e9282c">+404/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>signup.tsx</strong><dd><code>Enhance signup flow with email
verification</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-262b09b9dd7234cad96fe092d7131a23451c9e50b98c126c9e36599b3a127ac6">+185/-141</a></td>

</tr>

<tr>
<td><strong>FilesClient.tsx</strong><dd><code>Add Next.js Files client
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-ea74386f232b9ae7e7957ab4eb1f0d1d6076b338173e8b1e917369fb7f1b39bb">+359/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>TodosClient.tsx</strong><dd><code>Add Next.js Todos client
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-96efb4db6bd61a7faee3c383e77b092eccee1a1876770c36691e7356268cfad4">+368/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AuthProvider.tsx</strong><dd><code>Implement React
AuthProvider context</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-4cc7e41420d71d448eeec4f77043e0c5bff2c606986439454dade5ffcd433e33">+174/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AuthProvider.tsx</strong><dd><code>Implement RN AuthProvider
context</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-93f9f27a35d0039a64cd6889a296d04d37542aa5a777925e61e8e60ee5a6d744">+148/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>actions.ts</strong><dd><code>Add Next.js server actions for
Todos</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-76d57097940d3043c8e0ab29761767861b78fe86ab8a90a2d8209f1818131d31">+223/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>signup.tsx</strong><dd><code>Add RN signup tutorial
screen</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-153c2f0bf6b3744bb84b95e356dd78c8771206a1b22218bc4c6f90641e4143ad">+183/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>explore.tsx</strong><dd><code>Add RN tutorial Explore
screen</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-980313b6c7f75f2ecd45fc476895bea122364d000f5988e21564bf5db73d7f57">+125/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>route.ts</strong><dd><code>Add Next.js file download
route</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-5c39cd02d478ad625a7cdb6df3f7b6d20a76f40488636fdd87282c66174b2bd8">+57/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>SignUp.tsx</strong><dd><code>Enhance demo signup with
verification state</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-75657efa0e1c29f59692ced3cd90e9c734836977900dc64015dd5d217bb263da">+38/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>SignUpForm.tsx</strong><dd><code>Add Next.js signup client
form</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-9034cd412c47033a01e604a8250984aa1d1ecefc9884b79ebd7f7f3af17e3167">+89/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>SignInForm.tsx</strong><dd><code>Add Next.js signin client
form</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-c276aadee4507d515832909164d447c3c1a4870277d0adbd1f7e836f7c66259e">+75/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>server.tsx</strong><dd><code>Add server Nhost client for
Next.js</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-9d650defc223584e4aa06ddbf1d9a97c47a5a7ec4c9589a72ac7ea5369853400">+89/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>_layout.tsx</strong><dd><code>Configure RN tutorial tab
navigation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-c3b0bac088aef9f1a2d5cd2f4b51dd19fb301034668a062860a1e6a3512c15c9">+39/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>101 files</summary><table>
<tr>
  <td><strong>examples_tutorials_checks.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-745712dc409289d30fe4caa74de567df9cc9fac97750ae5566f93a51e48bf539">+94/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>docs.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-873ce17c654718debe2fe308a2f2279bde8663686423c51f97fab2dd0722b8d9">+52/-7</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>overview.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-8c9b35da559a5de5fe14ee078573e8d487453e26ed760c03ffd7f0ad476ca24d">+5/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>nextjs.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-a5210d45e7d33a57d43078dbe2a2ccbf0667b157291fd92c3986092d7d33ab9c">+0/-508</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>1-introduction.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-35413705a524a3eb2c7d096daef02d660b479fbc288674aa260e3f159988652b">+116/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>2-protected-routes.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-d901b3a6d8a96e3070f27afb934c34365aa79aeee1505238de2cb77a9ffd8546">+1364/-0</a></td>

</tr>

<tr>
  <td><strong>3-user-authentication.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-7b96576ad1b1b6b8e50dd3889e24df391662df1b7b51a111f0239f655135939f">+804/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>4-graphql-operations.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-16906637a292d22c018167d45f2da67a17fe73155ca161de91c3b329fee9d399">+958/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>5-file-uploads.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-d6153781dbf251499f2ffeeb707102349776d788859c2da0f63c8b0a8e35c821">+822/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>react.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-6f5adda9f7b29d98c68cab6ec754c0bac501666a49dd635ee830789e2c812b68">+0/-497</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>1-introduction.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-4dac916b2b27af668674965d9680f4ba8d2a417f7b155d4b052b1043fc71beb6">+116/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>2-protected-routes.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-8ab0206ae4a4c73e540cf549fdbdd9de4ed7c8d59cc88ea26a4a7ddc0a9a4460">+1435/-0</a></td>

</tr>

<tr>
  <td><strong>3-user-authentication.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-e02466ba1abd5d457724c7508da083a94b16d700cab36384567592c7d772cbf6">+647/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>4-graphql-operations.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-ae759670f7bf513c66bc08952556514e7193f23eb7cc536aebf38ad79e12c02f">+856/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>5-file-uploads.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-02dc5fa1da67b0478bb797ed99c89685be3ec4509023441fb29b730ba74fff4e">+715/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>reactnative.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-a85b3aa1caaeaa0a2cb6219ca531f89aaf2b23b41cd424c189b3cb948af1fd57">+0/-443</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>1-introduction.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-573f696fb008f0e047e97209a1595b1f5c69dd5a1fe4907b65d6883273c53096">+121/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>2-protected-routes.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-b4ab0ba037b62e9eb5ee10cf5f56fd1c148f1e053f95291e42113d9f924ae711">+1499/-0</a></td>

</tr>

<tr>
  <td><strong>3-user-authentication.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-dda89bc27be58e7fa58aef9aeb937dce455f69d9566e734a10ef4e0df993ab42">+805/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>4-graphql-operations.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-59a46fa74310dc797cdfd6e1a34d09fd8002e9accdade9d865b898419addc2bc">+881/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>5-file-uploads.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-cb48bca7fdd422250b2482167b9a136d76ab60d2d5efccb94fb1a022b814d449">+776/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>6-sign-in-with-apple.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-a4da2a574e88122505df17fcf1f9705841a8240b33f60b6fcde86e068b8b6cfe">+684/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>1-introduction.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-1eb8289a9ffc0484d2f8f21ede882c9e892d169f36b69f2ed9af940e2d1b8faa">+116/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>2-protected-routes.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-bff6efc64eeda0dae0d2a133ab6c9be9dfe725ee24b364b89060ec93344ad436">+1308/-0</a></td>

</tr>

<tr>
  <td><strong>3-user-authentication.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-f6bac1bb9476f921272f61911c703529663fb6ff37217c38d1702a1c8b70171a">+578/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>4-graphql-operations.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-3a43d1ebc0b4fd7f74699c4f33ea110bba5ffa2695e6228dccafbfa38798c633">+763/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>5-file-uploads.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-2244e838acdbe909772f82f66cc63800aa9dbf5fae292a40d2d4f663d6618dd4">+642/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>sveltekit.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-9ed4ad735d1142a65a2da2dbbd8d46c508b7aef3d032cdb102d0f329602c4ce1">+0/-497</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>vue.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-f6c4215fa6909fd3accebe0691a7364d17befb8ef90da5a4aeaee83d598c0540">+0/-504</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>1-introduction.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-9485f8a6ad6398b19aa7a3739af3eef5158a7d285dc5a55e8bc6c1d58970fb84">+116/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>2-protected-routes.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-5ba36ef4388ad18b7efc6d405e2b66a69b063d483d4521d6acb5b5da65aee97a">+1368/-0</a></td>

</tr>

<tr>
  <td><strong>3-user-authentication.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-63f56a07c48f78462b47f74420e58cb8411d46aef880cfdf24b11ddea4bb382e">+637/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>4-graphql-operations.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-ad7a84d0c924b946d992f5277cde596fb9d42eff021b888b5a8046822afabca8">+828/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>5-file-uploads.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-00c26651dea4650fd77222a24b31387569067783a87d9c6715935e2bf133428e">+720/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>auth_user_security_keys.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-385036f3c18b6efd97138842e95f992a0569f612f627e71091c10952d8d31609">+2/-11</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>auth_users.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-aba47a0c058f0a0a8122dee4d7b4394c4a8997bac9d4ccea04c41f0d00819050">+0/-24</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>storage_files.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-ea0619f75a1f7dd13ca80d81cc2e28529594a73fff0356dc0b1d49ee0d1cc9ad">+17/-36</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>tables.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-a57c35142b6c4029fad7d5c8407305a61d18078cd0e264d41286625cf5cc4d30">+1/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>down.sql</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-d7be59389936d96f1c3b10f2147b177d488906d2155139536fae635201859c3e">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>up.sql</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-69c6c175ba9819f7b41d6a27e78fd0390e222665c9cc95fbb7fde702f14a1f4c">+26/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>nhost.toml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-45587ca86b6441ceacd1318e72a60ee0c30c70c00edb0a06cf061e404998f3bc">+4/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>actions.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-a0279ec5849eb0c93ec7c2f444fbecd2b681f47d954a84da5221f72d9805c2ca">+12/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>page.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-8fffbc65277c93c49eea289ae1174cdba0632e5a295b74668437e9b1b0669097">+61/-30</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>middleware.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-817666e0f29fa78d2d7f77ed93cff4efbc8d85a996ab58d0dd13ad61e47c9125">+5/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>App.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-849f3aa52970f348de49a27094aac4e4b8cb8cf29580cada70d37f1a04249725">+2/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>Navigation.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-9845c755953914963f404a14104d93cd326f78e48614ece8c4d9df3ab1600ffd">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>index.css</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-8e415aa656412ff29b45f56035e84691f3abcc924bfb5b4e3cd0c9ba5237543b">+200/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>+page.svelte</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-00da2a0f738ffa5c66a07437c7e85cacb7780551bad7e81899d905f065bf0892">+29/-8</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>main.css</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-1d2ba653024753e96f2db949f818dccba45498456146171c4a2f883b58177d2f">+373/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Navigation.vue</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-27e2f662a54c47023a1342005bcf92602a846ad7a59e9d7d528aa8fbf40a0250">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>index.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-3bf427bc13a501168d321cf4bd428d09d8c3a042ef3be955c7a2e99bbf5f39dd">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>SignUp.vue</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-1838012876d16508d53d0345615b91c7c6fbccca3c9333d2311ac5fcd7b4c210">+28/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>Todos.vue</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-3334950776983589e7061d69be930b71663329a6ba56726bcbd3f1c2352dab47">+466/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>Makefile</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-85a3083c78e211e9eb36d741342bcbc85a1a0c375060f45c5426b560196de27f">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>.secrets.example</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-be7a988f18be877344f8584befc094ec2e66fe7784a2007300053707ad8ec7f1">+16/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>Makefile</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-36623bab6fe16382fd3e61b06b9586f2b14bea7c1b492e50db14ea98935016a4">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-ed02e93d01774c3796335c83badc90cbc8a2035040965031946b69c8d91db3dd">+29/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>env-up.sh</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-b6846a8b7ff5eea35ba5ff2aac8773f526c118ef59712a750f69578f25afda54">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>package.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-f0d63d57cf77fdb7f2526d10c2d32d51ed2b6d43e3495d3f8879499e0c04f04b">+13/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>tsconfig.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-cad0e83f030efa9fcad494c7797838c5099909f2c2ae0de0210812b966ffa6db">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>config.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-997042f08b088725275a28a7e2d275b86e2e74f3c972800e8116785d5d0fea59">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-3c921023f82fc74f5b657cb92bc8906ea19d7eb8f746713e4fae2a5a894a8a59">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-5f67fb54ebc23bfccd1e23fbb7dc955bad8ad9011fae19369c87bf3f4d3e58fa">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-3c21997bc2db49d5714afc007f214316d17eb69d8ea70dd1cfe558bdb47df4bf">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-e3ab8737d4a9ea68a115f28ce578b7502107f68212d92f035bb86178ccdfb6fe">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-ed34cbd1c3e612ac3124ccce382b84ea7cda7eb22051b07102b68f5c28c58e97">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-b8cead9967aaddc7c52be376fcd54b27c6ec223445e0063729c7255ab6c4f5fc">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-295cddc1774338f5b6ba396ef5ca9a0832b9b2346703ec22abf3b3874f903cc2">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-de3e6c264684c0dddb2f6e70dcb236fe8cb1a27789c01a11b2a707c110ce7fc2">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-ae93f5f97d52d1d42be91b50e2a44522aef884065559f993f781f1ebeaa89b66">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-13511e1d49a2796e2ee0bb2082f02ed59c49bef7f7533735e60ac62ad16cc2c6">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-293b460447946e2de5e4ba74cf64895a4f6fff7d879bb2e555c46ad7edd857a8">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-843300abe10319ac2b6ccffdd8daf3445b8eaa839486acb95566d398cad4e053">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-8ff22c43814b945c0a22ea9089755a144e54039bdd12a2f06a128b4b155b3e38">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-f9e07ca4b5b9ae54e1668c3dfb8ac32612df366eb7d44819163f17c792507295">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-4f829f73c5bce9bcbb67ed1357a111cdf9974c36d2db22493067d201b35f4cdf">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-64f6273ffcec137bbad9a104cd46e6a8776915a804bb3f89c24701071cbb2c50">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-e19bb81615465996e46da50eacac7fddf71dd8bb18200c410b1837575bd76f95">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-a202edc97b202ec41b83decb7b358a6beb89f3edef46194b576ecaada51f073d">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-c2338d16f093d53b8a86b9a859c7bef0d9ef2c83a762d46cd49ab9e2f1f2a773">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-7fff5a89330dd91d3c9781e37d8f1e1f48bfc58c686b463b7fb1f43a2d01813d">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-c9031a1f7ac5ad3d0c3c94cff2f563560c1e3c05d1acc00353e603f3dcac439e">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-847d33f3faf4a7f928445eb389ba8aa24901b9025d4bae0c38becd5e9365a881">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-3f5c827ff0c5a3270dc4c7737b0afd09327800104cb379ed2a556029eb58aef3">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-e499fcf53b46507a64be23ae309eba07e2c3ee289be4de316bd8ee83c16ea42e">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-5a6337adab234155f13e6b7d63eac5c654d5c75f4ea207c9db16b67685ce3e43">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-b8f9c01ea13429ca9990a95e81ac6bedb273ec41198f34903584e9a68c22c6ef">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-5bfe4c29aee11546871f9127b5c5a954f313c64d2344cd4e6cd402fe22cf0ded">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-262bf98a3f4801aff364e19a4c00bf37197764454b274faf1dbd947506b843a7">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-8a4ad52e5c3cd679ede51f7d411ca5aaf89f2f519f49c540e09408bf13823323">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-46f8a60e052ff7b9b3d8583f83f36b826aea9c7a24af9e9998cc0b699900b3b1">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-03da104febe035cf096fccbce0dbbf32197d289de814810792a319154241200c">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-d7fff652e5e21d234b1ab733de23d179d5901ff82165ffbd9495b3a1ab1c7611">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-a84317c8ffe3b56140c923228666555d0e9e93c34eb5a8376b08ab97e6e4ae96">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-5025ef2a43d19c4f668177eea4e8002664a22522e11fef04aabbcdb2fbff3178">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-e941c399a4d0b15de5bf2b20e722c2e6ffc990ecdef15efc2367ae302a52ff63">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-126da45f26e2d9256a28fadd38f363277926de563e6b303027cbea24779c729c">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-4686c2e7f183e071c8ccd456189d9bd056ead4874078dba16b1a2b1e53c7e9e4">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-331385785301bc1e55cfb6a3c707e3704b32d82a38f7ccd9aa4aa834a8569df4">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-57d1b1020e0d2e327acca4154b0e4776f3a7a5db1d6c99edae3ee45561780c6a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>Additional files not shown</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3469/files#diff-2f328e4cd8dbe3ad193e49d92bcf045f47a6b72b1e9487d366f6b8288589b4ca"></a></td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-24 14:50:55 +02:00
David Barroso
c6006fec30 fix (docs): update quickstarts (#3463) 2025-09-24 14:50:55 +02:00
David Barroso
69c2954658 chore (packages/nhost-js): migrate from eslint/prettier to biome (#3462)
### **PR Type**
Other


___

### **Description**
- Migrate code formatting to Biome

- Standardize quotes and add semicolons

- Update import statements and paths

- Revise package scripts for Biome


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Formatting</strong></td><td><details><summary>20
files</summary><table>
<tr>
<td><strong>client.ts</strong><dd><code>Convert quotes and add
semicolons in auth client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-4ef372e972ad443bba16fd25b9b721088c801a0d75db8102062ccbc00838a2f8">+1038/-873</a></td>

</tr>

<tr>
<td><strong>client.ts</strong><dd><code>Standardize quotes and
semicolons in storage client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-4385e1bb86a6ee228b61e620357d826371939ae8cbe6ef674dcef108e2bf5ab1">+341/-279</a></td>

</tr>

<tr>
<td><strong>storage.test.ts</strong><dd><code>Update test imports and
formatting in storage tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-19d55fc74c55988fede4d554a6bc5e052987219d1d5bdadd30ef52d55d1e9d78">+188/-186</a></td>

</tr>

<tr>
<td><strong>docstrings.test.ts</strong><dd><code>Normalize quotes and
semicolons in GraphQL doc test</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-c7b7dab18f108770bcff06dc83cc9a34a5ee72c5021a035129a264a968f7d5ff">+141/-136</a></td>

</tr>

<tr>
<td><strong>functions.test.ts</strong><dd><code>Format imports and
strings in functions tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-513ce67d4002bcaa8dc01d8133ffb3a0c39c430604ba3c2d17ec6c0f7ad6f1a9">+132/-128</a></td>

</tr>

<tr>
<td><strong>graphql.test.ts</strong><dd><code>Update test formatting and
import styles in GraphQL tests</code></dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-488fd58d97b84872c4b9d160ddd54d17f198d7dfe2e3508c84491bb7b2509e1e">+124/-109</a></td>

</tr>

<tr>
<td><strong>nhost.ts</strong><dd><code>Add semicolons and unify import
quoting in main client</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-68e0323ab180717ff0de35463496ca8eb3b8fc561462459f3c9cf178aa5754d6">+129/-68</a></td>

</tr>

<tr>
<td><strong>enhancedFetch.test.ts</strong><dd><code>Standardize quotes
in enhanced fetch tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-c5e61a5e461b17c08bae579aca5ef65e6b2b333df8c770b4f380f98f24c04e8a">+139/-122</a></td>

</tr>

<tr>
<td><strong>client.ts</strong><dd><code>Normalize import quotes and
semicolons in GraphQL client</code>&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-cbd71dd3404704ff9d9c84273572fcac6f041532eef597de8a714249c08559c4">+67/-60</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>storageBackend.ts</strong><dd><code>Add semicolons and unify
quotes in storage backend</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-22fd8793eafef0c5b0291339777a93768f83609d3b66aa56c7330d7b72b72739">+45/-41</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>refreshSession.ts</strong><dd><code>Format and semicolonize
refresh session code</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-578cd1f069f1742b4a1aeabaaed852562659c6a830a4b51df0c26d52af478051">+65/-55</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>nhost.test.ts</strong><dd><code>Update test quote style and
semicolons in nhost tests</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-7daa50f1e08361183e9b830443d3e5837f3f8ff111da0457d9940063c084c2a8">+34/-30</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>client.ts</strong><dd><code>Unify quotes and semicolons in
functions client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-6c8d0225c010836d4a88cf726a477821cc64d33c167654bde18178350b4d20f5">+47/-36</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>fetch.ts</strong><dd><code>Standardize formatting in fetch
handler</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-d340c8b819b3e37cf227af2925bfb0ab406d8a9cba5822cbb1ed11a895ec90cc">+45/-37</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>docstrings.test.ts</strong><dd><code>Normalize quotes in
functions docstring tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-0846336621cc9854b0e8171e12133b336a72563488d217eecfa475752c2998db">+62/-62</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>docstrings.test.ts</strong><dd><code>Update docstring test
formatting in storage</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-fb587c97d4651f053ae6d4a33dc468aa4d24c38e98fef3225bb68561ba7fd6a4">+52/-50</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>session.ts</strong><dd><code>Add semicolons and double
quotes in session decode</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-2292867bf3b27d5d5887a247376b111c659a797dc92df9365d7e6b0bc64a5868">+37/-35</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>docstrings.test.ts</strong><dd><code>Format main docstring
example code</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-b97eb064c8d8cbd8197f40f06117348a994b0f6d42a73d2e0a47cbb226cb4b08">+35/-35</a>&nbsp;
</td>

</tr>

<tr>

<td><strong>middlewareUpdateSessionFromResponse.ts</strong><dd><code>Unify
quotes in session response middleware</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-a2c5449dd97df2d425297ec7f3b7628f405e3955cf46a9935afd8d1fe0ecdf7d">+37/-27</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>methods_ref.yaml.ts</strong><dd><code>Adjust
template-generated URL string formatting</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-f5d4c1cc3e0ab95288bfe009f15ca77360a98665cc621b7d299e8316c9e56001">+19/-17</a>&nbsp;
</td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>39 files</summary><table>
<tr>
  <td><strong>project.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-e456dcfd6231480081b3c9a2a95204bd061853442d5e3a38330625d01cb1a6a1">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>project.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-8c4658c93f89aa3cbc7671465147938c58e14e66e3b95309b9fc4a11969a7fe4">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>fetch.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-fd8af47714fe1176997bd7e7ec7ccd42d1f57f566ae2c40dec13dd0dff098a97">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>functions.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-d0df96f3f2c99485d0a0a31007f8378177bd8f000f6dc1468c6a03a4c2750126">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>graphql.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-be11be6441756582b629e0f4f6acef5c1bb59d749c3fa3202043f7cf345696a2">+43/-38</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>storage.mdx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-58f444ba0dbbb972fc20b6aeed7ae8a4bbf57776e2cd7f498b3f3c37095dd7a6">+26/-28</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>project.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-f6086e59795d16f4c73cb0e5f90b986e288deb5f176c80c5c035f1703ff86760">+0/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>crash.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-38c3348a81607f21101d8ecfc1cbaee87f9716a2e54c9be5fa301057f40bb03a">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>echo.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-70d2dbad876749b22eaa28784c7796bea615e8a4e17810bf36da113dccab1a03">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>helloworld.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-b37568d59ded3a9cabaa4d97c80e5dd1dcc2716903d9e10171cc7ec4f3fb0592">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-db5537429694d86082c34ac97881b7811aa1c79ee496dd79c248494698ba3b83">+0/-23</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>email-confirm-change.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-0bf93b57a4a18ccfa08b72816a7eea2c14c00ce92d9a07249405805500c8bb45">+0/-129</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>email-verify.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-67bf177366a960b6f068b1c8802f5c200b6ce6069f8d5e61c632aa4191b8adca">+0/-127</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>password-reset.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-6e2461fe97310e38e2e4eed0e20570c5a51636989b95c646661f7bc04b37dd5d">+0/-127</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>render-emails.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-2bc9d596f730e2c72f02a1f57d6636136f898d81396493d1fcb803cae3f7351e">+0/-82</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>signin-otp.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-d42e2ed4843fe0bf2888e9f7cba159cd0513045f822647b39573dc100b185301">+0/-124</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>signin-passwordless.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-a439b87562c1d2d60473ace46aa30e976b5b54c3c86fa6c9c1fd0b87c65149e7">+0/-127</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>eslint.config.mjs</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-90fda00235d0809b221cb70446782f42cf392bba35ae6d3a4582a255e44161fd">+0/-26</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>jest.config.js</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-f833c7bf2eb86f6c2a0ddb4e7f4e093dfbdafa1337e7f3fcbdc4865c1b87d97d">+13/-13</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>package.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-a56af396cb39f7430957ad27d498ce3721935f5ed054cc8f15ffa864dc705618">+3/-10</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>project.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-8aa0f2b40e1054e08a33a0b071a6c672edbfeeb281f6c51e94dd73035014a6e9">+2/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>auth.test.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-4c1f0d383da8b3f31cb374ae16b8ec047476e98f69f6650797ead4a6395f0f25">+60/-60</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>docstrings.test.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-ad0775feb478eaee0adec9dae6ce7055766b0612cc624f19b6c4f47d2ff47505">+41/-41</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>index.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-cf6c55f60c1ce5bf6d717a8a1ffb4c11458e936271a0406ff6d11c25010b2559">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>index.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-6b258ccabf862a7fca001b4d49b3ea5a33e1cb11f28e773ae579e4ae5670ca21">+7/-7</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>middlewareAttachAccessToken.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-406a2ec81128d07056432f10bb888dbcaed0cfa5094fbd6133c3a6d5f710315b">+14/-14</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>middlewareSessionRefresh.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-90c69b666c6c6262a3d9dc9a9d9a0f863b12f0167edb49cba1301fc737cbb447">+18/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>index.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-a0c86d5e58047ce9b2bc69a03fecc0c460703b3809eabe33e69a4a649c9ebc4e">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>index.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-6124d7be08592679e7ba8ae19ab28f3fca0d9a8fcd04c62f130eb8038eeb29e4">+6/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>index.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-6c48c1026ef2c9ccad3ce59368254e9278474cf4de5fdc0cf0f8659d10064bf8">+9/-9</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>index.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-7a32be1b838de9664f00775a9c4b4ca11dc34cdabfc3454b3df41f3d5f49b994">+10/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>storage.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-fc03ab2aa30e3c768df92d95608ddb18eee84b477dd1f1182ba70965e1b8f050">+28/-24</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>index.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-999182148616dd69a7cc1980b333d144ff91f034458107f87b1679ef9d958c97">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>vite.config.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-07972b1690be8a3a1bc3d77cd95767678bd3bcf7ef3708287475027606d59fb4">+26/-24</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>vite.umd.config.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-c4b34676ca804362319324b44ef2195cceee6f6a47caa078bdbe60ae437a0d98">+18/-18</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>content.yaml.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-d765e72738bf96a473d1f198037b7835df3870859f6c8c5a210118501526db60">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>types.yaml.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-c2463bbdf659ce7e41134cb40072f17f8cecb6bef7a9eef20012a249cecd040b">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>client.tmpl</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-0505af00753e1b8d32c18216b446cc7d297d4dfcb33401fa8330802d45f52f63">+8/-7</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>main.tmpl</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3462/files#diff-fc22ab9df6555bafaf34152e651b1ee89f7115bb837ed8a7788068ba34673176">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-24 14:50:55 +02:00
David Barroso
be6af4f157 feat: moved guides (#3460)
### **PR Type**
Enhancement


___

### **Description**
- Introduce React Apollo & React Query example projects

- Configure GraphQL codegen and generate typed hooks

- Implement `AuthProvider` for Nhost session management

- Add pages (Home, SignIn, SignUp, Profile) and components


___

### Diagram Walkthrough


```mermaid
flowchart LR
  CG["Codegen Config"] -- generates --> GT["GraphQL Types & Hooks"]
  AP["AuthProvider"] -- provides --> APP["App (Router)"]
  GC["Apollo/Query Client"] -- used by --> APP
  APP -- routes --> Home["Home Page"]
  Home -- queries/mutations --> GT
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Dependencies</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>graphql.ts</strong><dd><code>Add generated GraphQL types and
operations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-f0ffc6fbc739aa455cf3967c263549e2acf4922dd63d9d2fd33ef9975d958b47">+6994/-0</a></td>

</tr>

<tr>
<td><strong>graphql.ts</strong><dd><code>Add generated GraphQL types and
operations</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-08b9f52995757f95a31a6d4d7bafb1f1a473ae338f9d11f343956048d13a0b58">+6944/-0</a></td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>4 files</summary><table>
<tr>
<td><strong>apolloClient.ts</strong><dd><code>Setup Apollo client with
Nhost auth link</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-f0211d31ead8e27f200356bf615f34eee1e96ec6b068039a36b1506d32c35692">+53/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>queryHooks.ts</strong><dd><code>Create React Query
authenticated fetcher</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-45c18c55c9756b413c5d4b9a71bd04a53d78706eb9a2a611f2fd0a1ab7ce6b51">+33/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>vite.config.ts</strong><dd><code>Add Vite config for React
Apollo example</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-146d3d4bcf230a225998f3c68de6ffa9f19e16b85bb5ca882608d76e7b086566">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>vite.config.ts</strong><dd><code>Add Vite config for React
Query example</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-22a14bf686832a47057d73f552546a1d56a1f34cd34666acf741940feca0605f">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>14
files</summary><table>
<tr>
<td><strong>AuthProvider.tsx</strong><dd><code>Implement Nhost
AuthProvider for React Apollo</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-71a439d2114fc41855bdb2041134bbc4de64f886f06f3f50ed2fd31cc61c84a5">+175/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AuthProvider.tsx</strong><dd><code>Implement Nhost
AuthProvider for React Query</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-34697170eae721899cacb8faca334b60793b405b3f2ee327fecd4d6944338ed1">+175/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Home.tsx</strong><dd><code>Add Home page with Apollo
queries</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-407aac78333f6d47a86500b3e0c2311f1967ce50ba1a7ef4f022b8a50c013160">+203/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Home.tsx</strong><dd><code>Add Home page with React Query
hooks</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-c91862e4a735090baf145ed64f347a460446a25b8d5061b6b928b88ddb146008">+204/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SignUp.tsx</strong><dd><code>Add SignUp page and
form</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-9a841d153068ba2ba45e3b00c3979eca2048037670945ff079bce6645780f447">+127/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SignUp.tsx</strong><dd><code>Add SignUp page and
form</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-53b2663ba20acd8379c5dbbb671dd0c1badbb24955c7b9b7d9115843bd9ea859">+127/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SignIn.tsx</strong><dd><code>Add SignIn page and
form</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-fd0d7f5b422c5c3ec70fdeb95da10479b90132a571de56307d9b44fc69aaf27b">+120/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SignIn.tsx</strong><dd><code>Add SignIn page and
form</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-ec047013e51fbbbc17b641287e763558c5182325be0fe86d44e439eeca6e9ad1">+120/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Profile.tsx</strong><dd><code>Add Profile page
display</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-53e4cf70b4b84819e216a602241d5379b9402a2412af122b5a870ec0bc8cd6a1">+66/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>Profile.tsx</strong><dd><code>Add Profile page
display</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-13fbb13999bb0001387c3d9a5015974ffece9575c1e6240a21157a07090b3374">+66/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>Navigation.tsx</strong><dd><code>Add navigation bar
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-eb031d8883524edeab44c5b665a2429cffb1bac75d8f0dc1dc7bc3c42aa9c068">+85/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>Navigation.tsx</strong><dd><code>Add navigation bar
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-3d34860dbf6645315068dd62f3be52745294be2729e4dc718e40ad0125669204">+85/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ProtectedRoute.tsx</strong><dd><code>Add protected route
wrapper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-55c80a4fab944fa1c3210cce0fd0092776a01046ee9893c88c69d0c5f5f5458b">+26/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>ProtectedRoute.tsx</strong><dd><code>Add protected route
wrapper</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-bfc4913eb77b8cbe8115f7833bfdf1aad595496f3160dbf43eabf829f0d94f5a">+26/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>39 files</summary><table>
<tr>
  <td><strong>examples_guides_checks.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-56c96ece925a38bd3e84d3fff001760c68d40744013d2b3458ad445a686a0c36">+94/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>project.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-f6086e59795d16f4c73cb0e5f90b986e288deb5f176c80c5c035f1703ff86760">+1/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>Makefile</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-85a3083c78e211e9eb36d741342bcbc85a1a0c375060f45c5426b560196de27f">+17/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>package.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-4095856b4a3f808fcab300063ba57b9e84d2cd2b80e244b69d48d13ddadf161d">+13/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>project.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-65c8830b4c3074e59267275284f270f4dfa95ce2722d7634e3e3c77f66f8235e">+105/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-b79af2df973af3966472409744a06f7e930008c43216cee8ea91af504bf569fe">+391/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>biome.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-bee8a9ce71bf1a5641c7bc5aa57f0ca5b4ab5e6a1fc0c08067cb02caa48048a9">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>codegen-wrapper.sh</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-3d8141868656cb3c65352257558703f27b1f73b417f8a3223a595d31ffda1b4a">+27/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>codegen.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-88f3c353c9bfd474e259a4e6a70b4425032b1d6b3c228046c36333b22bdb027e">+44/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>index.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-e26ca0f00bc4456ef2ec04d470a864c72252bff2a9d34aa068bd6fcee9bd837c">+13/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>package.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-219f91ff32e8ae8ff4fb20d06f91c0d4501d50dcaf34a4012aa0829c61eca41b">+36/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>schema.graphql</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-1aef57e8c82d9f02e7c40f665ffbc384489beff7b299a8d30f1b2a00ba54676b">+10143/-0</a></td>

</tr>

<tr>
  <td><strong>App.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-3939716d6e04d989c77f1b141c7893b8cad49325d77146df613ea763da566029">+56/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>index.css</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-42378718fb21f3858c4d3ced50bff70946a0a63d6f5afabf5d29e01b9d7e58cb">+552/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>queries.graphql</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-a72744935ef245ce03e31a475ece30582d3fa9d8295a1338d2fdf3d64f52875a">+28/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>main.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-fe10a290150d971b54595c18a0e3b9486ddd237611225ec4fae333c893403a96">+33/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>Home.css</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-34b39976cc1741190f571fe587e77290bfec3f7248b8dab7cfe2ef3832f39ad0">+217/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>vite-env.d.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-76ec290ea25ad1dd3d6a40aceb23964e6af759e9d223d0227ea7a9b4c27a4c1a">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>tsconfig.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-1c4ff207f3f497bf6eb395d765c67c43197a8141faf8e0b78975749d7ef8de7b">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>tsconfig.node.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-2c47cac1784e69cc8ee9de2b8654939b7699e627e6996135af736d086471cbda">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-f8cffe1a6c5ab9062008bdc81cbdbc19ff73c414e852e6cc630288c935cb85c5">+493/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>biome.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-f3c8d8d56e583f7496332f58d85b8f2fc179364af6d7b6db2050cf8f3019449d">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>codegen-wrapper.sh</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-697fec800dc8ea79d58ac3650f21d252340f04c760df18c060c24523a7324967">+31/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>codegen.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-9b2b4b1be5005479ea56b7dbb26f8f34e9b39ab005c4df5e5547caef4bb8176e">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>index.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-6a4d60e607c923818133e58b28b06f9b749a492a500a6b2899e1f2fd991ad03b">+13/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>package.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-e80d8d01acf5048bc7c1767cf248b07e67df6a13914ac02d43c8b180b0178ddc">+35/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>schema.graphql</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-938b6a319b1d5f5234f3e80b49c3d9c429a45569fb777ef9310bdbdeb3f485e2">+10143/-0</a></td>

</tr>

<tr>
  <td><strong>App.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-9a06f558adc00bb736ae330d10f276dd360d3b2e08814d424392470d6b19af3b">+56/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>index.css</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-8fe80a812b88da1a00debcd607d5a7300a01558103403d6beba1c8a514d1cae0">+552/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>QueryProvider.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-5e3488d3b7deca24d0d26f4af88d201e7678662e6531f4e4cb511f99d32854d5">+27/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>queries.graphql</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-6506f25586ed4d14db727ca7ee5be4e299c29dbbfcdbcbc4f81e49a4ae9b5fb5">+28/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>main.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-2d90aa9771205fab3d46a5d28686eae47e929a9ec6070dc3d564d37d6324768f">+22/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>Home.css</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-ef3665d0c09e727cc06d1d429d983c3767f8b65add4bdbe5b095d3816ebbce1d">+217/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>vite-env.d.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-c931c9d2529208b5808e22f0a18c44b7cff5e88d1592b8f472f46bcdeda844b5">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>tsconfig.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-097ce507ecd096e978eb5013155ceb912fe10b0b6de8ee4a0f13ff08565e1cae">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>tsconfig.node.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-12b373ca0bdd9a2bc826e660ccdccc9573bd0ef54d592f2ebce0473e9568dde8">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>flake.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-206b9ce276ab5971a2489d75eb1b12999d4bf3843b7988cbe8d687cfde61dea0">+7/-40</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>js.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-bdae1ae0f0031ce2c2e0356df4460e40363922c9658b25c773ebfe29fe052cf9">+4/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>pnpm-workspace.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3460/files#diff-18ae0a0fab29a7db7aded913fd05f30a2c8f6c104fadae86c9d217091709794c">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-24 14:50:55 +02:00
David Barroso
3a41251caf feat: added examples/demos (#3459)
### **PR Type**
Enhancement, Tests


___

### **Description**
- Add multi-framework auth demos and examples
  - React Native, React, Next.js SSR, Vue, SvelteKit, Express
  - Email/password, magic link, MFA, WebAuthn flows
  - File upload, profile, logs viewing

___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>18
files</summary><table>
<tr>
<td><strong>MFASettings.tsx</strong><dd><code>Add React Native MFA
settings screen</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-5d346e2efc6817f6c3de4360c27031e4d5a4f37423aedb329f645aa9ac33d6e8">+594/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>upload.tsx</strong><dd><code>Add React Native file upload
screen</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-3763882523f551153b1520c05a953fdd2b3e7e0c37e2db53318e6a2f05d09b9f">+552/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>Upload.tsx</strong><dd><code>Add React SPA file upload
page</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-aadcba440d58667ce429ae0caad0695a7dddc8d91e1b8f0dc52ce6633b0eddc4">+444/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SecurityKeys.tsx</strong><dd><code>Add React SPA WebAuthn
security keys</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-3f9cf11913bfd3220c4c220618b5575c6a3ed59ffa42d6d5be32c77edfc7d610">+404/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>client.tsx</strong><dd><code>Add Next.js SSR file upload
client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-f6fa7dea8d8baf6d7fcefaf4517a492dbfca213afcf6b5d08d180a889947c0e5">+399/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>SecurityKeyClient.tsx</strong><dd><code>Add Next.js SSR
WebAuthn key client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-c05c21b6e3c47e8d17ba69ebba93e3ccd4266e26fd4062e6de552ed98d46c603">+351/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>signup.tsx</strong><dd><code>Add React Native signup screen
with tabs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-262b09b9dd7234cad96fe092d7131a23451c9e50b98c126c9e36599b3a127ac6">+387/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>signin.tsx</strong><dd><code>Add React Native signin screen
with MFA</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-3a4105c32f4aa4290e4fc0a12c2cc3121b4b0901c1429917087e26569c1c0a7a">+367/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>MFASettings.tsx</strong><dd><code>Add React SPA MFA settings
component</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-e43f9e6aec21b8620c86b9cdf9986e2e8dace52d87609b1c74cf6ab9a0639d21">+288/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>mfa-settings.tsx</strong><dd><code>Add Next.js SSR MFA
settings client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-75767c82cc4c7eb779f3beb7ca5c5f9b2cc090347029ab44cc7f93b8b881c85b">+292/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>profile.tsx</strong><dd><code>Add React Native profile
screen</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-e996eb818728427e1c131ac6f3cba0bd506ad8f28486ee47c9ceb5b33dbc7869">+262/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>verify.tsx</strong><dd><code>Add React Native email verify
screen</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-93aeb3cfb31ac602e11e6031bb4860e81385c3c9693e5285c8f69988341cd045">+265/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>index.ts</strong><dd><code>Add Express server Nhost client
example</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-337bf1c26c434751c7c3e356598278e8e05482e41936a30c587cf68fd375092f">+126/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>email-confirm-change.tsx</strong><dd><code>Add email
confirm-change template generator</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-5ee9a92531c20cb74b9a49335eb0a65cdd73efa7d8c59020ea80163bba2cec72">+129/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>AppleSignIn.tsx</strong><dd><code>Add Expo Apple Sign In
integration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-8fcf005753999f7770661afbc82063eb0637a2f959f03a77a94d4eef55b1d9cf">+112/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>render-emails.ts</strong><dd><code>Add email templates
render script</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-760314d4066ab3171a8dd9ec712e5e6b4e373f86531e66c502df06dab8f9dc7d">+82/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>auth.ts</strong><dd><code>Add Vue demo Nhost auth
store</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-db6008d5d08993870173045b4d2e978832e91943222dad7f6093537c48277e4f">+75/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>App.tsx</strong><dd><code>Set up React SPA routes and auth
provider</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-849f3aa52970f348de49a27094aac4e4b8cb8cf29580cada70d37f1a04249725">+77/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>DateTimePicker.test.tsx</strong><dd><code>Simplify
DateTimePicker test awaits</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-c7076012eb33d6f60049710638b5ad19c2f310b8c250c79f1905be7e0a30b00a">+12/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>useProjectLogs.test.ts</strong><dd><code>Update project logs
tests to use CoreLogService</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-13d900aa08d06962a09628136b893801ad62a96c3ff89d380c5c4b7ae92d891e">+9/-9</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>101 files</summary><table>
<tr>
  <td><strong>examples_demos_checks.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-48c5a14a5d1da9f35b409ecc95fae8f3a319f97bffbf0020efcb8c360347dc02">+94/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>biome.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-2bc8a1f5e9380d5a187a4e90f11b4dd36c3abad6aea44c84be354a4f44cdec55">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>LogsServiceFilter.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-a590a7298a9f040df9f26c4eb37d10fc36f47c32996f71aec47796f08c44e892">+8/-7</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>DeploymentServcieLogsHeader.test.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-46fb5d0c9528168323c0e16ef4186d91fe6274b64292f43841258bdfc45dd581">+81/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>DeploymentServiceLogs.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-333a9783713e9a4bad1b5327e117cbe69148091abe8b9038d36132b5f4635bbe">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>DeploymentServiceLogsHeader.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-4f102c06ed32bb3d8245e415e76b0b14d2d4ae3abca6e234edf69278325c7a95">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>useProjectLogs.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-10efc67700b3f024dd03442eacd339802e951696d04caa76bd5a864bd5c7c83f">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>LogsBody.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-b628e511a7fb9b237ac691b27ab9585eed0d0803144cde66c3af7fa6f9a2dc40">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>LogsHeader.test.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-6a348a6b3f868aac854020f2b85ff9a7cf5d61f362a5201e77681e4d5a576f20">+86/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>LogsHeader.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-ebb3285aa776c9c5ea8b72672c4aafd55994c6c694998bbf56ca9c56d1e77664">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>services.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-8fcdaed33322718091b613ae22c65cc3eb61972904b5af46866b160c9bbbe48c">+13/-13</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>logs.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-77489a68a7526d74f06d59019ad68c44728b7620637308d70fba38d6649b73fa">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>Makefile</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-80fe306cf2e39e0852a6033f331195be7942ed7fb54b2cac6bd0139cc34d1bb6">+17/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>APPLE_SIGN_IN_SETUP.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-eeb0deb7c8dae0e6b49462b92e5e7176ee11236759847ea59253375ba48d6f5f">+95/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-29693cbc361101a671771703a3097f97b0ad6c344435cb3fa6d19b00c030ecac">+169/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>README_MAGIC_LINKS.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-9232aee57e45778533da1f08d80d794f612f3672b4e2fc0a77c4ca6e03e27d3a">+410/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>README_NATIVE_AUTHENTICATION.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-2bfce492dbe0824f4e47907f7269b57b6f8f092550647afc46cff13903a34750">+381/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>README_PROTECTED_ROUTES.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-25f106def41f290d4c471f95f4a25db4c7d411407f7937035f5e3e53ff90aa6f">+357/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>README_SOCIAL_SIGNIN.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-10c036291fe61ed79d9ce5c1764f10e44b6cc57232b0b6b981c19f84760f5e8e">+530/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>app.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-12f6ad4bacc187ec247d9ee19b2ed6a5b49c4304508fd3ba4321b265e0eec36f">+53/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>_layout.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-9d1054a3d9a27191c4056537dea211e6a19610581557e756db81677e49e7b929">+54/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>MagicLinkForm.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-169e79f10d79f5ff7df3e910f042005f0b139246098ad4a1d2284ed450409b42">+158/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>NativeLoginForm.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-46f2e1cd61d0d53b7fde9a0056f78e07a317e8fe60b6b237baa0a13d6cd4a4e0">+93/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>ProtectedScreen.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-4c71e8ae5499fc1dda82b020fd0b1f2ce2f972d18298af69d6c3c553742d2ad0">+40/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>SocialLoginForm.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-2e46da6c133f57ab9748231ab7985a6704893b6d99c2981007a3cfeaeaee2b79">+91/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>index.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-0db4f13bb27522261f48250563b1f9d6e6cd5805c9b89caf2bce331b229a4cca">+120/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>AsyncStorage.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-7c877423128ee8dadc8bafb89ea8a98b6c1b05130949a6c6d9f3f325a4ccacc1">+93/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>AuthProvider.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-72e3c353a156c42747b082a51cf6ab9e59a8b5009f8cb637d9e75fb9c31a7212">+110/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>utils.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-4091a110ae026c9f130fb654f47381b503f7a04a1cefc3020831ecb3f0d971ad">+44/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>mfa.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-477afc36e3e2e62727b11e6d1f77592c89d120d8dfd676a05756dcff7625825a">+233/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>package.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-9d05689c57c194cb000eb7ff276476869ba4ee40a730c23e47016671d7f17521">+57/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>tsconfig.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-1d10ade4fc1aa2dce579be648ec4420554d626d814d1971a6ec8d59018eb3bc8">+15/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>.secrets.example</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-c47199e16c186acba1e9f82c541362d1a6ff05066299b04f61f358d636c3f5d0">+16/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>Makefile</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-5c1f8270d9eede9a24fa01068ede09fa13a8fca85eeda73328701b5781500ebe">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-9a3489ab94ccfa9504db04213d3dbb603c609abf1435e5844d911a03210c3515">+29/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>env-up.sh</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-de9763dc0910faec77518ee1eacfdf7a74a257b88e6055a421f37b9ca85d4280">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>package.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-c602bad387df10731905ad3a49ee0a1ba256823a7e1a4b8ca262fc2f407fea4b">+13/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>tsconfig.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-7635e254c708cde29d62250387c92e13e0d2a7f4180b11ba11b288a7205ed00a">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>config.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-4446c65612d85e309d41f928643d796ca2d3970f2ac122559a2c3ced6cfd5a77">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-ebd226650ec2ccfdfa181eb52ac57c538d1258efcdd5eefa6521d661014b0beb">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-f4eec235a2ce395d582333d50a2358e5b4b4758a0d6de2d80bb9b983bb5788c3">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-546c1e26f4f5a58d38dab39ffcd1f1e14ecc6867fd1bece4b6a1dd76a310fe3b">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-a62a136fad466ff5def2190737d76bdb54d3ca7c31d5ed85c0c7b9bdb4adc33a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-c70655567313cbdee9e332a73651c1e91e33f57fe8a168cb064f4206aca66a20">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-6a415c40c7cfaa325f53043b71d709714101b9f629f954095bcc64862abc744b">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-9fd0c953500d416a457aa8dfcfb3659a517ee82a964b860b1b8afeb8d09c098f">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-fd472f081db09177df1548bebdf3141328273c89d3e76b14e01e62bfdfbe2443">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-236393a4f47ed882febf9eb4dd24d5525bc3f20e5e474f5e34ecdff091555965">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-8f0998f6df2005ee1436d74ad2ce2cd1bf91eb053a304160130d24ac64ecfae1">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-401c18113470ff2d38ad5b98eb3fc4fbb3aa1226c2db81b425a75eec28072607">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-3005f541570bcb879d647fbee1161de8b18981e4b07b8eac07a2250835f605a9">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-ed0a3cf5dabcbecde2cb9e914d827ca6a92cd0818aff7b45e51e8b5bdeec27df">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-b7ec4c42b59e6f2e23f1ba196befd43d08632b13747b48c6ceaba3d6d1e38209">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-026c60a66006fe593b8c30cba71ef52d4968f22f004c68bcde8356312de00dce">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-9e40803f1b207ababf5640dec47083efa84dfbc201e968b37730e515081a3101">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-143e6ac6a6fff08a7d6a68f98cae196d569fe4f30fc0215633c5b653ce349181">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-613a3b66d30c6e4b93257765df35c2d0be6379b6f7ab6f3478b4731c1d21ee96">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-6f9c1433fcaabe15051bad4b1d888203d928a30ab2da829c724d54f74ecc818f">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-1727f5ec1686c6079eb733d7f3c5cc60a6f047635241bbf4c63fc5985a78b13e">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-f65964bb501d3baeba4974daaab7c0e6edaec0645860b119633d09424deb995a">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-b911f5720caca8a68bc5ba072284c4d40e1e6b3283a2070c17e84a3d9ba55f79">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-7f1525fdd0e82fd57d181d56acb7828c5838ef635403c560b1dfb88834cc5996">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-afb123c7657dcf08247b52027d73e4d9dcee51d0cb7e37a1de0f31200c4dc535">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-877b5d458de6de8bb1287075e3eb6a6f8aaba807ddd2db78705640512ce038a6">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-01135b2530cf6bf46ae7398f1ed4e1a684cbfff1af5fc7dc28eacbd3b1c66caf">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-efa400ab45cf1d64d014c44c6308be2146eb1657c02f8ac7e47c9f71fb34bd4f">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-a7a3eec9c3ce1f9d763a196f2a6af166c07c3c87f05967261847cb40219814fe">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-344d73792431a98012dcfe76f75525a383827ef6f81ab1688b46ba504c34a903">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-d01fea24e87babd4f89d3ce27578f96a35578511bebad2c0c2f2689160c0fc63">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-dd12ae6e043b5085514f43691a710f3e65a0c3df93c8847ffd9678c8fae36c08">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-fa998d4e425d971dd546898cac4d1183dd4c10d4d95f19d4f4650d322a58505c">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-1c7f1643eece2cc9fdad3cc032d60826d541d6ad9123c9674ea1de20f4ef429f">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-bd2c5decf64f436932af01d32dc08a35fb745c8aacf97952be9f8925fb94eed4">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-f4187b87464106220110abbc03675a30e6e5154248be0880f75e7b976419e3ef">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-9d893b6b685830b2cdce2b05a925482b93c5407a7d7e2f2f76d159e55a089d6a">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-05b560e90f649549a7d98396179732b15c4af26b8df6fa5dc3b594b49eb548d0">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-2bef9e62baac1dabaf929cbb9113ad6c5711eb8ba364defebefd9cb9e65703e8">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-d0ca2cbd1895c7841755f2f8bb109ba17f6018a53f6615ab45445660c947742d">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-2df8e46ef47cbebf23bfe3bba1e963ebc93d1bde4c09d6bc18cafd008810fe11">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-21ce711d17cbc8006a363b11e33f0b9009b3c7c7ba6885e9b6fccb64755ac0cd">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-692abf5d4051aa5afc5342cdd36c24879777744678ea1cf6a1a246f2d4cb60ea">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-1443b315ed3da71a04c3d532a46dd6fc837cbf67a9813d6d9b7dcaad4fe8f617">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-b034b26b4c5e31f76049c742cf80148731a686744a3dd0e440399521ad2491d9">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-52643cd4c649348b055c9659cda85a7570f974c47aaa7af473814cea851fb9a7">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-c1538ae90cc62160dbcb4be240cef50eaf241b88ce4cb391e5851e8b346d73bf">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-5e695a8cb0adf5ff5a530a922bc8f5b52d00972a99951f2bd690e4f44ccefae8">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-532dbd0e9c1f0d9d76715a27d174745824cfc68d0f7e499afa7e7e2c150b8d19">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-07b82a5305d283da9c6781f44a88c0ff4131b575fe5ee78a15d69abf6bd91b87">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-9b9ee0fb48f9f8815980bfe94d7d93d41bb9f1511cad6852a6d4f7e9192faf47">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-d3755355865e28005c894a10824920696b06e64e7c1c8765268908d56aa12261">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-d5c3314a4bfa1667da59c2072178f80a4654ac0f10f714b378496a69b6e21dcd">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-a0fda535693ff92e05311d4a63884ae0063e90eadeba20e958a7f9da51016ec5">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-de84bf86da7ce4481559b7037412128a4928746589b35575b9dd811c9f50b391">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-d17f4b74ce523c6ed011f1d7a3426dcbe430716a50803ee2afdb0f81e5d047fe">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-3266bd27efc68f506fa6c7d9ab41567c63a9fabf3d2d247f5719be551efbf250">+23/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>email-verify.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-80cd5ff8c6c8b4f7a588058618ed27b3316304b1786a92ea8ffbb4c3fda96ac5">+127/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>password-reset.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-cef64f7d4eab756b7c68477e4fcc323cf8197832c92fd07e65f24dc71c9e3e80">+127/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>signin-otp.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-a2a5f9edf38127ed8168a60248e51e6ba1b4026fe7e8366111f28e0502749e6f">+125/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>signin-passwordless.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-38ef73aa255432a72a30ab3e63da415b26598ce7b267a1e39957c26aefac1d88">+127/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-1c287ea5a500ae373cd8c021d07dc0f3994db71077e892d7b5761baf5c2ef037">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>Additional files not shown</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3459/files#diff-2f328e4cd8dbe3ad193e49d92bcf045f47a6b72b1e9487d366f6b8288589b4ca"></a></td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-24 14:50:55 +02:00
David Barroso
c6af08fde4 rebase 2025-09-24 14:50:55 +02:00
David Barroso
63d73e639c chore (nixops): move to the repo (#3449) 2025-09-24 14:50:55 +02:00
David Barroso
8112625a0a chore (docs): update reference documentation for new SDK (#3448) 2025-09-24 14:50:55 +02:00
David Barroso
bbf1f6c11d chore (dashboard): use nhost-js in the workspace (#3446)
### **PR Type**
Enhancement


___

### **Description**
- Replace @nhost/nhost-js-beta with @nhost/nhost-js

- Update import paths across multiple files

- Modify build process to include nhost-js

- Adjust GitHub workflow configurations


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["@nhost/nhost-js-beta"] --> B["@nhost/nhost-js"]
  B --> C["Update imports"]
  B --> D["Modify build process"]
  B --> E["Update workflows"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>11
files</summary><table>
<tr>
<td><strong>useGithubAuthentication.ts</strong><dd><code>Update import
path for SignInProviderParams</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-fad4875e0f07391dadcfc7e2dd481cafd5172dbb740c47e56fa75beb271618e1">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>useAppClient.ts</strong><dd><code>Update import path for
NhostClient and related types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-0aa83222c0e0eac6f0058070de2b199e5e78514cbba405eb98d3693329a93e65">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>createApolloClient.ts</strong><dd><code>Update import path
for NhostClient type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-6a34c5ed967837282403b4cfdf06e13e5effb32da891d682580b8174d047a454">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AuthContext.ts</strong><dd><code>Update import path for
Session type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-1d4349638224a893f63b774d63a586880993cd3f25bbac14ab292ed79c4ccdf2">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>AuthProvider.tsx</strong><dd><code>Update import path for
Session type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-f892f5e3f5cbd580bf98d8ee1ed1856db61068f0e1dd44f90d93cbda98007af9">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>NhostContext.ts</strong><dd><code>Update import path for
NhostClient type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-329c728bcc3c746e90de94752b414361866cf66e63a5cc4ab7e39f0b5d3a0746">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>NhostProvider.tsx</strong><dd><code>Update import path for
NhostClient type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-a55dded8ccfbb390905487d9c46fcbe7dd0285ccf9a040d0b8c04642c39aa642">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>mocks.ts</strong><dd><code>Update import path for Session
type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-d1ef12c0f15123bb4e23a0c513fc3d9b5c16af421c71c2909fde3717e09a9d89">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>tokenQuery.ts</strong><dd><code>Update import path for
Session type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-c86f0dec25fa37d82ed9765646ffaa9812f3b8b6f36d74056ab9e2dbe3416d0a">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>testUtils.tsx</strong><dd><code>Update import path for
createServerClient</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-78f29250407edf853a353b48242d3cee59aa5724f38a60bb23bebdfc1ea2f9b5">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>nhost.ts</strong><dd><code>Update import paths for
createClient and session types</code>&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-3b1c138cd29a3002d1440ca1e438eeaecef10e3f98958e5985e1a133c0e51314">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>6 files</summary><table>
<tr>
<td><strong>project.nix</strong><dd><code>Modify build process to
include nhost-js package</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-e456dcfd6231480081b3c9a2a95204bd061853442d5e3a38330625d01cb1a6a1">+9/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>codegen_changelog.yaml</strong><dd><code>Update paths
triggering the workflow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-9ec3a4e9f1cac55592749fc8a4f8dc140fd6d59340f9e74ee01744e1c5a230e1">+6/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>dashboard_changelog.yaml</strong><dd><code>Expand paths
triggering the workflow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-f500aa853d257ead7ba7e28d92191a2d18ab32a43c6e121d1e64454513a9de14">+24/-6</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>dashboard_checks.yaml</strong><dd><code>Expand paths
triggering the workflow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-a8a8acdeffa4fff6d4fabd436cc1c2c377cda640d5028bd3dfcec5ef5df6e33f">+23/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>nhost-js_changelog.yaml</strong><dd><code>Update paths and
workflow references</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-f89bdd0c84297962882877ff469844b0541e95cb6437c9247722704af02ca426">+3/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>nhost-js_checks.yaml</strong><dd><code>Update paths
triggering the workflow</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-4d839ed910ed156389855fb82fc583c1bafccef3691c01ba5170bf4dc4fcc19c">+2/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Dependencies</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>package.json</strong><dd><code>Replace @nhost/nhost-js-beta
with workspace:^ version</code>&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3446/files#diff-2d8d55c799cd71f1b35e831f075f8178ed1734c4820a2ad548b4dd24d6938d7c">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-24 14:50:55 +02:00
David Barroso
d37f31fc41 feat (nhost-js): move beta to nhost repo (#3443)
Enhancement

___

- Add auto-generated API clients for auth, storage, graphql, functions

- Include NhostClient wrapper in `src/nhost.ts`

- Add middleware for session refresh and token attachment

- Provide extensive tests and email template generators

___

```mermaid
flowchart LR
  A["createClient"] --> B["AuthClient"]
  A --> C["StorageClient"]
  A --> D["GraphQLClient"]
  A --> E["FunctionsClient"]
  B --> F["sessionRefreshMiddleware"]
  B --> G["attachAccessTokenMiddleware"]
  B --> H["updateSessionFromResponseMiddleware"]
  A --> I["NhostClient"]
```

<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>12
files</summary><table>
<tr>
<td><strong>client.ts</strong><dd><code>Add auto-generated
authentication API client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-4ef372e972ad443bba16fd25b9b721088c801a0d75db8102062ccbc00838a2f8">+3178/-0</a></td>

</tr>

<tr>
<td><strong>client.ts</strong><dd><code>Add auto-generated storage API
client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-4385e1bb86a6ee228b61e620357d826371939ae8cbe6ef674dcef108e2bf5ab1">+1016/-0</a></td>

</tr>

<tr>
<td><strong>client.ts</strong><dd><code>Add auto-generated GraphQL API
client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-cbd71dd3404704ff9d9c84273572fcac6f041532eef597de8a714249c08559c4">+180/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>client.ts</strong><dd><code>Add auto-generated functions API
client</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6c8d0225c010836d4a88cf726a477821cc64d33c167654bde18178350b4d20f5">+141/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>nhost.ts</strong><dd><code>Introduce NhostClient
orchestrating all services</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-68e0323ab180717ff0de35463496ca8eb3b8fc561462459f3c9cf178aa5754d6">+433/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>index.ts</strong><dd><code>Export fetch utilities and
types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6b258ccabf862a7fca001b4d49b3ea5a33e1cb11f28e773ae579e4ae5670ca21">+47/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>middlewareAttachAccessToken.ts</strong><dd><code>Middleware
to attach auth token</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-406a2ec81128d07056432f10bb888dbcaed0cfa5094fbd6133c3a6d5f710315b">+67/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>middlewareSessionRefresh.ts</strong><dd><code>Middleware to
refresh session token</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-90c69b666c6c6262a3d9dc9a9d9a0f863b12f0167edb49cba1301fc737cbb447">+77/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>

<td><strong>middlewareUpdateSessionFromResponse.ts</strong><dd><code>Middleware
to persist session from responses</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-a2c5449dd97df2d425297ec7f3b7628f405e3955cf46a9935afd8d1fe0ecdf7d">+91/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>storage.ts</strong><dd><code>Implement session storage with
subscriptions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-fc03ab2aa30e3c768df92d95608ddb18eee84b477dd1f1182ba70965e1b8f050">+106/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>session.ts</strong><dd><code>Decode and type user JWT
session</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-2292867bf3b27d5d5887a247376b111c659a797dc92df9365d7e6b0bc64a5868">+83/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>index.ts</strong><dd><code>Export main SDK entry and URL
generator</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6c48c1026ef2c9ccad3ce59368254e9278474cf4de5fdc0cf0f8659d10064bf8">+55/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>7
files</summary><table>
<tr>
<td><strong>methods_ref.yaml.ts</strong><dd><code>Add codegen test data
for storage methods</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-f5d4c1cc3e0ab95288bfe009f15ca77360a98665cc621b7d299e8316c9e56001">+1009/-0</a></td>

</tr>

<tr>
<td><strong>docstrings.test.ts</strong><dd><code>Add GraphQL client
documentation tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-c7b7dab18f108770bcff06dc83cc9a34a5ee72c5021a035129a264a968f7d5ff">+376/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>storage.test.ts</strong><dd><code>Add storage client
integration tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-19d55fc74c55988fede4d554a6bc5e052987219d1d5bdadd30ef52d55d1e9d78">+258/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>functions.test.ts</strong><dd><code>Add functions client
integration tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-513ce67d4002bcaa8dc01d8133ffb3a0c39c430604ba3c2d17ec6c0f7ad6f1a9">+169/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>graphql.test.ts</strong><dd><code>Add GraphQL client
integration tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-488fd58d97b84872c4b9d160ddd54d17f198d7dfe2e3508c84491bb7b2509e1e">+199/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>enhancedFetch.test.ts</strong><dd><code>Add enhancedFetch
middleware tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-c5e61a5e461b17c08bae579aca5ef65e6b2b333df8c770b4f380f98f24c04e8a">+214/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>docstrings.test.ts</strong><dd><code>Add main usage
documentation tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-b97eb064c8d8cbd8197f40f06117348a994b0f6d42a73d2e0a47cbb226cb4b08">+135/-0</a>&nbsp;
</td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>vite.config.ts</strong><dd><code>Configure Vite library
build outputs</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-07972b1690be8a3a1bc3d77cd95767678bd3bcf7ef3708287475027606d59fb4">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>101 files</summary><table>
<tr>
  <td><strong>codegen_changelog.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-9ec3a4e9f1cac55592749fc8a4f8dc140fd6d59340f9e74ee01744e1c5a230e1">+16/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>codegen_checks.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-a0832a0d24c56aeff885d0163d2d0a54af9dd042dfbbe0fd5eba7c9997de7089">+71/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard_changelog.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-f500aa853d257ead7ba7e28d92191a2d18ab32a43c6e121d1e64454513a9de14">+26/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>dashboard_checks.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-a8a8acdeffa4fff6d4fabd436cc1c2c377cda640d5028bd3dfcec5ef5df6e33f">+0/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>gen_codeql-analysis.yml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-1966962fce5fe923e067079cd74ef10ea43a99f60b5c251f33d204fc4d99d1e8">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>gen_schedule_update_deps.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-ae003e22c1e5cbf186e1749d77dec35965e521d2583ba8cf45fcb1c8f300e177">+1/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>nhost-js_changelog.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-f89bdd0c84297962882877ff469844b0541e95cb6437c9247722704af02ca426">+34/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>nhost-js_checks.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-4d839ed910ed156389855fb82fc583c1bafccef3691c01ba5170bf4dc4fcc19c">+84/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>wf_build_artifacts.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-63d6f3e2e5894df4d88cf2c82b3d0c90e7b0b7c8ca9da25a3d46f35f15270fb0">+1/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>wf_check.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-c2ecea6736037ba6304681d744d612d44d7681788d2fbc58ce223cf52ecefa43">+1/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>wf_check_changelog.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-099ad6009f7d08d3b6534abe4abf8c8a75f6c3761d4117751fc35093affd7456">+64/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>wf_dashboard_e2e_staging.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-a7fa29d56c482bdb946a35ffa66002731a16f69b2278e5f10244051fd9ff0e3a">+1/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>wf_deploy_vercel.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-2cefabe2c777ef34c091ee0f8d44ece60e4121814fa8cc38fe05d929fea197bc">+1/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>.golangci.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-9917ddc9f1c3304218f7269265b746d997c5c0615478177b5fceecd33ef47cb5">+94/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6d79915225209d5e0cfd0fab415e6b47444150b9325de5ec7fc711e17b83eba1">+29/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-4d443b583548a9a0ad49d07bf78df8b48c80a5e9b0d34b9ad3e0ea47afd51843">+58/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>base.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-a30fff7b85a22862eb523e2235373014ce9d8412cc38f07af6f6e544338fb8d8">+34/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>frontend.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-13a93670eb5748484a6233ccb1d6823fcb2a98adc9cd43e5c41ed45b59a7623c">+25/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>library.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-76d2855ab23ffd9b57974823f228e96ae4edc664ce3f409ed70a467d3e4f6ecd">+30/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>node.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-122859777dca6e7ce0d8c8ea00fc2d64a9568cfb2646fc9ca22741169445988c">+23/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>vite.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-b07613487a22297799a78f6acfbbdb31013138490f500f9e5e57c0393e8b6773">+14/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>project.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-e456dcfd6231480081b3c9a2a95204bd061853442d5e3a38330625d01cb1a6a1">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>flake.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-206b9ce276ab5971a2489d75eb1b12999d4bf3843b7988cbe8d687cfde61dea0">+17/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>go.mod</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-33ef32bf6c23acb95f5902d7097b7a1d5128ca061167ec0716715b0b9eeaa5f6">+17/-2</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>go.sum</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-3295df7234525439d778f1b282d146a4f1ff6b415248aaac074e8042d9f42d63">+27/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>node_modules.nix</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-0e19dd1f3b075831004f05cbbad45f86cb31ea96e46cab75840719782e4a8977">+14/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>package.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519">+16/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>.prettierignore</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-23eddcec7f8cea827569c56f44bf9281373cfaf6ba044c41933e67bac086e553">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>CHANGELOG.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-b6200685d3e776a9e74d320e54959fe992d1a3c534df1634013979b6685438ba">+29/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>Makefile</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-a4285b4628ee4e3a8e950a7091d4769d9fc0f89783483cff01382a468f583eb0">+17/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-32a1491b95260b677b05569fe11db6fe14aa7b380c7ef6422041949311f103a2">+88/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>auth.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-0fd48ea2c8ccee113366e748ddb97e75dd5eb9bc58385ce6b1ac1578dcbc54fb">+2548/-0</a></td>

</tr>

<tr>
  <td><strong>storage.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-5aabac204944eab4fe6fdd2e6c47c215f74df04347f737cb6c68c10b24c3de2e">+1186/-0</a></td>

</tr>

<tr>
  <td><strong>.secrets.example</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-825388a18ee7fa60325f209d3c4141df481e1245ef2d944482b8b84a95611533">+4/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>crash.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-38c3348a81607f21101d8ecfc1cbaee87f9716a2e54c9be5fa301057f40bb03a">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>echo.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-70d2dbad876749b22eaa28784c7796bea615e8a4e17810bf36da113dccab1a03">+49/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>helloworld.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-b37568d59ded3a9cabaa4d97c80e5dd1dcc2716903d9e10171cc7ec4f3fb0592">+19/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>package.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6310cb8549b62daf0fd2e22c5549e5cd777483509808651c44b99368dbed7e26">+16/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>tsconfig.json</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-534d28a667fcd2c10da5a5c1bfccbeca59d82555ee6db474dd3a1743d82eebb3">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>config.yaml</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-0774c4ff3547464cf6fcb5074b6c62e0b03e5cf2c17caf984e9016f762a4b15a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-9a02c811fff048cc400216bcdfc59c8202818855ea2c35797d1459c50ac9562d">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-7229d13b3c44f9d7c70e9c70aff01e065a411441d507faa33c34b1df9202581c">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-311e8703438930dd999b29ac6ce901e9f19688d8f341cacc0630880e2b7e7cf1">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-8ff0e787057342c2674d033c1f329c6b7d4b983e67bfa7028c9bd7dbd6f5ef95">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-85a0fbd068e697a07716b2f327589c7688a197538d7feae9d664fdd628f1ee4c">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-a8acfab7fce4f1838b46a1711f204a8b04c112d9098039952cf3a8c3c4d898ea">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-98bb8bf7ea61df723bb0fbe205c9144ef84852e7010347a90fdbc349ade9db9d">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-d52770dd6b829b6135e07ee3405f67a28a5b827bad3d601e88e5c8583ece51f6">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-95f78669412b72ce1ee651e1dd5c329288f2d9c67fffe20788302e1c8e9e955a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-63bfa6f9d4bb884071932aa283cdaf3563c2a177b4060aafd99075acfa05f38f">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-d531e84efb5e05786d850aa6e212c16f89fb233af5bac7d0c4113c6250c144b6">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-98076a584be7db55cfd4d92ec3f20d1f88d9d3d881e81deccef383cbfd4a4047">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-63827d0319a9d1c10474b3903df66ae1ad1affa8c9fe205ea24e4e4e1ff40654">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-e28f2c9ba5d6848999325e90fad5beb479581a374be81ce3f369de08c811a1f5">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-526c658236db49eb75e18f36ef172c56ff543ac1b0737860c866f8b52d9bd565">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-c28e94423ba8964f22a65c32d734970fff83b141c987d1bf674fe5d5501a6a06">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-9479f2a3dbbf14571470fecfe9bd5e9c29879e6087f543de618f5c1f41bf60c7">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-0535f56f36dee6fb906aab7c8f253f94583debf74ee6f3f993c4f71c8f641a11">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-ec9321ee05ebec833b58833792edd57b2d884530bd4b27ab475883badcc98470">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-49fde11f74c8c34a9665206f7f5bb5f08fabb997b4c455c4780328e0df472d47">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-47a77657f3ac07d413eb85a8d174991bb20090ace909ae7f83081ccbae3974b6">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-1d0f311231edfc6d4484bb8d2b9dbe0dd40a923071f4ebd5e8db900064919987">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-df66051d6fa91604c084d7bb995ea734474ee7cf9dfd239e1e0d52a7814f89c1">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-b33b21342a328ed795793feb82655b2e7753eddc1f017519ece05053e4b3af54">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-a608203615c0a0aef08d8d3ac2c848e4491e81c158e9fa107a787149500304d7">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-1ce8a9f999a052d4af99c53980b1f6e52324664f4651d5b7e0665312f133b3b7">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-5e8b522bf33bd3cba00ae0d555e24c679ce3bbc4869d930fe850529f3b7489c3">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6994443cfe2326b3d000ae3d8c5422a51f708f9cd2b49bf3f6c2cef6b9d28e9a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-e91a5315961a4d59925c55a913d866422d0e80dde508223c1e7eee40010319ab">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-e18bf884ce429cca39399b1ad533cad88c83316b4ada5263096f37ba86242aaf">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-96f4d39c000ecf61576d638efe27813ca3050a8d8d663e7c191362a48f42d495">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-7637885d255e32f85e9e2bc799084249b1c3b46e46913b9cd3b8ecbb3e9ba9b0">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-efc96bb60e6337122c86898884dc55ef5a89da7033e388775ef719346a7d4220">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-cf9e7d4ccffeb2a75ac9b592b496c32d3fe55ef8924cf727e2833b80dc84e561">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-bb0618c7dedf0d6f47b3d6d98d8ab4ec5a9c37781958fb303d9f24c1ab958fe4">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-c3977f6b1de50fa3322f7479faef37b4fdfbf2f5845c67cf212e911539bc3b9e">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-f31b21b32a2c84d5b8cf306703f8ae9a946dc1c624d532e37b8599da049cc69e">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-ea310f1bd63e356ddd1ffa017aaac70cfae5da292b67aac4fe79c1b777319f04">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-7669f7091403361bb88442de48c9e2a9658e154bb5692102b0e82319e6337f39">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6ba271e14c45373f8cef9187ebd6ffd0ad9c44e238532ccf63cbe826249a19b1">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6b326112e1aa4cfbc000b91c3b6378bc8ae36e48840a081a830c94c51f8a4500">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-2c5702df1f1375c48883364c0f2fb986b250be8ce1556b8d029ddcd55ff90714">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-c9ab69c5172e80137a2e77ba58394790ed15824f094e5504c876d90e441a9d28">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-2bd5c6d47472860c78b7fece329c2c2f77004943090f7b1844068e5400b3a0d2">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-e095798c1d0a20b895153394a89384a7e76a4be72127cf820a5b789c2427e9cf">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-604842630cf27fec737fe06d8e10d867b4bfde7847784840cdc3d8637f3c3116">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-e062419844aa5d1efff234153f0b16e72a267631c878fcd9af4de1a25f4bbb1a">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-55e24992a9892fd6d5cf6eeacd42d43ea6ade99977b82ce345a6409201566b2a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-3f884d5151b3f8f8e22f7cf60abb36474959597e92bb056e33a292c1cc6be597">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6a3f00a85e4f72b8ed55225102d0863539e73f876f6d29ec60f99fead969d883">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6b4505927b8e2abbf0b0925d981e1703cf5ea557b1534c07dbf912310d391021">+43/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-28828a2828bc3e41f9956a22e695d0f1e96a997db47106b83886a4ecd2e1354a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-09f683d3491ec520132dbbe2610bfa59c5ed81682b5175b347cd11ad1019ae9f">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>body.html</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-d1b04ce22cfa7bf33673c06ff30673fd18cff5467093c3f1e4435a08136aaeb1">+52/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>subject.txt</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-2d991a9036664feca0f30b513c231551ba7d0667809410b8a6703a7298ba2b2f">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>README.md</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-db5537429694d86082c34ac97881b7811aa1c79ee496dd79c248494698ba3b83">+23/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>email-confirm-change.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-0bf93b57a4a18ccfa08b72816a7eea2c14c00ce92d9a07249405805500c8bb45">+129/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>email-verify.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-67bf177366a960b6f068b1c8802f5c200b6ce6069f8d5e61c632aa4191b8adca">+127/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>password-reset.tsx</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-6e2461fe97310e38e2e4eed0e20570c5a51636989b95c646661f7bc04b37dd5d">+127/-0</a>&nbsp;
</td>

</tr>

<tr>
  <td><strong>render-emails.ts</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-2bc9d596f730e2c72f02a1f57d6636136f898d81396493d1fcb803cae3f7351e">+82/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td><strong>Additional files not shown</strong></td>
<td><a
href="https://github.com/nhost/nhost/pull/3443/files#diff-2f328e4cd8dbe3ad193e49d92bcf045f47a6b72b1e9487d366f6b8288589b4ca"></a></td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-24 14:50:55 +02:00
David Barroso
0367dfae00 feat (general): clean repository (#3432)
Co-authored-by: robertkasza <167509084+robertkasza@users.noreply.github.com>
Co-authored-by: Nuno Pato <nunopato@gmail.com>
Co-authored-by: David BM <correodelnino@gmail.com>
2025-09-24 14:50:55 +02:00
github-actions[bot]
6ad1cfcb13 chore: update versions (#3476)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @nhost/dashboard@2.37.0

### Minor Changes

-   cc98f33: fix: rename filename typo

### Patch Changes

-   25c0ffa: fix (dashboard): Parse tablename correctly into SQL query
- 8812d9d: feat (dsashboard): Simplyfy column and row controls in
database view

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@nhost/dashboard@2.37.0
2025-09-23 15:14:19 +02:00
robertkasza
25c0ffa83b fix (dashboard): Parse tablename correctly into SQL query (#3483)
### **PR Type**
Bug fix, Tests


___

### **Description**
- Fix SQL identifier placeholder to parse table names correctly

- Add `toPascalCase` utility and use in E2E tests

- Update create-table test to assert `id` column header


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["toPascalCase utility"] --> B["create-table.test uses PascalCase"]
  B --> C["prepareTable creates table"]
  C --> D["fetchTable uses %I placeholders"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>create-table.test.ts</strong><dd><code>Update E2E test
to use PascalCase table names</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

dashboard/e2e/database/create-table.test.ts

<ul><li>Imported <code>toPascalCase</code> from utils<br> <li> Switched
tableName generation from snakeCase to PascalCase<br> <li> Added
assertion for <code>id</code> column presence</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3483/files#diff-1e7aa9f3e379ca90a94b82c14be48e2c98a722d85ee1b0785a082b7076d8e58c">+3/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>utils.ts</strong><dd><code>Add toPascalCase utility
function</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

dashboard/e2e/utils.ts

<ul><li>Introduced <code>toPascalCase</code> function for string
conversion<br> <li> Default divider set to space for word splitting</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3483/files#diff-490448aa83585151d8c61d698273c43486fdcac6a5d28a9b7e5be2729bbffd12">+7/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>fetchTable.ts</strong><dd><code>Use identifier
placeholders in SQL query generation</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/hooks/useTableQuery/fetchTable.ts

<ul><li>Replaced <code>%1$s</code> with <code>%1$I</code> identifier
placeholders<br> <li> Ensures proper REGCLASS SQL parsing for table
names</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3483/files#diff-a58cb7660972ff84991cdd9777de5cf0834485072cbd421f8809638227c36820">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>mean-cheetahs-greet.md</strong><dd><code>Add changeset
for SQL table parsing fix</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.changeset/mean-cheetahs-greet.md

<ul><li>Added changeset entry for dashboard patch version<br> <li>
Documented SQL table name parsing fix</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3483/files#diff-601e4fafd8d53cc5c99ed7e520180b2310cfa3ac5eb0d256c28cd5f7d8aaedc3">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-23 10:30:55 +02:00
David BM
cc98f33440 fix (dashboard): typo in test filename (#3482)
### **PR Type**
Tests


___

### **Description**
- Add comprehensive tests for `DeploymentServiceLogsHeader`

- Mock project hook and GraphQL service label query

- Simulate user selecting service and submitting regex

- Validate `onSubmit` callback invocation


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>

<summary><strong>DeploymentServiceLogsHeader.test.tsx</strong><dd><code>Add
DeploymentServiceLogsHeader tests</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/deployments/components/DeploymentServiceLogs/DeploymentServiceLogsHeader.test.tsx

<ul><li>New test file for <code>DeploymentServiceLogsHeader</code>
component<br> <li> Mocks <code>useProject</code> hook and GraphQL
<code>useGetServiceLabelValuesQuery</code><br> <li> Sets up MSW server
and environment variables<br> <li> Simulates UI interactions and asserts
<code>onSubmit</code> call</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3482/files#diff-952e9bf5cf78ce4bfc41a326f001a2fc4d781571bfa6ee8e441d3c50ff6ad495">[link]</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-19 18:12:02 +02:00
robertkasza
8812d9dcaf feat (dsashboard): Simplyfy column and row controls in database view (#3474)
### **PR Type**
Enhancement


___

### **Description**
- Remove insert column functionality from DataBrowser grid

- Simplify controls: only "Insert row" button remains

- Clean DataGridBody: remove row placeholders and column insertion

- Remove unused props and imports across components


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>DataBrowserGrid.tsx</strong><dd><code>Remove insert
column control from DataBrowserGrid</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/components/DataBrowserGrid/DataBrowserGrid.tsx

<ul><li>Removed <code>onInsertColumnClick</code> prop in
<code>controls</code><br> <li> Kept only <code>onInsertRowClick</code>
handler</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3474/files#diff-5910fd8730fbe65c60aa5f54031989a7868e944d5958f69535e5684b72ca1396">+0/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>DataBrowserGridControls.tsx</strong><dd><code>Simplify
insert controls to only row</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/components/DataBrowserGridControls/DataBrowserGridControls.tsx

<ul><li>Removed dropdown menu and <code>onInsertColumnClick</code>
logic<br> <li> Simplified UI to single "Insert row" button<br> <li>
Cleared unused imports (<code>Dropdown</code>, <code>RowIcon</code>,
<code>ColumnIcon</code>)</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3474/files#diff-640ce3e15c8d5f35d8bbe74792c59493afe5bc69873d2a40f81233da2b02661c">+7/-65</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>DataGrid.tsx</strong><dd><code>Remove onInsertRow prop
forwarding</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/storage/dataGrid/components/DataGrid/DataGrid.tsx

- Deleted forwarding of `onInsertRow` prop to `DataGridBody`


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3474/files#diff-3bc6476aed14d8e4f26134fa452d22c41b6d3ecb0989871a8a99230a82496474">+0/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>DataGridBody.tsx</strong><dd><code>Remove row insertion
placeholders</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/storage/dataGrid/components/DataGridBody/DataGridBody.tsx

<ul><li>Deleted <code>InsertPlaceholderTableRow</code> component and
row-insert code<br> <li> Simplified empty state rendering without insert
slots<br> <li> Removed unused imports and key-generation logic</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3474/files#diff-e5cdb81b2c99dbd7b9a669a63ed503f6964e9c0bc91ca2c0e61df5334eaa7a1b">+61/-143</a></td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>DataGridHeader.tsx</strong><dd><code>Drop column
insertion button</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/storage/dataGrid/components/DataGridHeader/DataGridHeader.tsx

<ul><li>Removed insert column button and <code>PlusIcon</code>
import<br> <li> Cleaned up unused <code>Box</code> and
<code>Button</code> imports</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3474/files#diff-3f5f16ea95a730255a07806c96b55fd4946c92eebcb869cdf83ad92bfe034b4c">+0/-18</a>&nbsp;
&nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>nine-mayflies-explain.md</strong><dd><code>Add patch
changeset</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

.changeset/nine-mayflies-explain.md

- Added patch changeset metadata for `@nhost/dashboard`


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3474/files#diff-c48e1f5b21fee902cf64b303567874f26103414d9c1e8a51d9e09d9600eba3ab">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-17 14:42:05 +02:00
github-actions[bot]
bf17981596 chore: update versions (#3453)
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to main, this PR will
be updated.


# Releases
## @nhost/dashboard@2.36.0

### Minor Changes

-   a30da08: feat (dashboard): add custom types to column types

### Patch Changes

-   73a7ba8: fix (dashboard): Show errors in row permission rule form
-   397bfc9: fix (dashboard): Parse foreign key relations correctly
- 2f4b376: fix (dashboard): allow permission variables with in operator
- 88836f3: fix (dashboard): use correct fallback endpoint for migration
in the CLI
- ba3c49e: fix (dashboard): Show nested relationships in row permissions
-   92e71a6: fix: minor fixes to csp
- 81716d9: fix (dashboard): Show validation error on save when editing
database columns

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@nhost/dashboard@2.36.0
2025-09-16 13:41:37 +02:00
robertkasza
2f4b3768c7 fix (dashboard): allow permission variables with in operator (#3461)
### **PR Type**
Bug fix, Tests, Enhancement


___

### **Description**
- Refactor FancyMultiSelect to controlled component

- Enhance RuleValueInput `_in` operator for system variables

- Add unit tests for RuleValueInput variable selection

- Include `Allowed-Ids` in permission variables list


___

### Diagram Walkthrough


```mermaid
flowchart LR
  FV["Form value"]
  GD["getDefaultValueForMultiSelect"]
  FMS["FancyMultiSelect"]
  OC["handleOnChange"]
  SV["setValue"]
  FV -- "parsed by" --> GD
  GD -- "initializes" --> FMS
  FMS -- "user selects" --> OC
  OC -- "updates" --> SV
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>fancy-multi-select.tsx</strong><dd><code>Make
FancyMultiSelect controlled and test-friendly</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

dashboard/src/components/ui/v3/fancy-multi-select.tsx

<ul><li>Export <code>Option</code> type<br> <li> Use controlled
<code>value</code> instead of <code>defaultValue</code><br> <li> Sync
selected via <code>useEffect</code> on <code>value</code> changes<br>
<li> Add <code>data-testid</code> to badge span</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3461/files#diff-6e6a7965a2c8e30e9a2c021a5009ff79e71de73892b86a3468d3474163dfeb03">+13/-5</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>getAllPermissionVariables.ts</strong><dd><code>Add
Allowed-Ids system variable</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/permissions/settings/utils/getAllPermissionVariables/getAllPermissionVariables.ts

- Include `Allowed-Ids` as system variable


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3461/files#diff-9973106a26aa99d744772d8dfb09281b3f4f2cdaa3f865b2510f47fb9061089c">+6/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Bug fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>RuleValueInput.tsx</strong><dd><code>Enhance
RuleValueInput for in-operator variables</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/components/RuleGroupEditor/RuleValueInput.tsx

<ul><li>Import <code>Option</code> type<br> <li> Add
<code>getDefaultValueForMultiSelect</code> util<br> <li> Implement
<code>handleOnChange</code> for permission variables<br> <li> Switch
<code>FancyMultiSelect</code> to use controlled props</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3461/files#diff-e3198b245b5963e81e4566758b7d60c8d2784a7ca0ad0b17b354b33074ef1bb0">+57/-11</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>RuleValueInput.test.tsx</strong><dd><code>Add tests for
RuleValueInput selection logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/components/RuleGroupEditor/RuleValueInput.test.tsx

<ul><li>Add tests for <code>_in</code> operator variable selection<br>
<li> Mock project and permissions hooks<br> <li> Verify system and
custom variable behaviors</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3461/files#diff-cbb7789d45602230164e65506d0b2132b420b0cddead70ab8b012b0bb5897162">+170/-0</a>&nbsp;
</td>

</tr>
</table></td></tr><tr><td><strong>Miscellaneous</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>signup.tsx</strong><dd><code>Cleanup console logs in
signup page</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

dashboard/src/pages/signup.tsx

- Remove debugging `console.log` statements


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3461/files#diff-fc2b5989e3bbafda1d3d8b2317d24c39ef2b8cec0c4dc410170fa2da13464f68">+0/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>dry-snails-type.md</strong><dd><code>Add changelog for
permission variables fix</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>

.changeset/dry-snails-type.md

- Add changeset entry for dashboard patch


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3461/files#diff-ccdfc53a10fb172936e239d895569a94a5413d1f8a6d1d81270bcd4051ba64e1">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-16 13:38:25 +02:00
robertkasza
73a7ba82ae fix (dashboard): Show errors in row permission rule form (#3471)
### **PR Type**
Bug fix, Tests, Enhancement


___

### **Description**
- Improve row permission form error handling

- Integrate `FormField` for validation feedback

- Update tests using `TestUserEvent.fireClickEvent`

- Extend MSW mocks for metadata and table queries


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>5
files</summary><table>
<tr>
<td><strong>TransferProjectDialog.test.tsx</strong><dd><code>Replace
`asyncFireEvent` with `TestUserEvent.fireClickEvent`</code></dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-d4ebdb8af76a7c9e73606708718c3448445545259ad553d73b6d322408e3eb8c">+3/-16</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>RowPermissionSection.test.tsx</strong><dd><code>Add
comprehensive tests for row permissions section</code>&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-2a32fbb9eda12ec8eb93746c5c8b171e8ae20d18e661a5e2eb0c4996fee8376b">+211/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>hasuraMetadataQuery.ts</strong><dd><code>Add
`hasuraColumnMetadataQuery` mock endpoint</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-2828f4a1163f0d281abf2517e76fc9dd393bb870478aea874019a42f9c4b7ac3">+260/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>tableQuery.ts</strong><dd><code>Extend actor table mock with
column and row data</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-fdb6ad2a7e58c374f3a6772219e7f7e72ca2927def74ec75893b064caba12639">+40/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>testUtils.tsx</strong><dd><code>Add `fireClickEvent` helper
to `TestUserEvent`</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-78f29250407edf853a353b48242d3cee59aa5724f38a60bb23bebdfc1ea2f9b5">+13/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>4
files</summary><table>
<tr>
<td><strong>ColumnAutocomplete.tsx</strong><dd><code>Add `className`
prop and merge via `cn`</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-c89efa530042890e7d6277c2e3c763cb7c9b9fc1d7c14c62839f4cf7c42528f7">+6/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>RowPermissionsSection.tsx</strong><dd><code>Refactor filter
logic and default row check type</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-663956d9adae1f6255151599b1cbd6ad03fea1246e87ab89329fcddcdbec2b20">+12/-28</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>RuleEditorRow.tsx</strong><dd><code>Wrap column input with
`FormField` and error styling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-a7a1d2aa882735a2b9cfb41e95b05c6777d706570eec5deec6bf5d2381a51252">+47/-28</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>RuleValueInput.tsx</strong><dd><code>Introduce
`RuleInputWrapper` with validation messages</code>&nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-e3198b245b5963e81e4566758b7d60c8d2784a7ca0ad0b17b354b33074ef1bb0">+43/-6</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>OperatorComboBox.tsx</strong><dd><code>Reset value and clear
errors on operator change</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-bf3aa91fe39fe48522262f0f908b7d151ce75cb005ec50fe38c2429d0e81ddb1">+4/-5</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>vitest.config.ts</strong><dd><code>Enable silent logging in
Vitest config</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-09548f3bfb7c005a1d2f3d9d7f1f5d00c608d821572250400d92eda63ae7251a">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>brave-fans-sit.md</strong><dd><code>Add changeset for
dashboard patch release</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3471/files#diff-25c255427ffb291f4e9d7ab56622f3fee8bc9ea2ca0b38242d9b7e41273bea88">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-16 10:45:39 +02:00
robertkasza
ba3c49e443 fix (dashboard): Show nested relationships in row permissions (#3473)
### **PR Type**
Bug fix, Tests, Enhancement


___

### **Description**
- Add MSW mock for nested relationship metadata

- Add test verifying nested relationships display

- Simplify `CommandList` rendering logic

- Introduce `fireClickEvent` helper in tests


___

### Diagram Walkthrough


```mermaid
flowchart LR
  metadata["\"MSW nested metadata mock\""]
  component["\"ColumnAutocomplete component\""]
  ui["\"Displays nested relationship options\""]
  metadata -- "provides nested data" --> component
  component -- "renders options" --> ui
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>4
files</summary><table>
<tr>
<td><strong>ColumnAutocomplete.test.tsx</strong><dd><code>Add nested
relationship test and router mock</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3473/files#diff-2da9237ad932fa46d684a3c8fe3afb6686af561e136e6aea5fa588f3979e131e">+76/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>hasuraMetadataQuery.ts</strong><dd><code>Add
`hasuraRelationShipsMetadataQuery` mock</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3473/files#diff-2828f4a1163f0d281abf2517e76fc9dd393bb870478aea874019a42f9c4b7ac3">+98/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>tableQuery.ts</strong><dd><code>Add `town` table MSW mock
data</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3473/files#diff-fdb6ad2a7e58c374f3a6772219e7f7e72ca2927def74ec75893b064caba12639">+42/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>testUtils.tsx</strong><dd><code>Add `fireClickEvent` helper
method</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3473/files#diff-78f29250407edf853a353b48242d3cee59aa5724f38a60bb23bebdfc1ea2f9b5">+13/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>ColumnAutocomplete.tsx</strong><dd><code>Simplify
CommandList and support nested relationships</code>&nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3473/files#diff-c89efa530042890e7d6277c2e3c763cb7c9b9fc1d7c14c62839f4cf7c42528f7">+45/-85</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Formatting</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>useTableQuery.ts</strong><dd><code>Remove extra blank line
in hook implementation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3473/files#diff-13ce245133be3c4bbcd9fe302cacd42e3e8472dc57d8ce27371e59818240d942">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>new-eels-run.md</strong><dd><code>Add changeset for nested
relationships fix</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3473/files#diff-5ed65e898211e2d9e7614fed8b4bccc0c501b0767a564baaace82ca7bd185d36">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-16 08:33:08 +02:00
robertkasza
88836f3b1f fix (dashboard): use correct fallback endpoint for migration in the CLI (#3472)
### **PR Type**
Bug fix


___

### **Description**
- Remove `/apis/migrate` suffix in migration fetch URLs

- Update default fallback Hasura migrations API endpoint

- Add changeset entry for migration endpoint fix


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><details><summary>9 files</summary><table>
<tr>
<td><strong>createColumnMigration.ts</strong><dd><code>Remove
`/apis/migrate` suffix from fetch URL</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-806e4808866ca6ba76c359ef8ae68346cd83f8bec034f6057210b86c2cfd11ec">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>createTableMigration.ts</strong><dd><code>Remove
`/apis/migrate` suffix from fetch URL</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-e033710673c18c205655684e8a930963aff2363f314faa8d7dd36bd645e8a3f6">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>deleteColumnMigration.ts</strong><dd><code>Remove
`/apis/migrate` suffix from fetch URL</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-b0c2fc34ff94579ef93ee14aae60a6d2df3d2986014d8740f56508f321dec8cb">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>deleteTableMigration.ts</strong><dd><code>Remove
`/apis/migrate` suffix from fetch URL</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-2e192aca09dca7ff2a9cb105daa94330629e1fccfdf9a1bdee9fdba510c23abd">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>managePermissionMigration.ts</strong><dd><code>Remove
`/apis/migrate` suffix from fetch URL</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-6618ac02347ee4e55aaeacece7894330d86f9716d8fbd9a907a11c9a977461d2">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>

<td><strong>trackForeignKeyRelationsMigration.ts</strong><dd><code>Remove
`/apis/migrate` suffix from fetch URL</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-8562c65950e2ff578d8db135790713bbff282ff6a61ff98bb5558a51944927d2">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>trackTableMigration.ts</strong><dd><code>Remove
`/apis/migrate` suffix from fetch URL</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-c7cb8539796fe51acbde04b83f33bbce0474284e3a3840d65eb8cd9b21f951bc">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>updateColumnMigration.ts</strong><dd><code>Remove
`/apis/migrate` suffix from fetch URL</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-11cb8c97ec6d26491538e7032840513127cb4044b9ff3a8890e3602c4ae4a6c6">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>updateTableMigration.ts</strong><dd><code>Remove
`/apis/migrate` suffix from fetch URL</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-7817a436afa62e58c14d5b0570093de17b57c8abc5b17ad7f191465b75a86cb2">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>1 files</summary><table>
<tr>
<td><strong>env.ts</strong><dd><code>Update default Hasura migrations
API URL</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-38801f053432e037993a6c8359ff512d7a6cfa9579597b92449f12c05c9c14e9">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>neat-coins-hide.md</strong><dd><code>Add changeset for
migration endpoint fix</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3472/files#diff-198c242704f17162fd3bc020b3e0284494eb752bb0c27866953742a2c08f2026">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-12 15:48:57 +02:00
robertkasza
81716d9d9c fix (dashboard): Show validation error on save when editing database columns (#3464)
### **PR Type**
Bug fix


___

### **Description**
- Simplify useFormState name path

- Fix error path in ColumnErrorMessage

- Include patch changeset for dashboard


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>ColumnEditorRow.tsx</strong><dd><code>Simplify
useFormState name path</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/components/BaseTableForm/ColumnEditorRow/ColumnEditorRow.tsx

<ul><li>Removed redundant <code>columns</code> entry from field name
array<br> <li> Targets errors specifically for column name field</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3464/files#diff-264f067037cfa5d08dbb97964a9ddb8f6296129441682b78f6984c37051ea3f8">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>ColumnEditorTable.tsx</strong><dd><code>Fix error
message path usage</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/components/BaseTableForm/ColumnEditorTable.tsx

<ul><li>Check <code>errors.columns.root.message</code> instead of
<code>errors.columns.message</code><br> <li> Ensure correct validation
message in HelperText</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3464/files#diff-4cff130e7f375bf59ccc86eef6c1b48336a35691edd2a3197f37a143680a75d6">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>unlucky-terms-hang.md</strong><dd><code>Add dashboard
patch changeset</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

.changeset/unlucky-terms-hang.md

<ul><li>Add changeset entry for dashboard patch release<br> <li> Note
validation error display fix</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3464/files#diff-e19c29a8792be84bdda0217bdef2838fb92eda3de38c4800313a70818207987a">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-11 15:54:28 +02:00
robertkasza
a30da08e9b feat (dashboard): add custom types to column types (#3442)
### **PR Type**
Enhancement


___

### **Description**
- Add custom column types to database tables

- Improve handling of user-defined data types

- Update UI components for custom type support

- Refactor column type normalization and validation


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Column Type Handling"] -- "Extend" --> B["Custom Types"]
  B -- "Update" --> C["UI Components"]
  B -- "Refactor" --> D["Type Normalization"]
  D -- "Improve" --> E["Data Validation"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>15
files</summary><table>
<tr>
<td><strong>Autocomplete.tsx</strong><dd><code>Enhance Autocomplete
component for custom types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-b185666714ca832d5c45c366618b79862f6b4f03e4f7657c78afa38a52e7c4c2">+27/-3</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>BaseColumnForm.tsx</strong><dd><code>Update BaseColumnForm
to support custom column types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-9750f922830f8637c2d1b81c5e40128bc4fca7a9349a5314e421353d73bf6f38">+43/-16</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>ColumnEditorRow.tsx</strong><dd><code>Modify ColumnEditorRow
to handle custom types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-264f067037cfa5d08dbb97964a9ddb8f6296129441682b78f6984c37051ea3f8">+37/-10</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>DataBrowserGrid.tsx</strong><dd><code>Update DataBrowserGrid
to display full data type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-5910fd8730fbe65c60aa5f54031989a7868e944d5958f69535e5684b72ca1396">+6/-11</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>DatabaseRecordInputGroup.tsx</strong><dd><code>Adjust
DatabaseRecordInputGroup for custom types</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-52b5499e9afc3c5e4929046b487de649d421dda3250a4131462ec710575abc12">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>prepareCreateColumnQuery.ts</strong><dd><code>Modify
prepareCreateColumnQuery for custom types</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-9b3695fb28760e86fc966e2149082b798664f145a8b64ef66184e55a905f5071">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>prepareCreateTableQuery.ts</strong><dd><code>Adjust
prepareCreateTableQuery for custom types</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-1458307108df70f7037fa516ccab3a028533cf23f752778fcb09ed8d326530e5">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>fetchTable.ts</strong><dd><code>Modify fetchTable to include
full data type</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-a58cb7660972ff84991cdd9777de5cf0834485072cbd421f8809638227c36820">+36/-28</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>prepareUpdateColumnQuery.ts</strong><dd><code>Adjust
prepareUpdateColumnQuery for custom types</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-ef957000505e4ba437656c38b4371d4041471ce5a4c193ef381aa55e0c51c308">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>dataBrowser.ts</strong><dd><code>Update type definitions for
custom column types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-33c6810dbd7e2910c86a15009467a348f064380b0e1dd787ef320b4e7543403b">+2/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>index.ts</strong><dd><code>Add new utility for normalizing
column types</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-df62570fe4a332639b789274e3db4ea98cc695bc306f6dc1692851280bdb2fde">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>normalizeColumnType.ts</strong><dd><code>Implement
normalizeColumnType utility function</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-6bc7935091971eb83f99ba700e11f7214599d4d86e41f96d0d8295bdd6441d8f">+11/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>normalizeDatabaseColumn.ts</strong><dd><code>Modify
normalizeDatabaseColumn to use new utility</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-e00d1c71fcbc63286896b597ce820388987e0a7edb005bda8a13bb0c0813434b">+2/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>postgresqlConstants.ts</strong><dd><code>Update PostgreSQL
type constants and groups</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-b497da90feca5bff94b0d38b69e519d171d43acc292098054d672a73a89b4717">+6/-8</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>DataGridTextCell.tsx</strong><dd><code>Adjust
DataGridTextCell for custom type handling</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-d1ed74fe8eb7a61053dfe908966311e13915ad2127ee107b62f725d6c5282492">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>5
files</summary><table>
<tr>
<td><strong>prepareCreateTableQuery.test.ts</strong><dd><code>Update
tests for custom column type support</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-348ba7ca6fc037a9d0de76a24efc36846c634d82755bbf33dd5062a7face06ec">+232/-198</a></td>

</tr>

<tr>
<td><strong>prepareUpdateColumnQuery.test.ts</strong><dd><code>Update
tests for custom column type changes</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-65420c7003a95c03b31fc4b0e45f6a22387f81c1ce8e41a2d7cb89cc44dbda26">+557/-494</a></td>

</tr>

<tr>
<td><strong>prepareUpdateTableQuery.test.ts</strong><dd><code>Update
tests for custom column type support</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-57c2f882497d653700d68905bb54c891592a6bf302040d3008d624900f1bdf64">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>getInputType.test.ts</strong><dd><code>Update tests for
input type handling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-01a507828b9440cd99bd0722ab5b577d8dd1774f2320168ad88222138960e831">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>normalizeDatabaseColumn.test.ts</strong><dd><code>Update
tests for database column normalization</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-a451c29ffa35243d4dbb462e3a048088c514f8056effedf782fcc57d5235e338">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>rich-dragons-attend.md</strong><dd><code>Add changeset for
custom column types feature</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3442/files#diff-bb90b20cf816a7c7bfc628f9daae90b9deff5d8c00f36361190d6147b46fb6be">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-08 14:24:43 +02:00
robertkasza
397bfc948c fix (dashboard): Parse foreign key relations correctly (#3458)
### **PR Type**
Bug fix, Tests


___

### **Description**
- Pass updated table name to refetch queries

- Extend `onSubmit` callbacks with `tableName`

- Strip quotes from foreign key column names

- Add and restructure tests for extractor


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Bug
fix</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>DataBrowserSidebar.tsx</strong><dd><code>Update
refetchQueries with new tableName</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/components/DataBrowserSidebar/DataBrowserSidebar.tsx

<ul><li>Accept <code>tableName</code> in <code>onSubmit</code>
callback<br> <li> Use <code>tableName</code> for
<code>refetchQueries</code> key</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3458/files#diff-3a9ff7af4a31fbf7e501a77399b2b35306d9e635b021c93f1bc13fc4e225219c">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>EditTableForm.tsx</strong><dd><code>Extend onSubmit to
receive tableName</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/components/EditTableForm/EditTableForm.tsx

<ul><li>Change <code>onSubmit</code> prop to accept
<code>tableName</code><br> <li> Pass <code>updatedTable.name</code> to
<code>onSubmit</code></ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3458/files#diff-e628e74884ed048e1498960b80ad4d2a9fa6b4e05c89545c404e0ed50b43e50a">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>extractForeignKeyRelation.ts</strong><dd><code>Strip
quotes from extracted column names</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/utils/extractForeignKeyRelation/extractForeignKeyRelation.ts

- Remove surrounding parentheses and double quotes from `columnName`


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3458/files#diff-ff940d21b4207265ccae2acaa2e5b8d2a0edc01fd51f14d1c0f6beed43596c49">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Tests</strong></td><td><table>
<tr>
  <td>
    <details>

<summary><strong>extractForeignKeyRelation.test.ts</strong><dd><code>Restructure
extractor tests and add cases</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>


dashboard/src/features/orgs/projects/database/dataGrid/utils/extractForeignKeyRelation/extractForeignKeyRelation.test.ts

<ul><li>Group tests under <code>describe</code> blocks<br> <li> Add test
for capital-letter column names<br> <li> Consolidate no-action
scenarios</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3458/files#diff-9f5bd2c96f0cdcb925343201e389d2d57d8f1fb2adf7daf522338939c613f426">+126/-109</a></td>

</tr>
</table></td></tr><tr><td><strong>Configuration
changes</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>cold-toys-bow.md</strong><dd><code>Add changelog for
foreign key fix</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.changeset/cold-toys-bow.md

- Add dashboard patch changelog entry


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3458/files#diff-fe0a7d0ca4fb132b472a16dacc0ebc4ade0b69f3280d10ac4c9b35c955ccdce3">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-04 11:00:52 +02:00
robertkasza
0d183761ae fix (dashboard): allow any service to be filtered (#3452)
### **PR Type**
Bug fix, Enhancement


___

### **Description**
- Allow filtering logs by any service

- Refactor log service constants and types

- Update tests for new service filtering

- Improve DateTimePicker component tests


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["Old Service Enum"] --> B["Dynamic Service List"]
  C["Fixed Service Labels"] --> D["Flexible Service Labels"]
  E["Limited Service Filter"] --> F["Any Service Filter"]
  G["DateTimePicker Tests"] --> H["Improved DateTimePicker Tests"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><details><summary>4
files</summary><table>
<tr>
<td><strong>DateTimePicker.test.tsx</strong><dd><code>Improve
DateTimePicker component tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-c7076012eb33d6f60049710638b5ad19c2f310b8c250c79f1905be7e0a30b00a">+12/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>DeploymentServcieLogsHeader.test.tsx</strong><dd><code>Add
tests for DeploymentServiceLogsHeader</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-46fb5d0c9528168323c0e16ef4186d91fe6274b64292f43841258bdfc45dd581">+81/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>useProjectLogs.test.ts</strong><dd><code>Update
useProjectLogs tests for new service handling</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-13d900aa08d06962a09628136b893801ad62a96c3ff89d380c5c4b7ae92d891e">+9/-9</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>LogsHeader.test.tsx</strong><dd><code>Add tests for
LogsHeader with new service handling</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-6a348a6b3f868aac854020f2b85ff9a7cf5d61f362a5201e77681e4d5a576f20">+86/-0</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Enhancement</strong></td><td><details><summary>8
files</summary><table>
<tr>
<td><strong>LogsServiceFilter.tsx</strong><dd><code>Update
LogsServiceFilter to support any service</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-a590a7298a9f040df9f26c4eb37d10fc36f47c32996f71aec47796f08c44e892">+8/-7</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>DeploymentServiceLogs.tsx</strong><dd><code>Update
DeploymentServiceLogs to use CoreLogService</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-333a9783713e9a4bad1b5327e117cbe69148091abe8b9038d36132b5f4635bbe">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>DeploymentServiceLogsHeader.tsx</strong><dd><code>Refactor
DeploymentLogsHeader to use CoreLogService</code>&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-4f102c06ed32bb3d8245e415e76b0b14d2d4ae3abca6e234edf69278325c7a95">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>useProjectLogs.ts</strong><dd><code>Refactor useProjectLogs
to handle any service</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-10efc67700b3f024dd03442eacd339802e951696d04caa76bd5a864bd5c7c83f">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>LogsBody.tsx</strong><dd><code>Update LogsBody to use
CORE_LOG_SERVICE_TO_LABEL</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-b628e511a7fb9b237ac691b27ab9585eed0d0803144cde66c3af7fa6f9a2dc40">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>LogsHeader.tsx</strong><dd><code>Refactor LogsHeader to
support any service</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-ebb3285aa776c9c5ea8b72672c4aafd55994c6c694998bbf56ca9c56d1e77664">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>services.ts</strong><dd><code>Rename AvailableLogsService to
CoreLogService</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-8fcdaed33322718091b613ae22c65cc3eb61972904b5af46866b160c9bbbe48c">+13/-13</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>logs.tsx</strong><dd><code>Update logs page to use
CoreLogService</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/nhost/pull/3452/files#diff-77489a68a7526d74f06d59019ad68c44728b7620637308d70fba38d6649b73fa">+3/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-01 15:41:55 +02:00
David Barroso
183bd83ad7 fix: use postgres crypt to handle OTP hashing (#674)
### **PR Type**
Enhancement, Bug fix


___

### **Description**
- Add configurable SMS provider flag

- Simplify OTP generation and storage

- Update SQL to cryptographically verify OTP

- Refactor and export password hash verifier


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["CLI --sms-provider flag"]
  B["getSMS initializes provider"]
  C["Dev or Twilio backend"]
  D["SendVerificationCode generates OTP"]
  E["DB stores and verifies OTP using crypt"]
  A -- "provides flag" --> B
  B -- "selects provider" --> C
  C -- "sends code" --> D
  D -- "calls DB update" --> E
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>9
files</summary><table>
<tr>
<td><strong>email.go</strong><dd><code>Add SMS provider switch in
getSMS</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-a6364ed092c8bd789262322ec1e0108c274323462a0af0b7c7dd10a07f0bc449">+20/-11</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>secrets.go</strong><dd><code>Export password hash
verifier</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-97ceb71f0d904089c77f432c1eb00e9b2b202b5b4ec191a52287386f06f0221b">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>sign_in_email_password.go</strong><dd><code>Use exported
VerifyHashPassword</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-c10b97a61def73058ca42e90bcdd6eb373637816f1c2eb05f448887abea0c996">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>sign_in_otp_email.go</strong><dd><code>Introduce generateOTP
function</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-ef51144d6b45769b4ac4e5bbe0531a8cc235ef35c8d44a655ec689c8a81a45a0">+13/-1</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>dev.go</strong><dd><code>Add Dev SMS provider
implementation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-875168f3184f1535f1a9893cd1c9f716e546b99057f4ce170b934d5ae661cac9">+32/-0</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>sms.go</strong><dd><code>Simplify SMS OTP generation
logic</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-5c133e946d3d4678c97b6d28dfe7985b8f2b87a3f1fc26385bf07413e9508551">+13/-20</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>twilio_sms.go</strong><dd><code>Remove OTP args in TwilioSMS
constructor</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-c61a03d180f37c02b5dfc5224be8d2cbf8511dd6782153a76d09d9ce0ac9eaf6">+0/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>sign_up_email_password.go</strong><dd><code>Remove OtpHash,
set empty Otp field</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-21603d0151e49e6bf3da5747febc7d63b05501ef9c49559202b906faba64809a">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>sign_in_passwordless_email.go</strong><dd><code>Set empty
Otp on signup with ticket</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-75955329f33dc13dc34388566d2874aaf09cda6ed864be1775e04db48bd3029b">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Configuration
changes</strong></td><td><details><summary>2 files</summary><table>
<tr>
<td><strong>serve.go</strong><dd><code>Add sms-provider CLI
flag</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-a900f3187c126bacf5c9c5b1745b5d14bc583c01ab8f1ca84ae449751c224b68">+8/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>.golangci.yaml</strong><dd><code>Add goconst linter for
tests</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-9917ddc9f1c3304218f7269265b746d997c5c0615478177b5fceecd33ef47cb5">+1/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Cleanup</strong></td><td><details><summary>3
files</summary><table>
<tr>
<td><strong>workflows_tickets.go</strong><dd><code>Remove legacy OTP
generator and hasher</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-a4d16eaab24ba5b8c7b93fb112b8dd7a7ff7a70308e2d334b1ba6ba38df8b1ee">+0/-27</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>controller.go</strong><dd><code>Remove obsolete OTP
interface method</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-68eba6c5b3be94c2016a5c821351ad07c60e395226594ff744901f759e22af15">+0/-3</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>controller.go</strong><dd><code>Remove mocks for phone OTP
method</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-f1b1f168b0924b023c571d6274d53defef472a872f5fee4de1c4ae78959cc327">+0/-30</a>&nbsp;
&nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Bug
fix</strong></td><td><details><summary>3 files</summary><table>
<tr>
<td><strong>query.sql.go</strong><dd><code>Update
GetUserByPhoneNumberAndOTP crypt logic</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-442fde6e20ac506fb6bc13c00a7374ee9c33b183ffda72db4e49e1b013cd4cde">+17/-11</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>query.sql</strong><dd><code>Align OTP SQL with crypt-based
check</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-c19dd96472c44a7389d4d1f72e0a1879df1e06e8e4d333ca3cb6b6dfbe3083ef">+10/-4</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>sign_in_passwordless_sms.go</strong><dd><code>Use raw OTP
instead of stored hash</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-27f138a5979edb2e311a55e08f902030c7c1ad35ab4600c8e0b41b4c03a70b8d">+9/-13</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>1
files</summary><table>
<tr>
<td><strong>cli.md</strong><dd><code>Document --sms-provider
option</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-27c8c22b45605a0ddf42ce8017b6b2a68cb3b10534c18bf4a781e230d7b92361">+3/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Tests</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>sign_in_passwordless_sms_test.go</strong><dd><code>Update
tests for OTP vs hash</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-b51c9ca27064e2579444e6eecca4908c5c5f0f3d567b9a125406ca07f00354a7">+36/-36</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>sign_up_email_password_test.go</strong><dd><code>Update
tests to expect Otp field</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-2cd7cf89bd4d3e6fdfacd10d66740c02196b2bee4f9ec44409c4ad6a77d53685">+6/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr><tr><td><strong>Additional
files</strong></td><td><details><summary>7 files</summary><table>
<tr>
  <td><strong>elevate_webauthn_test.go</strong></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-47ef225c96c0aa63c67e926b18c922a14e7ccbd71145ffe646da196d3cc13880">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>refresh_token_test.go</strong></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-7c06d2d7bbfc744dd9feaa835b3ff8f2856304325c0fe45035bd9c655b2086d8">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>sign_in_otp_email_test.go</strong></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-aff8747c582d84badc6a27e1f2f88dd91761ca1901f983908aab20f02c7eb5e3">+6/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>sign_in_passwordless_email_test.go</strong></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-f8cb52277c756ae8dfb128d6cf53df90a0c8e3506fe8402eb9d77a7658138678">+6/-6</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>sign_in_provider_callback_get_test.go</strong></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-b46929201c1137439ed7682d5965a96d427110015ef31eb50fd3c86de3814d55">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>verify_elevate_webauthn_test.go</strong></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-8f96cae3346b1cd7cddadcb3d588a05dcf51bf7d814fa9ae6817ed776a6ccbca">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td><strong>gocmp.go</strong></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/674/files#diff-27aaac461c10f73569f7c93a2c299818d040c491f1fbd5279c682f5488dc65ed">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-01 12:58:59 +02:00
David Barroso
ccbc12f952 chore: update from urface/cli/v2 to v3 and fix a few outdated files (#672)
### **PR Type**
Enhancement


___

### **Description**
- Migrate from urfave/cli/v2 to v3 with API changes

- Update CLI flag configuration to use Sources instead of EnvVars

- Refactor function signatures to use cli.Command instead of cli.Context

- Add CLI documentation generation command


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["urfave/cli/v2"] --> B["urfave/cli/v3"]
  B --> C["Updated Flag Configuration"]
  B --> D["Function Signature Changes"]
  B --> E["CLI Documentation Generation"]
  C --> F["EnvVars → Sources"]
  D --> G["cli.Context → cli.Command"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><details><summary>10
files</summary><table>
<tr>
<td><strong>config.go</strong><dd><code>Update config functions for
cli/v3 compatibility</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-6ed50c9d309f6e7cf03742253995dfc65ae67702ae9c4aeb650b24a9b87cf377">+46/-46</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>db.go</strong><dd><code>Refactor database pool creation for
new CLI</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-644e121bc5cd81a5aeca411a3b94f595b16b01f59917f5d2bf604a659e73ccdd">+5/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>email.go</strong><dd><code>Update email configuration and
error handling</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-a6364ed092c8bd789262322ec1e0108c274323462a0af0b7c7dd10a07f0bc449">+27/-27</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>enum.go</strong><dd><code>Simplify enum value handling and
remove helpers</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-0172565db430c88e75447650002d7f88f34d425f694332142dd16350d79c19d3">+8/-29</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>jwt_getter.go</strong><dd><code>Update JWT getter
configuration for cli/v3</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-7e1ff4031caa178d9066e3eb8e9055636a219fc8517cac9bcf34c63033586006">+11/-11</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>logger.go</strong><dd><code>Refactor logging configuration
and flag processing</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-94894c27740fc35b5b4808f22d4a897030db993d1d9343221de51e505594612c">+20/-12</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>migrations.go</strong><dd><code>Update migration functions
for new CLI interface</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-8902ab7f0135be38b5d4c9e50105df8c79a3f7c4ce73c6006ed9cc751d652a7b">+10/-10</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>oauth.go</strong><dd><code>Update OAuth provider
configuration functions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-82367f3f24a804b47ced852a588881c0846894bc0edf1ca3bdc6aa5aef7c37b2">+96/-94</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>serve.go</strong><dd><code>Major CLI flag migration and
server configuration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-a900f3187c126bacf5c9c5b1745b5d14bc583c01ab8f1ca84ae449751c224b68">+218/-218</a></td>

</tr>

<tr>
<td><strong>main.go</strong><dd><code>Add CLI documentation generation
and update app structure</code></dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-2873f79a86c0d8b3335cd7731b0ecf7dd4301eb19a82ef7a1cba7589b5252261">+57/-9</a>&nbsp;
&nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Miscellaneous</strong></td><td><details><summary>5
files</summary><table>
<tr>
<td><strong>add_security_key_test.go</strong><dd><code>Add nolintlint
directive to test constant</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-e4bf9e60809ed847fc55d2859540ba867f91b5534f5ea339d689f5a80c832c10">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>elevate_webauthn_test.go</strong><dd><code>Add nolintlint
directive to test constant</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-47ef225c96c0aa63c67e926b18c922a14e7ccbd71145ffe646da196d3cc13880">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>sign_in_webauthn_test.go</strong><dd><code>Add nolintlint
directive to test constant</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-a920a6aad3937fe5b208622b01177a4b04a182240e113b6fd1a231b12e7ed20f">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>index.html</strong><dd><code>Remove WebAuthn test HTML
file</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-0eb547304658805aad788d320f10bf1f292797b5e6d745a3bf617584da017051">+0/-194</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>audit-ci.jsonc</strong><dd><code>Remove Node.js audit
configuration file</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-4ede69da2a1704e53e08b8d647a315c202f037cc9277f16c94176d9622d261c6">+0/-7</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

</table></details></td></tr><tr><td><strong>Documentation</strong></td><td><details><summary>7
files</summary><table>
<tr>
<td><strong>CLAUDE.md</strong><dd><code>Update development guide title
and content</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-6ebdb617a8104a7756d0cf36578ab01103dc9f07e4dc6feb751296b9c402faf7">+51/-42</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>DEVELOPERS.md</strong><dd><code>Remove outdated Node.js
development guide</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
</dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-bd017515eb79a7fb7569b1d15e8963ea380123d4fdf779978dd4b3ab7500fd10">+0/-77</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>README.md</strong><dd><code>Update installation and
configuration documentation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5">+11/-9</a>&nbsp;
&nbsp; </td>

</tr>

<tr>
<td><strong>SECURITY.md</strong><dd><code>Update security vulnerability
reporting URL</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-f6ed156e4bf5c791680662464b94ea5d753f219ee816b385f67870e2c0d7d4c7">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>cli.md</strong><dd><code>Add comprehensive CLI
documentation</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-27c8c22b45605a0ddf42ce8017b6b2a68cb3b10534c18bf4a781e230d7b92361">+481/-0</a>&nbsp;
</td>

</tr>

<tr>
<td><strong>configuration.md</strong><dd><code>Update configuration
documentation references</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-17ed18489a956f326ec0fe4040850c5bc9261d4631fb42da4c52891d74a59180">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>environment-variables.md</strong><dd><code>Remove outdated
environment variables documentation</code>&nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-24284b831e81f770335038e710187e2feb0c7c3f46148c31fea108516ce1ae59">+0/-127</a>&nbsp;
</td>

</tr>

</table></details></td></tr><tr><td><strong>Dependencies</strong></td><td><details><summary>2
files</summary><table>
<tr>
<td><strong>go.mod</strong><dd><code>Update dependencies for
urfave/cli/v3 migration</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-33ef32bf6c23acb95f5902d7097b7a1d5128ca061167ec0716715b0b9eeaa5f6">+7/-4</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
<td><strong>go.sum</strong><dd><code>Update dependency checksums for new
versions</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </dd></td>
<td><a
href="https://github.com/nhost/hasura-auth/pull/672/files#diff-3295df7234525439d778f1b282d146a4f1ff6b415248aaac074e8042d9f42d63">+6/-8</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></details></td></tr></tr></tbody></table>

</details>

___
2025-09-01 12:35:57 +02:00
robertkasza
1902a114ec chore: update nextjs version because of vulnerabilities (#3454)
### **PR Type**
Enhancement


___

### **Description**
- Bump Next.js to v14.2.31 across multiple packages

- Update dependency to address vulnerabilities


___



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Dependencies</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>package.json</strong><dd><code>Bump Next.js in
dashboard</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

dashboard/package.json

- Updated `next` version from ^14.2.30 to ^14.2.31


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3454/files#diff-2d8d55c799cd71f1b35e831f075f8178ed1734c4820a2ad548b4dd24d6938d7c">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>package.json</strong><dd><code>Bump Next.js in example
app</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

examples/nextjs/package.json

- Updated `next` version from ^14.2.30 to ^14.2.31


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3454/files#diff-23044c563f1173db6464d127497c342c8f7f90722764a37749681bf455a515e0">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>package.json</strong><dd><code>Bump Next.js in
quickstart</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

examples/quickstarts/nextjs-server-components/package.json

- Updated `next` version from ^14.2.30 to ^14.2.31


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3454/files#diff-04889f3402d5191034459febd340282af1c718175c3b0b14ff03fb2ab46cf9b3">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>

<tr>
  <td>
    <details>
<summary><strong>package.json</strong><dd><code>Bump Next.js in core
package</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; </dd></summary>
<hr>

packages/nextjs/package.json

- Updated `next` version from ^14.2.30 to ^14.2.31 in devDependencies


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3454/files#diff-e5237f683dda3354b835c7c7c94b9759db2c743d4ba94d47d7f8b8e0b2bfb442">+1/-1</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-01 09:29:36 +02:00
David Barroso
92e71a61f9 fix (dashboard): minor fixes to csp (#3451)
### **PR Type**
Enhancement


___

### **Description**
- Update CSP header in next.config.js

- Add googletagmanager.com to script-src

- Include github.com in img-src sources

- Create changeset for @nhost/dashboard patch


___

### Diagram Walkthrough


```mermaid
flowchart LR
  A["CSP Header"] --> B["Script Sources"]
  A --> C["Image Sources"]
  B -->|"Add"| D["googletagmanager.com"]
  C -->|"Add"| E["github.com"]
  F["Changeset"] -->|"Create"| G["@nhost/dashboard patch"]
```



<details> <summary><h3> File Walkthrough</h3></summary>

<table><thead><tr><th></th><th align="left">Relevant
files</th></tr></thead><tbody><tr><td><strong>Enhancement</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>next.config.js</strong><dd><code>Update Content
Security Policy header</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

dashboard/next.config.js

<ul><li>Added googletagmanager.com to script-src in CSP header<br> <li>
Included github.com in img-src sources in CSP header</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3451/files#diff-398ac9b04404f14166a89845539399764fecd520ad3e6f0119f8730c0eefa94a">+2/-2</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr><tr><td><strong>Documentation</strong></td><td><table>
<tr>
  <td>
    <details>
<summary><strong>tough-cougars-guess.md</strong><dd><code>Add changeset
for dashboard CSP fixes</code>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; </dd></summary>
<hr>

.changeset/tough-cougars-guess.md

<ul><li>Created new changeset file for @nhost/dashboard patch<br> <li>
Added description: "fix: minor fixes to csp"</ul>


</details>


  </td>
<td><a
href="https://github.com/nhost/nhost/pull/3451/files#diff-b4cee951d07c9b505baf4378636ebef623043f7fec62382e2f2b11218d4a384a">+5/-0</a>&nbsp;
&nbsp; &nbsp; </td>

</tr>
</table></td></tr></tr></tbody></table>

</details>

___
2025-09-01 08:38:15 +02:00