Récupération automatique du profil au lancement de l'application

This commit is contained in:
2020-07-13 18:49:44 +02:00
parent 3bcebdfcd1
commit 8b8f322630
16 changed files with 349 additions and 46 deletions

View File

@ -1,5 +1,10 @@
import { GraphQLClient } from 'graphql-request'
import { Config } from "../config";
import ApolloClient from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { split } from 'apollo-link';
import { HttpLink } from 'apollo-link-http';
import { WebSocketLink } from 'apollo-link-ws';
import { getMainDefinition } from 'apollo-utilities';
import gql from 'graphql-tag';
export class UnauthorizedError extends Error {
constructor(...args: any[]) {
@ -8,30 +13,65 @@ export class UnauthorizedError extends Error {
}
}
let client: DaddyClient
export function getClient(graphQLEndpoint: string, subscriptionEndpoint: string): DaddyClient {
if (!client) {
client = new DaddyClient(graphQLEndpoint, subscriptionEndpoint);
}
return client;
}
export class DaddyClient {
gql: GraphQLClient
gql: ApolloClient<InMemoryCache>
constructor(endpoint: string) {
this.gql = new GraphQLClient(endpoint, {
headers: {
mode: 'cors',
constructor(graphQLEndpoint: string, subscriptionEndpoint: string) {
const wsLink = new WebSocketLink({
uri: subscriptionEndpoint,
options: {
reconnect: true
}
});
const httpLink = new HttpLink({
uri: graphQLEndpoint,
fetchOptions: {
mode: 'cors',
credentials: 'include',
}
});
const link = split(
({ query }) => {
const definition = getMainDefinition(query);
return (
definition.kind === 'OperationDefinition' &&
definition.operation === 'subscription'
);
},
wsLink,
httpLink,
);
this.gql = new ApolloClient<any>({
link: link,
cache: new InMemoryCache(),
});
}
fetchUser(email: string) {
return this.gql.rawRequest(`
query fetchUser {
user(where: {email: {eq: $email}}) {
id
created_at
updated_at
fetchProfile() {
return this.gql.query({
query: gql`
query {
userProfile {
email,
full_name
createdAt,
connectedAt
}
}
`, { email })
}`
})
.then(this.assertAuthorization)
}