@veloceapps/api 1.0.0

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.
Files changed (62) hide show
  1. package/README.md +7 -0
  2. package/bundles/veloce-api.umd.js +2117 -0
  3. package/bundles/veloce-api.umd.js.map +1 -0
  4. package/esm2015/index.js +14 -0
  5. package/esm2015/lib/api.module.js +59 -0
  6. package/esm2015/lib/services/configuration-api.service.js +90 -0
  7. package/esm2015/lib/services/configuration-settings-api.service.js +69 -0
  8. package/esm2015/lib/services/context-api.service.js +26 -0
  9. package/esm2015/lib/services/document-attachment-api.service.js +65 -0
  10. package/esm2015/lib/services/document-templates-api.service.js +278 -0
  11. package/esm2015/lib/services/price-api.service.js +86 -0
  12. package/esm2015/lib/services/product-model-api.service.js +232 -0
  13. package/esm2015/lib/services/quote-api.service.js +36 -0
  14. package/esm2015/lib/services/ramp-api.service.js +42 -0
  15. package/esm2015/lib/services/salesforce-api.service.js +51 -0
  16. package/esm2015/lib/services/scripts-api.service.js +75 -0
  17. package/esm2015/lib/services/ui-templates-api.service.js +262 -0
  18. package/esm2015/lib/types/attribute-dto.types.js +21 -0
  19. package/esm2015/lib/types/charge-group-item-dto.types.js +45 -0
  20. package/esm2015/lib/types/charge-item-dto.types.js +74 -0
  21. package/esm2015/lib/types/clone-request.types.js +2 -0
  22. package/esm2015/lib/types/configuration-settings-dto.types.js +22 -0
  23. package/esm2015/lib/types/domain-type-dto.types.js +27 -0
  24. package/esm2015/lib/types/line-item-dto.types.js +93 -0
  25. package/esm2015/lib/types/port-domain-dto.types.js +22 -0
  26. package/esm2015/lib/types/price-adjustment-dto.types.js +15 -0
  27. package/esm2015/lib/types/price-dto.types.js +25 -0
  28. package/esm2015/lib/types/recommended-price-dto.types.js +23 -0
  29. package/esm2015/lib/types/ui-template-dto.types.js +2 -0
  30. package/esm2015/lib/utils/ui-template.utils.js +17 -0
  31. package/esm2015/veloce-api.js +5 -0
  32. package/fesm2015/veloce-api.js +1686 -0
  33. package/fesm2015/veloce-api.js.map +1 -0
  34. package/index.d.ts +14 -0
  35. package/lib/api.module.d.ts +7 -0
  36. package/lib/services/configuration-api.service.d.ts +18 -0
  37. package/lib/services/configuration-settings-api.service.d.ts +17 -0
  38. package/lib/services/context-api.service.d.ts +11 -0
  39. package/lib/services/document-attachment-api.service.d.ts +15 -0
  40. package/lib/services/document-templates-api.service.d.ts +39 -0
  41. package/lib/services/price-api.service.d.ts +16 -0
  42. package/lib/services/product-model-api.service.d.ts +30 -0
  43. package/lib/services/quote-api.service.d.ts +14 -0
  44. package/lib/services/ramp-api.service.d.ts +12 -0
  45. package/lib/services/salesforce-api.service.d.ts +17 -0
  46. package/lib/services/scripts-api.service.d.ts +21 -0
  47. package/lib/services/ui-templates-api.service.d.ts +47 -0
  48. package/lib/types/attribute-dto.types.d.ts +11 -0
  49. package/lib/types/charge-group-item-dto.types.d.ts +24 -0
  50. package/lib/types/charge-item-dto.types.d.ts +39 -0
  51. package/lib/types/clone-request.types.d.ts +6 -0
  52. package/lib/types/configuration-settings-dto.types.d.ts +9 -0
  53. package/lib/types/domain-type-dto.types.d.ts +15 -0
  54. package/lib/types/line-item-dto.types.d.ts +50 -0
  55. package/lib/types/port-domain-dto.types.d.ts +13 -0
  56. package/lib/types/price-adjustment-dto.types.d.ts +8 -0
  57. package/lib/types/price-dto.types.d.ts +13 -0
  58. package/lib/types/recommended-price-dto.types.d.ts +12 -0
  59. package/lib/types/ui-template-dto.types.d.ts +10 -0
  60. package/lib/utils/ui-template.utils.d.ts +3 -0
  61. package/package.json +33 -0
  62. package/veloce-api.d.ts +5 -0
@@ -0,0 +1,69 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { map } from 'rxjs/operators';
3
+ import { ConfigurationSettingsDTO } from '../types/configuration-settings-dto.types';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@veloce/core";
6
+ export class ConfigurationSettingsApiService {
7
+ constructor(httpService) {
8
+ this.httpService = httpService;
9
+ this.SERVICE_URL = '/configuration-settings';
10
+ }
11
+ fetchSettings() {
12
+ return this.httpService
13
+ .api({
14
+ url: `${this.SERVICE_URL}`,
15
+ method: 'get',
16
+ })
17
+ .pipe(map((settings) => settings.map(setting => ConfigurationSettingsDTO.fromDTO(setting))));
18
+ }
19
+ fetchSetting(settingsKey) {
20
+ return this.httpService
21
+ .api({
22
+ url: `${this.SERVICE_URL}/byKey/${settingsKey}`,
23
+ method: 'get',
24
+ })
25
+ .pipe(map((setting) => ConfigurationSettingsDTO.fromDTO(setting, settingsKey)));
26
+ }
27
+ createSetting(setting) {
28
+ const request = ConfigurationSettingsDTO.toDTO(setting);
29
+ return this.httpService.api({
30
+ url: `${this.SERVICE_URL}`,
31
+ method: 'post',
32
+ body: Object.assign({}, request),
33
+ });
34
+ }
35
+ updateSetting(setting) {
36
+ const request = ConfigurationSettingsDTO.toDTO(setting);
37
+ return this.httpService.api({
38
+ url: `${this.SERVICE_URL}/${request.id}`,
39
+ method: 'put',
40
+ body: Object.assign({}, request),
41
+ });
42
+ }
43
+ removeSetting(setting) {
44
+ const request = ConfigurationSettingsDTO.toDTO(setting);
45
+ return this.httpService.api({
46
+ url: `${this.SERVICE_URL}/${request.id}`,
47
+ method: 'delete',
48
+ });
49
+ }
50
+ restoreSetting(settingId) {
51
+ return this.httpService.api({
52
+ url: `${this.SERVICE_URL}/${settingId}/restore`,
53
+ method: 'patch',
54
+ });
55
+ }
56
+ clear(name) {
57
+ return this.httpService
58
+ .api({
59
+ method: 'get',
60
+ url: '/cache/evict/' + name
61
+ });
62
+ }
63
+ }
64
+ ConfigurationSettingsApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ConfigurationSettingsApiService, deps: [{ token: i1.BaseHttpService }], target: i0.ɵɵFactoryTarget.Injectable });
65
+ ConfigurationSettingsApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ConfigurationSettingsApiService });
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ConfigurationSettingsApiService, decorators: [{
67
+ type: Injectable
68
+ }], ctorParameters: function () { return [{ type: i1.BaseHttpService }]; } });
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1zZXR0aW5ncy1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL3NyYy9saWIvc2VydmljZXMvY29uZmlndXJhdGlvbi1zZXR0aW5ncy1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7O0FBR3JGLE1BQU0sT0FBTywrQkFBK0I7SUFHMUMsWUFBb0IsV0FBNEI7UUFBNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBRi9CLGdCQUFXLEdBQUcseUJBQXlCLENBQUM7SUFFTixDQUFDO0lBRXBELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXO2FBQ3BCLEdBQUcsQ0FBNkI7WUFDL0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUMxQixNQUFNLEVBQUUsS0FBSztTQUNkLENBQUM7YUFDRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBb0MsRUFBRSxFQUFFLENBQzNDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDbkUsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELFlBQVksQ0FBQyxXQUFtQjtRQUM5QixPQUFPLElBQUksQ0FBQyxXQUFXO2FBQ3BCLEdBQUcsQ0FBMkI7WUFDN0IsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsVUFBVSxXQUFXLEVBQUU7WUFDL0MsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQWlDLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBOEI7UUFDMUMsTUFBTSxPQUFPLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDMUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUMxQixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksb0JBQ0MsT0FBTyxDQUNYO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxPQUE4QjtRQUMxQyxNQUFNLE9BQU8sR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUMxQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxFQUFFLEtBQUs7WUFDYixJQUFJLG9CQUNDLE9BQU8sQ0FDWDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBOEI7UUFDMUMsTUFBTSxPQUFPLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDMUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sRUFBRSxRQUFRO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsU0FBaUI7UUFDOUIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUMxQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsVUFBVTtZQUMvQyxNQUFNLEVBQUUsT0FBTztTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQTZCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLFdBQVc7YUFDcEIsR0FBRyxDQUFDO1lBQ0gsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHLEVBQUUsZUFBZSxHQUFHLElBQUk7U0FDNUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7NkhBekVVLCtCQUErQjtpSUFBL0IsK0JBQStCOzRGQUEvQiwrQkFBK0I7a0JBRDNDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlSHR0cFNlcnZpY2UsIENvbmZpZ3VyYXRpb25TZXR0aW5ncywgRGF0YUFkbWluaXN0cmF0aW9uRmllbGQgfSBmcm9tICdAdmVsb2NlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvblNldHRpbmdzRFRPIH0gZnJvbSAnLi4vdHlwZXMvY29uZmlndXJhdGlvbi1zZXR0aW5ncy1kdG8udHlwZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvblNldHRpbmdzQXBpU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgU0VSVklDRV9VUkwgPSAnL2NvbmZpZ3VyYXRpb24tc2V0dGluZ3MnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cFNlcnZpY2U6IEJhc2VIdHRwU2VydmljZSkge31cblxuICBmZXRjaFNldHRpbmdzKCk6IE9ic2VydmFibGU8Q29uZmlndXJhdGlvblNldHRpbmdzW10+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxuICAgICAgLmFwaTxDb25maWd1cmF0aW9uU2V0dGluZ3NEVE9bXT4oe1xuICAgICAgICB1cmw6IGAke3RoaXMuU0VSVklDRV9VUkx9YCxcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChzZXR0aW5nczogQ29uZmlndXJhdGlvblNldHRpbmdzRFRPW10pID0+XG4gICAgICAgICAgc2V0dGluZ3MubWFwKHNldHRpbmcgPT4gQ29uZmlndXJhdGlvblNldHRpbmdzRFRPLmZyb21EVE8oc2V0dGluZykpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgfVxuXG4gIGZldGNoU2V0dGluZyhzZXR0aW5nc0tleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxDb25maWd1cmF0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxuICAgICAgLmFwaTxDb25maWd1cmF0aW9uU2V0dGluZ3NEVE8+KHtcbiAgICAgICAgdXJsOiBgJHt0aGlzLlNFUlZJQ0VfVVJMfS9ieUtleS8ke3NldHRpbmdzS2V5fWAsXG4gICAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICB9KVxuICAgICAgLnBpcGUobWFwKChzZXR0aW5nOiBDb25maWd1cmF0aW9uU2V0dGluZ3NEVE8pID0+IENvbmZpZ3VyYXRpb25TZXR0aW5nc0RUTy5mcm9tRFRPKHNldHRpbmcsIHNldHRpbmdzS2V5KSkpO1xuICB9XG5cbiAgY3JlYXRlU2V0dGluZyhzZXR0aW5nOiBDb25maWd1cmF0aW9uU2V0dGluZ3MpOiBPYnNlcnZhYmxlPENvbmZpZ3VyYXRpb25TZXR0aW5ncz4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDb25maWd1cmF0aW9uU2V0dGluZ3NEVE8udG9EVE8oc2V0dGluZyk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5hcGkoe1xuICAgICAgdXJsOiBgJHt0aGlzLlNFUlZJQ0VfVVJMfWAsXG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVTZXR0aW5nKHNldHRpbmc6IENvbmZpZ3VyYXRpb25TZXR0aW5ncyk6IE9ic2VydmFibGU8Q29uZmlndXJhdGlvblNldHRpbmdzPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENvbmZpZ3VyYXRpb25TZXR0aW5nc0RUTy50b0RUTyhzZXR0aW5nKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmFwaSh7XG4gICAgICB1cmw6IGAke3RoaXMuU0VSVklDRV9VUkx9LyR7cmVxdWVzdC5pZH1gLFxuICAgICAgbWV0aG9kOiAncHV0JyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVTZXR0aW5nKHNldHRpbmc6IENvbmZpZ3VyYXRpb25TZXR0aW5ncyk6IE9ic2VydmFibGU8Q29uZmlndXJhdGlvblNldHRpbmdzPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENvbmZpZ3VyYXRpb25TZXR0aW5nc0RUTy50b0RUTyhzZXR0aW5nKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmFwaSh7XG4gICAgICB1cmw6IGAke3RoaXMuU0VSVklDRV9VUkx9LyR7cmVxdWVzdC5pZH1gLFxuICAgICAgbWV0aG9kOiAnZGVsZXRlJyxcbiAgICB9KTtcbiAgfVxuXG4gIHJlc3RvcmVTZXR0aW5nKHNldHRpbmdJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuYXBpKHtcbiAgICAgIHVybDogYCR7dGhpcy5TRVJWSUNFX1VSTH0vJHtzZXR0aW5nSWR9L3Jlc3RvcmVgLFxuICAgICAgbWV0aG9kOiAncGF0Y2gnLFxuICAgIH0pO1xuICB9XG5cbiAgY2xlYXIobmFtZTogRGF0YUFkbWluaXN0cmF0aW9uRmllbGQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxuICAgICAgLmFwaSh7XG4gICAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICAgIHVybDogJy9jYWNoZS9ldmljdC8nICsgbmFtZVxuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,26 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { ConfigurationContextMode } from '@veloce/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@veloce/core";
5
+ export class ContextApiService {
6
+ constructor(httpService) {
7
+ this.httpService = httpService;
8
+ this.SERVICE_URL = '/context';
9
+ }
10
+ getContext(headerId, mode) {
11
+ return this.httpService.api({
12
+ method: 'post',
13
+ body: {
14
+ headerId: headerId,
15
+ contextMode: ConfigurationContextMode[mode],
16
+ },
17
+ url: `${this.SERVICE_URL}`,
18
+ });
19
+ }
20
+ }
21
+ ContextApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextApiService, deps: [{ token: i1.BaseHttpService }], target: i0.ɵɵFactoryTarget.Injectable });
22
+ ContextApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextApiService });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ContextApiService, decorators: [{
24
+ type: Injectable
25
+ }], ctorParameters: function () { return [{ type: i1.BaseHttpService }]; } });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL3NyYy9saWIvc2VydmljZXMvY29udGV4dC1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBeUMsd0JBQXdCLEVBQUUsTUFBTSxjQUFjLENBQUM7OztBQUkvRixNQUFNLE9BQU8saUJBQWlCO0lBRzVCLFlBQW9CLFdBQTRCO1FBQTVCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUYvQixnQkFBVyxHQUFHLFVBQVUsQ0FBQztJQUVTLENBQUM7SUFFcEQsVUFBVSxDQUFDLFFBQWdCLEVBQUUsSUFBOEI7UUFDekQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUMxQixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsV0FBVyxFQUFFLHdCQUF3QixDQUFDLElBQUksQ0FBQzthQUM1QztZQUNELEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7K0dBZFUsaUJBQWlCO21IQUFqQixpQkFBaUI7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VIdHRwU2VydmljZSwgQ29uZmlndXJhdGlvbkNvbnRleHQsIENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZSB9IGZyb20gJ0B2ZWxvY2UvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250ZXh0QXBpU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgU0VSVklDRV9VUkwgPSAnL2NvbnRleHQnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cFNlcnZpY2U6IEJhc2VIdHRwU2VydmljZSkge31cblxuICBnZXRDb250ZXh0KGhlYWRlcklkOiBzdHJpbmcsIG1vZGU6IENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZSk6IE9ic2VydmFibGU8Q29uZmlndXJhdGlvbkNvbnRleHQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5hcGkoe1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBib2R5OiB7XG4gICAgICAgIGhlYWRlcklkOiBoZWFkZXJJZCxcbiAgICAgICAgY29udGV4dE1vZGU6IENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZVttb2RlXSxcbiAgICAgIH0sXG4gICAgICB1cmw6IGAke3RoaXMuU0VSVklDRV9VUkx9YCxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,65 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { map, tap } from 'rxjs/operators';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@veloce/core";
5
+ export class DocumentAttachmentApiService {
6
+ constructor(httpService, fileDownloadService) {
7
+ this.httpService = httpService;
8
+ this.fileDownloadService = fileDownloadService;
9
+ }
10
+ getAttachments(searchRequest) {
11
+ return this.httpService.api({
12
+ url: '/attachments/search',
13
+ method: 'post',
14
+ body: searchRequest,
15
+ });
16
+ }
17
+ createAttachment(attachment, file, reportProgress) {
18
+ const formData = new FormData();
19
+ if (file) {
20
+ formData.append('file', file, file.name);
21
+ }
22
+ formData.append('attachment', new Blob([JSON.stringify(attachment)], {
23
+ type: 'application/json',
24
+ }));
25
+ return this.httpService.upload({
26
+ url: `/attachments`,
27
+ body: formData,
28
+ method: 'post',
29
+ observe: reportProgress ? 'events' : undefined,
30
+ reportProgress,
31
+ });
32
+ }
33
+ updateAttachment(id, attachment) {
34
+ return this.httpService.api({
35
+ url: `/attachments/${id}`,
36
+ body: attachment,
37
+ method: 'put',
38
+ });
39
+ }
40
+ getAttachmentFile(id, isPreventDownload) {
41
+ return this.httpService
42
+ .api({
43
+ url: `/attachments/${id}/file`,
44
+ responseType: isPreventDownload ? 'arraybuffer' : 'blob',
45
+ observe: isPreventDownload ? 'body' : 'response',
46
+ })
47
+ .pipe(tap(response => {
48
+ if (!isPreventDownload) {
49
+ this.fileDownloadService.processDownload(response);
50
+ }
51
+ }), map(response => (isPreventDownload ? new Blob([response.body || response]) : response.body || response)));
52
+ }
53
+ removeAttachment(id) {
54
+ return this.httpService.api({
55
+ url: `/attachments/${id}`,
56
+ method: 'delete',
57
+ });
58
+ }
59
+ }
60
+ DocumentAttachmentApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DocumentAttachmentApiService, deps: [{ token: i1.BaseHttpService }, { token: i1.FileDownloadService }], target: i0.ɵɵFactoryTarget.Injectable });
61
+ DocumentAttachmentApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DocumentAttachmentApiService });
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DocumentAttachmentApiService, decorators: [{
63
+ type: Injectable
64
+ }], ctorParameters: function () { return [{ type: i1.BaseHttpService }, { type: i1.FileDownloadService }]; } });
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtYXR0YWNobWVudC1hcGkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL3NyYy9saWIvc2VydmljZXMvZG9jdW1lbnQtYXR0YWNobWVudC1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUTNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUcxQyxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQW9CLFdBQTRCLEVBQVUsbUJBQXdDO1FBQTlFLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUFVLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7SUFBRyxDQUFDO0lBRXRHLGNBQWMsQ0FBQyxhQUE4QztRQUMzRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQzFCLEdBQUcsRUFBRSxxQkFBcUI7WUFDMUIsTUFBTSxFQUFFLE1BQU07WUFDZCxJQUFJLEVBQUUsYUFBYTtTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsVUFBOEIsRUFDOUIsSUFBVyxFQUNYLGNBQXdCO1FBRXhCLE1BQU0sUUFBUSxHQUFhLElBQUksUUFBUSxFQUFFLENBQUM7UUFFMUMsSUFBSSxJQUFJLEVBQUU7WUFDUixRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFDO1FBRUQsUUFBUSxDQUFDLE1BQU0sQ0FDYixZQUFZLEVBQ1osSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7WUFDckMsSUFBSSxFQUFFLGtCQUFrQjtTQUN6QixDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDN0IsR0FBRyxFQUFFLGNBQWM7WUFDbkIsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUM5QyxjQUFjO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQVUsRUFBRSxVQUE4QjtRQUN6RCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQzFCLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO1lBQ3pCLElBQUksRUFBRSxVQUFVO1lBQ2hCLE1BQU0sRUFBRSxLQUFLO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQVUsRUFBRSxpQkFBMkI7UUFDdkQsT0FBTyxJQUFJLENBQUMsV0FBVzthQUNwQixHQUFHLENBQUM7WUFDSCxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTztZQUM5QixZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUN4RCxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVTtTQUNqRCxDQUFDO2FBQ0QsSUFBSSxDQUNILEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwRDtRQUNILENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQ3pHLENBQUM7SUFDTixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBVTtRQUN6QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQzFCLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO1lBQ3pCLE1BQU0sRUFBRSxRQUFRO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7OzBIQXBFVSw0QkFBNEI7OEhBQTVCLDRCQUE0Qjs0RkFBNUIsNEJBQTRCO2tCQUR4QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZUh0dHBTZXJ2aWNlLFxuICBGaWxlRG93bmxvYWRTZXJ2aWNlLFxuICBUZW1wbGF0ZUF0dGFjaG1lbnQsXG4gIFRlbXBsYXRlQXR0YWNobWVudFNlYXJjaFJlcXVlc3QsXG59IGZyb20gJ0B2ZWxvY2UvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERvY3VtZW50QXR0YWNobWVudEFwaVNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHBTZXJ2aWNlOiBCYXNlSHR0cFNlcnZpY2UsIHByaXZhdGUgZmlsZURvd25sb2FkU2VydmljZTogRmlsZURvd25sb2FkU2VydmljZSkge31cblxuICBnZXRBdHRhY2htZW50cyhzZWFyY2hSZXF1ZXN0OiBUZW1wbGF0ZUF0dGFjaG1lbnRTZWFyY2hSZXF1ZXN0KTogT2JzZXJ2YWJsZTxUZW1wbGF0ZUF0dGFjaG1lbnRbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmFwaSh7XG4gICAgICB1cmw6ICcvYXR0YWNobWVudHMvc2VhcmNoJyxcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgYm9keTogc2VhcmNoUmVxdWVzdCxcbiAgICB9KTtcbiAgfVxuXG4gIGNyZWF0ZUF0dGFjaG1lbnQoXG4gICAgYXR0YWNobWVudDogVGVtcGxhdGVBdHRhY2htZW50LFxuICAgIGZpbGU/OiBGaWxlLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgKTogT2JzZXJ2YWJsZTxUZW1wbGF0ZUF0dGFjaG1lbnQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGlmIChmaWxlKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICdhdHRhY2htZW50JyxcbiAgICAgIG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShhdHRhY2htZW50KV0sIHtcbiAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLnVwbG9hZCh7XG4gICAgICB1cmw6IGAvYXR0YWNobWVudHNgLFxuICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIG9ic2VydmU6IHJlcG9ydFByb2dyZXNzID8gJ2V2ZW50cycgOiB1bmRlZmluZWQsXG4gICAgICByZXBvcnRQcm9ncmVzcyxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUF0dGFjaG1lbnQoaWQ6IHN0cmluZywgYXR0YWNobWVudDogVGVtcGxhdGVBdHRhY2htZW50KTogT2JzZXJ2YWJsZTxUZW1wbGF0ZUF0dGFjaG1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5hcGkoe1xuICAgICAgdXJsOiBgL2F0dGFjaG1lbnRzLyR7aWR9YCxcbiAgICAgIGJvZHk6IGF0dGFjaG1lbnQsXG4gICAgICBtZXRob2Q6ICdwdXQnLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0QXR0YWNobWVudEZpbGUoaWQ6IHN0cmluZywgaXNQcmV2ZW50RG93bmxvYWQ/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxuICAgICAgLmFwaSh7XG4gICAgICAgIHVybDogYC9hdHRhY2htZW50cy8ke2lkfS9maWxlYCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiBpc1ByZXZlbnREb3dubG9hZCA/ICdhcnJheWJ1ZmZlcicgOiAnYmxvYicsXG4gICAgICAgIG9ic2VydmU6IGlzUHJldmVudERvd25sb2FkID8gJ2JvZHknIDogJ3Jlc3BvbnNlJyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICBpZiAoIWlzUHJldmVudERvd25sb2FkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVEb3dubG9hZFNlcnZpY2UucHJvY2Vzc0Rvd25sb2FkKHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAocmVzcG9uc2UgPT4gKGlzUHJldmVudERvd25sb2FkID8gbmV3IEJsb2IoW3Jlc3BvbnNlLmJvZHkgfHwgcmVzcG9uc2VdKSA6IHJlc3BvbnNlLmJvZHkgfHwgcmVzcG9uc2UpKSxcbiAgICAgICk7XG4gIH1cblxuICByZW1vdmVBdHRhY2htZW50KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5hcGkoe1xuICAgICAgdXJsOiBgL2F0dGFjaG1lbnRzLyR7aWR9YCxcbiAgICAgIG1ldGhvZDogJ2RlbGV0ZScsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,278 @@
1
+ import { CurrencyPipe } from '@angular/common';
2
+ import { Injectable } from '@angular/core';
3
+ import { DocxTemplater, QuoteDraft, StringUtils, } from '@veloce/core';
4
+ import * as _ from 'lodash';
5
+ import * as moment_ from 'moment';
6
+ import { forkJoin, of, zip } from 'rxjs';
7
+ import { defaultIfEmpty, map, switchMap, tap } from 'rxjs/operators';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@veloce/core";
10
+ import * as i2 from "./salesforce-api.service";
11
+ import * as i3 from "./document-attachment-api.service";
12
+ import * as i4 from "@angular/common/http";
13
+ const moment = moment_;
14
+ const mapSfQueryResult = (limit) => map((records) => {
15
+ if (!records.length) {
16
+ return { _result: 'No Records Found' };
17
+ }
18
+ if (limit === 1) {
19
+ return records[0];
20
+ }
21
+ return records;
22
+ });
23
+ const mapBooleanIfAplicable = (value) => {
24
+ if (value === 'true') {
25
+ return true;
26
+ }
27
+ if (value === 'false') {
28
+ return false;
29
+ }
30
+ return value;
31
+ };
32
+ export class DocumentTemplatesApiService {
33
+ constructor(service, sfRepo, fileDownloadService, documentAttachmentService, http) {
34
+ this.service = service;
35
+ this.sfRepo = sfRepo;
36
+ this.fileDownloadService = fileDownloadService;
37
+ this.documentAttachmentService = documentAttachmentService;
38
+ this.http = http;
39
+ this.fallbackDocGenHost = 'https://dev-dp1.velocpq.com/docgen';
40
+ if (window.VELO_DOCGEN_API) {
41
+ this.docGenHost = window.VELO_DOCGEN_API;
42
+ }
43
+ else {
44
+ console.log(`window.VELO_DOCGEN_API not set, will use fallback "${this.fallbackDocGenHost}"`);
45
+ this.docGenHost = this.fallbackDocGenHost;
46
+ }
47
+ }
48
+ getTemplates(tag) {
49
+ return this.service.api({
50
+ url: '/templates',
51
+ method: 'get',
52
+ params: Object.assign({}, (tag && { tag })),
53
+ });
54
+ }
55
+ upsertTemplate(template, file, reportProgress) {
56
+ const formData = new FormData();
57
+ if (file) {
58
+ formData.append('file', file, file.name);
59
+ }
60
+ formData.append('template', new Blob([JSON.stringify(template)], {
61
+ type: 'application/json',
62
+ }));
63
+ return this.service.upload({
64
+ url: `/templates` + ((template.id && `/${template.id}`) || ''),
65
+ body: formData,
66
+ method: template.id ? 'put' : 'post',
67
+ reportProgress,
68
+ });
69
+ }
70
+ removeTemplate(id) {
71
+ return this.service.api({
72
+ url: '/templates' + id,
73
+ method: 'delete',
74
+ });
75
+ }
76
+ cloneTemplate(id) {
77
+ return this.service.api({
78
+ url: '/templates/clone/' + id,
79
+ method: 'post',
80
+ });
81
+ }
82
+ generateDocumentData(template, object, params) {
83
+ var _a, _b, _c, _d;
84
+ const shouldPreventDownload = params === null || params === void 0 ? void 0 : params.shouldPreventDownload;
85
+ const useLocalDataGeneration = (_b = (_a = template.properties) === null || _a === void 0 ? void 0 : _a.find(({ name }) => name === 'useLocalDataGeneration')) === null || _b === void 0 ? void 0 : _b.value;
86
+ if (!useLocalDataGeneration && object instanceof QuoteDraft) {
87
+ return this.generate('/templates/generate-data', { template, quote: object }, shouldPreventDownload, shouldPreventDownload ? 'json' : 'blob');
88
+ }
89
+ const allQueries = [...((_c = template === null || template === void 0 ? void 0 : template.queries) !== null && _c !== void 0 ? _c : [])];
90
+ const properties = ((_d = object === null || object === void 0 ? void 0 : object.context) === null || _d === void 0 ? void 0 : _d.properties) || (object === null || object === void 0 ? void 0 : object.properties) || {};
91
+ const accountId = properties === null || properties === void 0 ? void 0 : properties.AccountId;
92
+ const userId = properties === null || properties === void 0 ? void 0 : properties.UserId;
93
+ if (accountId) {
94
+ allQueries.push({
95
+ queryName: 'QuoteAccountQuery',
96
+ objectName: 'Account',
97
+ resultObjectName: 'account',
98
+ statement: `Id ='${accountId}'`,
99
+ fields: [],
100
+ });
101
+ }
102
+ if (userId) {
103
+ allQueries.push({
104
+ queryName: 'QuoteUserQuery',
105
+ objectName: 'User',
106
+ resultObjectName: 'agent',
107
+ statement: `Id ='${userId}'`,
108
+ fields: [],
109
+ });
110
+ }
111
+ const queries = allQueries.map(query => this.queryObject(query, { properties })) || [];
112
+ return forkJoin([...queries])
113
+ .pipe(defaultIfEmpty([]))
114
+ .pipe(map(results => {
115
+ var _a, _b, _c, _d;
116
+ const queriesResult = _.chain(results)
117
+ .reduce((acc, r) => {
118
+ if (r) {
119
+ return Object.assign(Object.assign({}, acc), r);
120
+ }
121
+ return acc;
122
+ }, {})
123
+ .value();
124
+ const templateProperties = ((template === null || template === void 0 ? void 0 : template.properties) || []).reduce((trunk, { name, value }) => {
125
+ return Object.assign(Object.assign({}, trunk), { [name]: mapBooleanIfAplicable(value) });
126
+ }, {});
127
+ const data = Object.assign(Object.assign(Object.assign({}, (typeof object === 'object' ? object : { object })), queriesResult), templateProperties);
128
+ if (template.script && template.script.trim().length) {
129
+ const currencyFormat = ((_b = (_a = template.properties) === null || _a === void 0 ? void 0 : _a.find(({ name }) => name === 'currencyFormat')) === null || _b === void 0 ? void 0 : _b.value) || '1.2-2';
130
+ const dateFormat = ((_d = (_c = template.properties) === null || _c === void 0 ? void 0 : _c.find(({ name }) => name === 'dateFormat')) === null || _d === void 0 ? void 0 : _d.value) || 'D/MMM/YYYY';
131
+ const formatDate = (value) => {
132
+ return value ? moment(value).format(dateFormat) : value;
133
+ };
134
+ const transform = new Function(`return ${template.script}`)();
135
+ const transformedData = transform(Object.assign(Object.assign({}, data), { utils: {
136
+ lodash: _,
137
+ currency: (value) => new CurrencyPipe('en-US').transform(value, 'USD', 'symbol', currencyFormat),
138
+ date: formatDate,
139
+ }, ToDay: formatDate(Date.now()) }));
140
+ if (!shouldPreventDownload) {
141
+ const blob = new Blob([JSON.stringify(transformedData)]);
142
+ this.fileDownloadService.processDownload(blob, 'data.json');
143
+ }
144
+ return transformedData;
145
+ }
146
+ return data;
147
+ }));
148
+ }
149
+ generateDocument(template, object, params = {}) {
150
+ const attachmentIds = (template.attachments || []).map(({ id }) => id).filter(Boolean);
151
+ const { shouldUseLocalDocxTemplater } = params;
152
+ return shouldUseLocalDocxTemplater && !(object instanceof QuoteDraft)
153
+ ? this.generateDocumentNew(template, object, params)
154
+ : this.generateWithBackendDocxTemplater({ template, quote: object, attachmentIds, params });
155
+ }
156
+ generateDocumentNew(template, object, params = {}) {
157
+ const { attachToQuote, documentFormat, shouldPreventDownload } = params;
158
+ const file$ = this.service.api({
159
+ method: 'get',
160
+ url: `/templates/${template.id}/file`,
161
+ responseType: 'arraybuffer',
162
+ });
163
+ const attachmentIds = (template.attachments || []).map(({ id }) => id);
164
+ const attachments$ = attachmentIds.length
165
+ ? attachmentIds.map(attachmentId => {
166
+ return this.documentAttachmentService.getAttachmentFile(attachmentId, true);
167
+ })
168
+ : [];
169
+ const data$ = this.generateDocumentData(template, object, Object.assign(Object.assign({}, params), { shouldPreventDownload: true }));
170
+ return zip(file$, data$, ...attachments$).pipe(switchMap(([file, data, ...attachments]) => {
171
+ var _a;
172
+ const d = DocxTemplater.generate(file, data);
173
+ const body = new FormData();
174
+ const properties = ((_a = object === null || object === void 0 ? void 0 : object.context) === null || _a === void 0 ? void 0 : _a.properties) || (object === null || object === void 0 ? void 0 : object.properties) || {};
175
+ const documentName = (properties === null || properties === void 0 ? void 0 : properties.Name) || template.name;
176
+ // TODO: special CATO case. Refactor for a more generic approach
177
+ if (documentFormat === 'DOCX') {
178
+ this.fileDownloadService.processDownload(d, documentName);
179
+ return of(d);
180
+ }
181
+ attachments.forEach((attachment) => {
182
+ body.append('attachments', new Blob([attachment]));
183
+ });
184
+ body.append('orderform', d);
185
+ return this.http
186
+ .post(`${this.docGenHost}/documents/merge`, body, {
187
+ responseType: 'arraybuffer',
188
+ })
189
+ .pipe(switchMap((pdf) => {
190
+ const blob = new Blob([pdf]);
191
+ if (!shouldPreventDownload) {
192
+ this.fileDownloadService.processDownload(blob, `${documentName}.pdf`);
193
+ }
194
+ if (attachToQuote && object instanceof QuoteDraft) {
195
+ const formData = new FormData();
196
+ formData.append('file', blob, `${documentName}.pdf`);
197
+ return this.http.post(`${window['VELO_API']}/services/quotes/${object.quoteId}/attach-document`, formData, {
198
+ responseType: 'arraybuffer',
199
+ headers: {
200
+ Authorization: window['VELO_KEY'],
201
+ },
202
+ });
203
+ }
204
+ return of(blob);
205
+ }));
206
+ }));
207
+ }
208
+ getAttachments(searchRequest) {
209
+ return this.documentAttachmentService.getAttachments(searchRequest);
210
+ }
211
+ getAttachmentFile(id) {
212
+ return this.documentAttachmentService.getAttachmentFile(id);
213
+ }
214
+ createAttachment(attachment, file, reportProgress) {
215
+ return this.documentAttachmentService.createAttachment(attachment, file, reportProgress);
216
+ }
217
+ removeAttachment(id) {
218
+ return this.documentAttachmentService.removeAttachment(id);
219
+ }
220
+ downloadTemplateFile(id) {
221
+ return this.service
222
+ .api({
223
+ url: `/templates/${id}/file`,
224
+ responseType: 'blob',
225
+ observe: 'response',
226
+ })
227
+ .pipe(tap(response => {
228
+ this.fileDownloadService.processDownload(response);
229
+ }), map(response => response.body || response));
230
+ }
231
+ generateWithBackendDocxTemplater({ template, quote, attachmentIds, params, }) {
232
+ const { shouldPreventDownload } = params;
233
+ const nonEmptyParams = Object.keys(params || {})
234
+ .filter(k => params[k] !== undefined)
235
+ .reduce((obj, key) => {
236
+ obj[key] = params[key];
237
+ return obj;
238
+ }, {});
239
+ return this.generate(`/templates/${template.id}/generate`, { quote, attachments: attachmentIds }, Boolean(shouldPreventDownload), 'blob', nonEmptyParams, false);
240
+ }
241
+ generate(url, body, shouldPreventDownload, responseType, params, isUpload, reportProgress) {
242
+ const requestOptions = {
243
+ method: 'post',
244
+ url,
245
+ body,
246
+ reportProgress,
247
+ responseType,
248
+ observe: shouldPreventDownload ? 'body' : 'response',
249
+ params,
250
+ };
251
+ return (isUpload ? this.service.upload(requestOptions) : this.service.api(requestOptions)).pipe(tap(response => {
252
+ if (!shouldPreventDownload) {
253
+ this.fileDownloadService.processDownload(response);
254
+ }
255
+ }));
256
+ }
257
+ queryObject({ objectName, resultObjectName, fields, statement }, { properties }) {
258
+ var _a;
259
+ const patternLimit = /(\s*limit\s\d*)/i;
260
+ let limit = 1;
261
+ if (patternLimit.test(statement)) {
262
+ const limitStr = (_a = statement === null || statement === void 0 ? void 0 : statement.match(patternLimit)) === null || _a === void 0 ? void 0 : _a[1].trim().substring(5).trim();
263
+ if (limitStr) {
264
+ limit = Number.parseInt(limitStr, 10);
265
+ }
266
+ statement = statement.replace(patternLimit, '');
267
+ }
268
+ const resolvedStatement = StringUtils.fillPlaceholders(statement, properties, /:\s*(\w[\w\d_.]+)/i);
269
+ const searchRequest = Object.assign({ skip: 0, count: limit, rawCondition: resolvedStatement }, ((fields === null || fields === void 0 ? void 0 : fields.length) && !!fields[0] && { fields }));
270
+ return this.sfRepo.query(searchRequest, objectName).pipe(mapSfQueryResult(limit), map(value => ({ [resultObjectName]: value })));
271
+ }
272
+ }
273
+ DocumentTemplatesApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DocumentTemplatesApiService, deps: [{ token: i1.BaseHttpService }, { token: i2.SalesforceApiService }, { token: i1.FileDownloadService }, { token: i3.DocumentAttachmentApiService }, { token: i4.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
274
+ DocumentTemplatesApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DocumentTemplatesApiService });
275
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: DocumentTemplatesApiService, decorators: [{
276
+ type: Injectable
277
+ }], ctorParameters: function () { return [{ type: i1.BaseHttpService }, { type: i2.SalesforceApiService }, { type: i1.FileDownloadService }, { type: i3.DocumentAttachmentApiService }, { type: i4.HttpClient }]; } });
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtdGVtcGxhdGVzLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvc3JjL2xpYi9zZXJ2aWNlcy9kb2N1bWVudC10ZW1wbGF0ZXMtYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUlMLGFBQWEsRUFHYixVQUFVLEVBRVYsV0FBVyxHQUtaLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQUlyRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFHdkIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFJLEtBQWEsRUFBRSxFQUFFLENBQzVDLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO0lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ25CLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztLQUN4QztJQUVELElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNmLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25CO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUM7QUFFTCxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDOUMsSUFB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RixJQUFJLFFBQVEsRUFBRTtnQkFDWixLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDdkM7WUFDRCxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDakQ7UUFFRCxNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFFcEcsTUFBTSxhQUFhLEdBQUcsZ0JBQ3BCLElBQUksRUFBRSxDQUFDLEVBQ1AsS0FBSyxFQUFFLEtBQUssRUFDWixZQUFZLEVBQUUsaUJBQWlCLElBQzVCLENBQUMsQ0FBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsTUFBTSxLQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUNoQyxDQUFDO1FBRW5CLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDdEQsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQ3ZCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUM5QyxDQUFDO0lBQ0osQ0FBQzs7eUhBL1dVLDJCQUEyQjs2SEFBM0IsMkJBQTJCOzRGQUEzQiwyQkFBMkI7a0JBRHZDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFueVdpdGhQcm9wZXJ0aWVzLFxuICBCYXNlSHR0cFNlcnZpY2UsXG4gIERvY3VtZW50VGVtcGxhdGUsXG4gIERvY3hUZW1wbGF0ZXIsXG4gIEZpbGVEb3dubG9hZFNlcnZpY2UsXG4gIEh0dHBSZXF1ZXN0T3B0aW9ucyxcbiAgUXVvdGVEcmFmdCxcbiAgU2VhcmNoUmVxdWVzdCxcbiAgU3RyaW5nVXRpbHMsXG4gIFRlbXBsYXRlQXR0YWNobWVudCxcbiAgVGVtcGxhdGVBdHRhY2htZW50U2VhcmNoUmVxdWVzdCxcbiAgVGVtcGxhdGVRdWVyeSxcbiAgVmxXaW5kb3csXG59IGZyb20gJ0B2ZWxvY2UvY29yZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyBtb21lbnRfIGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHksIG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEb2N1bWVudEF0dGFjaG1lbnRBcGlTZXJ2aWNlIH0gZnJvbSAnLi9kb2N1bWVudC1hdHRhY2htZW50LWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFNhbGVzZm9yY2VBcGlTZXJ2aWNlIH0gZnJvbSAnLi9zYWxlc2ZvcmNlLWFwaS5zZXJ2aWNlJztcblxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcbmRlY2xhcmUgY29uc3Qgd2luZG93OiBWbFdpbmRvdztcblxuY29uc3QgbWFwU2ZRdWVyeVJlc3VsdCA9IDxUPihsaW1pdDogbnVtYmVyKSA9PlxuICBtYXAoKHJlY29yZHM6IFRbXSkgPT4ge1xuICAgIGlmICghcmVjb3Jkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7IF9yZXN1bHQ6ICdObyBSZWNvcmRzIEZvdW5kJyB9O1xuICAgIH1cblxuICAgIGlmIChsaW1pdCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHJlY29yZHNbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH0pO1xuXG5jb25zdCBtYXBCb29sZWFuSWZBcGxpY2FibGUgPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERvY3VtZW50VGVtcGxhdGVzQXBpU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmFsbGJhY2tEb2NHZW5Ib3N0ID0gJ2h0dHBzOi8vZGV2LWRwMS52ZWxvY3BxLmNvbS9kb2NnZW4nO1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY0dlbkhvc3Q7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2VydmljZTogQmFzZUh0dHBTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2ZSZXBvOiBTYWxlc2ZvcmNlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGZpbGVEb3dubG9hZFNlcnZpY2U6IEZpbGVEb3dubG9hZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkb2N1bWVudEF0dGFjaG1lbnRTZXJ2aWNlOiBEb2N1bWVudEF0dGFjaG1lbnRBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgKSB7XG4gICAgaWYgKHdpbmRvdy5WRUxPX0RPQ0dFTl9BUEkpIHtcbiAgICAgIHRoaXMuZG9jR2VuSG9zdCA9IHdpbmRvdy5WRUxPX0RPQ0dFTl9BUEk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKGB3aW5kb3cuVkVMT19ET0NHRU5fQVBJIG5vdCBzZXQsIHdpbGwgdXNlIGZhbGxiYWNrIFwiJHt0aGlzLmZhbGxiYWNrRG9jR2VuSG9zdH1cImApO1xuICAgICAgdGhpcy5kb2NHZW5Ib3N0ID0gdGhpcy5mYWxsYmFja0RvY0dlbkhvc3Q7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGVtcGxhdGVzKHRhZz86IHN0cmluZyk6IE9ic2VydmFibGU8RG9jdW1lbnRUZW1wbGF0ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VydmljZS5hcGkoe1xuICAgICAgdXJsOiAnL3RlbXBsYXRlcycsXG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIC4uLih0YWcgJiYgeyB0YWcgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgdXBzZXJ0VGVtcGxhdGUodGVtcGxhdGU6IERvY3VtZW50VGVtcGxhdGUsIGZpbGU/OiBGaWxlLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPERvY3VtZW50VGVtcGxhdGU+IHtcbiAgICBjb25zdCBmb3JtRGF0YTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcblxuICAgIGlmIChmaWxlKSB7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLCBmaWxlLm5hbWUpO1xuICAgIH1cbiAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAndGVtcGxhdGUnLFxuICAgICAgbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHRlbXBsYXRlKV0sIHtcbiAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLnNlcnZpY2UudXBsb2FkKHtcbiAgICAgIHVybDogYC90ZW1wbGF0ZXNgICsgKCh0ZW1wbGF0ZS5pZCAmJiBgLyR7dGVtcGxhdGUuaWR9YCkgfHwgJycpLFxuICAgICAgYm9keTogZm9ybURhdGEsXG4gICAgICBtZXRob2Q6IHRlbXBsYXRlLmlkID8gJ3B1dCcgOiAncG9zdCcsXG4gICAgICByZXBvcnRQcm9ncmVzcyxcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZVRlbXBsYXRlKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPERvY3VtZW50VGVtcGxhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmFwaSh7XG4gICAgICB1cmw6ICcvdGVtcGxhdGVzJyArIGlkLFxuICAgICAgbWV0aG9kOiAnZGVsZXRlJyxcbiAgICB9KTtcbiAgfVxuXG4gIGNsb25lVGVtcGxhdGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8RG9jdW1lbnRUZW1wbGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuYXBpKHtcbiAgICAgIHVybDogJy90ZW1wbGF0ZXMvY2xvbmUvJyArIGlkLFxuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgfSk7XG4gIH1cblxuICBnZW5lcmF0ZURvY3VtZW50RGF0YShcbiAgICB0ZW1wbGF0ZTogRG9jdW1lbnRUZW1wbGF0ZSxcbiAgICBvYmplY3Q6IGFueSxcbiAgICBwYXJhbXM/OiB7IFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgYm9vbGVhbiB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHNob3VsZFByZXZlbnREb3dubG9hZCA9IHBhcmFtcz8uc2hvdWxkUHJldmVudERvd25sb2FkO1xuICAgIGNvbnN0IHVzZUxvY2FsRGF0YUdlbmVyYXRpb24gPSB0ZW1wbGF0ZS5wcm9wZXJ0aWVzPy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gJ3VzZUxvY2FsRGF0YUdlbmVyYXRpb24nKT8udmFsdWU7XG5cbiAgICBpZiAoIXVzZUxvY2FsRGF0YUdlbmVyYXRpb24gJiYgb2JqZWN0IGluc3RhbmNlb2YgUXVvdGVEcmFmdCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGUoXG4gICAgICAgICcvdGVtcGxhdGVzL2dlbmVyYXRlLWRhdGEnLFxuICAgICAgICB7IHRlbXBsYXRlLCBxdW90ZTogb2JqZWN0IH0sXG4gICAgICAgIHNob3VsZFByZXZlbnREb3dubG9hZCBhcyBib29sZWFuLFxuICAgICAgICBzaG91bGRQcmV2ZW50RG93bmxvYWQgPyAnanNvbicgOiAnYmxvYicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbFF1ZXJpZXMgPSBbLi4uKHRlbXBsYXRlPy5xdWVyaWVzID8/IFtdKV07XG4gICAgY29uc3QgcHJvcGVydGllcyA9IG9iamVjdD8uY29udGV4dD8ucHJvcGVydGllcyB8fCBvYmplY3Q/LnByb3BlcnRpZXMgfHwge307XG5cbiAgICBjb25zdCBhY2NvdW50SWQgPSBwcm9wZXJ0aWVzPy5BY2NvdW50SWQ7XG4gICAgY29uc3QgdXNlcklkID0gcHJvcGVydGllcz8uVXNlcklkO1xuXG4gICAgaWYgKGFjY291bnRJZCkge1xuICAgICAgYWxsUXVlcmllcy5wdXNoKHtcbiAgICAgICAgcXVlcnlOYW1lOiAnUXVvdGVBY2NvdW50UXVlcnknLFxuICAgICAgICBvYmplY3ROYW1lOiAnQWNjb3VudCcsXG4gICAgICAgIHJlc3VsdE9iamVjdE5hbWU6ICdhY2NvdW50JyxcbiAgICAgICAgc3RhdGVtZW50OiBgSWQgPScke2FjY291bnRJZH0nYCxcbiAgICAgICAgZmllbGRzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodXNlcklkKSB7XG4gICAgICBhbGxRdWVyaWVzLnB1c2goe1xuICAgICAgICBxdWVyeU5hbWU6ICdRdW90ZVVzZXJRdWVyeScsXG4gICAgICAgIG9iamVjdE5hbWU6ICdVc2VyJyxcbiAgICAgICAgcmVzdWx0T2JqZWN0TmFtZTogJ2FnZW50JyxcbiAgICAgICAgc3RhdGVtZW50OiBgSWQgPScke3VzZXJJZH0nYCxcbiAgICAgICAgZmllbGRzOiBbXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJpZXMgPSBhbGxRdWVyaWVzLm1hcChxdWVyeSA9PiB0aGlzLnF1ZXJ5T2JqZWN0KHF1ZXJ5IGFzIFRlbXBsYXRlUXVlcnksIHsgcHJvcGVydGllcyB9KSkgfHwgW107XG5cbiAgICByZXR1cm4gZm9ya0pvaW4oWy4uLnF1ZXJpZXNdKVxuICAgICAgLnBpcGUoZGVmYXVsdElmRW1wdHkoW10gYXMgYW55W10pKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChyZXN1bHRzID0+IHtcbiAgICAgICAgICBjb25zdCBxdWVyaWVzUmVzdWx0ID0gXy5jaGFpbihyZXN1bHRzKVxuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCByKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCAuLi5yIH07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pXG4gICAgICAgICAgICAudmFsdWUoKTtcblxuICAgICAgICAgIGNvbnN0IHRlbXBsYXRlUHJvcGVydGllcyA9ICh0ZW1wbGF0ZT8ucHJvcGVydGllcyB8fCBbXSkucmVkdWNlKCh0cnVuaywgeyBuYW1lLCB2YWx1ZSB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi50cnVuayxcbiAgICAgICAgICAgICAgW25hbWUgYXMgc3RyaW5nXTogbWFwQm9vbGVhbklmQXBsaWNhYmxlKHZhbHVlIGFzIGFueSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sIHt9KTtcblxuICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAuLi4odHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgPyBvYmplY3QgOiB7IG9iamVjdCB9KSxcbiAgICAgICAgICAgIC4uLnF1ZXJpZXNSZXN1bHQsXG4gICAgICAgICAgICAuLi50ZW1wbGF0ZVByb3BlcnRpZXMsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICh0ZW1wbGF0ZS5zY3JpcHQgJiYgdGVtcGxhdGUuc2NyaXB0LnRyaW0oKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbmN5Rm9ybWF0ID0gdGVtcGxhdGUucHJvcGVydGllcz8uZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09ICdjdXJyZW5jeUZvcm1hdCcpPy52YWx1ZSB8fCAnMS4yLTInO1xuICAgICAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IHRlbXBsYXRlLnByb3BlcnRpZXM/LmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSAnZGF0ZUZvcm1hdCcpPy52YWx1ZSB8fCAnRC9NTU0vWVlZWSc7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXREYXRlID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlID8gbW9tZW50KHZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCkgOiB2YWx1ZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBuZXcgRnVuY3Rpb24oYHJldHVybiAke3RlbXBsYXRlLnNjcmlwdH1gKSgpO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gdHJhbnNmb3JtKHtcbiAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgdXRpbHM6IHtcbiAgICAgICAgICAgICAgICBsb2Rhc2g6IF8sXG4gICAgICAgICAgICAgICAgY3VycmVuY3k6ICh2YWx1ZTogYW55KSA9PiBuZXcgQ3VycmVuY3lQaXBlKCdlbi1VUycpLnRyYW5zZm9ybSh2YWx1ZSwgJ1VTRCcsICdzeW1ib2wnLCBjdXJyZW5jeUZvcm1hdCksXG4gICAgICAgICAgICAgICAgZGF0ZTogZm9ybWF0RGF0ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgVG9EYXk6IGZvcm1hdERhdGUoRGF0ZS5ub3coKSBhcyBhbnkpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXNob3VsZFByZXZlbnREb3dubG9hZCkge1xuICAgICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KHRyYW5zZm9ybWVkRGF0YSldKTtcbiAgICAgICAgICAgICAgdGhpcy5maWxlRG93bmxvYWRTZXJ2aWNlLnByb2Nlc3NEb3dubG9hZChibG9iLCAnZGF0YS5qc29uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgZ2VuZXJhdGVEb2N1bWVudChcbiAgICB0ZW1wbGF0ZTogRG9jdW1lbnRUZW1wbGF0ZSxcbiAgICBvYmplY3Q6IGFueSxcbiAgICBwYXJhbXM6IHsgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBib29sZWFuIH0gPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBhdHRhY2htZW50SWRzID0gKHRlbXBsYXRlLmF0dGFjaG1lbnRzIHx8IFtdKS5tYXAoKHsgaWQgfSkgPT4gaWQpLmZpbHRlcihCb29sZWFuKSBhcyBzdHJpbmdbXTtcbiAgICBjb25zdCB7IHNob3VsZFVzZUxvY2FsRG9jeFRlbXBsYXRlciB9ID0gcGFyYW1zO1xuXG4gICAgcmV0dXJuIHNob3VsZFVzZUxvY2FsRG9jeFRlbXBsYXRlciAmJiAhKG9iamVjdCBpbnN0YW5jZW9mIFF1b3RlRHJhZnQpXG4gICAgICA/IHRoaXMuZ2VuZXJhdGVEb2N1bWVudE5ldyh0ZW1wbGF0ZSwgb2JqZWN0LCBwYXJhbXMpXG4gICAgICA6IHRoaXMuZ2VuZXJhdGVXaXRoQmFja2VuZERvY3hUZW1wbGF0ZXIoeyB0ZW1wbGF0ZSwgcXVvdGU6IG9iamVjdCBhcyBRdW90ZURyYWZ0LCBhdHRhY2htZW50SWRzLCBwYXJhbXMgfSk7XG4gIH1cblxuICBnZW5lcmF0ZURvY3VtZW50TmV3KFxuICAgIHRlbXBsYXRlOiBEb2N1bWVudFRlbXBsYXRlLFxuICAgIG9iamVjdDogYW55LFxuICAgIHBhcmFtczogeyBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IGJvb2xlYW4gfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHsgYXR0YWNoVG9RdW90ZSwgZG9jdW1lbnRGb3JtYXQsIHNob3VsZFByZXZlbnREb3dubG9hZCB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGZpbGUkID0gdGhpcy5zZXJ2aWNlLmFwaSh7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgdXJsOiBgL3RlbXBsYXRlcy8ke3RlbXBsYXRlLmlkfS9maWxlYCxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcbiAgICB9KTtcbiAgICBjb25zdCBhdHRhY2htZW50SWRzID0gKHRlbXBsYXRlLmF0dGFjaG1lbnRzIHx8IFtdKS5tYXAoKHsgaWQgfSkgPT4gaWQpO1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzJCA9IGF0dGFjaG1lbnRJZHMubGVuZ3RoXG4gICAgICA/IGF0dGFjaG1lbnRJZHMubWFwKGF0dGFjaG1lbnRJZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRBdHRhY2htZW50U2VydmljZS5nZXRBdHRhY2htZW50RmlsZShhdHRhY2htZW50SWQgYXMgc3RyaW5nLCB0cnVlKTtcbiAgICAgICAgfSlcbiAgICAgIDogW107XG5cbiAgICBjb25zdCBkYXRhJCA9IHRoaXMuZ2VuZXJhdGVEb2N1bWVudERhdGEodGVtcGxhdGUsIG9iamVjdCwgeyAuLi5wYXJhbXMsIHNob3VsZFByZXZlbnREb3dubG9hZDogdHJ1ZSB9KTtcblxuICAgIHJldHVybiB6aXAoZmlsZSQsIGRhdGEkLCAuLi5hdHRhY2htZW50cyQpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKFtmaWxlLCBkYXRhLCAuLi5hdHRhY2htZW50c10pID0+IHtcbiAgICAgICAgY29uc3QgZCA9IERvY3hUZW1wbGF0ZXIuZ2VuZXJhdGUoZmlsZSwgZGF0YSk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IG9iamVjdD8uY29udGV4dD8ucHJvcGVydGllcyB8fCBvYmplY3Q/LnByb3BlcnRpZXMgfHwge307XG4gICAgICAgIGNvbnN0IGRvY3VtZW50TmFtZSA9IHByb3BlcnRpZXM/Lk5hbWUgfHwgdGVtcGxhdGUubmFtZTtcblxuICAgICAgICAvLyBUT0RPOiBzcGVjaWFsIENBVE8gY2FzZS4gUmVmYWN0b3IgZm9yIGEgbW9yZSBnZW5lcmljIGFwcHJvYWNoXG4gICAgICAgIGlmIChkb2N1bWVudEZvcm1hdCA9PT0gJ0RPQ1gnKSB7XG4gICAgICAgICAgdGhpcy5maWxlRG93bmxvYWRTZXJ2aWNlLnByb2Nlc3NEb3dubG9hZChkLCBkb2N1bWVudE5hbWUpO1xuXG4gICAgICAgICAgcmV0dXJuIG9mKGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXR0YWNobWVudHMuZm9yRWFjaCgoYXR0YWNobWVudDogQXJyYXlCdWZmZXIpID0+IHtcbiAgICAgICAgICBib2R5LmFwcGVuZCgnYXR0YWNobWVudHMnLCBuZXcgQmxvYihbYXR0YWNobWVudF0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYm9keS5hcHBlbmQoJ29yZGVyZm9ybScsIGQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgICAucG9zdChgJHt0aGlzLmRvY0dlbkhvc3R9L2RvY3VtZW50cy9tZXJnZWAsIGJvZHksIHtcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyxcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKChwZGY6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3BkZl0pO1xuXG4gICAgICAgICAgICAgIGlmICghc2hvdWxkUHJldmVudERvd25sb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlRG93bmxvYWRTZXJ2aWNlLnByb2Nlc3NEb3dubG9hZChibG9iLCBgJHtkb2N1bWVudE5hbWV9LnBkZmApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGF0dGFjaFRvUXVvdGUgJiYgb2JqZWN0IGluc3RhbmNlb2YgUXVvdGVEcmFmdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdmaWxlJywgYmxvYiwgYCR7ZG9jdW1lbnROYW1lfS5wZGZgKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgICAgICAgICAgICAgIGAke3dpbmRvd1snVkVMT19BUEknXX0vc2VydmljZXMvcXVvdGVzLyR7b2JqZWN0LnF1b3RlSWR9L2F0dGFjaC1kb2N1bWVudGAsXG4gICAgICAgICAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInIGFzIGFueSxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgIEF1dGhvcml6YXRpb246IHdpbmRvd1snVkVMT19LRVknXSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gb2YoYmxvYik7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGdldEF0dGFjaG1lbnRzKHNlYXJjaFJlcXVlc3Q6IFRlbXBsYXRlQXR0YWNobWVudFNlYXJjaFJlcXVlc3QpOiBPYnNlcnZhYmxlPFRlbXBsYXRlQXR0YWNobWVudFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRBdHRhY2htZW50U2VydmljZS5nZXRBdHRhY2htZW50cyhzZWFyY2hSZXF1ZXN0KTtcbiAgfVxuXG4gIGdldEF0dGFjaG1lbnRGaWxlKGlkOiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50QXR0YWNobWVudFNlcnZpY2UuZ2V0QXR0YWNobWVudEZpbGUoaWQpO1xuICB9XG5cbiAgY3JlYXRlQXR0YWNobWVudChcbiAgICBhdHRhY2htZW50OiBUZW1wbGF0ZUF0dGFjaG1lbnQsXG4gICAgZmlsZT86IEZpbGUsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICApOiBPYnNlcnZhYmxlPFRlbXBsYXRlQXR0YWNobWVudD4ge1xuICAgIHJldHVybiB0aGlzLmRvY3VtZW50QXR0YWNobWVudFNlcnZpY2UuY3JlYXRlQXR0YWNobWVudChhdHRhY2htZW50LCBmaWxlLCByZXBvcnRQcm9ncmVzcyk7XG4gIH1cblxuICByZW1vdmVBdHRhY2htZW50KGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5kb2N1bWVudEF0dGFjaG1lbnRTZXJ2aWNlLnJlbW92ZUF0dGFjaG1lbnQoaWQpO1xuICB9XG5cbiAgZG93bmxvYWRUZW1wbGF0ZUZpbGUoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QmxvYj4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2VcbiAgICAgIC5hcGkoe1xuICAgICAgICB1cmw6IGAvdGVtcGxhdGVzLyR7aWR9L2ZpbGVgLFxuICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJyxcbiAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICB0aGlzLmZpbGVEb3dubG9hZFNlcnZpY2UucHJvY2Vzc0Rvd25sb2FkKHJlc3BvbnNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcChyZXNwb25zZSA9PiByZXNwb25zZS5ib2R5IHx8IHJlc3BvbnNlKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlV2l0aEJhY2tlbmREb2N4VGVtcGxhdGVyKHtcbiAgICB0ZW1wbGF0ZSxcbiAgICBxdW90ZSxcbiAgICBhdHRhY2htZW50SWRzLFxuICAgIHBhcmFtcyxcbiAgfToge1xuICAgIHRlbXBsYXRlOiBEb2N1bWVudFRlbXBsYXRlO1xuICAgIHF1b3RlOiBRdW90ZURyYWZ0O1xuICAgIGF0dGFjaG1lbnRJZHM6IHN0cmluZ1tdO1xuICAgIHBhcmFtczogeyBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IGJvb2xlYW4gfTtcbiAgfSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgeyBzaG91bGRQcmV2ZW50RG93bmxvYWQgfSA9IHBhcmFtcztcbiAgICBjb25zdCBub25FbXB0eVBhcmFtcyA9IE9iamVjdC5rZXlzKHBhcmFtcyB8fCB7fSlcbiAgICAgIC5maWx0ZXIoayA9PiBwYXJhbXNba10gIT09IHVuZGVmaW5lZClcbiAgICAgIC5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG4gICAgICAgIChvYmogYXMgYW55KVtrZXldID0gcGFyYW1zW2tleV07XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9LCB7fSk7XG4gICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGUoXG4gICAgICBgL3RlbXBsYXRlcy8ke3RlbXBsYXRlLmlkfS9nZW5lcmF0ZWAsXG4gICAgICB7IHF1b3RlLCBhdHRhY2htZW50czogYXR0YWNobWVudElkcyB9LFxuICAgICAgQm9vbGVhbihzaG91bGRQcmV2ZW50RG93bmxvYWQpLFxuICAgICAgJ2Jsb2InLFxuICAgICAgbm9uRW1wdHlQYXJhbXMsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZShcbiAgICB1cmw6IHN0cmluZyxcbiAgICBib2R5OiBhbnksXG4gICAgc2hvdWxkUHJldmVudERvd25sb2FkOiBib29sZWFuLFxuICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB8ICdibG9iJyB8ICdqc29uJyB8ICd0ZXh0JyxcbiAgICBwYXJhbXM/OiB7IFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgaXNVcGxvYWQ/OiBib29sZWFuLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogSHR0cFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICB1cmwsXG4gICAgICBib2R5LFxuICAgICAgcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGUsXG4gICAgICBvYnNlcnZlOiBzaG91bGRQcmV2ZW50RG93bmxvYWQgPyAoJ2JvZHknIGFzIGNvbnN0KSA6ICgncmVzcG9uc2UnIGFzIGNvbnN0KSxcbiAgICAgIHBhcmFtcyxcbiAgICB9O1xuICAgIHJldHVybiAoaXNVcGxvYWQgPyB0aGlzLnNlcnZpY2UudXBsb2FkKHJlcXVlc3RPcHRpb25zKSA6IHRoaXMuc2VydmljZS5hcGkocmVxdWVzdE9wdGlvbnMpKS5waXBlKFxuICAgICAgdGFwKHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKCFzaG91bGRQcmV2ZW50RG93bmxvYWQpIHtcbiAgICAgICAgICB0aGlzLmZpbGVEb3dubG9hZFNlcnZpY2UucHJvY2Vzc0Rvd25sb2FkKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcXVlcnlPYmplY3QoXG4gICAgeyBvYmplY3ROYW1lLCByZXN1bHRPYmplY3ROYW1lLCBmaWVsZHMsIHN0YXRlbWVudCB9OiBUZW1wbGF0ZVF1ZXJ5LFxuICAgIHsgcHJvcGVydGllcyB9OiBBbnlXaXRoUHJvcGVydGllcyxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBwYXR0ZXJuTGltaXQgPSAvKFxccypsaW1pdFxcc1xcZCopL2k7XG4gICAgbGV0IGxpbWl0ID0gMTtcbiAgICBpZiAocGF0dGVybkxpbWl0LnRlc3Qoc3RhdGVtZW50KSkge1xuICAgICAgY29uc3QgbGltaXRTdHIgPSBzdGF0ZW1lbnQ/Lm1hdGNoKHBhdHRlcm5MaW1pdCk/LlsxXS50cmltKCkuc3Vic3RyaW5nKDUpLnRyaW0oKTtcbiAgICAgIGlmIChsaW1pdFN0cikge1xuICAgICAgICBsaW1pdCA9IE51bWJlci5wYXJzZUludChsaW1pdFN0ciwgMTApO1xuICAgICAgfVxuICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50LnJlcGxhY2UocGF0dGVybkxpbWl0LCAnJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZWRTdGF0ZW1lbnQgPSBTdHJpbmdVdGlscy5maWxsUGxhY2Vob2xkZXJzKHN0YXRlbWVudCwgcHJvcGVydGllcywgLzpcXHMqKFxcd1tcXHdcXGRfLl0rKS9pKTtcblxuICAgIGNvbnN0IHNlYXJjaFJlcXVlc3QgPSB7XG4gICAgICBza2lwOiAwLFxuICAgICAgY291bnQ6IGxpbWl0LFxuICAgICAgcmF3Q29uZGl0aW9uOiByZXNvbHZlZFN0YXRlbWVudCxcbiAgICAgIC4uLihmaWVsZHM/Lmxlbmd0aCAmJiAhIWZpZWxkc1swXSAmJiB7IGZpZWxkcyB9KSxcbiAgICB9IGFzIFNlYXJjaFJlcXVlc3Q7XG5cbiAgICByZXR1cm4gdGhpcy5zZlJlcG8ucXVlcnkoc2VhcmNoUmVxdWVzdCwgb2JqZWN0TmFtZSkucGlwZShcbiAgICAgIG1hcFNmUXVlcnlSZXN1bHQobGltaXQpLFxuICAgICAgbWFwKHZhbHVlID0+ICh7IFtyZXN1bHRPYmplY3ROYW1lXTogdmFsdWUgfSkpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,86 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@veloce/core";
4
+ export class PriceApiService {
5
+ constructor(httpService) {
6
+ this.httpService = httpService;
7
+ this.SERVICE_URL = '/price';
8
+ }
9
+ calculateRuntime(request) {
10
+ return this.httpService.api({
11
+ method: 'post',
12
+ url: `${this.SERVICE_URL}/calculate-runtime`,
13
+ body: request,
14
+ });
15
+ }
16
+ calculate(request) {
17
+ return this.httpService.api({
18
+ method: 'post',
19
+ url: `${this.SERVICE_URL}/calculate`,
20
+ body: request,
21
+ });
22
+ // TODO: move outside API service
23
+ // .pipe(
24
+ // map(data => {
25
+ // if (data.context) {
26
+ // const context = this.contextService.resolveOrCreate();
27
+ // const patchedContext = {
28
+ // ...context,
29
+ // properties: {
30
+ // ...context.properties,
31
+ // ...data.context.properties,
32
+ // },
33
+ // };
34
+ // this.contextService.update(patchedContext);
35
+ // }
36
+ // return data;
37
+ // }),
38
+ // );
39
+ }
40
+ getPriceLists() {
41
+ return this.httpService.api({
42
+ method: 'get',
43
+ url: '/price-lists',
44
+ });
45
+ }
46
+ getPriceList(id) {
47
+ return this.httpService.api({
48
+ method: 'get',
49
+ url: `/price-lists/${id}`,
50
+ });
51
+ }
52
+ getSellingTermByEndDate(planId, offeringId, startDate, endDate, frequencyUnit, frequencyDuration) {
53
+ return this.httpService.api({
54
+ method: 'post',
55
+ url: `${this.SERVICE_URL}/selling-term-by-end-date`,
56
+ body: {
57
+ planId: planId,
58
+ offeringId: offeringId,
59
+ startDate: startDate,
60
+ endDate: endDate,
61
+ frequencyUnit: frequencyUnit,
62
+ frequencyDuration: frequencyDuration,
63
+ },
64
+ });
65
+ }
66
+ getSellingTermByTerm(planId, offeringId, startDate, term, frequencyUnit, frequencyDuration) {
67
+ return this.httpService.api({
68
+ method: 'post',
69
+ url: `${this.SERVICE_URL}/selling-term-by-term`,
70
+ body: {
71
+ planId: planId,
72
+ offeringId: offeringId,
73
+ startDate: startDate,
74
+ term: term,
75
+ frequencyUnit: frequencyUnit,
76
+ frequencyDuration: frequencyDuration,
77
+ },
78
+ });
79
+ }
80
+ }
81
+ PriceApiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PriceApiService, deps: [{ token: i1.BaseHttpService }], target: i0.ɵɵFactoryTarget.Injectable });
82
+ PriceApiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PriceApiService });
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: PriceApiService, decorators: [{
84
+ type: Injectable
85
+ }], ctorParameters: function () { return [{ type: i1.BaseHttpService }]; } });
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpY2UtYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9zcmMvbGliL3NlcnZpY2VzL3ByaWNlLWFwaS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUszQyxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUFvQixXQUE0QjtRQUE1QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFGL0IsZ0JBQVcsR0FBRyxRQUFRLENBQUM7SUFFVyxDQUFDO0lBRXBELGdCQUFnQixDQUFDLE9BQVk7UUFDM0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUMxQixNQUFNLEVBQUUsTUFBTTtZQUNkLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLG9CQUFvQjtZQUM1QyxJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQzFCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsWUFBWTtZQUNwQyxJQUFJLEVBQUUsT0FBTztTQUNkLENBQUMsQ0FBQztRQUNILGlDQUFpQztRQUNqQyxTQUFTO1FBQ1Qsa0JBQWtCO1FBQ2xCLDBCQUEwQjtRQUMxQiwrREFBK0Q7UUFDL0QsaUNBQWlDO1FBQ2pDLHNCQUFzQjtRQUN0Qix3QkFBd0I7UUFDeEIsbUNBQW1DO1FBQ25DLHdDQUF3QztRQUN4QyxhQUFhO1FBQ2IsV0FBVztRQUVYLG9EQUFvRDtRQUNwRCxRQUFRO1FBRVIsbUJBQW1CO1FBQ25CLFFBQVE7UUFDUixLQUFLO0lBQ1AsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDO1lBQzFCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsR0FBRyxFQUFFLGNBQWM7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFVO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDMUIsTUFBTSxFQUFFLEtBQUs7WUFDYixHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUJBQXVCLENBQ3JCLE1BQWUsRUFDZixVQUFtQixFQUNuQixTQUFnQixFQUNoQixPQUFjLEVBQ2QsYUFBc0IsRUFDdEIsaUJBQTBCO1FBRTFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDMUIsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVywyQkFBMkI7WUFDbkQsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFVBQVUsRUFBRSxVQUFVO2dCQUN0QixTQUFTLEVBQUUsU0FBUztnQkFDcEIsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLGFBQWEsRUFBRSxhQUFhO2dCQUM1QixpQkFBaUIsRUFBRSxpQkFBaUI7YUFDckM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQ2xCLE1BQWUsRUFDZixVQUFtQixFQUNuQixTQUFnQixFQUNoQixJQUFhLEVBQ2IsYUFBc0IsRUFDdEIsaUJBQTBCO1FBRTFCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7WUFDMUIsTUFBTSxFQUFFLE1BQU07WUFDZCxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyx1QkFBdUI7WUFDL0MsSUFBSSxFQUFFO2dCQUNKLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFVBQVUsRUFBRSxVQUFVO2dCQUN0QixTQUFTLEVBQUUsU0FBUztnQkFDcEIsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsYUFBYSxFQUFFLGFBQWE7Z0JBQzVCLGlCQUFpQixFQUFFLGlCQUFpQjthQUNyQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7OzZHQWhHVSxlQUFlO2lIQUFmLGVBQWU7NEZBQWYsZUFBZTtrQkFEM0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhc2VIdHRwU2VydmljZSwgUHJpY2VMaXN0LCBQcmljZVN1bW1hcnkgfSBmcm9tICdAdmVsb2NlL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUHJpY2VBcGlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBTRVJWSUNFX1VSTCA9ICcvcHJpY2UnO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cFNlcnZpY2U6IEJhc2VIdHRwU2VydmljZSkge31cblxuICBjYWxjdWxhdGVSdW50aW1lKHJlcXVlc3Q6IGFueSk6IE9ic2VydmFibGU8UHJpY2VTdW1tYXJ5PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuYXBpKHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgdXJsOiBgJHt0aGlzLlNFUlZJQ0VfVVJMfS9jYWxjdWxhdGUtcnVudGltZWAsXG4gICAgICBib2R5OiByZXF1ZXN0LFxuICAgIH0pO1xuICB9XG5cbiAgY2FsY3VsYXRlKHJlcXVlc3Q6IGFueSk6IE9ic2VydmFibGU8UHJpY2VTdW1tYXJ5PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuYXBpKHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgdXJsOiBgJHt0aGlzLlNFUlZJQ0VfVVJMfS9jYWxjdWxhdGVgLFxuICAgICAgYm9keTogcmVxdWVzdCxcbiAgICB9KTtcbiAgICAvLyBUT0RPOiBtb3ZlIG91dHNpZGUgQVBJIHNlcnZpY2VcbiAgICAvLyAucGlwZShcbiAgICAvLyAgIG1hcChkYXRhID0+IHtcbiAgICAvLyAgICAgaWYgKGRhdGEuY29udGV4dCkge1xuICAgIC8vICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmVPckNyZWF0ZSgpO1xuICAgIC8vICAgICAgIGNvbnN0IHBhdGNoZWRDb250ZXh0ID0ge1xuICAgIC8vICAgICAgICAgLi4uY29udGV4dCxcbiAgICAvLyAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAvLyAgICAgICAgICAgLi4uY29udGV4dC5wcm9wZXJ0aWVzLFxuICAgIC8vICAgICAgICAgICAuLi5kYXRhLmNvbnRleHQucHJvcGVydGllcyxcbiAgICAvLyAgICAgICAgIH0sXG4gICAgLy8gICAgICAgfTtcblxuICAgIC8vICAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UudXBkYXRlKHBhdGNoZWRDb250ZXh0KTtcbiAgICAvLyAgICAgfVxuXG4gICAgLy8gICAgIHJldHVybiBkYXRhO1xuICAgIC8vICAgfSksXG4gICAgLy8gKTtcbiAgfVxuXG4gIGdldFByaWNlTGlzdHMoKTogT2JzZXJ2YWJsZTxQcmljZUxpc3RbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmFwaSh7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgdXJsOiAnL3ByaWNlLWxpc3RzJyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldFByaWNlTGlzdChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQcmljZUxpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5hcGkoe1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHVybDogYC9wcmljZS1saXN0cy8ke2lkfWAsXG4gICAgfSk7XG4gIH1cblxuICBnZXRTZWxsaW5nVGVybUJ5RW5kRGF0ZShcbiAgICBwbGFuSWQ/OiBzdHJpbmcsXG4gICAgb2ZmZXJpbmdJZD86IHN0cmluZyxcbiAgICBzdGFydERhdGU/OiBEYXRlLFxuICAgIGVuZERhdGU/OiBEYXRlLFxuICAgIGZyZXF1ZW5jeVVuaXQ/OiBzdHJpbmcsXG4gICAgZnJlcXVlbmN5RHVyYXRpb24/OiBzdHJpbmcsXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2UuYXBpKHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgdXJsOiBgJHt0aGlzLlNFUlZJQ0VfVVJMfS9zZWxsaW5nLXRlcm0tYnktZW5kLWRhdGVgLFxuICAgICAgYm9keToge1xuICAgICAgICBwbGFuSWQ6IHBsYW5JZCxcbiAgICAgICAgb2ZmZXJpbmdJZDogb2ZmZXJpbmdJZCxcbiAgICAgICAgc3RhcnREYXRlOiBzdGFydERhdGUsXG4gICAgICAgIGVuZERhdGU6IGVuZERhdGUsXG4gICAgICAgIGZyZXF1ZW5jeVVuaXQ6IGZyZXF1ZW5jeVVuaXQsXG4gICAgICAgIGZyZXF1ZW5jeUR1cmF0aW9uOiBmcmVxdWVuY3lEdXJhdGlvbixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRTZWxsaW5nVGVybUJ5VGVybShcbiAgICBwbGFuSWQ/OiBzdHJpbmcsXG4gICAgb2ZmZXJpbmdJZD86IHN0cmluZyxcbiAgICBzdGFydERhdGU/OiBEYXRlLFxuICAgIHRlcm0/OiBudW1iZXIsXG4gICAgZnJlcXVlbmN5VW5pdD86IHN0cmluZyxcbiAgICBmcmVxdWVuY3lEdXJhdGlvbj86IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZS5hcGkoe1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICB1cmw6IGAke3RoaXMuU0VSVklDRV9VUkx9L3NlbGxpbmctdGVybS1ieS10ZXJtYCxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgcGxhbklkOiBwbGFuSWQsXG4gICAgICAgIG9mZmVyaW5nSWQ6IG9mZmVyaW5nSWQsXG4gICAgICAgIHN0YXJ0RGF0ZTogc3RhcnREYXRlLFxuICAgICAgICB0ZXJtOiB0ZXJtLFxuICAgICAgICBmcmVxdWVuY3lVbml0OiBmcmVxdWVuY3lVbml0LFxuICAgICAgICBmcmVxdWVuY3lEdXJhdGlvbjogZnJlcXVlbmN5RHVyYXRpb24sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=