taxtank-core 0.29.13 → 0.29.17

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 (45) hide show
  1. package/bundles/taxtank-core.umd.js +6902 -6845
  2. package/bundles/taxtank-core.umd.js.map +1 -1
  3. package/esm2015/lib/collections/report/property/property-report-item-depreciation.collection.js +2 -2
  4. package/esm2015/lib/collections/subscription/service-subscription.collection.js +24 -1
  5. package/esm2015/lib/collections/subscription/subscription-item.collection.js +10 -0
  6. package/esm2015/lib/db/Models/subscription/service-subscription.js +3 -3
  7. package/esm2015/lib/db/Models/user/client-income-types.js +3 -3
  8. package/esm2015/lib/forms/client/client-income-types.form.js +4 -2
  9. package/esm2015/lib/forms/transaction/work-income.form.js +9 -2
  10. package/esm2015/lib/models/client/client-income-types.js +9 -1
  11. package/esm2015/lib/models/service-subscription/service-subscription.js +1 -7
  12. package/esm2015/lib/models/user/user.js +5 -1
  13. package/esm2015/lib/services/account-setup/account-setup.service.js +2 -2
  14. package/esm2015/lib/services/auth/jwt.service.js +8 -2
  15. package/esm2015/lib/services/http/firm/client-income/client-income-types.service.js +14 -42
  16. package/esm2015/lib/services/http/property/property.service.js +1 -2
  17. package/esm2015/lib/services/http/rest/rest.service.js +15 -6
  18. package/esm2015/lib/services/http/subscription/index.js +4 -3
  19. package/esm2015/lib/services/http/subscription/service-payment/service-payment.service.js +34 -0
  20. package/esm2015/lib/services/http/subscription/service-price/service-price.service.js +24 -0
  21. package/esm2015/lib/services/http/subscription/service-subscription/subscription.service.js +112 -0
  22. package/esm2015/lib/services/http/user/user.service.js +17 -1
  23. package/fesm2015/taxtank-core.js +6647 -6596
  24. package/fesm2015/taxtank-core.js.map +1 -1
  25. package/lib/collections/subscription/service-subscription.collection.d.ts +8 -0
  26. package/lib/collections/subscription/subscription-item.collection.d.ts +6 -0
  27. package/lib/db/Models/subscription/service-subscription.d.ts +2 -2
  28. package/lib/db/Models/user/client-income-types.d.ts +2 -2
  29. package/lib/forms/client/client-income-types.form.d.ts +1 -1
  30. package/lib/forms/transaction/work-income.form.d.ts +1 -0
  31. package/lib/models/client/client-income-types.d.ts +5 -0
  32. package/lib/models/service-subscription/service-subscription.d.ts +0 -2
  33. package/lib/models/user/user.d.ts +2 -1
  34. package/lib/services/auth/jwt.service.d.ts +1 -1
  35. package/lib/services/http/firm/client-income/client-income-types.service.d.ts +9 -13
  36. package/lib/services/http/rest/rest.service.d.ts +9 -6
  37. package/lib/services/http/subscription/index.d.ts +3 -2
  38. package/lib/services/http/subscription/service-payment/service-payment.service.d.ts +19 -0
  39. package/lib/services/http/subscription/{service-price.service.d.ts → service-price/service-price.service.d.ts} +3 -3
  40. package/lib/services/http/subscription/service-subscription/subscription.service.d.ts +48 -0
  41. package/lib/services/http/user/user.service.d.ts +11 -0
  42. package/package.json +1 -1
  43. package/esm2015/lib/services/http/subscription/service-price.service.js +0 -24
  44. package/esm2015/lib/services/http/subscription/subscription.service.js +0 -134
  45. package/lib/services/http/subscription/subscription.service.d.ts +0 -50
@@ -1,4 +1,12 @@
1
1
  import { Collection } from '../collection';
2
2
  import { ServiceSubscription } from '../../models/service-subscription/service-subscription';
3
+ import { SubscriptionItemCollection } from './subscription-item.collection';
3
4
  export declare class ServiceSubscriptionCollection extends Collection<ServiceSubscription> {
5
+ getActive(): this;
6
+ getTrials(): this;
7
+ getActiveTrials(): this;
8
+ getExpiringTrials(): this;
9
+ getPaid(): this;
10
+ getActivePaid(): ServiceSubscription;
11
+ getItems(): SubscriptionItemCollection;
4
12
  }
@@ -0,0 +1,6 @@
1
+ import { Collection } from '../collection';
2
+ import { ServiceSubscriptionItem } from '../../models/service-subscription/service-subscription-item';
3
+ export declare class SubscriptionItemCollection extends Collection<ServiceSubscriptionItem> {
4
+ get propertiesItem(): ServiceSubscriptionItem;
5
+ get propertyQuantity(): number;
6
+ }
@@ -2,8 +2,8 @@ import { ServiceSubscriptionStatusEnum } from '../../Enums/subscription/service-
2
2
  import { User } from '../user/user';
3
3
  import { ServiceSubscriptionItem } from './service-subscription-item';
4
4
  import { ServicePayment } from './service-payment';
5
- import { AbstractModel } from '../abstract-model';
6
- export declare class ServiceSubscription extends AbstractModel {
5
+ import { ObservableModel } from '../observable-model';
6
+ export declare class ServiceSubscription extends ObservableModel {
7
7
  id?: number;
8
8
  stripeId?: string;
9
9
  startDate?: Date;
@@ -1,6 +1,6 @@
1
1
  import { ClientDetails } from './client-details';
2
- import { AbstractModel } from '../abstract-model';
3
- export declare class ClientIncomeTypes extends AbstractModel {
2
+ import { ObservableModel } from '../observable-model';
3
+ export declare class ClientIncomeTypes extends ObservableModel {
4
4
  salary?: boolean;
5
5
  property?: boolean;
6
6
  sole?: boolean;
@@ -2,5 +2,5 @@ import { AbstractForm } from '../abstract.form';
2
2
  import { ClientIncomeTypes } from '../../models/client/client-income-types';
3
3
  export declare class ClientIncomeTypesForm extends AbstractForm<ClientIncomeTypes> {
4
4
  private clientIncomeTypes;
5
- constructor(clientIncomeTypes: ClientIncomeTypes);
5
+ constructor(clientIncomeTypes?: ClientIncomeTypes);
6
6
  }
@@ -5,6 +5,7 @@ export declare class WorkIncomeForm extends TransactionForm implements IEventLis
5
5
  constructor(transaction: Transaction, registeredForGst: boolean, allocations: TransactionAllocation[]);
6
6
  listenEvents(): void;
7
7
  private watchIncomeSource;
8
+ private updateTaxValue;
8
9
  watchChartAccounts(): void;
9
10
  /**
10
11
  * depends on chartAccounts the form could include different extra fields
@@ -1,5 +1,10 @@
1
1
  import { ClientIncomeTypes as ClientIncomeTypesBase } from '../../db/Models/user/client-income-types';
2
2
  export declare class ClientIncomeTypes extends ClientIncomeTypesBase {
3
+ salary: boolean;
4
+ property: boolean;
5
+ sole: boolean;
6
+ dividends: boolean;
7
+ other: boolean;
3
8
  /**
4
9
  * Get count of selected income types
5
10
  */
@@ -7,7 +7,6 @@ export declare class ServiceSubscription extends ServiceSubscriptionBase {
7
7
  lastTrialDays: number;
8
8
  get isTrial(): boolean;
9
9
  get price(): number;
10
- get propertyQuantity(): number;
11
10
  /**
12
11
  * get title of subscription
13
12
  */
@@ -28,7 +27,6 @@ export declare class ServiceSubscription extends ServiceSubscriptionBase {
28
27
  */
29
28
  get workTankItem(): ServiceSubscriptionItem;
30
29
  get soleTankItem(): ServiceSubscriptionItem;
31
- get propertiesItem(): ServiceSubscriptionItem;
32
30
  hasPropertyTank(): boolean;
33
31
  hasWorkTank(): boolean;
34
32
  /**
@@ -6,7 +6,7 @@ import { EmployeeDetails } from '../employee/employee-details';
6
6
  import { Phone } from '../phone/phone';
7
7
  import { ServiceSubscription } from '../service-subscription/service-subscription';
8
8
  import { ServiceSubscriptionItem } from '../service-subscription/service-subscription-item';
9
- import { Photoable } from '../../interfaces/photoable';
9
+ import { Photoable } from '../../interfaces';
10
10
  import { SoleDetails } from '../sole';
11
11
  export declare class User extends BaseUser implements Photoable {
12
12
  subscriptions: ServiceSubscription[];
@@ -66,4 +66,5 @@ export declare class User extends BaseUser implements Photoable {
66
66
  * get user's initials
67
67
  */
68
68
  getPhotoPlaceholder(): string;
69
+ isCurrentFinancialYear(): boolean;
69
70
  }
@@ -1,5 +1,5 @@
1
1
  import { JwtHelperService } from '@auth0/angular-jwt';
2
- import { User } from '../../models/user/user';
2
+ import { User } from '../../models';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class JwtService extends JwtHelperService {
5
5
  getToken(): string;
@@ -1,18 +1,14 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { Observable, ReplaySubject } from 'rxjs';
3
1
  import { ClientIncomeTypes } from '../../../../models/client/client-income-types';
2
+ import { ClientIncomeTypes as ClientIncomeTypesBase } from '../../../../db/Models/user/client-income-types';
3
+ import { RestMethod, RestService } from '../../rest';
4
+ import { Collection } from '../../../../collections';
4
5
  import * as i0 from "@angular/core";
5
- /**
6
- * @TODO extend rest service when it could work with single objects, not only arrays
7
- */
8
- export declare class ClientIncomeTypesService {
9
- private http;
10
- private environment;
11
- cache: ClientIncomeTypes;
12
- cacheSubject: ReplaySubject<ClientIncomeTypes>;
13
- constructor(http: HttpClient, environment: any);
14
- get(): Observable<ClientIncomeTypes>;
15
- update(incomeTypes: ClientIncomeTypes): Observable<ClientIncomeTypes>;
6
+ export declare class ClientIncomeTypesService extends RestService<ClientIncomeTypesBase, ClientIncomeTypes, Collection<ClientIncomeTypes>> {
7
+ modelClass: typeof ClientIncomeTypes;
8
+ collectionClass: typeof Collection;
9
+ endpointUri: string;
10
+ isApiPlatform: boolean;
11
+ disabledMethods: RestMethod[];
16
12
  static ɵfac: i0.ɵɵFactoryDeclaration<ClientIncomeTypesService, never>;
17
13
  static ɵprov: i0.ɵɵInjectableDeclaration<ClientIncomeTypesService>;
18
14
  }
@@ -1,10 +1,9 @@
1
1
  import { Observable, ReplaySubject } from 'rxjs';
2
2
  import { HttpClient } from '@angular/common/http';
3
- import { EventDispatcherService } from '../../event/event-dispatcher.service';
4
- import { IEventListener } from '../../../interfaces/event-listener.interface';
5
- import { Collection } from '../../../collections/collection';
6
- import { AbstractModel } from '../../../db/Models/abstract-model';
7
- import { ObservableModel } from '../../../db/Models/observable-model';
3
+ import { EventDispatcherService } from '../../event';
4
+ import { IEventListener } from '../../../interfaces';
5
+ import { Collection } from '../../../collections';
6
+ import { AbstractModel, ObservableModel } from '../../../db/Models';
8
7
  import { RestMethod } from './rest-method.type';
9
8
  import { HttpMethod } from './http-method.type';
10
9
  import * as i0 from "@angular/core";
@@ -51,6 +50,10 @@ export declare abstract class RestService<BaseModel extends AbstractModel, Model
51
50
  constructor(http: HttpClient, eventDispatcherService: EventDispatcherService, environment: any);
52
51
  protected get apiUrl(): string;
53
52
  get(): Observable<CollectionModel>;
53
+ /**
54
+ * never return cache directly to prevent update
55
+ */
56
+ getCache(): Model;
54
57
  getSingle(): Observable<Model>;
55
58
  getArray(): Observable<Model[]>;
56
59
  /**
@@ -112,7 +115,7 @@ export declare abstract class RestService<BaseModel extends AbstractModel, Model
112
115
  /**
113
116
  * Subscribe to http events and run callback.
114
117
  * CSE - Cleint Sent Events
115
- * @param type The class whose changes should be listened for
118
+ * @param modelClass
116
119
  * @param methods The list of http methods should be listened for
117
120
  * @param callback The function to be called when event triggered
118
121
  */
@@ -1,2 +1,3 @@
1
- export * from './service-price.service';
2
- export * from './subscription.service';
1
+ export * from './service-price/service-price.service';
2
+ export * from './service-payment/service-payment.service';
3
+ export * from './service-subscription/subscription.service';
@@ -0,0 +1,19 @@
1
+ import { Collection } from '../../../../collections';
2
+ import { RestMethod, RestService } from '../../rest';
3
+ import { ServicePayment } from '../../../../models/service-subscription/service-payment';
4
+ import { ServicePayment as ServicePaymentBase } from '../../../../db/Models';
5
+ import { Observable } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ export declare class ServicePaymentService extends RestService<ServicePaymentBase, ServicePayment, Collection<ServicePayment>> {
8
+ isApiPlatform: boolean;
9
+ endpointUri: string;
10
+ modelClass: typeof ServicePayment;
11
+ collectionClass: typeof Collection;
12
+ disabledMethods: RestMethod[];
13
+ /**
14
+ * Stripe stores actual links to payment invoices for 30 days. After that, we need to request an actual link
15
+ */
16
+ getInvoiceUrl(payment: ServicePayment): Observable<string>;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<ServicePaymentService, never>;
18
+ static ɵprov: i0.ɵɵInjectableDeclaration<ServicePaymentService>;
19
+ }
@@ -1,6 +1,6 @@
1
- import { ServicePrice as ServicePriceBase } from '../../../db/Models/subscription/service-price';
2
- import { ServicePrice } from '../../../models/service-subscription/service-price';
3
- import { RestService } from '../rest/rest-old.service';
1
+ import { ServicePrice as ServicePriceBase } from '../../../../db/Models/subscription/service-price';
2
+ import { ServicePrice } from '../../../../models/service-subscription/service-price';
3
+ import { RestService } from '../../rest/rest-old.service';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
6
6
  * Service that handling banks logic
@@ -0,0 +1,48 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import { ServiceSubscription } from '../../../../models/service-subscription/service-subscription';
4
+ import { EventDispatcherService, SseService } from '../../../event';
5
+ import { ServiceSubscriptionItem } from '../../../../models/service-subscription/service-subscription-item';
6
+ import { ToastService } from '../../../toast';
7
+ import { RestMethod, RestService } from '../../rest';
8
+ import { ServiceSubscription as ServiceSubscriptionBase } from '../../../../db/Models';
9
+ import { ServiceSubscriptionCollection } from '../../../../collections';
10
+ import * as i0 from "@angular/core";
11
+ /**
12
+ * @TODO Alex refactor
13
+ */
14
+ export declare class SubscriptionService extends RestService<ServiceSubscriptionBase, ServiceSubscription, ServiceSubscriptionCollection> {
15
+ protected http: HttpClient;
16
+ protected eventDispatcherService: EventDispatcherService;
17
+ private sseService;
18
+ private toastService;
19
+ protected environment: any;
20
+ isApiPlatform: boolean;
21
+ endpointUri: string;
22
+ modelClass: typeof ServiceSubscription;
23
+ collectionClass: typeof ServiceSubscriptionCollection;
24
+ disabledMethods: RestMethod[];
25
+ constructor(http: HttpClient, eventDispatcherService: EventDispatcherService, sseService: SseService, toastService: ToastService, environment: any);
26
+ getActive(): Observable<ServiceSubscriptionCollection>;
27
+ getTrials(): Observable<ServiceSubscriptionCollection>;
28
+ getActiveTrials(): Observable<ServiceSubscriptionCollection>;
29
+ /**
30
+ * redirect to stripe payment page
31
+ */
32
+ checkoutRedirect(subscription: ServiceSubscription): Promise<any>;
33
+ /**
34
+ * redirect to stripe billing page
35
+ */
36
+ billingRedirect(returnUrl: string): void;
37
+ /**
38
+ * Get difference between current subscription and selected new subscription
39
+ */
40
+ getProrationCost(items: ServiceSubscriptionItem[]): Observable<number>;
41
+ /**
42
+ * Change subscription plan
43
+ */
44
+ changeSubscription(items: ServiceSubscriptionItem[]): Observable<object>;
45
+ private listenSubscriptions;
46
+ static ɵfac: i0.ɵɵFactoryDeclaration<SubscriptionService, never>;
47
+ static ɵprov: i0.ɵɵInjectableDeclaration<SubscriptionService>;
48
+ }
@@ -4,6 +4,8 @@ import { User } from '../../../models';
4
4
  import { EventDispatcherService, SseService } from '../../event';
5
5
  import { JwtService } from '../../auth';
6
6
  import { IEventListener } from '../../../interfaces';
7
+ import { ObservableModel } from '../../../db/Models';
8
+ import { HttpMethod } from '../rest';
7
9
  import * as i0 from "@angular/core";
8
10
  /**
9
11
  * Service to work with user
@@ -81,6 +83,15 @@ export declare class UserService implements IEventListener {
81
83
  * capital losses updates on property sale
82
84
  */
83
85
  private listenPropertySale;
86
+ /**
87
+ * @TODO remove when the class refactored on RestService
88
+ * Subscribe to http events and run callback.
89
+ * CSE - Cleint Sent Events
90
+ * @param modelClass
91
+ * @param methods The list of http methods should be listened for
92
+ * @param callback The function to be called when event triggered
93
+ */
94
+ protected listenCSE(modelClass: typeof ObservableModel, methods: HttpMethod[], callback: Function): void;
84
95
  static ɵfac: i0.ɵɵFactoryDeclaration<UserService, never>;
85
96
  static ɵprov: i0.ɵɵInjectableDeclaration<UserService>;
86
97
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taxtank-core",
3
- "version": "0.29.13",
3
+ "version": "0.29.17",
4
4
  "private": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^12.2.3 || ~13.0.0",
@@ -1,24 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { ServicePrice } from '../../../models/service-subscription/service-price';
3
- import { RestService } from '../rest/rest-old.service';
4
- import * as i0 from "@angular/core";
5
- /**
6
- * Service that handling banks logic
7
- */
8
- export class ServicePriceService extends RestService {
9
- constructor() {
10
- super(...arguments);
11
- this.modelClass = ServicePrice;
12
- this.url = 'service-prices';
13
- this.isHydra = true;
14
- }
15
- }
16
- ServicePriceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ServicePriceService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
17
- ServicePriceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ServicePriceService, providedIn: 'root' });
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ServicePriceService, decorators: [{
19
- type: Injectable,
20
- args: [{
21
- providedIn: 'root'
22
- }]
23
- }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1wcmljZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHQtY29yZS9zcmMvbGliL3NlcnZpY2VzL2h0dHAvc3Vic2NyaXB0aW9uL3NlcnZpY2UtcHJpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNsRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRXZEOztHQUVHO0FBSUgsTUFBTSxPQUFPLG1CQUFvQixTQUFRLFdBQTJDO0lBSHBGOztRQUlFLGVBQVUsR0FBd0IsWUFBWSxDQUFDO1FBQy9DLFFBQUcsR0FBVyxnQkFBZ0IsQ0FBQztRQUMvQixZQUFPLEdBQVksSUFBSSxDQUFDO0tBQ3pCOztpSEFKWSxtQkFBbUI7cUhBQW5CLG1CQUFtQixjQUZsQixNQUFNOzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTZXJ2aWNlUHJpY2UgYXMgU2VydmljZVByaWNlQmFzZSB9IGZyb20gJy4uLy4uLy4uL2RiL01vZGVscy9zdWJzY3JpcHRpb24vc2VydmljZS1wcmljZSc7XG5pbXBvcnQgeyBTZXJ2aWNlUHJpY2UgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2VydmljZS1zdWJzY3JpcHRpb24vc2VydmljZS1wcmljZSc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uL3Jlc3QvcmVzdC1vbGQuc2VydmljZSc7XG5cbi8qKlxuICogU2VydmljZSB0aGF0IGhhbmRsaW5nIGJhbmtzIGxvZ2ljXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlcnZpY2VQcmljZVNlcnZpY2UgZXh0ZW5kcyBSZXN0U2VydmljZTxTZXJ2aWNlUHJpY2VCYXNlLCBTZXJ2aWNlUHJpY2U+IHtcbiAgbW9kZWxDbGFzczogdHlwZW9mIFNlcnZpY2VQcmljZSA9IFNlcnZpY2VQcmljZTtcbiAgdXJsOiBzdHJpbmcgPSAnc2VydmljZS1wcmljZXMnO1xuICBpc0h5ZHJhOiBib29sZWFuID0gdHJ1ZTtcbn1cbiJdfQ==
@@ -1,134 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { Inject, Injectable } from '@angular/core';
3
- import { of, ReplaySubject } from 'rxjs';
4
- import { map } from 'rxjs/operators';
5
- import { loadStripe } from '@stripe/stripe-js';
6
- import { plainToClass } from 'class-transformer';
7
- import { ServiceSubscription } from '../../../models/service-subscription/service-subscription';
8
- import { ServicePayment } from '../../../models/service-subscription/service-payment';
9
- import { AppEvent } from '../../../models/event/app-event';
10
- import { AppEventTypeEnum } from '../../../models/event/app-event-type.enum';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/common/http";
13
- import * as i2 from "../../event/event-dispatcher.service";
14
- import * as i3 from "../../event/sse.service";
15
- import * as i4 from "../../toast/toast.service";
16
- /**
17
- * @TODO Alex refactor
18
- */
19
- export class SubscriptionService {
20
- constructor(http, eventDispatcherService, sseService, toastService, environment) {
21
- this.http = http;
22
- this.eventDispatcherService = eventDispatcherService;
23
- this.sseService = sseService;
24
- this.toastService = toastService;
25
- this.environment = environment;
26
- this.serviceSubscriptionSubject = new ReplaySubject(1);
27
- this.servicePaymentsSubject = new ReplaySubject(1);
28
- this.listenSubscriptions();
29
- }
30
- getSubscription(force = false) {
31
- if (this._serviceSubscription === undefined || force) {
32
- this._serviceSubscription = null;
33
- this.http.get(`${this.environment.apiV2}/subscriptions/last`)
34
- .pipe(map((response) => {
35
- return plainToClass(ServiceSubscription, response);
36
- }))
37
- .subscribe((subsciption) => {
38
- this._serviceSubscription = subsciption;
39
- this.serviceSubscriptionSubject.next(this._serviceSubscription);
40
- });
41
- }
42
- return this.serviceSubscriptionSubject.asObservable();
43
- }
44
- /**
45
- * redirect to stripe payment page
46
- */
47
- checkoutRedirect(subscription) {
48
- return __awaiter(this, void 0, void 0, function* () {
49
- const stripe = yield loadStripe(this.environment.stripePk);
50
- this.http.post(`${this.environment.apiV2}/stripe/checkout-session`, {
51
- items: subscription.items,
52
- successUrl: window.location.href,
53
- cancelUrl: window.location.href
54
- })
55
- .subscribe((session) => {
56
- // @Todo remove user TRIAL status
57
- stripe.redirectToCheckout({ sessionId: session });
58
- });
59
- });
60
- }
61
- /**
62
- * redirect to stripe billing page
63
- */
64
- billingRedirect(returnUrl) {
65
- this.http.get(`${this.environment.apiV2}/stripe/billing-portal-session`, {
66
- params: { returnUrl }
67
- }).subscribe((response) => {
68
- window.location.replace(response.url);
69
- });
70
- }
71
- getPayments() {
72
- if (!this._servicePayments) {
73
- this.http.get(`${this.environment.apiV2}/service-payments`).subscribe((response) => {
74
- this._servicePayments = response['hydra:member'].map((item) => plainToClass(ServicePayment, item));
75
- this.servicePaymentsSubject.next(this._servicePayments);
76
- });
77
- }
78
- return this.servicePaymentsSubject.asObservable();
79
- }
80
- /**
81
- * Get difference between current subscription and selected new subscription
82
- */
83
- getProrationCost(items) {
84
- return this.http.post(`${this.environment.apiV2}/subscriptions/proration-cost`, items).pipe(map((prorationCost) => {
85
- return prorationCost;
86
- }));
87
- }
88
- /**
89
- * Change subscription plan
90
- */
91
- changeSubscription(items) {
92
- return this.http.put(`${this.environment.apiV2}/subscriptions/items`, items);
93
- }
94
- listenSubscriptions() {
95
- this.sseService.on(`serviceSubscriptions`)
96
- .pipe(map((event) => {
97
- // @TODO for some reason mercure return object when there is only one item
98
- if (event['items'] instanceof Object) {
99
- event['items'] = Object.values(event['items']);
100
- }
101
- return plainToClass(ServiceSubscription, event);
102
- }))
103
- .subscribe((subscription) => {
104
- this._serviceSubscription = subscription;
105
- this.serviceSubscriptionSubject.next(this._serviceSubscription);
106
- // @TODO vik remove timeout when user api moved to api platform
107
- setTimeout(() => {
108
- this.eventDispatcherService.dispatch(new AppEvent(AppEventTypeEnum.SERVICE_SUBSCRIPTION_UPDATED, null));
109
- this.toastService.success('Subscription successfully updated');
110
- }, 2000);
111
- });
112
- }
113
- /**
114
- * Stripe stores actual links to payment invoices for 30 days. After that, we need to request an actual link
115
- */
116
- getPaymentInvoiceUrl(payment) {
117
- if (!payment.isInvoiceLinkExpired()) {
118
- return of(payment.receipt);
119
- }
120
- return this.http.get(`${this.environment.apiV2}/service-payments/${payment.id}/invoice-url`);
121
- }
122
- }
123
- SubscriptionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SubscriptionService, deps: [{ token: i1.HttpClient }, { token: i2.EventDispatcherService }, { token: i3.SseService }, { token: i4.ToastService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Injectable });
124
- SubscriptionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SubscriptionService, providedIn: 'root' });
125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SubscriptionService, decorators: [{
126
- type: Injectable,
127
- args: [{
128
- providedIn: 'root'
129
- }]
130
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.EventDispatcherService }, { type: i3.SseService }, { type: i4.ToastService }, { type: undefined, decorators: [{
131
- type: Inject,
132
- args: ['environment']
133
- }] }]; } });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dC1jb3JlL3NyYy9saWIvc2VydmljZXMvaHR0cC9zdWJzY3JpcHRpb24vc3Vic2NyaXB0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBYyxFQUFFLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDN0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDJEQUEyRCxDQUFDO0FBQzlGLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUdwRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDekQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7Ozs7OztBQUkzRTs7R0FFRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFPOUIsWUFDVSxJQUFnQixFQUNoQixzQkFBOEMsRUFDOUMsVUFBc0IsRUFDdEIsWUFBMEIsRUFDSCxXQUFnQjtRQUp2QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDOUMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUNILGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBVmpELCtCQUEwQixHQUF1QyxJQUFJLGFBQWEsQ0FBc0IsQ0FBQyxDQUFDLENBQUM7UUFFM0cs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c0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDeEcsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNqRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLE9BQXVCO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsRUFBRTtZQUNuQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUI7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLHFCQUFxQixPQUFPLENBQUMsRUFBRSxjQUFjLENBQXVCLENBQUM7SUFDckgsQ0FBQzs7aUhBNUhVLG1CQUFtQix3SUFZcEIsYUFBYTtxSEFaWixtQkFBbUIsY0FGbEIsTUFBTTs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFhSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtsb2FkU3RyaXBlfSBmcm9tICdAc3RyaXBlL3N0cmlwZS1qcyc7XG5pbXBvcnQge3BsYWluVG9DbGFzc30gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHtTZXJ2aWNlU3Vic2NyaXB0aW9ufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2VydmljZS1zdWJzY3JpcHRpb24vc2VydmljZS1zdWJzY3JpcHRpb24nO1xuaW1wb3J0IHtTZXJ2aWNlUGF5bWVudH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3NlcnZpY2Utc3Vic2NyaXB0aW9uL3NlcnZpY2UtcGF5bWVudCc7XG5pbXBvcnQge0V2ZW50RGlzcGF0Y2hlclNlcnZpY2V9IGZyb20gJy4uLy4uL2V2ZW50L2V2ZW50LWRpc3BhdGNoZXIuc2VydmljZSc7XG5pbXBvcnQge1NlcnZpY2VTdWJzY3JpcHRpb25JdGVtfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvc2VydmljZS1zdWJzY3JpcHRpb24vc2VydmljZS1zdWJzY3JpcHRpb24taXRlbSc7XG5pbXBvcnQge0FwcEV2ZW50fSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZXZlbnQvYXBwLWV2ZW50JztcbmltcG9ydCB7QXBwRXZlbnRUeXBlRW51bX0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2V2ZW50L2FwcC1ldmVudC10eXBlLmVudW0nO1xuaW1wb3J0IHtTc2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9ldmVudC9zc2Uuc2VydmljZSc7XG5pbXBvcnQge1RvYXN0U2VydmljZX0gZnJvbSAnLi4vLi4vdG9hc3QvdG9hc3Quc2VydmljZSc7XG5cbi8qKlxuICogQFRPRE8gQWxleCByZWZhY3RvclxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTdWJzY3JpcHRpb25TZXJ2aWNlIHtcbiAgX3NlcnZpY2VTdWJzY3JpcHRpb246IFNlcnZpY2VTdWJzY3JpcHRpb247XG4gIHNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0OiBSZXBsYXlTdWJqZWN0PFNlcnZpY2VTdWJzY3JpcHRpb24+ID0gbmV3IFJlcGxheVN1YmplY3Q8U2VydmljZVN1YnNjcmlwdGlvbj4oMSk7XG4gIHN0cmlwZTogYW55O1xuICBzZXJ2aWNlUGF5bWVudHNTdWJqZWN0OiBSZXBsYXlTdWJqZWN0PFNlcnZpY2VQYXltZW50W10+ID0gbmV3IFJlcGxheVN1YmplY3Q8U2VydmljZVBheW1lbnRbXT4oMSk7XG4gIF9zZXJ2aWNlUGF5bWVudHM6IFNlcnZpY2VQYXltZW50W107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgZXZlbnREaXNwYXRjaGVyU2VydmljZTogRXZlbnREaXNwYXRjaGVyU2VydmljZSxcbiAgICBwcml2YXRlIHNzZVNlcnZpY2U6IFNzZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxuICApIHtcbiAgICB0aGlzLmxpc3RlblN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIGdldFN1YnNjcmlwdGlvbihmb3JjZTogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxTZXJ2aWNlU3Vic2NyaXB0aW9uPiB7XG4gICAgaWYgKHRoaXMuX3NlcnZpY2VTdWJzY3JpcHRpb24gPT09IHVuZGVmaW5lZCB8fCBmb3JjZSkge1xuICAgICAgdGhpcy5fc2VydmljZVN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuYXBpVjJ9L3N1YnNjcmlwdGlvbnMvbGFzdGApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHBsYWluVG9DbGFzcyhTZXJ2aWNlU3Vic2NyaXB0aW9uLCByZXNwb25zZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChzdWJzY2lwdGlvbjogU2VydmljZVN1YnNjcmlwdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMuX3NlcnZpY2VTdWJzY3JpcHRpb24gPSBzdWJzY2lwdGlvbjtcbiAgICAgICAgICB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0Lm5leHQodGhpcy5fc2VydmljZVN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlZGlyZWN0IHRvIHN0cmlwZSBwYXltZW50IHBhZ2VcbiAgICovXG4gIGFzeW5jIGNoZWNrb3V0UmVkaXJlY3Qoc3Vic2NyaXB0aW9uOiBTZXJ2aWNlU3Vic2NyaXB0aW9uKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzdHJpcGU6IGFueSA9IGF3YWl0IGxvYWRTdHJpcGUodGhpcy5lbnZpcm9ubWVudC5zdHJpcGVQayk7XG5cbiAgICB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9zdHJpcGUvY2hlY2tvdXQtc2Vzc2lvbmAsIHtcbiAgICAgIGl0ZW1zOiBzdWJzY3JpcHRpb24uaXRlbXMsXG4gICAgICBzdWNjZXNzVXJsOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgIGNhbmNlbFVybDogd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoc2Vzc2lvbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vIEBUb2RvIHJlbW92ZSB1c2VyIFRSSUFMIHN0YXR1c1xuICAgICAgICBzdHJpcGUucmVkaXJlY3RUb0NoZWNrb3V0KHtzZXNzaW9uSWQ6IHNlc3Npb259KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlZGlyZWN0IHRvIHN0cmlwZSBiaWxsaW5nIHBhZ2VcbiAgICovXG4gIGJpbGxpbmdSZWRpcmVjdChyZXR1cm5Vcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vc3RyaXBlL2JpbGxpbmctcG9ydGFsLXNlc3Npb25gLCB7XG4gICAgICBwYXJhbXM6IHtyZXR1cm5Vcmx9XG4gICAgfSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShyZXNwb25zZS51cmwpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGF5bWVudHMoKTogT2JzZXJ2YWJsZTxTZXJ2aWNlUGF5bWVudFtdPiB7XG4gICAgaWYgKCF0aGlzLl9zZXJ2aWNlUGF5bWVudHMpIHtcbiAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vc2VydmljZS1wYXltZW50c2ApLnN1YnNjcmliZSgocmVzcG9uc2U6IG9iamVjdFtdKSA9PiB7XG4gICAgICAgIHRoaXMuX3NlcnZpY2VQYXltZW50cyA9IHJlc3BvbnNlWydoeWRyYTptZW1iZXInXS5tYXAoKGl0ZW06IG9iamVjdCkgPT4gcGxhaW5Ub0NsYXNzKFNlcnZpY2VQYXltZW50LCBpdGVtKSk7XG4gICAgICAgIHRoaXMuc2VydmljZVBheW1lbnRzU3ViamVjdC5uZXh0KHRoaXMuX3NlcnZpY2VQYXltZW50cyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlUGF5bWVudHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkaWZmZXJlbmNlIGJldHdlZW4gY3VycmVudCBzdWJzY3JpcHRpb24gYW5kIHNlbGVjdGVkIG5ldyBzdWJzY3JpcHRpb25cbiAgICovXG4gIGdldFByb3JhdGlvbkNvc3QoaXRlbXM6IFNlcnZpY2VTdWJzY3JpcHRpb25JdGVtW10pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9zdWJzY3JpcHRpb25zL3Byb3JhdGlvbi1jb3N0YCwgaXRlbXMpLnBpcGUoXG4gICAgICBtYXAoKHByb3JhdGlvbkNvc3Q6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gcHJvcmF0aW9uQ29zdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2Ugc3Vic2NyaXB0aW9uIHBsYW5cbiAgICovXG4gIGNoYW5nZVN1YnNjcmlwdGlvbihpdGVtczogU2VydmljZVN1YnNjcmlwdGlvbkl0ZW1bXSk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoYCR7dGhpcy5lbnZpcm9ubWVudC5hcGlWMn0vc3Vic2NyaXB0aW9ucy9pdGVtc2AsIGl0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuU3Vic2NyaXB0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnNzZVNlcnZpY2Uub24oYHNlcnZpY2VTdWJzY3JpcHRpb25zYClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKGV2ZW50OiBvYmplY3QpOiBTZXJ2aWNlU3Vic2NyaXB0aW9uID0+IHtcbiAgICAgICAgICAvLyBAVE9ETyBmb3Igc29tZSByZWFzb24gbWVyY3VyZSByZXR1cm4gb2JqZWN0IHdoZW4gdGhlcmUgaXMgb25seSBvbmUgaXRlbVxuICAgICAgICAgIGlmIChldmVudFsnaXRlbXMnXSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICAgICAgZXZlbnRbJ2l0ZW1zJ10gPSBPYmplY3QudmFsdWVzKGV2ZW50WydpdGVtcyddKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzKFNlcnZpY2VTdWJzY3JpcHRpb24sIGV2ZW50KTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHN1YnNjcmlwdGlvbjogU2VydmljZVN1YnNjcmlwdGlvbik6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLl9zZXJ2aWNlU3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnNlcnZpY2VTdWJzY3JpcHRpb25TdWJqZWN0Lm5leHQodGhpcy5fc2VydmljZVN1YnNjcmlwdGlvbik7XG4gICAgICAgIC8vIEBUT0RPIHZpayByZW1vdmUgdGltZW91dCB3aGVuIHVzZXIgYXBpIG1vdmVkIHRvIGFwaSBwbGF0Zm9ybVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclNlcnZpY2UuZGlzcGF0Y2gobmV3IEFwcEV2ZW50KEFwcEV2ZW50VHlwZUVudW0uU0VSVklDRV9TVUJTQ1JJUFRJT05fVVBEQVRFRCwgbnVsbCkpO1xuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MoJ1N1YnNjcmlwdGlvbiBzdWNjZXNzZnVsbHkgdXBkYXRlZCcpO1xuICAgICAgICB9LCAyMDAwKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmlwZSBzdG9yZXMgYWN0dWFsIGxpbmtzIHRvIHBheW1lbnQgaW52b2ljZXMgZm9yIDMwIGRheXMuIEFmdGVyIHRoYXQsIHdlIG5lZWQgdG8gcmVxdWVzdCBhbiBhY3R1YWwgbGlua1xuICAgKi9cbiAgZ2V0UGF5bWVudEludm9pY2VVcmwocGF5bWVudDogU2VydmljZVBheW1lbnQpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICghcGF5bWVudC5pc0ludm9pY2VMaW5rRXhwaXJlZCgpKSB7XG4gICAgICByZXR1cm4gb2YocGF5bWVudC5yZWNlaXB0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmVudmlyb25tZW50LmFwaVYyfS9zZXJ2aWNlLXBheW1lbnRzLyR7cGF5bWVudC5pZH0vaW52b2ljZS11cmxgKSBhcyBPYnNlcnZhYmxlPHN0cmluZz47XG4gIH1cbn1cbiJdfQ==
@@ -1,50 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { Observable, ReplaySubject } from 'rxjs';
3
- import { ServiceSubscription } from '../../../models/service-subscription/service-subscription';
4
- import { ServicePayment } from '../../../models/service-subscription/service-payment';
5
- import { EventDispatcherService } from '../../event/event-dispatcher.service';
6
- import { ServiceSubscriptionItem } from '../../../models/service-subscription/service-subscription-item';
7
- import { SseService } from '../../event/sse.service';
8
- import { ToastService } from '../../toast/toast.service';
9
- import * as i0 from "@angular/core";
10
- /**
11
- * @TODO Alex refactor
12
- */
13
- export declare class SubscriptionService {
14
- private http;
15
- private eventDispatcherService;
16
- private sseService;
17
- private toastService;
18
- private environment;
19
- _serviceSubscription: ServiceSubscription;
20
- serviceSubscriptionSubject: ReplaySubject<ServiceSubscription>;
21
- stripe: any;
22
- servicePaymentsSubject: ReplaySubject<ServicePayment[]>;
23
- _servicePayments: ServicePayment[];
24
- constructor(http: HttpClient, eventDispatcherService: EventDispatcherService, sseService: SseService, toastService: ToastService, environment: any);
25
- getSubscription(force?: boolean): Observable<ServiceSubscription>;
26
- /**
27
- * redirect to stripe payment page
28
- */
29
- checkoutRedirect(subscription: ServiceSubscription): Promise<any>;
30
- /**
31
- * redirect to stripe billing page
32
- */
33
- billingRedirect(returnUrl: string): void;
34
- getPayments(): Observable<ServicePayment[]>;
35
- /**
36
- * Get difference between current subscription and selected new subscription
37
- */
38
- getProrationCost(items: ServiceSubscriptionItem[]): Observable<number>;
39
- /**
40
- * Change subscription plan
41
- */
42
- changeSubscription(items: ServiceSubscriptionItem[]): Observable<object>;
43
- private listenSubscriptions;
44
- /**
45
- * Stripe stores actual links to payment invoices for 30 days. After that, we need to request an actual link
46
- */
47
- getPaymentInvoiceUrl(payment: ServicePayment): Observable<string>;
48
- static ɵfac: i0.ɵɵFactoryDeclaration<SubscriptionService, never>;
49
- static ɵprov: i0.ɵɵInjectableDeclaration<SubscriptionService>;
50
- }