-
Notifications
You must be signed in to change notification settings - Fork 18
/
apollo.js
43 lines (36 loc) · 1.12 KB
/
apollo.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
import { assert } from "@ember/debug";
import {
dependencySatisfies,
macroCondition,
importSync,
} from "@embroider/macros";
import { handleUnauthorized } from "ember-simple-auth-oidc";
let apolloMiddleware;
if (macroCondition(dependencySatisfies("@apollo/client", ">=3.0.0"))) {
const { setContext } = importSync("@apollo/client/link/context");
const { onError } = importSync("@apollo/client/link/error");
apolloMiddleware = (httpLink, session) => {
const authMiddleware = setContext(async (_, context) => {
await session.refreshAuthentication.perform();
return {
...context,
headers: {
...context.headers,
...session.headers,
},
};
});
const authAfterware = onError((error) => {
if (error.networkError && error.networkError.statusCode === 401) {
handleUnauthorized(session);
}
});
return authMiddleware.concat(authAfterware).concat(httpLink);
};
} else {
apolloMiddleware = () =>
assert(
"@apollo/client >= 3.0.0 must be installed in order to use the apollo middleware"
);
}
export default apolloMiddleware;