UNPKG

3.41 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _nodeFetch = _interopRequireDefault(require("node-fetch"));
9
10var _sdkClient = require("@commercetools/sdk-client");
11
12var _apiRequestBuilder = require("@commercetools/api-request-builder");
13
14var _sdkMiddlewareHttp = require("@commercetools/sdk-middleware-http");
15
16var _sdkMiddlewareAuth = require("@commercetools/sdk-middleware-auth");
17
18var _sdkMiddlewareUserAgent = require("@commercetools/sdk-middleware-user-agent");
19
20var _JSONStream = _interopRequireDefault(require("JSONStream"));
21
22var _silentLogger = _interopRequireDefault(require("./utils/silent-logger"));
23
24var _package = _interopRequireDefault(require("../package.json"));
25
26function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
28class CustomerGroupsExporter {
29 // Set type annotations
30 constructor(options) {
31 if (!options.apiConfig) throw new Error('The constructor must be passed an `apiConfig` object');
32 this.apiConfig = options.apiConfig;
33 this.client = (0, _sdkClient.createClient)({
34 middlewares: [(0, _sdkMiddlewareAuth.createAuthMiddlewareWithExistingToken)(options.accessToken ? `Bearer ${options.accessToken}` : ''), (0, _sdkMiddlewareAuth.createAuthMiddlewareForClientCredentialsFlow)({ ...this.apiConfig,
35 fetch: _nodeFetch.default
36 }), (0, _sdkMiddlewareUserAgent.createUserAgentMiddleware)({
37 libraryName: _package.default.name,
38 libraryVersion: _package.default.version
39 }), (0, _sdkMiddlewareHttp.createHttpMiddleware)({
40 host: this.apiConfig.apiUrl,
41 enableRetry: true,
42 fetch: _nodeFetch.default
43 })]
44 });
45 this.predicate = options.predicate;
46 this.logger = { ..._silentLogger.default,
47 ...options.logger
48 };
49 }
50
51 run(outputStream) {
52 this.logger.info('Starting Export');
53
54 const jsonStream = _JSONStream.default.stringify();
55
56 jsonStream.pipe(outputStream);
57 this.handleOutput(outputStream, jsonStream, this.apiConfig.projectKey);
58 }
59
60 handleOutput(outputStream, pipeStream, projectKey) {
61 this.fetchGroups(pipeStream, projectKey).then(() => {
62 this.logger.info('Export operation completed successfully');
63 if (outputStream !== process.stdout) pipeStream.end();
64 }).catch(e => {
65 outputStream.emit('error', e);
66 });
67 }
68
69 fetchGroups(output, projectKey) {
70 const request = CustomerGroupsExporter.buildRequest(projectKey, this.predicate);
71 return this.client.process(request, ({
72 statusCode,
73 body
74 }) => {
75 if (statusCode !== 200) return Promise.reject(new Error(`Request returned error ${statusCode}`));
76 body.results.forEach(object => {
77 output.write(object);
78 });
79 this.logger.debug(`Successfully exported ${body.count} customer %s`, body.count > 1 ? 'groups' : 'group');
80 return Promise.resolve();
81 }, {
82 accumulate: false
83 });
84 }
85
86 static buildRequest(projectKey, predicate) {
87 const uri = CustomerGroupsExporter.buildUri(projectKey, predicate);
88 return {
89 uri,
90 method: 'GET'
91 };
92 }
93
94 static buildUri(projectKey, predicate) {
95 const service = (0, _apiRequestBuilder.createRequestBuilder)({
96 projectKey
97 }).customerGroups;
98 if (predicate) service.where(predicate);
99 return service.build();
100 }
101
102}
103
104exports.default = CustomerGroupsExporter;
\No newline at end of file