Compare commits

..

27 Commits

Author SHA1 Message Date
Szilárd Dóró
6cc7704555 Merge pull request #1931 from nhost/changeset-release/main
chore: update versions
2023-05-15 15:47:22 +02:00
github-actions[bot]
c0954dec09 chore: update versions 2023-05-15 13:30:42 +00:00
Szilárd Dóró
6c25480a7a Merge pull request #1929 from nhost/fix/build-targets
chore: change build target to ES2019
2023-05-15 15:29:32 +02:00
Szilárd Dóró
da03bf390c chore: change build target to ES2019 2023-05-15 11:09:00 +02:00
Szilárd Dóró
3b513be9f2 Merge pull request #1926 from nhost/changeset-release/main
chore: update versions
2023-05-12 16:55:46 +02:00
github-actions[bot]
e450e9d636 chore: update versions 2023-05-12 14:27:16 +00:00
Szilárd Dóró
ed1ee10879 Merge pull request #1925 from nhost/fix/postgres-connection-string
fix(dashboard): show correct postgres connection string
2023-05-12 16:25:51 +02:00
Szilárd Dóró
349aac369e chore: add changeset 2023-05-12 14:23:54 +02:00
Szilárd Dóró
5a84362c80 fix: construct postgres connection string 2023-05-12 14:23:05 +02:00
Szilárd Dóró
f59a77b1c8 Merge pull request #1923 from nhost/changeset-release/main
chore: update versions
2023-05-12 10:25:12 +02:00
github-actions[bot]
30686bc4ce chore: update versions 2023-05-12 08:03:41 +00:00
Szilárd Dóró
0c4ac8d368 Merge pull request #1919 from nhost/chore/update-staging-urls
chore(dashboard): change URL construction
2023-05-12 10:02:32 +02:00
Szilárd Dóró
7da0e5e256 Merge pull request #1918 from nhost/changeset-release/main
chore: update versions
2023-05-11 15:30:16 +02:00
github-actions[bot]
8229101efe chore: update versions 2023-05-11 13:07:57 +00:00
Szilárd Dóró
afad1778f8 Merge pull request #1895 from nhost/renovate/react-monorepo
chore(deps): update react monorepo
2023-05-11 15:06:23 +02:00
Szilárd Dóró
28fc7b84c7 chore: update changeset 2023-05-11 13:38:39 +02:00
Szilárd Dóró
3f478a4e3c chore: include vitest in the bump, add changeset 2023-05-11 13:37:34 +02:00
Szilárd Dóró
aa54666941 fix: don't break builds 2023-05-11 12:53:45 +02:00
Szilárd Dóró
20fb69faba chore: change URL construction 2023-05-11 12:46:49 +02:00
renovate[bot]
1caeb2a548 chore(deps): update react monorepo 2023-05-11 10:12:59 +00:00
Szilárd Dóró
6356c5a2c8 Merge pull request #1906 from nhost/chore/bump-pnpm
chore: bump `pnpm` and `turbo` version
2023-05-11 12:10:10 +02:00
Szilárd Dóró
6ec1dd3248 chore: bump lock file again 2023-05-11 11:07:27 +02:00
Szilárd Dóró
8a4b5031dc Merge branch 'main' into chore/bump-pnpm 2023-05-11 11:06:57 +02:00
Szilárd Dóró
15a985e079 fix: don't break dashboard build 2023-05-08 15:29:29 +02:00
Szilárd Dóró
8ff00a4258 chore(ci): bump pnpm version to v8.4.0 2023-05-08 15:19:53 +02:00
Szilárd Dóró
7e27d7c0a1 chore: update changeset, bump turbo version 2023-05-08 15:17:42 +02:00
Szilárd Dóró
49f9b8372a chore: bump pnpm version to v8.4.0 2023-05-08 15:09:29 +02:00
79 changed files with 8338 additions and 8168 deletions

View File

@@ -14,7 +14,7 @@ runs:
steps:
- uses: pnpm/action-setup@v2.2.4
with:
version: 7.17.0
version: 8.4.0
run_install: false
- name: Get pnpm cache directory
id: pnpm-cache-dir

View File

@@ -36,6 +36,7 @@ export default defineConfig({
}
},
build: {
target: 'es2019',
sourcemap: true,
lib: {
entry,

View File

@@ -1,5 +1,32 @@
# @nhost/dashboard
## 0.16.10
### Patch Changes
- Updated dependencies [da03bf39]
- @nhost/react-apollo@5.0.21
- @nhost/nextjs@1.13.23
## 0.16.9
### Patch Changes
- 349aac36: fix(settings): use region domain when constructing the postgres connection string
## 0.16.8
### Patch Changes
- 20fb69fa: chore(projects): change the way how API URLs are constructed
## 0.16.7
### Patch Changes
- 49f9b837: chore(docker): bump `pnpm` to `v8.4.0` and `turbo` to `v1.9.3`
- 3f478a4e: chore(deps): bump `vitest` to `v0.31.0`, `@types/react` to `v18.2.6` and `@types/react-dom` to `v18.2.4`
## 0.16.6
### Patch Changes

View File

@@ -3,7 +3,7 @@ RUN apk add --no-cache libc6-compat
RUN apk update
WORKDIR /app
RUN yarn global add turbo@1.8.6
RUN yarn global add turbo@1.9.3
COPY . .
RUN turbo prune --scope="@nhost/dashboard" --docker
@@ -29,7 +29,7 @@ ENV NEXT_PUBLIC_NHOST_HASURA_CONSOLE_URL __NEXT_PUBLIC_NHOST_HASURA_CONSOLE_URL_
ENV NEXT_PUBLIC_NHOST_HASURA_MIGRATIONS_API_URL __NEXT_PUBLIC_NHOST_HASURA_MIGRATIONS_API_URL__
ENV NEXT_PUBLIC_NHOST_HASURA_API_URL __NEXT_PUBLIC_NHOST_HASURA_API_URL__
RUN yarn global add pnpm@7.17.0
RUN yarn global add pnpm@8.4.0
COPY .gitignore .gitignore
COPY --from=pruner /app/out/json/ .
COPY --from=pruner /app/out/pnpm-*.yaml .

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/dashboard",
"version": "0.16.6",
"version": "0.16.10",
"private": true,
"scripts": {
"preinstall": "npx only-allow pnpm",
@@ -105,15 +105,15 @@
"@types/lodash.debounce": "^4.0.7",
"@types/node": "^16.11.7",
"@types/pluralize": "^0.0.29",
"@types/react": "18.2.0",
"@types/react-dom": "18.2.1",
"@types/react": "18.2.6",
"@types/react-dom": "18.2.4",
"@types/react-table": "^7.7.12",
"@types/testing-library__jest-dom": "^5.14.5",
"@types/validator": "^13.7.10",
"@typescript-eslint/eslint-plugin": "^5.43.0",
"@typescript-eslint/parser": "^5.43.0",
"@vitejs/plugin-react": "^4.0.0",
"@vitest/coverage-c8": "^0.30.0",
"@vitest/coverage-c8": "^0.31.0",
"autoprefixer": "^10.4.13",
"babel-loader": "^8.3.0",
"babel-plugin-transform-remove-console": "^6.9.4",
@@ -147,8 +147,7 @@
"tsconfig-paths-webpack-plugin": "^4.0.0",
"vite": "^4.0.2",
"vite-tsconfig-paths": "^4.0.3",
"vitest": "^0.30.1",
"webpack": "^5.75.0"
"vitest": "^0.31.0"
},
"browserslist": {
"production": [

View File

@@ -33,7 +33,7 @@ export function HasuraData({ close }: HasuraDataProps) {
? `${getHasuraConsoleServiceUrl()}`
: generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
defaultLocalBackendSlugs,
{ ...defaultRemoteBackendSlugs, hasura: '/console' },

View File

@@ -194,7 +194,7 @@ export default function RuleGroupEditor({
<Link
href={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region?.awsName,
currentProject.region,
'hasura',
)}/console/data/default/schema/${schema}/tables/${table}/permissions`}
underline="hover"

View File

@@ -107,7 +107,7 @@ export default function SystemEnvironmentVariableSettings() {
? `${getHasuraConsoleServiceUrl()}/console`
: generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
defaultLocalBackendSlugs,
{ ...defaultRemoteBackendSlugs, hasura: '/console' },

View File

@@ -217,7 +217,7 @@ export default function AppleProviderSettings() {
id="redirectUrl"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/apple/callback`}
className="col-span-2"
@@ -236,7 +236,7 @@ export default function AppleProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/apple/callback`,
'Redirect URL',

View File

@@ -163,7 +163,7 @@ export default function AzureADProviderSettings() {
id="redirectUrl"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/azuread/callback`}
className="col-span-2"
@@ -182,7 +182,7 @@ export default function AzureADProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/azuread/callback`,
'Redirect URL',

View File

@@ -139,7 +139,7 @@ export default function DiscordProviderSettings() {
label="Redirect URL"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/discord/callback`}
disabled
@@ -154,7 +154,7 @@ export default function DiscordProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/discord/callback`,
'Redirect URL',

View File

@@ -139,7 +139,7 @@ export default function FacebookProviderSettings() {
label="Redirect URL"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/facebook/callback`}
disabled
@@ -154,7 +154,7 @@ export default function FacebookProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/facebook/callback`,
'Redirect URL',

View File

@@ -145,7 +145,7 @@ export default function GitHubProviderSettings() {
label="Redirect URL"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/github/callback`}
disabled
@@ -160,7 +160,7 @@ export default function GitHubProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/github/callback`,
'Redirect URL',

View File

@@ -139,7 +139,7 @@ export default function GoogleProviderSettings() {
label="Redirect URL"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/google/callback`}
disabled
@@ -154,7 +154,7 @@ export default function GoogleProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/google/callback`,
'Redirect URL',

View File

@@ -139,7 +139,7 @@ export default function LinkedInProviderSettings() {
label="Redirect URL"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/linkedin/callback`}
disabled
@@ -154,7 +154,7 @@ export default function LinkedInProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/linkedin/callback`,
'Redirect URL',

View File

@@ -139,7 +139,7 @@ export default function SpotifyProviderSettings() {
label="Redirect URL"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/spotify/callback`}
disabled
@@ -154,7 +154,7 @@ export default function SpotifyProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/spotify/callback`,
'Redirect URL',

View File

@@ -145,7 +145,7 @@ export default function TwitchProviderSettings() {
label="Redirect URL"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/twitch/callback`}
disabled
@@ -160,7 +160,7 @@ export default function TwitchProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/twitch/callback`,
'Redirect URL',

View File

@@ -167,7 +167,7 @@ export default function TwitterProviderSettings() {
id="redirectUrl"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/twitter/callback`}
className="col-span-2"
@@ -186,7 +186,7 @@ export default function TwitterProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/twitter/callback`,
'Redirect URL',

View File

@@ -138,7 +138,7 @@ export default function WindowsLiveProviderSettings() {
label="Redirect URL"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/windowslive/callback`}
disabled
@@ -153,7 +153,7 @@ export default function WindowsLiveProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/windowslive/callback`,
'Redirect URL',

View File

@@ -184,7 +184,7 @@ export default function WorkOsProviderSettings() {
id="redirectUrl"
defaultValue={`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/workos/callback`}
className="col-span-2"
@@ -203,7 +203,7 @@ export default function WorkOsProviderSettings() {
copy(
`${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'auth',
)}/signin/provider/workos/callback`,
'Redirect URL',

View File

@@ -68,7 +68,7 @@ export default function CreateUserForm({
const baseAuthUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region?.awsName,
currentProject?.region,
'auth',
);

View File

@@ -98,6 +98,7 @@ export default function useCurrentWorkspaceAndProject(): UseCurrentWorkspaceAndP
countryCode: null,
city: null,
awsName: null,
domain: null,
},
isProvisioned: true,
createdAt: new Date().toISOString(),
@@ -108,6 +109,11 @@ export default function useCurrentWorkspaceAndProject(): UseCurrentWorkspaceAndP
nhostBaseFolder: null,
plan: null,
config: {
observability: {
grafana: {
adminPassword: 'admin',
},
},
hasura: {
adminSecret: getHasuraAdminSecret(),
},

View File

@@ -36,6 +36,7 @@ fragment Project on apps {
id
countryCode
awsName
domain
city
}
plan {

View File

@@ -12,7 +12,7 @@ export default function useIsHealthy() {
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region?.awsName,
currentProject?.region,
'auth',
);

View File

@@ -41,7 +41,7 @@ export default function useCreateColumnMutation({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);
const mutationFn = isPlatform ? createColumn : createColumnMigration;

View File

@@ -43,7 +43,7 @@ export default function useCreateRecordMutation<TData extends object = {}>({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);

View File

@@ -39,7 +39,7 @@ export default function useCreateTableMutation({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);
const mutationFn = isPlatform ? createTable : createTableMigration;

View File

@@ -41,7 +41,7 @@ export default function useDatabaseQuery(
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);

View File

@@ -42,7 +42,7 @@ export default function useDeleteColumnMutation({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);
const mutationFn = isPlatform ? deleteColumn : deleteColumnMigration;

View File

@@ -39,7 +39,7 @@ export default function useDeleteRecordMutation({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);

View File

@@ -37,7 +37,7 @@ export default function useDeleteTableMutation({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);
const mutationFn = isPlatform ? deleteTable : deleteTableMigration;

View File

@@ -44,7 +44,7 @@ export default function useManagePermissionMutation({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);

View File

@@ -42,7 +42,7 @@ export default function useMetadataQuery(
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);

View File

@@ -42,7 +42,7 @@ export default function useTableQuery(
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);

View File

@@ -37,7 +37,7 @@ export default function useTrackForeignKeyRelationMutation({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);
const mutationFn = isPlatform

View File

@@ -37,7 +37,7 @@ export default function useTrackTableMutation({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);
const mutationFn = isPlatform ? trackTable : trackTableMigration;

View File

@@ -42,7 +42,7 @@ export default function useUpdateColumnMutation({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);
const mutationFn = isPlatform ? updateColumn : updateColumnMigration;

View File

@@ -43,7 +43,7 @@ export default function useUpdateRecordMutation<TData extends object = {}>({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);

View File

@@ -38,7 +38,7 @@ export default function useUpdateTableMutation({
const { currentProject } = useCurrentWorkspaceAndProject();
const appUrl = generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'hasura',
);
const mutationFn = isPlatform ? updateTable : updateTableMigration;

View File

@@ -1,12 +1,12 @@
import { useCurrentWorkspaceAndProject } from '@/features/projects/common/hooks/useCurrentWorkspaceAndProject';
import useIsPlatform from '@/hooks/common/useIsPlatform';
import generateAppServiceUrl from '@/utils/common/generateAppServiceUrl/generateAppServiceUrl';
import {
getAuthServiceUrl,
getFunctionsServiceUrl,
getGraphqlServiceUrl,
getStorageServiceUrl,
} from '@/utils/env';
import { isDevOrStaging } from '@/utils/helpers';
import type { NhostNextClientConstructorParams } from '@nhost/nextjs';
import { NhostClient } from '@nhost/nextjs';
@@ -43,11 +43,32 @@ export function useAppClient(
});
}
const authUrl = generateAppServiceUrl(
currentProject.subdomain,
currentProject.region,
'auth',
);
const graphqlUrl = generateAppServiceUrl(
currentProject.subdomain,
currentProject.region,
'graphql',
);
const storageUrl = generateAppServiceUrl(
currentProject.subdomain,
currentProject.region,
'storage',
);
const functionsUrl = generateAppServiceUrl(
currentProject.subdomain,
currentProject.region,
'functions',
);
return new NhostClient({
subdomain: currentProject.subdomain,
region: isDevOrStaging()
? `${currentProject.region.awsName}.staging`
: currentProject.region.awsName,
authUrl,
graphqlUrl,
storageUrl,
functionsUrl,
...options,
});
}

View File

@@ -69,7 +69,7 @@ export default function useFiles({
) => {
const fetchUrl = `${generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'storage',
)}/files/${file.id}`;

View File

@@ -21,7 +21,7 @@ export function useRemoteApplicationGQLClient() {
link: new HttpLink({
uri: generateAppServiceUrl(
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
'graphql',
),
headers: {
@@ -35,7 +35,7 @@ export function useRemoteApplicationGQLClient() {
}, [
loading,
currentProject?.subdomain,
currentProject?.region.awsName,
currentProject?.region,
currentProject?.config?.hasura.adminSecret,
]);

View File

@@ -262,7 +262,7 @@ export default function GraphQLPage() {
const appUrl = generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'graphql',
);

View File

@@ -106,7 +106,7 @@ export default function MetricsPage() {
<Button
href={generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'grafana',
)}
// Both `target` and `rel` are available when `href` is set. This is

View File

@@ -3,7 +3,6 @@ import SettingsLayout from '@/components/settings/SettingsLayout';
import { useGetDatabaseConnectionInfoQuery } from '@/generated/graphql';
import ActivityIndicator from '@/ui/v2/ActivityIndicator';
import { isDevOrStaging } from '@/utils/helpers';
import type { ReactElement } from 'react';
import SettingsContainer from '@/components/settings/SettingsContainer';
@@ -15,14 +14,17 @@ import type { InputProps } from '@/ui/v2/Input';
import Input from '@/ui/v2/Input';
import InputAdornment from '@/ui/v2/InputAdornment';
import CopyIcon from '@/ui/v2/icons/CopyIcon';
import generateAppServiceUrl from '@/utils/common/generateAppServiceUrl/generateAppServiceUrl';
import { copy } from '@/utils/copy';
export default function DatabaseSettingsPage() {
const { currentProject } = useCurrentWorkspaceAndProject();
const postgresHost = `${currentProject.subdomain}.db.${
currentProject.region.awsName
}.${isDevOrStaging() ? 'staging.nhost' : 'nhost'}.run`;
const postgresHost = generateAppServiceUrl(
currentProject.subdomain,
currentProject.region,
'db',
).replace('https://', '');
const { data, loading, error } = useGetDatabaseConnectionInfoQuery({
variables: {

View File

@@ -19,7 +19,7 @@ export default function StoragePage() {
<NhostApolloProvider
graphqlUrl={generateAppServiceUrl(
currentProject.subdomain,
currentProject.region.awsName,
currentProject.region,
'graphql',
)}
fetchPolicy="cache-first"

View File

@@ -54,6 +54,7 @@ export const mockApplication: Project = {
city: 'New York',
countryCode: 'US',
id: '1',
domain: 'nhost.run',
},
createdAt: new Date().toISOString(),
deployments: [],
@@ -70,6 +71,11 @@ export const mockApplication: Project = {
price: 0,
},
config: {
observability: {
grafana: {
adminPassword: 'admin',
},
},
hasura: {
adminSecret: 'nhost-admin-secret',
},

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,4 @@
import type { ProjectFragment } from '@/utils/__generated__/graphql';
import { test, vi } from 'vitest';
import generateAppServiceUrl, {
defaultLocalBackendSlugs,
@@ -29,31 +30,45 @@ afterEach(() => {
process.env = { ...env };
});
const region: ProjectFragment['region'] = {
id: '1',
awsName: 'eu-west-1',
domain: 'nhost.run',
city: 'Dublin',
countryCode: 'IE',
};
const stagingRegion = { ...region, domain: 'staging.nhost.run' };
test('should generate a per service subdomain in remote mode', () => {
process.env.NEXT_PUBLIC_NHOST_PLATFORM = 'true';
process.env.NEXT_PUBLIC_ENV = 'production';
expect(generateAppServiceUrl('test', 'eu-west-1', 'auth')).toBe(
expect(generateAppServiceUrl('test', region, 'auth')).toBe(
'https://test.auth.eu-west-1.nhost.run/v1',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'functions')).toBe(
expect(generateAppServiceUrl('test', region, 'db')).toBe(
'https://test.db.eu-west-1.nhost.run',
);
expect(generateAppServiceUrl('test', region, 'functions')).toBe(
'https://test.functions.eu-west-1.nhost.run/v1',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'graphql')).toBe(
expect(generateAppServiceUrl('test', region, 'graphql')).toBe(
'https://test.graphql.eu-west-1.nhost.run/v1',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'storage')).toBe(
expect(generateAppServiceUrl('test', region, 'storage')).toBe(
'https://test.storage.eu-west-1.nhost.run/v1',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'hasura')).toBe(
expect(generateAppServiceUrl('test', region, 'hasura')).toBe(
'https://test.hasura.eu-west-1.nhost.run',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'grafana')).toBe(
expect(generateAppServiceUrl('test', region, 'grafana')).toBe(
'https://test.grafana.eu-west-1.nhost.run',
);
});
@@ -62,54 +77,58 @@ test('should generate staging subdomains in staging environment', () => {
process.env.NEXT_PUBLIC_NHOST_PLATFORM = 'true';
process.env.NEXT_PUBLIC_ENV = 'staging';
expect(generateAppServiceUrl('test', 'eu-west-1', 'auth')).toBe(
expect(generateAppServiceUrl('test', stagingRegion, 'auth')).toBe(
'https://test.auth.eu-west-1.staging.nhost.run/v1',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'functions')).toBe(
expect(generateAppServiceUrl('test', stagingRegion, 'db')).toBe(
'https://test.db.eu-west-1.staging.nhost.run',
);
expect(generateAppServiceUrl('test', stagingRegion, 'functions')).toBe(
'https://test.functions.eu-west-1.staging.nhost.run/v1',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'graphql')).toBe(
expect(generateAppServiceUrl('test', stagingRegion, 'graphql')).toBe(
'https://test.graphql.eu-west-1.staging.nhost.run/v1',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'storage')).toBe(
expect(generateAppServiceUrl('test', stagingRegion, 'storage')).toBe(
'https://test.storage.eu-west-1.staging.nhost.run/v1',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'hasura')).toBe(
expect(generateAppServiceUrl('test', stagingRegion, 'hasura')).toBe(
'https://test.hasura.eu-west-1.staging.nhost.run',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'grafana')).toBe(
expect(generateAppServiceUrl('test', stagingRegion, 'grafana')).toBe(
'https://test.grafana.eu-west-1.staging.nhost.run',
);
});
test('should generate no slug for Hasura and Grafana neither in local mode nor in remote mode', () => {
process.env.NEXT_PUBLIC_NHOST_HASURA_API_URL = 'http://localhost:8082';
process.env.NEXT_PUBLIC_ENV = 'staging';
expect(generateAppServiceUrl('test', 'eu-west-1', 'hasura')).toBe(
expect(generateAppServiceUrl('test', region, 'hasura')).toBe(
'http://localhost:8082',
);
process.env.NEXT_PUBLIC_NHOST_PLATFORM = 'true';
process.env.NEXT_PUBLIC_ENV = 'staging';
expect(generateAppServiceUrl('test', 'eu-west-1', 'hasura')).toBe(
expect(generateAppServiceUrl('test', stagingRegion, 'hasura')).toBe(
'https://test.hasura.eu-west-1.staging.nhost.run',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'grafana')).toBe(
expect(generateAppServiceUrl('test', stagingRegion, 'grafana')).toBe(
'https://test.grafana.eu-west-1.staging.nhost.run',
);
process.env.NEXT_PUBLIC_ENV = 'production';
expect(generateAppServiceUrl('test', 'eu-west-1', 'hasura')).toBe(
expect(generateAppServiceUrl('test', region, 'hasura')).toBe(
'https://test.hasura.eu-west-1.nhost.run',
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'grafana')).toBe(
expect(generateAppServiceUrl('test', region, 'grafana')).toBe(
'https://test.grafana.eu-west-1.nhost.run',
);
});
@@ -119,48 +138,52 @@ test('should be able to override the default remote backend slugs', () => {
process.env.NEXT_PUBLIC_ENV = 'production';
expect(
generateAppServiceUrl(
'test',
'eu-west-1',
'hasura',
defaultLocalBackendSlugs,
{ ...defaultRemoteBackendSlugs, hasura: '/lorem-ipsum' },
),
generateAppServiceUrl('test', region, 'hasura', defaultLocalBackendSlugs, {
...defaultRemoteBackendSlugs,
hasura: '/lorem-ipsum',
}),
).toBe('https://test.hasura.eu-west-1.nhost.run/lorem-ipsum');
});
test('should construct service URLs based on environment variables', () => {
process.env.NEXT_PUBLIC_NHOST_HASURA_API_URL = 'https://localdev0.nhost.run';
expect(generateAppServiceUrl('test', 'eu-west-1', 'hasura')).toBe(
expect(generateAppServiceUrl('test', region, 'hasura')).toBe(
`https://localdev0.nhost.run`,
);
process.env.NEXT_PUBLIC_NHOST_AUTH_URL =
'https://localdev1.nhost.run/v1/auth';
expect(generateAppServiceUrl('test', 'eu-west-1', 'auth')).toBe(
expect(generateAppServiceUrl('test', region, 'auth')).toBe(
`https://localdev1.nhost.run/v1/auth`,
);
process.env.NEXT_PUBLIC_NHOST_DATABASE_URL =
'https://localdev2.nhost.run/v1/db';
expect(generateAppServiceUrl('test', region, 'db')).toBe(
`https://localdev2.nhost.run/v1/db`,
);
process.env.NEXT_PUBLIC_NHOST_STORAGE_URL =
'https://localdev2.nhost.run/v1/storage';
expect(generateAppServiceUrl('test', 'eu-west-1', 'storage')).toBe(
expect(generateAppServiceUrl('test', region, 'storage')).toBe(
'https://localdev2.nhost.run/v1/storage',
);
process.env.NEXT_PUBLIC_NHOST_GRAPHQL_URL =
'https://localdev3.nhost.run/v1/graphql';
expect(generateAppServiceUrl('test', 'eu-west-1', 'graphql')).toBe(
expect(generateAppServiceUrl('test', region, 'graphql')).toBe(
'https://localdev3.nhost.run/v1/graphql',
);
process.env.NEXT_PUBLIC_NHOST_FUNCTIONS_URL =
'https://localdev4.nhost.run/v1/functions';
expect(generateAppServiceUrl('test', 'eu-west-1', 'functions')).toBe(
expect(generateAppServiceUrl('test', region, 'functions')).toBe(
'https://localdev4.nhost.run/v1/functions',
);
});
@@ -169,19 +192,19 @@ test('should generate a basic subdomain with a custom port if provided', () => {
process.env.NEXT_PUBLIC_NHOST_BACKEND_URL = `http://localhost:1338`;
process.env.NEXT_PUBLIC_NHOST_PLATFORM = 'true';
expect(generateAppServiceUrl('test', 'eu-west-1', 'auth')).toBe(
expect(generateAppServiceUrl('test', region, 'auth')).toBe(
`http://localhost:1338/v1/auth`,
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'storage')).toBe(
expect(generateAppServiceUrl('test', region, 'storage')).toBe(
`http://localhost:1338/v1/files`,
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'graphql')).toBe(
expect(generateAppServiceUrl('test', region, 'graphql')).toBe(
`http://localhost:1338/v1/graphql`,
);
expect(generateAppServiceUrl('test', 'eu-west-1', 'functions')).toBe(
expect(generateAppServiceUrl('test', region, 'functions')).toBe(
`http://localhost:1338/v1/functions`,
);
});

View File

@@ -1,5 +1,7 @@
import type { ProjectFragment } from '@/utils/__generated__/graphql';
import {
getAuthServiceUrl,
getDatabaseServiceUrl,
getFunctionsServiceUrl,
getGraphqlServiceUrl,
getHasuraApiUrl,
@@ -9,6 +11,7 @@ import {
export type NhostService =
| 'auth'
| 'db'
| 'graphql'
| 'functions'
| 'storage'
@@ -22,6 +25,7 @@ export type NhostService =
*/
export const defaultLocalBackendSlugs: Record<NhostService, string> = {
auth: '/v1/auth',
db: '',
graphql: '/v1/graphql',
functions: '/v1/functions',
storage: '/v1/files',
@@ -35,6 +39,7 @@ export const defaultLocalBackendSlugs: Record<NhostService, string> = {
*/
export const defaultRemoteBackendSlugs: Record<NhostService, string> = {
auth: '/v1',
db: '',
graphql: '/v1',
functions: '/v1',
storage: '/v1',
@@ -55,8 +60,8 @@ export const defaultRemoteBackendSlugs: Record<NhostService, string> = {
*/
export default function generateAppServiceUrl(
subdomain: string,
region: string,
service: 'auth' | 'graphql' | 'functions' | 'storage' | 'hasura' | 'grafana',
region: ProjectFragment['region'],
service: NhostService,
localBackendSlugs = defaultLocalBackendSlugs,
remoteBackendSlugs = defaultRemoteBackendSlugs,
) {
@@ -65,6 +70,7 @@ export default function generateAppServiceUrl(
if (!IS_PLATFORM) {
const serviceUrls: Record<typeof service, string> = {
auth: getAuthServiceUrl(),
db: getDatabaseServiceUrl(),
graphql: getGraphqlServiceUrl(),
storage: getStorageServiceUrl(),
functions: getFunctionsServiceUrl(),
@@ -87,9 +93,14 @@ export default function generateAppServiceUrl(
return `${process.env.NEXT_PUBLIC_NHOST_BACKEND_URL}${localBackendSlugs[service]}`;
}
if (process.env.NEXT_PUBLIC_ENV === 'staging') {
return `https://${subdomain}.${service}.${region}.staging.nhost.run${remoteBackendSlugs[service]}`;
}
const constructedDomain = [
subdomain,
service,
region?.awsName,
region?.domain || 'nhost.run',
]
.filter(Boolean)
.join('.');
return `https://${subdomain}.${service}.${region}.nhost.run${remoteBackendSlugs[service]}`;
return `https://${constructedDomain}${remoteBackendSlugs[service]}`;
}

View File

@@ -31,6 +31,13 @@ export function getAuthServiceUrl() {
);
}
/**
* Custom URL of the Database service.
*/
export function getDatabaseServiceUrl() {
return process.env.NEXT_PUBLIC_NHOST_DATABASE_URL || 'local.db.nhost.run';
}
/**
* Custom URL of the GraphQL service.
*/

View File

@@ -1,5 +1,13 @@
# @nhost/apollo
## 5.2.5
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
- Updated dependencies [da03bf39]
- @nhost/nhost-js@2.2.3
## 5.2.4
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/apollo",
"version": "5.2.4",
"version": "5.2.5",
"description": "Nhost Apollo Client library",
"license": "MIT",
"keywords": [

View File

@@ -1,5 +1,11 @@
# @nhost/google-translation
## 0.0.5
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
## 0.0.4
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/google-translation",
"version": "0.0.4",
"version": "0.0.5",
"description": "Google Translation GraphQL API",
"license": "MIT",
"keywords": [

View File

@@ -1,5 +1,14 @@
# @nhost/react-apollo
## 5.0.21
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
- Updated dependencies [da03bf39]
- @nhost/apollo@5.2.5
- @nhost/react@2.0.17
## 5.0.20
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/react-apollo",
"version": "5.0.20",
"version": "5.0.21",
"description": "Nhost React Apollo client",
"license": "MIT",
"keywords": [

View File

@@ -1,5 +1,13 @@
# @nhost/react-urql
## 2.0.18
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
- Updated dependencies [da03bf39]
- @nhost/react@2.0.17
## 2.0.17
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/react-urql",
"version": "2.0.17",
"version": "2.0.18",
"description": "Nhost React URQL client",
"license": "MIT",
"keywords": [

View File

@@ -1,5 +1,11 @@
# @nhost/stripe-graphql-js
## 1.0.3
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
## 1.0.2
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/stripe-graphql-js",
"version": "1.0.2",
"version": "1.0.3",
"description": "Stripe GraphQL API",
"license": "MIT",
"keywords": [

View File

@@ -87,10 +87,10 @@
"resolutions": {
"graphql": "16.6.0"
},
"packageManager": "pnpm@7.17.0",
"packageManager": "pnpm@8.4.0",
"engines": {
"node": ">=16 <17",
"pnpm": ">=7.17.0"
"pnpm": ">=8.0.0"
},
"eslintConfig": {
"extends": "./config/.eslintrc.js"

View File

@@ -1,5 +1,11 @@
# @nhost/docgen
## 0.1.10
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
## 0.1.9
### Patch Changes

View File

@@ -2,7 +2,7 @@
"name": "@nhost/docgen",
"description": "Documentation generator for classes and functions",
"private": true,
"version": "0.1.9",
"version": "0.1.10",
"license": "MIT",
"main": "dist/index.cjs.js",
"types": "dist/index.d.ts",

View File

@@ -1,5 +1,11 @@
# @nhost/graphql-js
## 0.1.2
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
## 0.1.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/graphql-js",
"version": "0.1.1",
"version": "0.1.2",
"description": "Nhost GraphQL client",
"license": "MIT",
"keywords": [

View File

@@ -1,5 +1,11 @@
# @nhost/hasura-auth-js
## 2.1.2
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
## 2.1.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/hasura-auth-js",
"version": "2.1.1",
"version": "2.1.2",
"description": "Hasura-auth client",
"license": "MIT",
"keywords": [

View File

@@ -1,5 +1,11 @@
# @nhost/hasura-storage-js
## 2.1.2
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
## 2.1.1
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/hasura-storage-js",
"version": "2.1.1",
"version": "2.1.2",
"description": "Hasura-storage client",
"license": "MIT",
"keywords": [

View File

@@ -1,5 +1,13 @@
# @nhost/nextjs
## 1.13.23
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
- Updated dependencies [da03bf39]
- @nhost/react@2.0.17
## 1.13.22
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/nextjs",
"version": "1.13.22",
"version": "1.13.23",
"description": "Nhost NextJS library",
"license": "MIT",
"keywords": [

View File

@@ -1,5 +1,15 @@
# @nhost/nhost-js
## 2.2.3
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
- Updated dependencies [da03bf39]
- @nhost/graphql-js@0.1.2
- @nhost/hasura-auth-js@2.1.2
- @nhost/hasura-storage-js@2.1.2
## 2.2.2
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/nhost-js",
"version": "2.2.2",
"version": "2.2.3",
"description": "Nhost JavaScript SDK",
"license": "MIT",
"keywords": [

View File

@@ -1,5 +1,13 @@
# @nhost/react
## 2.0.17
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
- Updated dependencies [da03bf39]
- @nhost/nhost-js@2.2.3
## 2.0.16
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/react",
"version": "2.0.16",
"version": "2.0.17",
"description": "Nhost React library",
"license": "MIT",
"keywords": [

View File

@@ -1,5 +1,13 @@
# @nhost/vue
## 1.13.23
### Patch Changes
- da03bf39: chore(build): change build target to ES2019
- Updated dependencies [da03bf39]
- @nhost/nhost-js@2.2.3
## 1.13.22
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@nhost/vue",
"version": "1.13.22",
"version": "1.13.23",
"description": "Nhost Vue library",
"license": "MIT",
"keywords": [

15135
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff