@indigina/dcm-api 0.0.19 → 0.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/api/api.d.ts +3 -1
- package/api/bookings.service.d.ts +37 -0
- package/api/shipments.service.d.ts +40 -0
- package/esm2022/api/api.mjs +4 -2
- package/esm2022/api/bookings.service.mjs +142 -0
- package/esm2022/api/shipments.service.mjs +89 -1
- package/esm2022/model/bookingsCount.mjs +12 -0
- package/esm2022/model/models.mjs +2 -1
- package/fesm2022/indigina-dcm-api.mjs +234 -2
- package/fesm2022/indigina-dcm-api.mjs.map +1 -1
- package/model/bookingsCount.d.ts +13 -0
- package/model/models.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
## @indigina/dcm-api@0.0.
|
|
1
|
+
## @indigina/dcm-api@0.0.20
|
|
2
2
|
|
|
3
3
|
The version of the OpenAPI document: v1
|
|
4
4
|
|
|
@@ -21,7 +21,7 @@ Navigate to the folder of your consuming project and run one of next commands.
|
|
|
21
21
|
_published:_
|
|
22
22
|
|
|
23
23
|
```
|
|
24
|
-
npm install @indigina/dcm-api@0.0.
|
|
24
|
+
npm install @indigina/dcm-api@0.0.20 --save
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
_without publishing (not recommended):_
|
package/api/api.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export * from './bookings.service';
|
|
2
|
+
import { BookingsService } from './bookings.service';
|
|
1
3
|
export * from './containers.service';
|
|
2
4
|
import { ContainersService } from './containers.service';
|
|
3
5
|
export * from './health.service';
|
|
@@ -10,4 +12,4 @@ export * from './shipments.service';
|
|
|
10
12
|
import { ShipmentsService } from './shipments.service';
|
|
11
13
|
export * from './user.service';
|
|
12
14
|
import { UserService } from './user.service';
|
|
13
|
-
export declare const APIS: (typeof ContainersService | typeof HealthService | typeof PermissionsService | typeof ReportsService | typeof ShipmentsService | typeof UserService)[];
|
|
15
|
+
export declare const APIS: (typeof BookingsService | typeof ContainersService | typeof HealthService | typeof PermissionsService | typeof ReportsService | typeof ShipmentsService | typeof UserService)[];
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { HttpClient, HttpHeaders, HttpResponse, HttpEvent, HttpParameterCodec, HttpContext } from '@angular/common/http';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { BookingsCount } from '../model/bookingsCount';
|
|
4
|
+
import { Configuration } from '../configuration';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class BookingsService {
|
|
7
|
+
protected httpClient: HttpClient;
|
|
8
|
+
protected basePath: string;
|
|
9
|
+
defaultHeaders: HttpHeaders;
|
|
10
|
+
configuration: Configuration;
|
|
11
|
+
encoder: HttpParameterCodec;
|
|
12
|
+
constructor(httpClient: HttpClient, basePath: string | string[], configuration: Configuration);
|
|
13
|
+
private addToHttpParams;
|
|
14
|
+
private addToHttpParamsRecursive;
|
|
15
|
+
/**
|
|
16
|
+
* Get vendor draft bookings count
|
|
17
|
+
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
|
18
|
+
* @param reportProgress flag to report request and response progress.
|
|
19
|
+
*/
|
|
20
|
+
getVendorDraftBookingsCount(observe?: 'body', reportProgress?: boolean, options?: {
|
|
21
|
+
httpHeaderAccept?: 'application/json';
|
|
22
|
+
context?: HttpContext;
|
|
23
|
+
transferCache?: boolean;
|
|
24
|
+
}): Observable<BookingsCount>;
|
|
25
|
+
getVendorDraftBookingsCount(observe?: 'response', reportProgress?: boolean, options?: {
|
|
26
|
+
httpHeaderAccept?: 'application/json';
|
|
27
|
+
context?: HttpContext;
|
|
28
|
+
transferCache?: boolean;
|
|
29
|
+
}): Observable<HttpResponse<BookingsCount>>;
|
|
30
|
+
getVendorDraftBookingsCount(observe?: 'events', reportProgress?: boolean, options?: {
|
|
31
|
+
httpHeaderAccept?: 'application/json';
|
|
32
|
+
context?: HttpContext;
|
|
33
|
+
transferCache?: boolean;
|
|
34
|
+
}): Observable<HttpEvent<BookingsCount>>;
|
|
35
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BookingsService, [null, { optional: true; }, { optional: true; }]>;
|
|
36
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<BookingsService>;
|
|
37
|
+
}
|
|
@@ -124,6 +124,46 @@ export declare class ShipmentsService {
|
|
|
124
124
|
context?: HttpContext;
|
|
125
125
|
transferCache?: boolean;
|
|
126
126
|
}): Observable<HttpEvent<ShipmentsInTransitCount>>;
|
|
127
|
+
/**
|
|
128
|
+
* Get shipments pending documents
|
|
129
|
+
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
|
130
|
+
* @param reportProgress flag to report request and response progress.
|
|
131
|
+
*/
|
|
132
|
+
getShipmentsPendingDocuments(observe?: 'body', reportProgress?: boolean, options?: {
|
|
133
|
+
httpHeaderAccept?: 'application/json';
|
|
134
|
+
context?: HttpContext;
|
|
135
|
+
transferCache?: boolean;
|
|
136
|
+
}): Observable<ShipmentsCount>;
|
|
137
|
+
getShipmentsPendingDocuments(observe?: 'response', reportProgress?: boolean, options?: {
|
|
138
|
+
httpHeaderAccept?: 'application/json';
|
|
139
|
+
context?: HttpContext;
|
|
140
|
+
transferCache?: boolean;
|
|
141
|
+
}): Observable<HttpResponse<ShipmentsCount>>;
|
|
142
|
+
getShipmentsPendingDocuments(observe?: 'events', reportProgress?: boolean, options?: {
|
|
143
|
+
httpHeaderAccept?: 'application/json';
|
|
144
|
+
context?: HttpContext;
|
|
145
|
+
transferCache?: boolean;
|
|
146
|
+
}): Observable<HttpEvent<ShipmentsCount>>;
|
|
147
|
+
/**
|
|
148
|
+
* Get pending shipment instructions
|
|
149
|
+
* @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
|
|
150
|
+
* @param reportProgress flag to report request and response progress.
|
|
151
|
+
*/
|
|
152
|
+
getShipmentsPendingInstructions(observe?: 'body', reportProgress?: boolean, options?: {
|
|
153
|
+
httpHeaderAccept?: 'application/json';
|
|
154
|
+
context?: HttpContext;
|
|
155
|
+
transferCache?: boolean;
|
|
156
|
+
}): Observable<ShipmentsCount>;
|
|
157
|
+
getShipmentsPendingInstructions(observe?: 'response', reportProgress?: boolean, options?: {
|
|
158
|
+
httpHeaderAccept?: 'application/json';
|
|
159
|
+
context?: HttpContext;
|
|
160
|
+
transferCache?: boolean;
|
|
161
|
+
}): Observable<HttpResponse<ShipmentsCount>>;
|
|
162
|
+
getShipmentsPendingInstructions(observe?: 'events', reportProgress?: boolean, options?: {
|
|
163
|
+
httpHeaderAccept?: 'application/json';
|
|
164
|
+
context?: HttpContext;
|
|
165
|
+
transferCache?: boolean;
|
|
166
|
+
}): Observable<HttpEvent<ShipmentsCount>>;
|
|
127
167
|
static ɵfac: i0.ɵɵFactoryDeclaration<ShipmentsService, [null, { optional: true; }, { optional: true; }]>;
|
|
128
168
|
static ɵprov: i0.ɵɵInjectableDeclaration<ShipmentsService>;
|
|
129
169
|
}
|
package/esm2022/api/api.mjs
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export * from './bookings.service';
|
|
2
|
+
import { BookingsService } from './bookings.service';
|
|
1
3
|
export * from './containers.service';
|
|
2
4
|
import { ContainersService } from './containers.service';
|
|
3
5
|
export * from './health.service';
|
|
@@ -10,5 +12,5 @@ export * from './shipments.service';
|
|
|
10
12
|
import { ShipmentsService } from './shipments.service';
|
|
11
13
|
export * from './user.service';
|
|
12
14
|
import { UserService } from './user.service';
|
|
13
|
-
export const APIS = [ContainersService, HealthService, PermissionsService, ReportsService, ShipmentsService, UserService];
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
export const APIS = [BookingsService, ContainersService, HealthService, PermissionsService, ReportsService, ShipmentsService, UserService];
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELGNBQWMsa0JBQWtCLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9va2luZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBCb29raW5nc1NlcnZpY2UgfSBmcm9tICcuL2Jvb2tpbmdzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250YWluZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGFpbmVyc1NlcnZpY2UgfSBmcm9tICcuL2NvbnRhaW5lcnMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2hlYWx0aC5zZXJ2aWNlJztcbmltcG9ydCB7IEhlYWx0aFNlcnZpY2UgfSBmcm9tICcuL2hlYWx0aC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcGVybWlzc2lvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuL3Blcm1pc3Npb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXBvcnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVwb3J0c1NlcnZpY2UgfSBmcm9tICcuL3JlcG9ydHMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NoaXBtZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IFNoaXBtZW50c1NlcnZpY2UgfSBmcm9tICcuL3NoaXBtZW50cy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlci5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xuZXhwb3J0IGNvbnN0IEFQSVMgPSBbQm9va2luZ3NTZXJ2aWNlLCBDb250YWluZXJzU2VydmljZSwgSGVhbHRoU2VydmljZSwgUGVybWlzc2lvbnNTZXJ2aWNlLCBSZXBvcnRzU2VydmljZSwgU2hpcG1lbnRzU2VydmljZSwgVXNlclNlcnZpY2VdO1xuIl19
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dcm.API.Client
|
|
3
|
+
* DCM API Client for Angular applications
|
|
4
|
+
*
|
|
5
|
+
*
|
|
6
|
+
*
|
|
7
|
+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
|
8
|
+
* https://openapi-generator.tech
|
|
9
|
+
* Do not edit the class manually.
|
|
10
|
+
*/
|
|
11
|
+
/* tslint:disable:no-unused-variable member-ordering */
|
|
12
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
13
|
+
import { HttpHeaders, HttpContext } from '@angular/common/http';
|
|
14
|
+
import { CustomHttpParameterCodec } from '../encoder';
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
import { BASE_PATH } from '../variables';
|
|
17
|
+
import { Configuration } from '../configuration';
|
|
18
|
+
import * as i0 from "@angular/core";
|
|
19
|
+
import * as i1 from "@angular/common/http";
|
|
20
|
+
import * as i2 from "../configuration";
|
|
21
|
+
export class BookingsService {
|
|
22
|
+
httpClient;
|
|
23
|
+
basePath = 'http://localhost';
|
|
24
|
+
defaultHeaders = new HttpHeaders();
|
|
25
|
+
configuration = new Configuration();
|
|
26
|
+
encoder;
|
|
27
|
+
constructor(httpClient, basePath, configuration) {
|
|
28
|
+
this.httpClient = httpClient;
|
|
29
|
+
if (configuration) {
|
|
30
|
+
this.configuration = configuration;
|
|
31
|
+
}
|
|
32
|
+
if (typeof this.configuration.basePath !== 'string') {
|
|
33
|
+
const firstBasePath = Array.isArray(basePath) ? basePath[0] : undefined;
|
|
34
|
+
if (firstBasePath != undefined) {
|
|
35
|
+
basePath = firstBasePath;
|
|
36
|
+
}
|
|
37
|
+
if (typeof basePath !== 'string') {
|
|
38
|
+
basePath = this.basePath;
|
|
39
|
+
}
|
|
40
|
+
this.configuration.basePath = basePath;
|
|
41
|
+
}
|
|
42
|
+
this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
|
|
43
|
+
}
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
addToHttpParams(httpParams, value, key) {
|
|
46
|
+
if (typeof value === "object" && value instanceof Date === false) {
|
|
47
|
+
httpParams = this.addToHttpParamsRecursive(httpParams, value);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
|
|
51
|
+
}
|
|
52
|
+
return httpParams;
|
|
53
|
+
}
|
|
54
|
+
addToHttpParamsRecursive(httpParams, value, key) {
|
|
55
|
+
if (value == null) {
|
|
56
|
+
return httpParams;
|
|
57
|
+
}
|
|
58
|
+
if (typeof value === "object") {
|
|
59
|
+
if (Array.isArray(value)) {
|
|
60
|
+
value.forEach(elem => httpParams = this.addToHttpParamsRecursive(httpParams, elem, key));
|
|
61
|
+
}
|
|
62
|
+
else if (value instanceof Date) {
|
|
63
|
+
if (key != null) {
|
|
64
|
+
httpParams = httpParams.append(key, value.toISOString().substring(0, 10));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
throw Error("key may not be null if value is Date");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
Object.keys(value).forEach(k => httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (key != null) {
|
|
75
|
+
httpParams = httpParams.append(key, value);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
throw Error("key may not be null if value is not object or array");
|
|
79
|
+
}
|
|
80
|
+
return httpParams;
|
|
81
|
+
}
|
|
82
|
+
getVendorDraftBookingsCount(observe = 'body', reportProgress = false, options) {
|
|
83
|
+
let localVarHeaders = this.defaultHeaders;
|
|
84
|
+
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
85
|
+
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
86
|
+
// to determine the Accept header
|
|
87
|
+
const httpHeaderAccepts = [
|
|
88
|
+
'application/json'
|
|
89
|
+
];
|
|
90
|
+
localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
91
|
+
}
|
|
92
|
+
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
93
|
+
localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
|
|
94
|
+
}
|
|
95
|
+
let localVarHttpContext = options && options.context;
|
|
96
|
+
if (localVarHttpContext === undefined) {
|
|
97
|
+
localVarHttpContext = new HttpContext();
|
|
98
|
+
}
|
|
99
|
+
let localVarTransferCache = options && options.transferCache;
|
|
100
|
+
if (localVarTransferCache === undefined) {
|
|
101
|
+
localVarTransferCache = true;
|
|
102
|
+
}
|
|
103
|
+
let responseType_ = 'json';
|
|
104
|
+
if (localVarHttpHeaderAcceptSelected) {
|
|
105
|
+
if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
|
|
106
|
+
responseType_ = 'text';
|
|
107
|
+
}
|
|
108
|
+
else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
|
|
109
|
+
responseType_ = 'json';
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
responseType_ = 'blob';
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
let localVarPath = `/bookings/vendorDrafts/count`;
|
|
116
|
+
return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
|
|
117
|
+
context: localVarHttpContext,
|
|
118
|
+
responseType: responseType_,
|
|
119
|
+
withCredentials: this.configuration.withCredentials,
|
|
120
|
+
headers: localVarHeaders,
|
|
121
|
+
observe: observe,
|
|
122
|
+
transferCache: localVarTransferCache,
|
|
123
|
+
reportProgress: reportProgress
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: BookingsService, deps: [{ token: i1.HttpClient }, { token: BASE_PATH, optional: true }, { token: i2.Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
127
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: BookingsService, providedIn: 'root' });
|
|
128
|
+
}
|
|
129
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: BookingsService, decorators: [{
|
|
130
|
+
type: Injectable,
|
|
131
|
+
args: [{
|
|
132
|
+
providedIn: 'root'
|
|
133
|
+
}]
|
|
134
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined, decorators: [{
|
|
135
|
+
type: Optional
|
|
136
|
+
}, {
|
|
137
|
+
type: Inject,
|
|
138
|
+
args: [BASE_PATH]
|
|
139
|
+
}] }, { type: i2.Configuration, decorators: [{
|
|
140
|
+
type: Optional
|
|
141
|
+
}] }] });
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va2luZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwaS9ib29raW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBMkIsZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBYyxXQUFXLEVBQ3NCLFdBQVcsRUFDeEQsTUFBWSxzQkFBc0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBK0IsWUFBWSxDQUFDO0FBTS9FLGFBQWE7QUFDYixPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUEwQixjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQzs7OztBQU9yRixNQUFNLE9BQU8sZUFBZTtJQU9GO0lBTFosUUFBUSxHQUFHLGtCQUFrQixDQUFDO0lBQ2pDLGNBQWMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ25DLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBQ3BDLE9BQU8sQ0FBcUI7SUFFbkMsWUFBc0IsVUFBc0IsRUFBZ0MsUUFBeUIsRUFBYyxhQUE0QjtRQUF6SCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3hDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDdkMsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsRCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN4RSxJQUFJLGFBQWEsSUFBSSxTQUFTLEVB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QUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQWdCLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUNoRztZQUNJLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQ0osQ0FBQztJQUNOLENBQUM7dUdBeEhRLGVBQWUsNENBT3lDLFNBQVM7MkdBUGpFLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBUWtELFFBQVE7OzBCQUFHLE1BQU07MkJBQUMsU0FBUzs7MEJBQThCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERjbS5BUEkuQ2xpZW50XG4gKiBEQ00gQVBJIENsaWVudCBmb3IgQW5ndWxhciBhcHBsaWNhdGlvbnNcbiAqXG4gKiBcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9ICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMsXG4gICAgICAgICBIdHRwUmVzcG9uc2UsIEh0dHBFdmVudCwgSHR0cFBhcmFtZXRlckNvZGVjLCBIdHRwQ29udGV4dCBcbiAgICAgICAgfSAgICAgICBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDdXN0b21IdHRwUGFyYW1ldGVyQ29kZWMgfSAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vZW5jb2Rlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAncnhqcyc7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEJvb2tpbmdzQ291bnQgfSBmcm9tICcuLi9tb2RlbC9ib29raW5nc0NvdW50JztcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgQkFTRV9QQVRILCBDT0xMRUNUSU9OX0ZPUk1BVFMgfSAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL3ZhcmlhYmxlcyc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XG5cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBCb29raW5nc1NlcnZpY2Uge1xuXG4gICAgcHJvdGVjdGVkIGJhc2VQYXRoID0gJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuICAgIHB1YmxpYyBkZWZhdWx0SGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgICBwdWJsaWMgZW5jb2RlcjogSHR0cFBhcmFtZXRlckNvZGVjO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpQEluamVjdChCQVNFX1BBVEgpIGJhc2VQYXRoOiBzdHJpbmd8c3RyaW5nW10sIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEJhc2VQYXRoID0gQXJyYXkuaXNBcnJheShiYXNlUGF0aCkgPyBiYXNlUGF0aFswXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChmaXJzdEJhc2VQYXRoICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGJhc2VQYXRoID0gZmlyc3RCYXNlUGF0aDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBiYXNlUGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBiYXNlUGF0aCA9IHRoaXMuYmFzZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gICAgfVxuXG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcHJpdmF0ZSBhZGRUb0h0dHBQYXJhbXMoaHR0cFBhcmFtczogSHR0cFBhcmFtcywgdmFsdWU6IGFueSwga2V5Pzogc3RyaW5nKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zLCB2YWx1ZSwga2V5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShodHRwUGFyYW1zOiBIdHRwUGFyYW1zLCB2YWx1ZT86IGFueSwga2V5Pzogc3RyaW5nKTogSHR0cFBhcmFtcyB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaCggZWxlbSA9PiBodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgZWxlbSwga2V5KSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCAodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBEYXRlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goIGsgPT4gaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1zLCB2YWx1ZVtrXSwga2V5ICE9IG51bGwgPyBgJHtrZXl9LiR7a31gIDogaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImtleSBtYXkgbm90IGJlIG51bGwgaWYgdmFsdWUgaXMgbm90IG9iamVjdCBvciBhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgdmVuZG9yIGRyYWZ0IGJvb2tpbmdzIGNvdW50XG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFZlbmRvckRyYWZ0Qm9va2luZ3NDb3VudChvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sIG9wdGlvbnM/OiB7aHR0cEhlYWRlckFjY2VwdD86ICdhcHBsaWNhdGlvbi9qc29uJywgY29udGV4dD86IEh0dHBDb250ZXh0LCB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbn0pOiBPYnNlcnZhYmxlPEJvb2tpbmdzQ291bnQ+O1xuICAgIHB1YmxpYyBnZXRWZW5kb3JEcmFmdEJvb2tpbmdzQ291bnQob2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbiwgb3B0aW9ucz86IHtodHRwSGVhZGVyQWNjZXB0PzogJ2FwcGxpY2F0aW9uL2pzb24nLCBjb250ZXh0PzogSHR0cENvbnRleHQsIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFufSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEJvb2tpbmdzQ291bnQ+PjtcbiAgICBwdWJsaWMgZ2V0VmVuZG9yRHJhZnRCb29raW5nc0NvdW50KG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8Qm9va2luZ3NDb3VudD4+O1xuICAgIHB1YmxpYyBnZXRWZW5kb3JEcmFmdEJvb2tpbmdzQ291bnQob2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLCBvcHRpb25zPzoge2h0dHBIZWFkZXJBY2NlcHQ/OiAnYXBwbGljYXRpb24vanNvbicsIGNvbnRleHQ/OiBIdHRwQ29udGV4dCwgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW59KTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgICAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldCgnQWNjZXB0JywgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICAgICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgcmVzcG9uc2VUeXBlXzogJ3RleHQnIHwgJ2pzb24nIHwgJ2Jsb2InID0gJ2pzb24nO1xuICAgICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKCd0ZXh0JykpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ3RleHQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2pzb24nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVR5cGVfID0gJ2Jsb2InO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYm9va2luZ3MvdmVuZG9yRHJhZnRzL2NvdW50YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEJvb2tpbmdzQ291bnQ+KCdnZXQnLCBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=
|