@posiwise/common-services 0.1.88 → 0.1.89

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 (50) hide show
  1. package/fesm2022/posiwise-common-services.mjs +146 -182
  2. package/fesm2022/posiwise-common-services.mjs.map +1 -1
  3. package/lib/user.service.d.ts +1 -0
  4. package/package.json +8 -10
  5. package/esm2022/index.mjs +0 -47
  6. package/esm2022/lib/ab-test.service.mjs +0 -55
  7. package/esm2022/lib/ahoy.service.mjs +0 -93
  8. package/esm2022/lib/auth.service.mjs +0 -322
  9. package/esm2022/lib/base-http.service.mjs +0 -98
  10. package/esm2022/lib/brain-api-http.service.mjs +0 -26
  11. package/esm2022/lib/brain.service.mjs +0 -21
  12. package/esm2022/lib/common-services.interface.mjs +0 -2
  13. package/esm2022/lib/common-services.module.mjs +0 -23
  14. package/esm2022/lib/common.service.mjs +0 -134
  15. package/esm2022/lib/custom-preloading.service.mjs +0 -38
  16. package/esm2022/lib/dashboard.service.mjs +0 -21
  17. package/esm2022/lib/data.service.mjs +0 -21
  18. package/esm2022/lib/date-formatter.service.mjs +0 -82
  19. package/esm2022/lib/effects/user.effects.mjs +0 -27
  20. package/esm2022/lib/form-helper.service.mjs +0 -27
  21. package/esm2022/lib/geo.service.mjs +0 -40
  22. package/esm2022/lib/google-analytics.service.mjs +0 -121
  23. package/esm2022/lib/group.service.mjs +0 -122
  24. package/esm2022/lib/hopscotch.service.mjs +0 -48
  25. package/esm2022/lib/integrations-api-http.service.mjs +0 -28
  26. package/esm2022/lib/link-loader.service.mjs +0 -50
  27. package/esm2022/lib/local-storage.service.mjs +0 -32
  28. package/esm2022/lib/logo-caching.service.mjs +0 -65
  29. package/esm2022/lib/mailbox.service.mjs +0 -66
  30. package/esm2022/lib/main-api-http.service.mjs +0 -26
  31. package/esm2022/lib/notification.service.mjs +0 -70
  32. package/esm2022/lib/number-picker.service.mjs +0 -43
  33. package/esm2022/lib/permission.service.mjs +0 -252
  34. package/esm2022/lib/primeNgHelper.mjs +0 -18
  35. package/esm2022/lib/product.service.mjs +0 -78
  36. package/esm2022/lib/profile.service.mjs +0 -64
  37. package/esm2022/lib/qualification.service.mjs +0 -29
  38. package/esm2022/lib/script-loader.service.mjs +0 -79
  39. package/esm2022/lib/secure-token-storage.service.mjs +0 -264
  40. package/esm2022/lib/sentry.service.mjs +0 -384
  41. package/esm2022/lib/seo.service.mjs +0 -43
  42. package/esm2022/lib/socket.service.mjs +0 -29
  43. package/esm2022/lib/subscription.service.mjs +0 -129
  44. package/esm2022/lib/tag.service.mjs +0 -101
  45. package/esm2022/lib/tips.service.mjs +0 -38
  46. package/esm2022/lib/toast.service.mjs +0 -85
  47. package/esm2022/lib/user.service.mjs +0 -202
  48. package/esm2022/lib/validation.service.mjs +0 -36
  49. package/esm2022/lib/window.service.mjs +0 -20
  50. package/esm2022/posiwise-common-services.mjs +0 -5
@@ -1,43 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class NumberPickerService {
4
- constructor() {
5
- /**
6
- * Min picker value
7
- */
8
- this.min = 0;
9
- /**
10
- * Max picker value
11
- */
12
- this.max = 100;
13
- /**
14
- * Pick step value
15
- */
16
- this.step = 1;
17
- /**
18
- * Delay for start picking values
19
- */
20
- this.pickStartAfter = 500;
21
- /**
22
- * Delay between each pick
23
- */
24
- this.pickTimer = 100;
25
- /**
26
- * value precision
27
- */
28
- this.precision = 1;
29
- /**
30
- * Initial picker value
31
- */
32
- this.value = null;
33
- }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NumberPickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
35
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NumberPickerService, providedIn: 'root' }); }
36
- }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NumberPickerService, decorators: [{
38
- type: Injectable,
39
- args: [{
40
- providedIn: 'root'
41
- }]
42
- }] });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLXBpY2tlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9udW1iZXItcGlja2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLG1CQUFtQjtJQUhoQztRQUlJOztXQUVHO1FBQ0gsUUFBRyxHQUFHLENBQUMsQ0FBQztRQUVSOztXQUVHO1FBQ0gsUUFBRyxHQUFHLEdBQUcsQ0FBQztRQUVWOztXQUVHO1FBQ0gsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVUOztXQUVHO1FBQ0gsbUJBQWMsR0FBRyxHQUFHLENBQUM7UUFFckI7O1dBRUc7UUFDSCxjQUFTLEdBQUcsR0FBRyxDQUFDO1FBRWhCOztXQUVHO1FBQ0gsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUVkOztXQUVHO1FBQ0gsVUFBSyxHQUFHLElBQUksQ0FBQztLQUNoQjsrR0FuQ1ksbUJBQW1CO21IQUFuQixtQkFBbUIsY0FGaEIsTUFBTTs7NEZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBOdW1iZXJQaWNrZXJTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBNaW4gcGlja2VyIHZhbHVlXG4gICAgICovXG4gICAgbWluID0gMDtcblxuICAgIC8qKlxuICAgICAqIE1heCBwaWNrZXIgdmFsdWVcbiAgICAgKi9cbiAgICBtYXggPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiBQaWNrIHN0ZXAgdmFsdWVcbiAgICAgKi9cbiAgICBzdGVwID0gMTtcblxuICAgIC8qKlxuICAgICAqIERlbGF5IGZvciBzdGFydCBwaWNraW5nIHZhbHVlc1xuICAgICAqL1xuICAgIHBpY2tTdGFydEFmdGVyID0gNTAwO1xuXG4gICAgLyoqXG4gICAgICogRGVsYXkgYmV0d2VlbiBlYWNoIHBpY2tcbiAgICAgKi9cbiAgICBwaWNrVGltZXIgPSAxMDA7XG5cbiAgICAvKipcbiAgICAgKiB2YWx1ZSBwcmVjaXNpb25cbiAgICAgKi9cbiAgICBwcmVjaXNpb24gPSAxO1xuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbCBwaWNrZXIgdmFsdWVcbiAgICAgKi9cbiAgICB2YWx1ZSA9IG51bGw7XG59XG4iXX0=
@@ -1,252 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { ADMIN_SUB_MENU_WHITELIST, PERMISSION_NAMES } from '@posiwise/common-utilities';
3
- import cloneDeep from 'lodash/cloneDeep';
4
- import pickBy from 'lodash/pickBy';
5
- import { MainApiHttpService } from './main-api-http.service';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./main-api-http.service";
8
- export class PermissionService {
9
- constructor(api) {
10
- this.api = api;
11
- this.user = null;
12
- }
13
- setCurrentSubscription(subscription) {
14
- PermissionService.selectedSubscription = subscription;
15
- }
16
- isGranted(permissionName, productKey = null, permission_key = null, productSlug = null) {
17
- if (this.user) {
18
- const { user } = this;
19
- // Admin have access to all the menus.
20
- // E.g., Pages.SuperAdmin
21
- if (this.isSuperAdmin()) {
22
- return true;
23
- }
24
- if (permissionName) {
25
- permissionName = this.getFormattedPermissionName(permissionName, productSlug);
26
- }
27
- // Returning true if user has a given permission
28
- // E.g., Pages.Role.CloudOlive.SalesManager
29
- // or Pages.Beta or Pages.Alpha
30
- if (permissionName?.includes('||')) {
31
- const parts = permissionName.split('||').map(p => p.trim());
32
- if (this.hasAnyGrantedPermission(parts, user)) {
33
- return true;
34
- }
35
- }
36
- else if (user['auth']?.['granted'][permissionName]) {
37
- return true;
38
- }
39
- const filteredPermissions = this.handleProductKey(productKey, user, permission_key, permissionName);
40
- if (filteredPermissions) {
41
- return filteredPermissions;
42
- }
43
- // no valid permission was detected for this user
44
- return false;
45
- }
46
- // user not logged-in
47
- return false;
48
- }
49
- hasAnyGrantedPermission(parts, user) {
50
- return parts.some(part => user['auth']?.['granted'][part]);
51
- }
52
- handleProductKey(productKey, user, permission_key, permissionName) {
53
- if (productKey) {
54
- // filters the permission only for the selected product.
55
- let filteredPermissions = pickBy(cloneDeep(user['auth']['granted']), (_value, key) => {
56
- return key.includes(productKey);
57
- });
58
- // add Pages.Product.{permission_key}
59
- filteredPermissions = {
60
- ...{ [`Pages.Product.${permission_key}`]: true },
61
- ...filteredPermissions
62
- };
63
- // E.g., Pages.Product.CloudOlive.CloudOlive_MspKey
64
- return filteredPermissions[permissionName] ?? false;
65
- }
66
- }
67
- getFormattedPermissionName(permissionName, productSlug) {
68
- const selectedProduct = PermissionService?.selectedProduct ?? this.getCurrentProduct();
69
- const subscriptionSlug = selectedProduct?.subscription_slug;
70
- let slugToCheck;
71
- if (!productSlug) {
72
- if (permissionName.includes('Pages.Product.')) {
73
- slugToCheck = `Pages.Product.${subscriptionSlug}.`;
74
- }
75
- if (permissionName.includes('Pages.Role.')) {
76
- slugToCheck = `Pages.Role.${subscriptionSlug}.`;
77
- }
78
- }
79
- else {
80
- slugToCheck = productSlug;
81
- }
82
- if (!permissionName.includes(slugToCheck) && permissionName.includes('Pages.Product.')) {
83
- permissionName = permissionName.replace('Pages.Product.', slugToCheck);
84
- }
85
- if (permissionName.includes('Pages.Role.') && !permissionName.includes(slugToCheck)) {
86
- permissionName = permissionName.replace('Pages.Role.', slugToCheck);
87
- }
88
- return permissionName;
89
- }
90
- getPermissionTreeDataByRole(data) {
91
- const permissions = [];
92
- data.all.forEach(element => {
93
- const { name } = element;
94
- permissions.push({
95
- id: element.id, // permissionId: Used to update the permissions on change
96
- parentName: name.includes('.') ? name.substring(0, name.lastIndexOf('.')) : null,
97
- name,
98
- displayName: element.name
99
- });
100
- });
101
- return {
102
- permissions,
103
- grantedPermissionNames: Object.keys(data.granted)
104
- };
105
- }
106
- evaluatePermissions(permission, productKey = null, permission_key = null, productSlug = null) {
107
- if (!permission) {
108
- return false;
109
- }
110
- let expr = '';
111
- if (permission === PERMISSION_NAMES.SuperAdmin) {
112
- return this.isSuperAdmin();
113
- }
114
- if (permission === PERMISSION_NAMES.SubscriptionAdmin) {
115
- return this.isUserSubscriptionAdmin() || this.isUserSubscriptionOwner();
116
- }
117
- if (permission === PERMISSION_NAMES.SubscriptionOwner) {
118
- return this.isUserSubscriptionOwner();
119
- }
120
- if (permission === PERMISSION_NAMES.SubscriptionSuperAdmin) {
121
- return (this.isUserSubscriptionSuperAdmin() ||
122
- this.isUserSubscriptionSuperOwner() ||
123
- this.isSuperAdmin());
124
- }
125
- if (permission === PERMISSION_NAMES.SubscriptionSuperOwner) {
126
- return this.isUserSubscriptionSuperOwner() || this.isSuperAdmin();
127
- }
128
- if (typeof permission === 'string' &&
129
- ADMIN_SUB_MENU_WHITELIST.some(v => permission.includes(v)) &&
130
- (this.isUserSubscriptionSuperAdmin() || this.isUserSubscriptionSuperOwner())) {
131
- return true;
132
- }
133
- expr = this.handleNonBooleanPermissions(permission, expr, productKey, permission_key, productSlug);
134
- // Now expr is made of true/false values with &&, ||, ()
135
- // eslint-disable-next-line no-eval
136
- return eval(expr); // NOSONAR
137
- }
138
- handleNonBooleanPermissions(permission, expr, productKey, permission_key, productSlug) {
139
- if (typeof permission !== 'boolean') {
140
- permission.split(' ').forEach(x => {
141
- const raw = x.trim();
142
- if (['||', '&&', '(', ')'].includes(raw)) {
143
- expr += ` ${raw} `;
144
- }
145
- else {
146
- let evaluated;
147
- if (raw === PERMISSION_NAMES.SuperAdmin) {
148
- evaluated = this.isSuperAdmin();
149
- }
150
- else if (raw === PERMISSION_NAMES.SubscriptionAdmin) {
151
- evaluated =
152
- this.isUserSubscriptionAdmin() || this.isUserSubscriptionOwner();
153
- }
154
- else if (raw === PERMISSION_NAMES.SubscriptionOwner) {
155
- evaluated = this.isUserSubscriptionOwner();
156
- }
157
- else if (raw === PERMISSION_NAMES.SubscriptionSuperAdmin) {
158
- evaluated =
159
- this.isUserSubscriptionSuperAdmin() ||
160
- this.isUserSubscriptionSuperOwner() ||
161
- this.isSuperAdmin();
162
- }
163
- else if (raw === PERMISSION_NAMES.SubscriptionSuperOwner) {
164
- evaluated = this.isUserSubscriptionSuperOwner() || this.isSuperAdmin();
165
- }
166
- else if (productKey) {
167
- // Assume it's Pages.Product or Pages.Role with productKey
168
- evaluated = this.isGranted(raw, productKey, permission_key, productSlug);
169
- }
170
- else {
171
- evaluated = this.isGranted(raw);
172
- }
173
- expr += ` ${evaluated} `;
174
- }
175
- }, this);
176
- }
177
- return expr;
178
- }
179
- getPermissionByRole(roleId) {
180
- return this.api.get(`/admin/role_permissions/${roleId}`);
181
- }
182
- saveUserPermission(payload) {
183
- return this.api.post(`/admin/role_permissions`, payload);
184
- }
185
- /**
186
- * determine user is super_admin using user.auth.granted['Pages.SuperAdmin']
187
- */
188
- isSuperAdmin() {
189
- return !!this.user.auth.granted['Pages.SuperAdmin'] || false;
190
- }
191
- /**
192
- * Any Product Admin regardless of the product being master product or not.
193
- */
194
- isUserSubscriptionOwner(product) {
195
- product ??= this.getCurrentProduct();
196
- const subscriptionSlug = product?.subscription_slug;
197
- return !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionOwner`];
198
- }
199
- /**
200
- * Any Product Admin regardless of the product being master product or not.
201
- * *rbacAllow="SubscriptionAdmin"
202
- * @returns
203
- */
204
- isUserSubscriptionAdmin(product) {
205
- product ??= this.getCurrentProduct();
206
- const subscriptionSlug = product?.subscription_slug;
207
- return (!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionAdmin`] ||
208
- !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionOwner`]);
209
- }
210
- /**
211
- * Any Product Admin of the product being the master product
212
- */
213
- isUserSubscriptionSuperAdmin(product) {
214
- product ??= this.getCurrentProduct();
215
- const subscriptionSlug = product?.subscription_slug;
216
- return (!!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperAdmin`] ||
217
- !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperOwner`]);
218
- }
219
- isUserMasterSubscriptionSuperAdmin(product) {
220
- product ??= this.getCurrentProduct();
221
- return !!this.user.auth.granted[`Pages.Product.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperAdmin`];
222
- }
223
- /**
224
- * Any Product Admin of the product being the master product
225
- */
226
- isUserSubscriptionSuperOwner(product) {
227
- product ??= this.getCurrentProduct();
228
- const subscriptionSlug = product?.subscription_slug;
229
- return !!this.user.auth.granted[`Pages.Product.${subscriptionSlug}.${product?.permission_key}.${product?.feature_key}.SubscriptionSuperOwner`];
230
- }
231
- setCurrentProduct(product) {
232
- localStorage.setItem('product', JSON.stringify({
233
- id: product.id,
234
- permission_key: product?.permission_key,
235
- feature_key: product?.feature_key,
236
- subscriptionId: product.subscriptionId,
237
- subscription_slug: product.subscription_slug
238
- }));
239
- }
240
- getCurrentProduct() {
241
- return JSON.parse(localStorage.getItem('product'));
242
- }
243
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PermissionService, deps: [{ token: i1.MainApiHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
244
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PermissionService, providedIn: 'root' }); }
245
- }
246
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: PermissionService, decorators: [{
247
- type: Injectable,
248
- args: [{
249
- providedIn: 'root'
250
- }]
251
- }], ctorParameters: () => [{ type: i1.MainApiHttpService }] });
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9wZXJtaXNzaW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQVEsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RixPQUFPLFNBQVMsTUFBTSxrQkFBa0IsQ0FBQztBQUN6QyxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFFbkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUs3RCxNQUFNLE9BQU8saUJBQWlCO0lBUzFCLFlBQTZCLEdBQXVCO1FBQXZCLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBRnBELFNBQUksR0FBUyxJQUFJLENBQUM7SUFFcUMsQ0FBQztJQUV4RCxzQkFBc0IsQ0FBQyxZQUFZO1FBQy9CLGlCQUFpQixDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBUyxDQUNMLGNBQXNCLEVBQ3RCLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLGNBQWMsR0FBRyxJQUFJLEVBQ3JCLFdBQVcsR0FBRyxJQUFJO1FBRWxCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztZQUV0QixzQ0FBc0M7WUFDdEMseUJBQXlCO1lBQ3pCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNqQixjQUFjLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztZ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QUFXO1lBQ2pDLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1NBQy9DLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUVNLGlCQUFpQjtRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7K0dBM1RRLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBRmQsTUFBTTs7NEZBRVQsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQURNSU5fU1VCX01FTlVfV0hJVEVMSVNULCBQRVJNSVNTSU9OX05BTUVTLCBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuXG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuaW1wb3J0IHBpY2tCeSBmcm9tICdsb2Rhc2gvcGlja0J5JztcblxuaW1wb3J0IHsgTWFpbkFwaUh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9tYWluLWFwaS1odHRwLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXJ2aWNlIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHN0YXRpYyBzZWxlY3RlZFByb2R1Y3Q6IGFueTsgLy8gTk9TT05BUlxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBzdGF0aWMgc2VsZWN0ZWRTdWJzY3JpcHRpb246IGFueTsgLy8gTk9TT05BUlxuXG4gICAgdXNlcjogVXNlciA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgc2V0Q3VycmVudFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb247XG4gICAgfVxuXG4gICAgaXNHcmFudGVkKFxuICAgICAgICBwZXJtaXNzaW9uTmFtZTogc3RyaW5nLFxuICAgICAgICBwcm9kdWN0S2V5ID0gbnVsbCxcbiAgICAgICAgcGVybWlzc2lvbl9rZXkgPSBudWxsLFxuICAgICAgICBwcm9kdWN0U2x1ZyA9IG51bGxcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICAgICAgY29uc3QgeyB1c2VyIH0gPSB0aGlzO1xuXG4gICAgICAgICAgICAvLyBBZG1pbiBoYXZlIGFjY2VzcyB0byBhbGwgdGhlIG1lbnVzLlxuICAgICAgICAgICAgLy8gRS5nLiwgUGFnZXMuU3VwZXJBZG1pblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdXBlckFkbWluKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbk5hbWUgPSB0aGlzLmdldEZvcm1hdHRlZFBlcm1pc3Npb25OYW1lKHBlcm1pc3Npb25OYW1lLCBwcm9kdWN0U2x1Zyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJldHVybmluZyB0cnVlIGlmIHVzZXIgaGFzIGEgZ2l2ZW4gcGVybWlzc2lvblxuICAgICAgICAgICAgLy8gRS5nLiwgUGFnZXMuUm9sZS5DbG91ZE9saXZlLlNhbGVzTWFuYWdlclxuICAgICAgICAgICAgLy8gb3IgUGFnZXMuQmV0YSBvciBQYWdlcy5BbHBoYVxuXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbk5hbWU/LmluY2x1ZGVzKCd8fCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSBwZXJtaXNzaW9uTmFtZS5zcGxpdCgnfHwnKS5tYXAocCA9PiBwLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQW55R3JhbnRlZFBlcm1pc3Npb24ocGFydHMsIHVzZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlclsnYXV0aCddPy5bJ2dyYW50ZWQnXVtwZXJtaXNzaW9uTmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRQZXJtaXNzaW9ucyA9IHRoaXMuaGFuZGxlUHJvZHVjdEtleShcbiAgICAgICAgICAgICAgICBwcm9kdWN0S2V5LFxuICAgICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbl9rZXksXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbk5hbWVcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZFBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkUGVybWlzc2lvbnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG5vIHZhbGlkIHBlcm1pc3Npb24gd2FzIGRldGVjdGVkIGZvciB0aGlzIHVzZXJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB1c2VyIG5vdCBsb2dnZWQtaW5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQW55R3JhbnRlZFBlcm1pc3Npb24ocGFydHM6IHN0cmluZ1tdLCB1c2VyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBwYXJ0cy5zb21lKHBhcnQgPT4gdXNlclsnYXV0aCddPy5bJ2dyYW50ZWQnXVtwYXJ0XSk7XG4gICAgfVxuXG4gICAgaGFuZGxlUHJvZHVjdEtleShwcm9kdWN0S2V5LCB1c2VyLCBwZXJtaXNzaW9uX2tleSwgcGVybWlzc2lvbk5hbWUpIHtcbiAgICAgICAgaWYgKHByb2R1Y3RLZXkpIHtcbiAgICAgICAgICAgIC8vIGZpbHRlcnMgdGhlIHBlcm1pc3Npb24gb25seSBmb3IgdGhlIHNlbGVjdGVkIHByb2R1Y3QuXG4gICAgICAgICAgICBsZXQgZmlsdGVyZWRQZXJtaXNzaW9ucyA9IHBpY2tCeShjbG9uZURlZXAodXNlclsnYXV0aCddWydncmFudGVkJ10pLCAoX3ZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmluY2x1ZGVzKHByb2R1Y3RLZXkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBhZGQgUGFnZXMuUHJvZHVjdC57cGVybWlzc2lvbl9rZXl9XG4gICAgICAgICAgICBmaWx0ZXJlZFBlcm1pc3Npb25zID0ge1xuICAgICAgICAgICAgICAgIC4uLnsgW2BQYWdlcy5Qcm9kdWN0LiR7cGVybWlzc2lvbl9rZXl9YF06IHRydWUgfSxcbiAgICAgICAgICAgICAgICAuLi5maWx0ZXJlZFBlcm1pc3Npb25zXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAvLyBFLmcuLCBQYWdlcy5Qcm9kdWN0LkNsb3VkT2xpdmUuQ2xvdWRPbGl2ZV9Nc3BLZXlcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFBlcm1pc3Npb25zW3Blcm1pc3Npb25OYW1lXSA/PyBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybWF0dGVkUGVybWlzc2lvbk5hbWUocGVybWlzc2lvbk5hbWU6IHN0cmluZywgcHJvZHVjdFNsdWc6IHN0cmluZyB8IG51bGwpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3QgPSBQZXJtaXNzaW9uU2VydmljZT8uc2VsZWN0ZWRQcm9kdWN0ID8/IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHNlbGVjdGVkUHJvZHVjdD8uc3Vic2NyaXB0aW9uX3NsdWc7XG5cbiAgICAgICAgbGV0IHNsdWdUb0NoZWNrOiBzdHJpbmc7XG4gICAgICAgIGlmICghcHJvZHVjdFNsdWcpIHtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uTmFtZS5pbmNsdWRlcygnUGFnZXMuUHJvZHVjdC4nKSkge1xuICAgICAgICAgICAgICAgIHNsdWdUb0NoZWNrID0gYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS5gO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGVybWlzc2lvbk5hbWUuaW5jbHVkZXMoJ1BhZ2VzLlJvbGUuJykpIHtcbiAgICAgICAgICAgICAgICBzbHVnVG9DaGVjayA9IGBQYWdlcy5Sb2xlLiR7c3Vic2NyaXB0aW9uU2x1Z30uYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNsdWdUb0NoZWNrID0gcHJvZHVjdFNsdWc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBlcm1pc3Npb25OYW1lLmluY2x1ZGVzKHNsdWdUb0NoZWNrKSAmJiBwZXJtaXNzaW9uTmFtZS5pbmNsdWRlcygnUGFnZXMuUHJvZHVjdC4nKSkge1xuICAgICAgICAgICAgcGVybWlzc2lvbk5hbWUgPSBwZXJtaXNzaW9uTmFtZS5yZXBsYWNlKCdQYWdlcy5Qcm9kdWN0LicsIHNsdWdUb0NoZWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZXJtaXNzaW9uTmFtZS5pbmNsdWRlcygnUGFnZXMuUm9sZS4nKSAmJiAhcGVybWlzc2lvbk5hbWUuaW5jbHVkZXMoc2x1Z1RvQ2hlY2spKSB7XG4gICAgICAgICAgICBwZXJtaXNzaW9uTmFtZSA9IHBlcm1pc3Npb25OYW1lLnJlcGxhY2UoJ1BhZ2VzLlJvbGUuJywgc2x1Z1RvQ2hlY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25OYW1lO1xuICAgIH1cblxuICAgIGdldFBlcm1pc3Npb25UcmVlRGF0YUJ5Um9sZShkYXRhKSB7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25zID0gW107XG4gICAgICAgIGRhdGEuYWxsLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWUgfSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpZDogZWxlbWVudC5pZCwgLy8gcGVybWlzc2lvbklkOiBVc2VkIHRvIHVwZGF0ZSB0aGUgcGVybWlzc2lvbnMgb24gY2hhbmdlXG4gICAgICAgICAgICAgICAgcGFyZW50TmFtZTogbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZignLicpKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogZWxlbWVudC5uYW1lXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgICAgZ3JhbnRlZFBlcm1pc3Npb25OYW1lczogT2JqZWN0LmtleXMoZGF0YS5ncmFudGVkKVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGV2YWx1YXRlUGVybWlzc2lvbnMoXG4gICAgICAgIHBlcm1pc3Npb246IHN0cmluZyxcbiAgICAgICAgcHJvZHVjdEtleTogc3RyaW5nID0gbnVsbCxcbiAgICAgICAgcGVybWlzc2lvbl9rZXk6IHN0cmluZyA9IG51bGwsXG4gICAgICAgIHByb2R1Y3RTbHVnOiBzdHJpbmcgPSBudWxsXG4gICAgKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghcGVybWlzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGV4cHIgPSAnJztcblxuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gUEVSTUlTU0lPTl9OQU1FUy5TdXBlckFkbWluKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N1cGVyQWRtaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gUEVSTUlTU0lPTl9OQU1FUy5TdWJzY3JpcHRpb25BZG1pbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uQWRtaW4oKSB8fCB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb24gPT09IFBFUk1JU1NJT05fTkFNRVMuU3Vic2NyaXB0aW9uT3duZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBlcm1pc3Npb24gPT09IFBFUk1JU1NJT05fTkFNRVMuU3Vic2NyaXB0aW9uU3VwZXJBZG1pbikge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyQWRtaW4oKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uU3VwZXJPd25lcigpIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5pc1N1cGVyQWRtaW4oKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGVybWlzc2lvbiA9PT0gUEVSTUlTU0lPTl9OQU1FUy5TdWJzY3JpcHRpb25TdXBlck93bmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1VzZXJTdWJzY3JpcHRpb25TdXBlck93bmVyKCkgfHwgdGhpcy5pc1N1cGVyQWRtaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcGVybWlzc2lvbiA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgIEFETUlOX1NVQl9NRU5VX1dISVRFTElTVC5zb21lKHYgPT4gcGVybWlzc2lvbi5pbmNsdWRlcyh2KSkgJiZcbiAgICAgICAgICAgICh0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyQWRtaW4oKSB8fCB0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyT3duZXIoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cHIgPSB0aGlzLmhhbmRsZU5vbkJvb2xlYW5QZXJtaXNzaW9ucyhcbiAgICAgICAgICAgIHBlcm1pc3Npb24sXG4gICAgICAgICAgICBleHByLFxuICAgICAgICAgICAgcHJvZHVjdEtleSxcbiAgICAgICAgICAgIHBlcm1pc3Npb25fa2V5LFxuICAgICAgICAgICAgcHJvZHVjdFNsdWdcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBOb3cgZXhwciBpcyBtYWRlIG9mIHRydWUvZmFsc2UgdmFsdWVzIHdpdGggJiYsIHx8LCAoKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXZhbFxuICAgICAgICByZXR1cm4gZXZhbChleHByKTsgLy8gTk9TT05BUlxuICAgIH1cblxuICAgIGhhbmRsZU5vbkJvb2xlYW5QZXJtaXNzaW9ucyhwZXJtaXNzaW9uLCBleHByLCBwcm9kdWN0S2V5LCBwZXJtaXNzaW9uX2tleSwgcHJvZHVjdFNsdWcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwZXJtaXNzaW9uICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHBlcm1pc3Npb24uc3BsaXQoJyAnKS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhdyA9IHgudHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKFsnfHwnLCAnJiYnLCAnKCcsICcpJ10uaW5jbHVkZXMocmF3KSkge1xuICAgICAgICAgICAgICAgICAgICBleHByICs9IGAgJHtyYXd9IGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV2YWx1YXRlZDogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1cGVyQWRtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCA9IHRoaXMuaXNTdXBlckFkbWluKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvbkFkbWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uQWRtaW4oKSB8fCB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvbk93bmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZWQgPSB0aGlzLmlzVXNlclN1YnNjcmlwdGlvbk93bmVyKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvblN1cGVyQWRtaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1VzZXJTdWJzY3JpcHRpb25TdXBlckFkbWluKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyT3duZXIoKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdXBlckFkbWluKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmF3ID09PSBQRVJNSVNTSU9OX05BTUVTLlN1YnNjcmlwdGlvblN1cGVyT3duZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZCA9IHRoaXMuaXNVc2VyU3Vic2NyaXB0aW9uU3VwZXJPd25lcigpIHx8IHRoaXMuaXNTdXBlckFkbWluKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvZHVjdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNzdW1lIGl0J3MgUGFnZXMuUHJvZHVjdCBvciBQYWdlcy5Sb2xlIHdpdGggcHJvZHVjdEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVkID0gdGhpcy5pc0dyYW50ZWQocmF3LCBwcm9kdWN0S2V5LCBwZXJtaXNzaW9uX2tleSwgcHJvZHVjdFNsdWcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVkID0gdGhpcy5pc0dyYW50ZWQocmF3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV4cHIgKz0gYCAke2V2YWx1YXRlZH0gYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwcjtcbiAgICB9XG5cbiAgICBnZXRQZXJtaXNzaW9uQnlSb2xlKHJvbGVJZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYC9hZG1pbi9yb2xlX3Blcm1pc3Npb25zLyR7cm9sZUlkfWApO1xuICAgIH1cblxuICAgIHNhdmVVc2VyUGVybWlzc2lvbihwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wb3N0KGAvYWRtaW4vcm9sZV9wZXJtaXNzaW9uc2AsIHBheWxvYWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGRldGVybWluZSB1c2VyIGlzIHN1cGVyX2FkbWluIHVzaW5nIHVzZXIuYXV0aC5ncmFudGVkWydQYWdlcy5TdXBlckFkbWluJ11cbiAgICAgKi9cbiAgICBpc1N1cGVyQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMudXNlci5hdXRoLmdyYW50ZWRbJ1BhZ2VzLlN1cGVyQWRtaW4nXSB8fCBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQW55IFByb2R1Y3QgQWRtaW4gcmVnYXJkbGVzcyBvZiB0aGUgcHJvZHVjdCBiZWluZyBtYXN0ZXIgcHJvZHVjdCBvciBub3QuXG4gICAgICovXG4gICAgcHVibGljIGlzVXNlclN1YnNjcmlwdGlvbk93bmVyKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3Q/LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25Pd25lcmBcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbnkgUHJvZHVjdCBBZG1pbiByZWdhcmRsZXNzIG9mIHRoZSBwcm9kdWN0IGJlaW5nIG1hc3RlciBwcm9kdWN0IG9yIG5vdC5cbiAgICAgKiAqcmJhY0FsbG93PVwiU3Vic2NyaXB0aW9uQWRtaW5cIlxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHVibGljIGlzVXNlclN1YnNjcmlwdGlvbkFkbWluKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgICAgIGBQYWdlcy5Qcm9kdWN0LiR7c3Vic2NyaXB0aW9uU2x1Z30uJHtwcm9kdWN0Py5wZXJtaXNzaW9uX2tleX0uJHtwcm9kdWN0Py5mZWF0dXJlX2tleX0uU3Vic2NyaXB0aW9uQWRtaW5gXG4gICAgICAgICAgICBdIHx8XG4gICAgICAgICAgICAhIXRoaXMudXNlci5hdXRoLmdyYW50ZWRbXG4gICAgICAgICAgICAgICAgYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3Q/LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25Pd25lcmBcbiAgICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbnkgUHJvZHVjdCBBZG1pbiBvZiB0aGUgcHJvZHVjdCBiZWluZyB0aGUgbWFzdGVyIHByb2R1Y3RcbiAgICAgKi9cbiAgICBpc1VzZXJTdWJzY3JpcHRpb25TdXBlckFkbWluKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgICAgIGBQYWdlcy5Qcm9kdWN0LiR7c3Vic2NyaXB0aW9uU2x1Z30uJHtwcm9kdWN0Py5wZXJtaXNzaW9uX2tleX0uJHtwcm9kdWN0Py5mZWF0dXJlX2tleX0uU3Vic2NyaXB0aW9uU3VwZXJBZG1pbmBcbiAgICAgICAgICAgIF0gfHxcbiAgICAgICAgICAgICEhdGhpcy51c2VyLmF1dGguZ3JhbnRlZFtcbiAgICAgICAgICAgICAgICBgUGFnZXMuUHJvZHVjdC4ke3N1YnNjcmlwdGlvblNsdWd9LiR7cHJvZHVjdD8ucGVybWlzc2lvbl9rZXl9LiR7cHJvZHVjdD8uZmVhdHVyZV9rZXl9LlN1YnNjcmlwdGlvblN1cGVyT3duZXJgXG4gICAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaXNVc2VyTWFzdGVyU3Vic2NyaXB0aW9uU3VwZXJBZG1pbihwcm9kdWN0Pyk6IGJvb2xlYW4ge1xuICAgICAgICBwcm9kdWN0ID8/PSB0aGlzLmdldEN1cnJlbnRQcm9kdWN0KCk7XG4gICAgICAgIHJldHVybiAhIXRoaXMudXNlci5hdXRoLmdyYW50ZWRbXG4gICAgICAgICAgICBgUGFnZXMuUHJvZHVjdC4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3Q/LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25TdXBlckFkbWluYFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFueSBQcm9kdWN0IEFkbWluIG9mIHRoZSBwcm9kdWN0IGJlaW5nIHRoZSBtYXN0ZXIgcHJvZHVjdFxuICAgICAqL1xuICAgIHB1YmxpYyBpc1VzZXJTdWJzY3JpcHRpb25TdXBlck93bmVyKHByb2R1Y3Q/KTogYm9vbGVhbiB7XG4gICAgICAgIHByb2R1Y3QgPz89IHRoaXMuZ2V0Q3VycmVudFByb2R1Y3QoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uU2x1ZyA9IHByb2R1Y3Q/LnN1YnNjcmlwdGlvbl9zbHVnO1xuICAgICAgICByZXR1cm4gISF0aGlzLnVzZXIuYXV0aC5ncmFudGVkW1xuICAgICAgICAgICAgYFBhZ2VzLlByb2R1Y3QuJHtzdWJzY3JpcHRpb25TbHVnfS4ke3Byb2R1Y3Q/LnBlcm1pc3Npb25fa2V5fS4ke3Byb2R1Y3Q/LmZlYXR1cmVfa2V5fS5TdWJzY3JpcHRpb25TdXBlck93bmVyYFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRQcm9kdWN0KHByb2R1Y3QpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXG4gICAgICAgICAgICAncHJvZHVjdCcsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgaWQ6IHByb2R1Y3QuaWQsXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbl9rZXk6IHByb2R1Y3Q/LnBlcm1pc3Npb25fa2V5LFxuICAgICAgICAgICAgICAgIGZlYXR1cmVfa2V5OiBwcm9kdWN0Py5mZWF0dXJlX2tleSxcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25JZDogcHJvZHVjdC5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25fc2x1ZzogcHJvZHVjdC5zdWJzY3JpcHRpb25fc2x1Z1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VycmVudFByb2R1Y3QoKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwcm9kdWN0JykpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,18 +0,0 @@
1
- export class PrimeNgHelper {
2
- constructor() {
3
- this.isLoading = false;
4
- }
5
- static dropdownDataSource(dataSource, label, value) {
6
- const result = [];
7
- dataSource.forEach(element => {
8
- const item = {
9
- ...element,
10
- label: element[label],
11
- value: element[value]
12
- };
13
- result.push(item);
14
- });
15
- return result;
16
- }
17
- }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWVOZ0hlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uLXNlcnZpY2VzL3NyYy9saWIvcHJpbWVOZ0hlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sYUFBYTtJQUExQjtRQUNJLGNBQVMsR0FBRyxLQUFLLENBQUM7SUFldEIsQ0FBQztJQWJHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUs7UUFDOUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDekIsTUFBTSxJQUFJLEdBQUc7Z0JBQ1QsR0FBRyxPQUFPO2dCQUNWLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNyQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQzthQUN4QixDQUFDO1lBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBQcmltZU5nSGVscGVyIHtcbiAgICBpc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIHN0YXRpYyBkcm9wZG93bkRhdGFTb3VyY2UoZGF0YVNvdXJjZSwgbGFiZWwsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0ge1xuICAgICAgICAgICAgICAgIC4uLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnRbbGFiZWxdLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50W3ZhbHVlXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbiJdfQ==
@@ -1,78 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { PRODUCT_PATH } from '@posiwise/common-utilities';
3
- import { HelperService } from '@posiwise/helper-service';
4
- import { MainApiHttpService } from './main-api-http.service';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "./main-api-http.service";
7
- export class ProductService {
8
- constructor(api) {
9
- this.api = api;
10
- this.endpoint = '/admin/product';
11
- }
12
- /// ////////////////////
13
- /// // ADMIN PRODUCT API
14
- /// ////////////////////
15
- deleteProduct(id, subscription_id) {
16
- return this.api.delete(`${this.endpoint}/${id}?subscription_id=${subscription_id}`);
17
- }
18
- updateProduct(data, id) {
19
- return this.api.put(`${this.endpoint}/${id}`, data);
20
- }
21
- addProduct(data) {
22
- return this.api.post(this.endpoint, data);
23
- }
24
- inviteForTrial(id, body, subscription_id) {
25
- return this.api.post(`${this.endpoint}/${id}/invite_for_trial`, {
26
- ...body,
27
- subscription_id
28
- });
29
- }
30
- getProductList(paging, subscription_id, params) {
31
- return this.api.getWithParams(`${PRODUCT_PATH}/get_all`, {
32
- ...HelperService.getPagingParams(paging),
33
- subscription_id,
34
- ...params
35
- });
36
- }
37
- getSupportedCurrency() {
38
- return this.api.get(`${PRODUCT_PATH}/supported_currencies`);
39
- }
40
- getSupportedRegions() {
41
- return this.api.get(`${PRODUCT_PATH}/supported_regions`);
42
- }
43
- /// ////////////////////
44
- /// // PRODUCT API
45
- /// ////////////////////
46
- getProducts(params) {
47
- return this.api.getWithParams(`${PRODUCT_PATH}/get_all?page=1&page_size=200`, {
48
- ...params
49
- });
50
- }
51
- getProductById(id) {
52
- return this.api.get(`${PRODUCT_PATH}/${id}`);
53
- }
54
- getProductCategories() {
55
- return this.api.get(`${PRODUCT_PATH}/categories`);
56
- }
57
- getProductInsight(subscriptionId, starting_at, ending_at) {
58
- return this.api.getWithParams(`/admin/subscriptions_analytics?type=products&subscription_id=${subscriptionId}`, { starting_at, ending_at });
59
- }
60
- getUsersForProduct(id, subscription_id) {
61
- return this.api.getWithParams(`${this.endpoint}/${id}/insights`, { subscription_id });
62
- }
63
- getAvailableStripeUnsubscribeBehaviors() {
64
- return this.api.get(`admin/product/available_stripe_unsubscribe_behaviors`);
65
- }
66
- getAvailableStripeProrationBehaviors() {
67
- return this.api.get(`admin/product/available_stripe_proration_behaviors`);
68
- }
69
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProductService, deps: [{ token: i1.MainApiHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
70
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProductService, providedIn: 'root' }); }
71
- }
72
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProductService, decorators: [{
73
- type: Injectable,
74
- args: [{
75
- providedIn: 'root'
76
- }]
77
- }], ctorParameters: () => [{ type: i1.MainApiHttpService }] });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9wcm9kdWN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQVUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFLN0QsTUFBTSxPQUFPLGNBQWM7SUFHdkIsWUFBNkIsR0FBdUI7UUFBdkIsUUFBRyxHQUFILEdBQUcsQ0FBb0I7UUFGbkMsYUFBUSxHQUFHLGdCQUFnQixDQUFDO0lBRVUsQ0FBQztJQUV4RCx3QkFBd0I7SUFDeEIsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4QixhQUFhLENBQUMsRUFBVSxFQUFFLGVBQXVCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsb0JBQW9CLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELGNBQWMsQ0FBQyxFQUFVLEVBQUUsSUFBSSxFQUFFLGVBQXVCO1FBQ3BELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDNUQsR0FBRyxJQUFJO1lBQ1AsZUFBZTtTQUNsQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQWUsRUFBRSxlQUF3QixFQUFFLE1BQU87UUFDN0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFlBQVksVUFBVSxFQUFFO1lBQ3JELEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDeEMsZUFBZTtZQUNmLEdBQUcsTUFBTTtTQUNaLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksdUJBQXVCLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksb0JBQW9CLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsV0FBVyxDQUFDLE1BQU07UUFDZCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsWUFBWSwrQkFBK0IsRUFBRTtZQUMxRSxHQUFHLE1BQU07U0FDWixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxvQkFBb0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLGNBQXNCLEVBQUUsV0FBb0IsRUFBRSxTQUFrQjtRQUM5RSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUN6QixnRUFBZ0UsY0FBYyxFQUFFLEVBQ2hGLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUM3QixDQUFDO0lBQ04sQ0FBQztJQUVELGtCQUFrQixDQUFDLEVBQVUsRUFBRSxlQUF1QjtRQUNsRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELHNDQUFzQztRQUNsQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELG9DQUFvQztRQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7SUFDOUUsQ0FBQzsrR0E3RVEsY0FBYzttSEFBZCxjQUFjLGNBRlgsTUFBTTs7NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFBhZ2luZywgUFJPRFVDVF9QQVRIIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0U2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludCA9ICcvYWRtaW4vcHJvZHVjdCc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgLy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8vIC8vIEFETUlOIFBST0RVQ1QgQVBJXG4gICAgLy8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgZGVsZXRlUHJvZHVjdChpZDogbnVtYmVyLCBzdWJzY3JpcHRpb25faWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZGVsZXRlKGAke3RoaXMuZW5kcG9pbnR9LyR7aWR9P3N1YnNjcmlwdGlvbl9pZD0ke3N1YnNjcmlwdGlvbl9pZH1gKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9kdWN0KGRhdGEsIGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dChgJHt0aGlzLmVuZHBvaW50fS8ke2lkfWAsIGRhdGEpO1xuICAgIH1cblxuICAgIGFkZFByb2R1Y3QoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCh0aGlzLmVuZHBvaW50LCBkYXRhKTtcbiAgICB9XG5cbiAgICBpbnZpdGVGb3JUcmlhbChpZDogbnVtYmVyLCBib2R5LCBzdWJzY3JpcHRpb25faWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdChgJHt0aGlzLmVuZHBvaW50fS8ke2lkfS9pbnZpdGVfZm9yX3RyaWFsYCwge1xuICAgICAgICAgICAgLi4uYm9keSxcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRQcm9kdWN0TGlzdChwYWdpbmc/OiBQYWdpbmcsIHN1YnNjcmlwdGlvbl9pZD86IG51bWJlciwgcGFyYW1zPykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhgJHtQUk9EVUNUX1BBVEh9L2dldF9hbGxgLCB7XG4gICAgICAgICAgICAuLi5IZWxwZXJTZXJ2aWNlLmdldFBhZ2luZ1BhcmFtcyhwYWdpbmcpLFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uX2lkLFxuICAgICAgICAgICAgLi4ucGFyYW1zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFN1cHBvcnRlZEN1cnJlbmN5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAke1BST0RVQ1RfUEFUSH0vc3VwcG9ydGVkX2N1cnJlbmNpZXNgKTtcbiAgICB9XG5cbiAgICBnZXRTdXBwb3J0ZWRSZWdpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAke1BST0RVQ1RfUEFUSH0vc3VwcG9ydGVkX3JlZ2lvbnNgKTtcbiAgICB9XG5cbiAgICAvLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLy8gLy8gUFJPRFVDVCBBUElcbiAgICAvLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICBnZXRQcm9kdWN0cyhwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoYCR7UFJPRFVDVF9QQVRIfS9nZXRfYWxsP3BhZ2U9MSZwYWdlX3NpemU9MjAwYCwge1xuICAgICAgICAgICAgLi4ucGFyYW1zXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFByb2R1Y3RCeUlkKGlkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgJHtQUk9EVUNUX1BBVEh9LyR7aWR9YCk7XG4gICAgfVxuXG4gICAgZ2V0UHJvZHVjdENhdGVnb3JpZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYCR7UFJPRFVDVF9QQVRIfS9jYXRlZ29yaWVzYCk7XG4gICAgfVxuXG4gICAgZ2V0UHJvZHVjdEluc2lnaHQoc3Vic2NyaXB0aW9uSWQ6IG51bWJlciwgc3RhcnRpbmdfYXQ/OiBzdHJpbmcsIGVuZGluZ19hdD86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0V2l0aFBhcmFtcyhcbiAgICAgICAgICAgIGAvYWRtaW4vc3Vic2NyaXB0aW9uc19hbmFseXRpY3M/dHlwZT1wcm9kdWN0cyZzdWJzY3JpcHRpb25faWQ9JHtzdWJzY3JpcHRpb25JZH1gLFxuICAgICAgICAgICAgeyBzdGFydGluZ19hdCwgZW5kaW5nX2F0IH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRVc2Vyc0ZvclByb2R1Y3QoaWQ6IG51bWJlciwgc3Vic2NyaXB0aW9uX2lkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldFdpdGhQYXJhbXMoYCR7dGhpcy5lbmRwb2ludH0vJHtpZH0vaW5zaWdodHNgLCB7IHN1YnNjcmlwdGlvbl9pZCB9KTtcbiAgICB9XG5cbiAgICBnZXRBdmFpbGFibGVTdHJpcGVVbnN1YnNjcmliZUJlaGF2aW9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgYWRtaW4vcHJvZHVjdC9hdmFpbGFibGVfc3RyaXBlX3Vuc3Vic2NyaWJlX2JlaGF2aW9yc2ApO1xuICAgIH1cblxuICAgIGdldEF2YWlsYWJsZVN0cmlwZVByb3JhdGlvbkJlaGF2aW9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgYWRtaW4vcHJvZHVjdC9hdmFpbGFibGVfc3RyaXBlX3Byb3JhdGlvbl9iZWhhdmlvcnNgKTtcbiAgICB9XG59XG4iXX0=
@@ -1,64 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { PROJECT_PATH } from '@posiwise/common-utilities';
3
- import { MainApiHttpService } from './main-api-http.service';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./main-api-http.service";
6
- export class ProfileService {
7
- constructor(api) {
8
- this.api = api;
9
- this.endpoint = PROJECT_PATH;
10
- }
11
- updateUserProfile(user) {
12
- const formData = new FormData();
13
- // eslint-disable-next-line no-restricted-syntax
14
- for (const key in user) {
15
- if (key in user) {
16
- formData.append(key, user[key]);
17
- }
18
- }
19
- return this.api.put('/user', formData);
20
- }
21
- getUserProfile(slug) {
22
- return this.api.get(`/users/${slug}/profile/`);
23
- }
24
- getUserObject(objectType, slug) {
25
- return this.api.get(`/users/${slug}/get_object?object=${objectType}`);
26
- }
27
- getProjects(slug) {
28
- return this.api.get(`/users/${slug}/projects`);
29
- }
30
- addProjects(data) {
31
- return this.api.post(this.endpoint, data);
32
- }
33
- updateProjects(id, data) {
34
- return this.api.put(`${this.endpoint}${id}`, data);
35
- }
36
- deleteProject(id) {
37
- return this.api.delete(`${this.endpoint}/${id}`);
38
- }
39
- addProjectPictures(data) {
40
- return this.api.uploadWithData('/project_pictures', data);
41
- }
42
- getProjectPictures(slug) {
43
- return this.api.get(`/users/${slug}/project_pictures`);
44
- }
45
- deletePicture(projectId) {
46
- return this.api.delete(`/project_pictures/${projectId}`);
47
- }
48
- // Recommendations
49
- postProjectRecommendation(data) {
50
- return this.api.post(`/project_recommendations`, data);
51
- }
52
- postLinks(data) {
53
- return this.api.post('/user_links', data);
54
- }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, deps: [{ token: i1.MainApiHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
56
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, providedIn: 'root' }); }
57
- }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ProfileService, decorators: [{
59
- type: Injectable,
60
- args: [{
61
- providedIn: 'root'
62
- }]
63
- }], ctorParameters: () => [{ type: i1.MainApiHttpService }] });
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9wcm9maWxlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUs3RCxNQUFNLE9BQU8sY0FBYztJQUd2QixZQUE2QixHQUF1QjtRQUF2QixRQUFHLEdBQUgsR0FBRyxDQUFvQjtRQUZuQyxhQUFRLEdBQUcsWUFBWSxDQUFDO0lBRWMsQ0FBQztJQUV4RCxpQkFBaUIsQ0FBQyxJQUFpQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBRWhDLGdEQUFnRDtRQUNoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNkLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLFdBQVcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxhQUFhLENBQUMsVUFBa0IsRUFBRSxJQUFZO1FBQzFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLHNCQUFzQixVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBWTtRQUNwQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQStCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQVUsRUFBRSxJQUErQjtRQUN0RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBNEI7UUFDM0MsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxhQUFhLENBQUMsU0FBaUI7UUFDM0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsa0JBQWtCO0lBRWxCLHlCQUF5QixDQUFDLElBQVk7UUFDbEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQStCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7K0dBOURRLGNBQWM7bUhBQWQsY0FBYyxjQUZYLE1BQU07OzRGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBQUk9KRUNUX1BBVEggfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5cbmltcG9ydCB7IEFkZFByb2plY3RQaWN0dXJlc0RhdGEsIFByb2ZpbGVEYXRhIH0gZnJvbSAnLi9jb21tb24tc2VydmljZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQcm9maWxlU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRwb2ludCA9IFBST0pFQ1RfUEFUSDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYXBpOiBNYWluQXBpSHR0cFNlcnZpY2UpIHt9XG5cbiAgICB1cGRhdGVVc2VyUHJvZmlsZSh1c2VyOiBQcm9maWxlRGF0YSkge1xuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB1c2VyKSB7XG4gICAgICAgICAgICBpZiAoa2V5IGluIHVzZXIpIHtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB1c2VyW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnB1dCgnL3VzZXInLCBmb3JtRGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0VXNlclByb2ZpbGUoc2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYC91c2Vycy8ke3NsdWd9L3Byb2ZpbGUvYCk7XG4gICAgfVxuXG4gICAgZ2V0VXNlck9iamVjdChvYmplY3RUeXBlOiBzdHJpbmcsIHNsdWc6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZ2V0KGAvdXNlcnMvJHtzbHVnfS9nZXRfb2JqZWN0P29iamVjdD0ke29iamVjdFR5cGV9YCk7XG4gICAgfVxuXG4gICAgZ2V0UHJvamVjdHMoc2x1Zzogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5nZXQoYC91c2Vycy8ke3NsdWd9L3Byb2plY3RzYCk7XG4gICAgfVxuXG4gICAgYWRkUHJvamVjdHMoZGF0YTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCh0aGlzLmVuZHBvaW50LCBkYXRhKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQcm9qZWN0cyhpZDogbnVtYmVyLCBkYXRhOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYCR7dGhpcy5lbmRwb2ludH0ke2lkfWAsIGRhdGEpO1xuICAgIH1cblxuICAgIGRlbGV0ZVByb2plY3QoaWQ6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkuZGVsZXRlKGAke3RoaXMuZW5kcG9pbnR9LyR7aWR9YCk7XG4gICAgfVxuXG4gICAgYWRkUHJvamVjdFBpY3R1cmVzKGRhdGE6IEFkZFByb2plY3RQaWN0dXJlc0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnVwbG9hZFdpdGhEYXRhKCcvcHJvamVjdF9waWN0dXJlcycsIGRhdGEpO1xuICAgIH1cblxuICAgIGdldFByb2plY3RQaWN0dXJlcyhzbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmdldChgL3VzZXJzLyR7c2x1Z30vcHJvamVjdF9waWN0dXJlc2ApO1xuICAgIH1cblxuICAgIGRlbGV0ZVBpY3R1cmUocHJvamVjdElkOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbGV0ZShgL3Byb2plY3RfcGljdHVyZXMvJHtwcm9qZWN0SWR9YCk7XG4gICAgfVxuXG4gICAgLy8gUmVjb21tZW5kYXRpb25zXG5cbiAgICBwb3N0UHJvamVjdFJlY29tbWVuZGF0aW9uKGRhdGE6IG9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdChgL3Byb2plY3RfcmVjb21tZW5kYXRpb25zYCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcG9zdExpbmtzKGRhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpLnBvc3QoJy91c2VyX2xpbmtzJywgZGF0YSk7XG4gICAgfVxufVxuIl19
@@ -1,29 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { QUALIFICATIONS_PATH } from '@posiwise/common-utilities';
3
- import { MainApiHttpService } from './main-api-http.service';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./main-api-http.service";
6
- export class QualificationService {
7
- constructor(api) {
8
- this.api = api;
9
- this.endPoint = QUALIFICATIONS_PATH;
10
- }
11
- addQualifications(data) {
12
- return this.api.post(this.endPoint, data);
13
- }
14
- updateQualifications(id, data) {
15
- return this.api.put(`${this.endPoint}/${id}`, data);
16
- }
17
- deleteQualifications(id) {
18
- return this.api.delete(`${this.endPoint}/${id}`);
19
- }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: QualificationService, deps: [{ token: i1.MainApiHttpService }], target: i0.ɵɵFactoryTarget.Injectable }); }
21
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: QualificationService, providedIn: 'root' }); }
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: QualificationService, decorators: [{
24
- type: Injectable,
25
- args: [{
26
- providedIn: 'root'
27
- }]
28
- }], ctorParameters: () => [{ type: i1.MainApiHttpService }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGlmaWNhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24tc2VydmljZXMvc3JjL2xpYi9xdWFsaWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBSzdELE1BQU0sT0FBTyxvQkFBb0I7SUFHN0IsWUFBNkIsR0FBdUI7UUFBdkIsUUFBRyxHQUFILEdBQUcsQ0FBb0I7UUFGbkMsYUFBUSxHQUFHLG1CQUFtQixDQUFDO0lBRU8sQ0FBQztJQUV4RCxpQkFBaUIsQ0FBQyxJQUFJO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsRUFBVSxFQUFFLElBQUk7UUFDakMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELG9CQUFvQixDQUFDLEVBQVU7UUFDM0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDOytHQWZRLG9CQUFvQjttSEFBcEIsb0JBQW9CLGNBRmpCLE1BQU07OzRGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFFVQUxJRklDQVRJT05TX1BBVEggfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXV0aWxpdGllcyc7XG5cbmltcG9ydCB7IE1haW5BcGlIdHRwU2VydmljZSB9IGZyb20gJy4vbWFpbi1hcGktaHR0cC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBRdWFsaWZpY2F0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmRQb2ludCA9IFFVQUxJRklDQVRJT05TX1BBVEg7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGFwaTogTWFpbkFwaUh0dHBTZXJ2aWNlKSB7fVxuXG4gICAgYWRkUXVhbGlmaWNhdGlvbnMoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGkucG9zdCh0aGlzLmVuZFBvaW50LCBkYXRhKTtcbiAgICB9XG5cbiAgICB1cGRhdGVRdWFsaWZpY2F0aW9ucyhpZDogbnVtYmVyLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5wdXQoYCR7dGhpcy5lbmRQb2ludH0vJHtpZH1gLCBkYXRhKTtcbiAgICB9XG5cbiAgICBkZWxldGVRdWFsaWZpY2F0aW9ucyhpZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaS5kZWxldGUoYCR7dGhpcy5lbmRQb2ludH0vJHtpZH1gKTtcbiAgICB9XG59XG4iXX0=