Setup graphql subscriptions
This commit is contained in:
@@ -40,6 +40,7 @@
|
|||||||
"axios": "^1.5.0",
|
"axios": "^1.5.0",
|
||||||
"file-selector": "^0.6.0",
|
"file-selector": "^0.6.0",
|
||||||
"graphql-tag": "^2.12.6",
|
"graphql-tag": "^2.12.6",
|
||||||
|
"graphql-ws": "^5.14.1",
|
||||||
"i18next": "^23.5.1",
|
"i18next": "^23.5.1",
|
||||||
"i18next-browser-languagedetector": "^7.1.0",
|
"i18next-browser-languagedetector": "^7.1.0",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
|
|||||||
@@ -285,7 +285,7 @@ export class RequestManager {
|
|||||||
|
|
||||||
public updateClient(config: Partial<AxiosInstance['defaults']>): void {
|
public updateClient(config: Partial<AxiosInstance['defaults']>): void {
|
||||||
this.restClient.updateConfig(config);
|
this.restClient.updateConfig(config);
|
||||||
this.graphQLClient.updateConfig({ uri: config.baseURL });
|
this.graphQLClient.updateConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public getBaseUrl(): string {
|
public getBaseUrl(): string {
|
||||||
|
|||||||
@@ -6,8 +6,18 @@
|
|||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ApolloClient, ApolloClientOptions, InMemoryCache, NormalizedCacheObject, Reference } from '@apollo/client';
|
import {
|
||||||
|
ApolloClient,
|
||||||
|
ApolloClientOptions,
|
||||||
|
InMemoryCache,
|
||||||
|
NormalizedCacheObject,
|
||||||
|
Reference,
|
||||||
|
split,
|
||||||
|
} from '@apollo/client';
|
||||||
import { createUploadLink } from 'apollo-upload-client';
|
import { createUploadLink } from 'apollo-upload-client';
|
||||||
|
import { GraphQLWsLink } from '@apollo/client/link/subscriptions';
|
||||||
|
import { Client, createClient } from 'graphql-ws';
|
||||||
|
import { getMainDefinition } from '@apollo/client/utilities';
|
||||||
import { BaseClient } from '@/lib/requests/client/BaseClient.ts';
|
import { BaseClient } from '@/lib/requests/client/BaseClient.ts';
|
||||||
import { StrictTypedTypePolicies } from '@/lib/graphql/generated/apollo-helpers.ts';
|
import { StrictTypedTypePolicies } from '@/lib/graphql/generated/apollo-helpers.ts';
|
||||||
|
|
||||||
@@ -55,6 +65,8 @@ export class GraphQLClient extends BaseClient<
|
|||||||
|
|
||||||
public declare client: ApolloClient<NormalizedCacheObject>;
|
public declare client: ApolloClient<NormalizedCacheObject>;
|
||||||
|
|
||||||
|
private wsClient!: Client;
|
||||||
|
|
||||||
public override getBaseUrl(): string {
|
public override getBaseUrl(): string {
|
||||||
return `${super.getBaseUrl()}/api/graphql`;
|
return `${super.getBaseUrl()}/api/graphql`;
|
||||||
}
|
}
|
||||||
@@ -63,11 +75,27 @@ export class GraphQLClient extends BaseClient<
|
|||||||
return createUploadLink({ uri: () => this.getBaseUrl() });
|
return createUploadLink({ uri: () => this.getBaseUrl() });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private createWSLink() {
|
||||||
|
return new GraphQLWsLink(this.wsClient);
|
||||||
|
}
|
||||||
|
|
||||||
private createLink() {
|
private createLink() {
|
||||||
return this.createUploadLink();
|
return split(
|
||||||
|
({ query }) => {
|
||||||
|
const definition = getMainDefinition(query);
|
||||||
|
return definition.kind === 'OperationDefinition' && definition.operation === 'subscription';
|
||||||
|
},
|
||||||
|
this.createWSLink(),
|
||||||
|
this.createUploadLink(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected createClient() {
|
protected createClient() {
|
||||||
|
this.wsClient = createClient({
|
||||||
|
url: () => this.getBaseUrl().replace(/http(|s)/g, 'ws'),
|
||||||
|
keepAlive: 20000,
|
||||||
|
});
|
||||||
|
|
||||||
this.client = new ApolloClient({
|
this.client = new ApolloClient({
|
||||||
cache: new InMemoryCache({
|
cache: new InMemoryCache({
|
||||||
typePolicies,
|
typePolicies,
|
||||||
|
|||||||
@@ -3509,6 +3509,11 @@ graphql-ws@^5.14.0:
|
|||||||
resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.14.0.tgz#766f249f3974fc2c48fae0d1fb20c2c4c79cd591"
|
resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.14.0.tgz#766f249f3974fc2c48fae0d1fb20c2c4c79cd591"
|
||||||
integrity sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g==
|
integrity sha512-itrUTQZP/TgswR4GSSYuwWUzrE/w5GhbwM2GX3ic2U7aw33jgEsayfIlvaj7/GcIvZgNMzsPTrE5hqPuFUiE5g==
|
||||||
|
|
||||||
|
graphql-ws@^5.14.1:
|
||||||
|
version "5.14.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.14.1.tgz#d05dba9c2cbf1582c990a2dfec4b8f6a55d99da4"
|
||||||
|
integrity sha512-aqkls1espsygP1PfkAuuLIV96IbztQ6EaADse97pw8wRIMT3+AL/OYfS8V2iCRkc0gzckitoDRGCQEdnySggiA==
|
||||||
|
|
||||||
"graphql@14 - 16":
|
"graphql@14 - 16":
|
||||||
version "16.8.0"
|
version "16.8.0"
|
||||||
resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.0.tgz#374478b7f27b2dc6153c8f42c1b80157f79d79d4"
|
resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.8.0.tgz#374478b7f27b2dc6153c8f42c1b80157f79d79d4"
|
||||||
|
|||||||
Reference in New Issue
Block a user