Compare commits

..

18 Commits

Author SHA1 Message Date
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
50 changed files with 8181 additions and 8150 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

@@ -1,5 +1,18 @@
# @nhost/dashboard
## 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.8",
"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

@@ -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,41 @@ 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, '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 +73,54 @@ 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, '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 +130,45 @@ 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_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 +177,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,3 +1,4 @@
import type { ProjectFragment } from '@/utils/__generated__/graphql';
import {
getAuthServiceUrl,
getFunctionsServiceUrl,
@@ -55,7 +56,7 @@ export const defaultRemoteBackendSlugs: Record<NhostService, string> = {
*/
export default function generateAppServiceUrl(
subdomain: string,
region: string,
region: ProjectFragment['region'],
service: 'auth' | 'graphql' | 'functions' | 'storage' | 'hasura' | 'grafana',
localBackendSlugs = defaultLocalBackendSlugs,
remoteBackendSlugs = defaultRemoteBackendSlugs,
@@ -87,9 +88,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

@@ -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"

15135
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff