-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.js
146 lines (129 loc) · 2.45 KB
/
utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import {
ApolloClient,
ApolloLink,
HttpLink,
InMemoryCache,
gql,
} from '@apollo/client';
const API_URL = 'https://api.lens.dev/';
const httpLink = new HttpLink({ uri: API_URL });
const authLink = new ApolloLink((operation, forward) => {
const token = sessionStorage.getItem('accessToken');
operation.setContext({
headers: {
'x-access-token': token ? `Bearer ${token}` : '',
},
});
return forward(operation);
});
export const apolloClient = new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache(),
});
const GET_CHALLENGE = `
query($request: ChallengeRequest!) {
challenge(request: $request) { text }
}
`;
export const generateChallenge = async (address) => {
const res = await apolloClient.query({
query: gql(GET_CHALLENGE),
variables: {
request: {
address,
},
},
});
return res.data.challenge.text;
};
const AUTHENTICATION = `
mutation($request: SignedAuthChallenge!) {
authenticate(request: $request) {
accessToken
refreshToken
}
}
`;
export const authenticate = async (address, signature) => {
const { data } = await apolloClient.mutate({
mutation: gql(AUTHENTICATION),
variables: {
request: {
address,
signature,
},
},
});
return data.authenticate.accessToken;
};
const GET_PUBLICATIONS_QUERY = `
query {
explorePublications(request: {
sortCriteria: TOP_COMMENTED,
publicationTypes: [POST],
limit: 20
}) {
items {
__typename
... on Post {
...PostFields
}
}
}
}
fragment ProfileFields on Profile {
id
name
metadata
handle
picture {
... on NftImage {
uri
}
... on MediaSet {
original {
...MediaFields
}
}
}
stats {
totalComments
totalMirrors
totalCollects
}
}
fragment MediaFields on Media {
url
}
fragment PublicationStatsFields on PublicationStats {
totalAmountOfMirrors
totalAmountOfCollects
totalAmountOfComments
}
fragment MetadataOutputFields on MetadataOutput {
content
media {
original {
...MediaFields
}
}
}
fragment PostFields on Post {
id
profile {
...ProfileFields
}
stats {
...PublicationStatsFields
}
metadata {
...MetadataOutputFields
}
}
`;
export const getPublications = async () => {
const { data } = await apolloClient.query({
query: gql(GET_PUBLICATIONS_QUERY),
});
return data.explorePublications.items;
};