diff --git a/packages/nc-gui/components/general/HelpAndSupport.vue b/packages/nc-gui/components/general/HelpAndSupport.vue index e8e8f7c259..432ed2a6cd 100644 --- a/packages/nc-gui/components/general/HelpAndSupport.vue +++ b/packages/nc-gui/components/general/HelpAndSupport.vue @@ -10,7 +10,7 @@ const { project } = storeToRefs(useProject()) const route = useRoute() const openSwaggerLink = () => { - openLink(`/api/v1/db/meta/projects/${route.params.projectId}/swagger`, appInfo.value.ncSiteUrl) + openLink(`./api/v1/db/meta/projects/${route.params.projectId}/swagger`, appInfo.value.ncSiteUrl) } diff --git a/packages/nc-gui/pages/[projectType]/[projectId]/index.vue b/packages/nc-gui/pages/[projectType]/[projectId]/index.vue index 64729b1ef9..e2d5fce8ed 100644 --- a/packages/nc-gui/pages/[projectType]/[projectId]/index.vue +++ b/packages/nc-gui/pages/[projectType]/[projectId]/index.vue @@ -365,7 +365,7 @@ useEventListener(document, 'keydown', async (e: KeyboardEvent) => { v-if="isUIAllowed('apiDocs') && !isMobileMode" v-e="['e:api-docs']" class="nc-project-menu-item group" - @click.stop="openLink(`/api/v1/db/meta/projects/${route.params.projectId}/swagger`, appInfo.ncSiteUrl)" + @click.stop="openLink(`./api/v1/db/meta/projects/${route.params.projectId}/swagger`, appInfo.ncSiteUrl)" > {{ $t('activity.account.swagger') }} diff --git a/packages/nc-gui/plugins/jobs.ts b/packages/nc-gui/plugins/jobs.ts index cc12c3aa86..116c2399e1 100644 --- a/packages/nc-gui/plugins/jobs.ts +++ b/packages/nc-gui/plugins/jobs.ts @@ -13,9 +13,12 @@ export default defineNuxtPlugin(async (nuxtApp) => { if (socket) socket.disconnect() const url = new URL(appInfo.ncSiteUrl, window.location.href.split(/[?#]/)[0]) + let socketPath = url.pathname + socketPath += socketPath.endsWith("/") ? "socket.io" : "/socket.io" socket = io(`${url.href}jobs`, { extraHeaders: { 'xc-auth': token }, + path: socketPath, }) socket.on('connect_error', (e) => { diff --git a/packages/nc-gui/plugins/tele.ts b/packages/nc-gui/plugins/tele.ts index eed8abe5b7..a28a9dd3be 100644 --- a/packages/nc-gui/plugins/tele.ts +++ b/packages/nc-gui/plugins/tele.ts @@ -16,10 +16,13 @@ export default defineNuxtPlugin(async (nuxtApp) => { try { if (socket) socket.disconnect() - const url = new URL(appInfo.ncSiteUrl, window.location.href.split(/[?#]/)[0]).href + const url = new URL(appInfo.ncSiteUrl, window.location.href.split(/[?#]/)[0]) + let socketPath = url.pathname + socketPath += socketPath.endsWith("/") ? "socket.io" : "/socket.io" - socket = io(url, { + socket = io(url.href, { extraHeaders: { 'xc-auth': token }, + path: socketPath, }) socket.on('connect_error', () => { diff --git a/packages/nocodb/src/gateways/socket.gateway.ts b/packages/nocodb/src/gateways/socket.gateway.ts index 192c24caaa..14f5071f9a 100644 --- a/packages/nocodb/src/gateways/socket.gateway.ts +++ b/packages/nocodb/src/gateways/socket.gateway.ts @@ -14,12 +14,17 @@ function getHash(str) { return crypto.createHash('md5').update(str).digest('hex'); } +const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT || '8080'}/`) +let namespace = url.pathname +namespace += namespace.endsWith("/") ? "" : "/" + @WebSocketGateway({ cors: { origin: '*', allowedHeaders: ['xc-auth'], credentials: true, }, + namespace, }) @Injectable() export class SocketGateway implements OnModuleInit { diff --git a/packages/nocodb/src/modules/jobs/jobs.gateway.ts b/packages/nocodb/src/modules/jobs/jobs.gateway.ts index 9e3d08aa68..76ababf3c2 100644 --- a/packages/nocodb/src/modules/jobs/jobs.gateway.ts +++ b/packages/nocodb/src/modules/jobs/jobs.gateway.ts @@ -14,13 +14,17 @@ import { JobEvents } from '../../interface/Jobs'; import type { OnModuleInit } from '@nestjs/common'; import type { JobStatus } from '../../interface/Jobs'; +const url = new URL(process.env.NC_PUBLIC_URL || `http://localhost:${process.env.PORT || '8080'}/`) +let namespace = url.pathname +namespace += namespace.endsWith("/") ? "jobs" : "/jobs" + @WebSocketGateway({ cors: { origin: '*', allowedHeaders: ['xc-auth'], credentials: true, }, - namespace: 'jobs', + namespace, }) export class JobsGateway implements OnModuleInit { constructor(@Inject('JobsService') private readonly jobsService) {}