Add graphql logic to RequestManager

This commit is contained in:
schroda
2023-09-01 20:21:59 +02:00
parent 0ee47c872b
commit 181eb6c811
2 changed files with 179 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
/*
* Copyright (C) Contributors to the Suwayomi project
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
import { ApolloClient, ApolloClientOptions, InMemoryCache, NormalizedCacheObject } from '@apollo/client';
import { createUploadLink } from 'apollo-upload-client';
import { BaseClient } from '@/lib/requests/client/BaseClient.ts';
import { StrictTypedTypePolicies } from '@/lib/graphql/generated/apollo-helpers.ts';
const typePolicies: StrictTypedTypePolicies = {
GlobalMetaType: { keyFields: ['key'] },
ExtensionType: { keyFields: ['apkName'] },
AboutPayload: { keyFields: [] },
};
// eslint-disable-next-line import/prefer-default-export
export class GraphQLClient extends BaseClient<
ApolloClient<NormalizedCacheObject>,
ApolloClientOptions<NormalizedCacheObject>,
null
> {
readonly fetcher = null;
public declare client: ApolloClient<NormalizedCacheObject>;
public override getBaseUrl(): string {
return `${super.getBaseUrl()}/api/graphql`;
}
private createUploadLink() {
return createUploadLink({ uri: () => this.getBaseUrl() });
}
private createLink() {
return this.createUploadLink();
}
protected createClient() {
this.client = new ApolloClient({
cache: new InMemoryCache({
typePolicies,
}),
connectToDevTools: true,
link: this.createLink(),
});
}
public override updateConfig() {}
}