-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathClientFactory.ts
104 lines (94 loc) · 2.94 KB
/
ClientFactory.ts
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
import {
ClientBuilder,
Client,
AuthMiddlewareOptions,
HttpMiddlewareOptions,
RefreshAuthMiddlewareOptions,
TokenCache,
} from '@commercetools/sdk-client-v2';
// @ts-ignore
import fetch from 'node-fetch';
import { ClientConfig } from './interfaces/ClientConfig';
export class ClientFactory {
static factor: (
clientConfig: ClientConfig,
environment: string | undefined,
tokenCache: TokenCache | undefined,
refreshToken?: string,
) => Client = (
clientConfig: ClientConfig,
environment: string | undefined,
tokenCache: TokenCache | undefined,
refreshToken?: string,
) => {
const httpMiddlewareOptions: HttpMiddlewareOptions = {
host: clientConfig.hostUrl,
fetch,
};
let clientBuilder: ClientBuilder;
switch (true) {
case refreshToken !== undefined:
clientBuilder = ClientFactory.getClientBuilderWithRefreshTokenFlow(
clientConfig,
tokenCache,
refreshToken,
httpMiddlewareOptions,
);
break;
default:
clientBuilder = ClientFactory.getClientBuilderWithClientCredentialsFlow(
clientConfig,
tokenCache,
httpMiddlewareOptions,
);
break;
}
// To avoid logging sensible data, only enable the logger if the environment is defined and not production.
if (environment !== undefined && environment !== 'prod' && environment !== 'production') {
clientBuilder = clientBuilder.withLoggerMiddleware();
}
return clientBuilder.build();
};
private static getClientBuilderWithRefreshTokenFlow(
clientConfig: ClientConfig,
tokenCache: TokenCache,
refreshToken: string,
httpMiddlewareOptions: HttpMiddlewareOptions,
) {
const refreshAuthMiddlewareOptions: RefreshAuthMiddlewareOptions = {
host: clientConfig.authUrl,
projectKey: clientConfig.projectKey,
credentials: {
clientId: clientConfig.clientId,
clientSecret: clientConfig.clientSecret,
},
// scopes: ['manage_project:' + clientConfig.projectKey],
fetch,
tokenCache: tokenCache,
refreshToken: refreshToken,
};
return new ClientBuilder()
.withHttpMiddleware(httpMiddlewareOptions)
.withRefreshTokenFlow(refreshAuthMiddlewareOptions);
}
private static getClientBuilderWithClientCredentialsFlow(
clientConfig: ClientConfig,
tokenCache: TokenCache,
httpMiddlewareOptions: HttpMiddlewareOptions,
) {
const authMiddlewareOptions: AuthMiddlewareOptions = {
host: clientConfig.authUrl,
projectKey: clientConfig.projectKey,
credentials: {
clientId: clientConfig.clientId,
clientSecret: clientConfig.clientSecret,
},
// scopes: ['manage_project:' + clientConfig.projectKey],
fetch,
tokenCache: tokenCache,
};
return new ClientBuilder()
.withHttpMiddleware(httpMiddlewareOptions)
.withClientCredentialsFlow(authMiddlewareOptions);
}
}