@doolehealth/service-lib 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/services/auth/firebase-auth.service.mjs +155 -0
- package/esm2022/lib/services/auth/firebase-profile.model.mjs +7 -0
- package/esm2022/lib/services/date.service.mjs +8 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/doolehealth-service-lib.mjs +162 -4
- package/fesm2022/doolehealth-service-lib.mjs.map +1 -1
- package/lib/services/auth/firebase-auth.service.d.ts +31 -0
- package/lib/services/auth/firebase-profile.model.d.ts +11 -0
- package/lib/services/date.service.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
|
|
2
|
+
import { Subject, from, of } from 'rxjs';
|
|
3
|
+
import { FirebaseProfileModel } from './firebase-profile.model';
|
|
4
|
+
import { filter, map } from 'rxjs/operators';
|
|
5
|
+
import firebase from "firebase/compat/app";
|
|
6
|
+
//import { cfaSignIn, cfaSignOut } from 'capacitor-firebase-auth';
|
|
7
|
+
import { isPlatformBrowser } from '@angular/common';
|
|
8
|
+
import { DataStore } from '../../util/data-store';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/fire/compat/auth";
|
|
11
|
+
import * as i2 from "@ionic/angular";
|
|
12
|
+
export class FirebaseAuthService {
|
|
13
|
+
constructor(angularFire, platform, platformId) {
|
|
14
|
+
this.angularFire = angularFire;
|
|
15
|
+
this.platform = platform;
|
|
16
|
+
this.platformId = platformId;
|
|
17
|
+
this.redirectResult = new Subject();
|
|
18
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
19
|
+
this.angularFire.onAuthStateChanged((user) => {
|
|
20
|
+
if (user) {
|
|
21
|
+
// User is signed in.
|
|
22
|
+
this.currentUser = user;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// No user is signed in.
|
|
26
|
+
this.currentUser = null;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
if (!this.platform.is('capacitor')) {
|
|
30
|
+
// when using signInWithRedirect, this listens for the redirect results
|
|
31
|
+
this.angularFire.getRedirectResult()
|
|
32
|
+
.then((result) => {
|
|
33
|
+
// result.credential.accessToken gives you the Provider Access Token. You can use it to access the Provider API.
|
|
34
|
+
if (result.user) {
|
|
35
|
+
this.userProviderAdditionalInfo = result.additionalUserInfo.profile;
|
|
36
|
+
this.redirectResult.next(result);
|
|
37
|
+
}
|
|
38
|
+
}, (error) => {
|
|
39
|
+
this.redirectResult.next({ error: error.code });
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
getRedirectResult() {
|
|
45
|
+
return this.redirectResult.asObservable();
|
|
46
|
+
}
|
|
47
|
+
getPhotoURL(signInProviderId, photoURL) {
|
|
48
|
+
// Default imgs are too small and our app needs a bigger image
|
|
49
|
+
switch (signInProviderId) {
|
|
50
|
+
case 'facebook.com':
|
|
51
|
+
return photoURL + '?height=400';
|
|
52
|
+
case 'password':
|
|
53
|
+
return 'https://s3-us-west-2.amazonaws.com/ionicthemes/otros/avatar-placeholder.png';
|
|
54
|
+
case 'twitter.com':
|
|
55
|
+
return photoURL.replace('_normal', '_400x400');
|
|
56
|
+
case 'google.com':
|
|
57
|
+
return photoURL.split('=')[0];
|
|
58
|
+
default:
|
|
59
|
+
return photoURL;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
signOut() {
|
|
63
|
+
if (this.platform.is('capacitor')) {
|
|
64
|
+
//return cfaSignOut();
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
return from(this.angularFire.signOut());
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
signInWithEmail(email, password) {
|
|
72
|
+
return this.angularFire.signInWithEmailAndPassword(email, password);
|
|
73
|
+
}
|
|
74
|
+
signUpWithEmail(email, password) {
|
|
75
|
+
return this.angularFire.createUserWithEmailAndPassword(email, password);
|
|
76
|
+
}
|
|
77
|
+
socialSignIn(providerName, scopes) {
|
|
78
|
+
if (this.platform.is('capacitor')) {
|
|
79
|
+
//return cfaSignIn(providerName);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const provider = new firebase.auth.OAuthProvider(providerName);
|
|
83
|
+
//console.log("provider. ", provider);
|
|
84
|
+
if (scopes) {
|
|
85
|
+
scopes.forEach(scope => {
|
|
86
|
+
provider.addScope(scope);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
if (this.platform.is('desktop')) {
|
|
90
|
+
return from(this.angularFire.signInWithPopup(provider));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// web but not desktop, for example mobile PWA
|
|
94
|
+
return from(this.angularFire.signInWithRedirect(provider));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
signInWithGoogle() {
|
|
100
|
+
const provider = new firebase.auth.GoogleAuthProvider();
|
|
101
|
+
//console.log("provider: ", provider);
|
|
102
|
+
const scopes = ['profile', 'email'];
|
|
103
|
+
return this.socialSignIn(provider.providerId, scopes);
|
|
104
|
+
}
|
|
105
|
+
signInWithTwitter() {
|
|
106
|
+
const provider = new firebase.auth.TwitterAuthProvider();
|
|
107
|
+
return this.socialSignIn(provider.providerId);
|
|
108
|
+
}
|
|
109
|
+
getProfileDataSource() {
|
|
110
|
+
// we need to do this differentiation because there is a bug in
|
|
111
|
+
// platform capacitor ios when executing this.angularFire.user
|
|
112
|
+
if (this.platform.is('capacitor')) {
|
|
113
|
+
return of(this.setUserModelForProfile());
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
return this.angularFire.user
|
|
117
|
+
.pipe(filter((user) => user != null), map((user) => {
|
|
118
|
+
return this.setUserModelForProfile();
|
|
119
|
+
}));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
setUserModelForProfile() {
|
|
123
|
+
const userModel = new FirebaseProfileModel();
|
|
124
|
+
const provierData = this.currentUser.providerData[0];
|
|
125
|
+
const userData = this.userProviderAdditionalInfo ? this.userProviderAdditionalInfo : provierData;
|
|
126
|
+
userModel.image = this.getPhotoURL(provierData.providerId, provierData.photoURL);
|
|
127
|
+
userModel.name = userData.name || userData.displayName || 'What\'s your name?';
|
|
128
|
+
userModel.role = 'How would you describe yourself?';
|
|
129
|
+
userModel.description = userData.description || 'Anything else you would like to share with the world?';
|
|
130
|
+
userModel.phoneNumber = userData.phoneNumber || 'Is there a number where I can reach you?';
|
|
131
|
+
userModel.email = userData.email || 'Where can I send you emails?';
|
|
132
|
+
userModel.provider = (provierData.providerId !== 'password') ? provierData.providerId : 'Credentials';
|
|
133
|
+
return userModel;
|
|
134
|
+
}
|
|
135
|
+
getProfileStore(dataSource) {
|
|
136
|
+
// Initialize the model specifying that it is a shell model
|
|
137
|
+
const shellModel = new FirebaseProfileModel();
|
|
138
|
+
this.profileDataStore = new DataStore(shellModel);
|
|
139
|
+
// Trigger the loading mechanism (with shell) in the dataStore
|
|
140
|
+
this.profileDataStore.load(dataSource);
|
|
141
|
+
return this.profileDataStore;
|
|
142
|
+
}
|
|
143
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FirebaseAuthService, deps: [{ token: i1.AngularFireAuth }, { token: i2.Platform }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
144
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FirebaseAuthService, providedIn: 'root' }); }
|
|
145
|
+
}
|
|
146
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FirebaseAuthService, decorators: [{
|
|
147
|
+
type: Injectable,
|
|
148
|
+
args: [{
|
|
149
|
+
providedIn: 'root'
|
|
150
|
+
}]
|
|
151
|
+
}], ctorParameters: () => [{ type: i1.AngularFireAuth }, { type: i2.Platform }, { type: undefined, decorators: [{
|
|
152
|
+
type: Inject,
|
|
153
|
+
args: [PLATFORM_ID]
|
|
154
|
+
}] }] });
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2UtYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2VydmljZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2ZpcmViYXNlLWF1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEUsT0FBTyxFQUFjLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxRQUFRLE1BQU0scUJBQXFCLENBQUM7QUFDM0Msa0VBQWtFO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUtsRCxNQUFNLE9BQU8sbUJBQW1CO0lBUTlCLFlBQ1MsV0FBNEIsRUFDNUIsUUFBa0IsRUFDSSxVQUFrQjtRQUZ4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNJLGVBQVUsR0FBVixVQUFVLENBQVE7UUFOakQsbUJBQWMsR0FBaUIsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQVFoRCxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDVCxxQkFBcUI7b0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcs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SUFDbkIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxVQUE0QztRQUNqRSwyREFBMkQ7UUFDM0QsTUFBTSxVQUFVLEdBQXlCLElBQUksb0JBQW9CLEVBQUUsQ0FBQztRQUNwRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsOERBQThEO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQzsrR0F2SlUsbUJBQW1CLHlFQVdwQixXQUFXO21IQVhWLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFZSSxNQUFNOzJCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyRmlyZUF1dGggfSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdC9hdXRoJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIGZyb20sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaXJlYmFzZVByb2ZpbGVNb2RlbCB9IGZyb20gJy4vZmlyZWJhc2UtcHJvZmlsZS5tb2RlbCc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgZmlyZWJhc2UgZnJvbSBcImZpcmViYXNlL2NvbXBhdC9hcHBcIjtcbi8vaW1wb3J0IHsgY2ZhU2lnbkluLCBjZmFTaWduT3V0IH0gZnJvbSAnY2FwYWNpdG9yLWZpcmViYXNlLWF1dGgnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXNlciwgQXV0aCB9IGZyb20gJ2ZpcmViYXNlL2F1dGgnO1xuaW1wb3J0IHsgRGF0YVN0b3JlIH0gZnJvbSAnLi4vLi4vdXRpbC9kYXRhLXN0b3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmlyZWJhc2VBdXRoU2VydmljZSB7XG5cbiAgY3VycmVudFVzZXI6IFVzZXI7XG4gIHVzZXJQcm92aWRlckFkZGl0aW9uYWxJbmZvOiBhbnk7XG4gIHByb2ZpbGVEYXRhU3RvcmU6IERhdGFTdG9yZTxGaXJlYmFzZVByb2ZpbGVNb2RlbD47XG4gIHJlZGlyZWN0UmVzdWx0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYW5ndWxhckZpcmU6IEFuZ3VsYXJGaXJlQXV0aCxcbiAgICBwdWJsaWMgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogb2JqZWN0XG4gICkge1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJGaXJlLm9uQXV0aFN0YXRlQ2hhbmdlZCgodXNlcikgPT4ge1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIC8vIFVzZXIgaXMgc2lnbmVkIGluLlxuICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSB1c2VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIHVzZXIgaXMgc2lnbmVkIGluLlxuICAgICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKCF0aGlzLnBsYXRmb3JtLmlzKCdjYXBhY2l0b3InKSkge1xuICAgICAgICAvLyB3aGVuIHVzaW5nIHNpZ25JbldpdGhSZWRpcmVjdCwgdGhpcyBsaXN0ZW5zIGZvciB0aGUgcmVkaXJlY3QgcmVzdWx0c1xuICAgICAgICB0aGlzLmFuZ3VsYXJGaXJlLmdldFJlZGlyZWN0UmVzdWx0KClcbiAgICAgICAgLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3VsdC5jcmVkZW50aWFsLmFjY2Vzc1Rva2VuIGdpdmVzIHlvdSB0aGUgUHJvdmlkZXIgQWNjZXNzIFRva2VuLiBZb3UgY2FuIHVzZSBpdCB0byBhY2Nlc3MgdGhlIFByb3ZpZGVyIEFQSS5cbiAgICAgICAgICBpZiAocmVzdWx0LnVzZXIpIHtcbiAgICAgICAgICAgIHRoaXMudXNlclByb3ZpZGVyQWRkaXRpb25hbEluZm8gPSByZXN1bHQuYWRkaXRpb25hbFVzZXJJbmZvLnByb2ZpbGU7XG4gICAgICAgICAgICB0aGlzLnJlZGlyZWN0UmVzdWx0Lm5leHQocmVzdWx0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMucmVkaXJlY3RSZXN1bHQubmV4dCh7ZXJyb3I6IGVycm9yLmNvZGV9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVkaXJlY3RSZXN1bHQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5yZWRpcmVjdFJlc3VsdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldFBob3RvVVJMKHNpZ25JblByb3ZpZGVySWQ6IHN0cmluZywgcGhvdG9VUkw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gRGVmYXVsdCBpbWdzIGFyZSB0b28gc21hbGwgYW5kIG91ciBhcHAgbmVlZHMgYSBiaWdnZXIgaW1hZ2VcbiAgICBzd2l0Y2ggKHNpZ25JblByb3ZpZGVySWQpIHtcbiAgICAgIGNhc2UgJ2ZhY2Vib29rLmNvbSc6XG4gICAgICAgIHJldHVybiBwaG90b1VSTCArICc/aGVpZ2h0PTQwMCc7XG4gICAgICBjYXNlICdwYXNzd29yZCc6XG4gICAgICAgIHJldHVybiAnaHR0cHM6Ly9zMy11cy13ZXN0LTIuYW1hem9uYXdzLmNvbS9pb25pY3RoZW1lcy9vdHJvcy9hdmF0YXItcGxhY2Vob2xkZXIucG5nJztcbiAgICAgIGNhc2UgJ3R3aXR0ZXIuY29tJzpcbiAgICAgICAgcmV0dXJuIHBob3RvVVJMLnJlcGxhY2UoJ19ub3JtYWwnLCAnXzQwMHg0MDAnKTtcbiAgICAgIGNhc2UgJ2dvb2dsZS5jb20nOlxuICAgICAgICByZXR1cm4gcGhvdG9VUkwuc3BsaXQoJz0nKVswXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBwaG90b1VSTDtcbiAgICB9XG4gIH1cblxuICBzaWduT3V0KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXMoJ2NhcGFjaXRvcicpKSB7XG4gICAgICAvL3JldHVybiBjZmFTaWduT3V0KCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZyb20odGhpcy5hbmd1bGFyRmlyZS5zaWduT3V0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHNpZ25JbldpdGhFbWFpbChlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxmaXJlYmFzZS5hdXRoLlVzZXJDcmVkZW50aWFsPiB7XG4gICAgcmV0dXJuIHRoaXMuYW5ndWxhckZpcmUuc2lnbkluV2l0aEVtYWlsQW5kUGFzc3dvcmQoZW1haWwsIHBhc3N3b3JkKTtcbiAgfVxuXG4gIHNpZ25VcFdpdGhFbWFpbChlbWFpbDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxmaXJlYmFzZS5hdXRoLlVzZXJDcmVkZW50aWFsPiB7XG4gICAgcmV0dXJuIHRoaXMuYW5ndWxhckZpcmUuY3JlYXRlVXNlcldpdGhFbWFpbEFuZFBhc3N3b3JkKGVtYWlsLCBwYXNzd29yZCk7XG4gIH1cblxuICBzb2NpYWxTaWduSW4ocHJvdmlkZXJOYW1lOiBzdHJpbmcsIHNjb3Blcz86IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdjYXBhY2l0b3InKSkge1xuICAgICAgLy9yZXR1cm4gY2ZhU2lnbkluKHByb3ZpZGVyTmFtZSk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgZmlyZWJhc2UuYXV0aC5PQXV0aFByb3ZpZGVyKHByb3ZpZGVyTmFtZSk7XG4gICAgICAvL2NvbnNvbGUubG9nKFwicHJvdmlkZXIuIFwiLCBwcm92aWRlcik7XG4gICAgICBpZiAoc2NvcGVzKSB7XG4gICAgICAgIHNjb3Blcy5mb3JFYWNoKHNjb3BlID0+IHtcbiAgICAgICAgICBwcm92aWRlci5hZGRTY29wZShzY29wZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG5cbiAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdkZXNrdG9wJykpIHtcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5hbmd1bGFyRmlyZS5zaWduSW5XaXRoUG9wdXAocHJvdmlkZXIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdlYiBidXQgbm90IGRlc2t0b3AsIGZvciBleGFtcGxlIG1vYmlsZSBQV0FcbiAgICAgICAgcmV0dXJuIGZyb20odGhpcy5hbmd1bGFyRmlyZS5zaWduSW5XaXRoUmVkaXJlY3QocHJvdmlkZXIpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzaWduSW5XaXRoR29vZ2xlKCkge1xuICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IGZpcmViYXNlLmF1dGguR29vZ2xlQXV0aFByb3ZpZGVyKCk7XG4gICAgLy9jb25zb2xlLmxvZyhcInByb3ZpZGVyOiBcIiwgcHJvdmlkZXIpO1xuICAgIGNvbnN0IHNjb3BlcyA9IFsncHJvZmlsZScsICdlbWFpbCddO1xuICAgIHJldHVybiB0aGlzLnNvY2lhbFNpZ25Jbihwcm92aWRlci5wcm92aWRlcklkLCBzY29wZXMpO1xuICB9XG5cbiAgc2lnbkluV2l0aFR3aXR0ZXIoKSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgZmlyZWJhc2UuYXV0aC5Ud2l0dGVyQXV0aFByb3ZpZGVyKCk7XG4gICAgcmV0dXJuIHRoaXMuc29jaWFsU2lnbkluKHByb3ZpZGVyLnByb3ZpZGVySWQpO1xuICB9XG5cbiAgcHVibGljIGdldFByb2ZpbGVEYXRhU291cmNlKCk6IE9ic2VydmFibGU8RmlyZWJhc2VQcm9maWxlTW9kZWw+IHtcbiAgICAvLyB3ZSBuZWVkIHRvIGRvIHRoaXMgZGlmZmVyZW50aWF0aW9uIGJlY2F1c2UgdGhlcmUgaXMgYSBidWcgaW5cbiAgICAvLyBwbGF0Zm9ybSBjYXBhY2l0b3IgaW9zIHdoZW4gZXhlY3V0aW5nIHRoaXMuYW5ndWxhckZpcmUudXNlclxuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdjYXBhY2l0b3InKSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuc2V0VXNlck1vZGVsRm9yUHJvZmlsZSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYW5ndWxhckZpcmUudXNlclxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigodXNlcjogVXNlcikgPT4gdXNlciAhPSBudWxsKSxcbiAgICAgICAgbWFwKCh1c2VyOiBVc2VyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2V0VXNlck1vZGVsRm9yUHJvZmlsZSgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJNb2RlbEZvclByb2ZpbGUoKTogRmlyZWJhc2VQcm9maWxlTW9kZWwge1xuICAgIGNvbnN0IHVzZXJNb2RlbCA9IG5ldyBGaXJlYmFzZVByb2ZpbGVNb2RlbCgpO1xuICAgIGNvbnN0IHByb3ZpZXJEYXRhID0gdGhpcy5jdXJyZW50VXNlci5wcm92aWRlckRhdGFbMF07XG4gICAgY29uc3QgdXNlckRhdGEgPSB0aGlzLnVzZXJQcm92aWRlckFkZGl0aW9uYWxJbmZvID8gdGhpcy51c2VyUHJvdmlkZXJBZGRpdGlvbmFsSW5mbyA6IHByb3ZpZXJEYXRhO1xuICAgIHVzZXJNb2RlbC5pbWFnZSA9IHRoaXMuZ2V0UGhvdG9VUkwocHJvdmllckRhdGEucHJvdmlkZXJJZCwgcHJvdmllckRhdGEucGhvdG9VUkwpO1xuICAgIHVzZXJNb2RlbC5uYW1lID0gdXNlckRhdGEubmFtZSB8fCB1c2VyRGF0YS5kaXNwbGF5TmFtZSB8fCAnV2hhdFxcJ3MgeW91ciBuYW1lPyc7XG4gICAgdXNlck1vZGVsLnJvbGUgPSAnSG93IHdvdWxkIHlvdSBkZXNjcmliZSB5b3Vyc2VsZj8nO1xuICAgIHVzZXJNb2RlbC5kZXNjcmlwdGlvbiA9IHVzZXJEYXRhLmRlc2NyaXB0aW9uIHx8ICdBbnl0aGluZyBlbHNlIHlvdSB3b3VsZCBsaWtlIHRvIHNoYXJlIHdpdGggdGhlIHdvcmxkPyc7XG4gICAgdXNlck1vZGVsLnBob25lTnVtYmVyID0gdXNlckRhdGEucGhvbmVOdW1iZXIgfHwgJ0lzIHRoZXJlIGEgbnVtYmVyIHdoZXJlIEkgY2FuIHJlYWNoIHlvdT8nO1xuICAgIHVzZXJNb2RlbC5lbWFpbCA9IHVzZXJEYXRhLmVtYWlsIHx8ICdXaGVyZSBjYW4gSSBzZW5kIHlvdSBlbWFpbHM/JztcbiAgICB1c2VyTW9kZWwucHJvdmlkZXIgPSAocHJvdmllckRhdGEucHJvdmlkZXJJZCAhPT0gJ3Bhc3N3b3JkJykgPyBwcm92aWVyRGF0YS5wcm92aWRlcklkIDogJ0NyZWRlbnRpYWxzJztcblxuICAgIHJldHVybiB1c2VyTW9kZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0UHJvZmlsZVN0b3JlKGRhdGFTb3VyY2U6IE9ic2VydmFibGU8RmlyZWJhc2VQcm9maWxlTW9kZWw+KTogRGF0YVN0b3JlPEZpcmViYXNlUHJvZmlsZU1vZGVsPiB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgbW9kZWwgc3BlY2lmeWluZyB0aGF0IGl0IGlzIGEgc2hlbGwgbW9kZWxcbiAgICBjb25zdCBzaGVsbE1vZGVsOiBGaXJlYmFzZVByb2ZpbGVNb2RlbCA9IG5ldyBGaXJlYmFzZVByb2ZpbGVNb2RlbCgpO1xuICAgIHRoaXMucHJvZmlsZURhdGFTdG9yZSA9IG5ldyBEYXRhU3RvcmUoc2hlbGxNb2RlbCk7XG4gICAgLy8gVHJpZ2dlciB0aGUgbG9hZGluZyBtZWNoYW5pc20gKHdpdGggc2hlbGwpIGluIHRoZSBkYXRhU3RvcmVcbiAgICB0aGlzLnByb2ZpbGVEYXRhU3RvcmUubG9hZChkYXRhU291cmNlKTtcbiAgICByZXR1cm4gdGhpcy5wcm9maWxlRGF0YVN0b3JlO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ShellModel } from '../../util/data-store';
|
|
2
|
+
export class FirebaseProfileModel extends ShellModel {
|
|
3
|
+
constructor() {
|
|
4
|
+
super();
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2UtcHJvZmlsZS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NlcnZpY2UtbGliL3NyYy9saWIvc2VydmljZXMvYXV0aC9maXJlYmFzZS1wcm9maWxlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsVUFBVTtJQVNsRDtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2hlbGxNb2RlbCB9IGZyb20gJy4uLy4uL3V0aWwvZGF0YS1zdG9yZSc7XG5cbmV4cG9ydCBjbGFzcyBGaXJlYmFzZVByb2ZpbGVNb2RlbCBleHRlbmRzIFNoZWxsTW9kZWwge1xuICBpbWFnZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHJvbGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgZW1haWw6IHN0cmluZztcbiAgcHJvdmlkZXI6IHN0cmluZztcbiAgcGhvbmVOdW1iZXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG59XG4iXX0=
|
|
@@ -401,6 +401,13 @@ export class DateService {
|
|
|
401
401
|
let date = localISOTime; // this.dateService.selectedDateFormat(localISOTime);
|
|
402
402
|
return date;
|
|
403
403
|
}
|
|
404
|
+
getTomorrow() {
|
|
405
|
+
const tzoffset = (new Date()).getTimezoneOffset() * 60000; // offset in milliseconds
|
|
406
|
+
const tomorrow = new Date(Date.now() - tzoffset + 24 * 60 * 60 * 1000); // adding 24 hours in milliseconds
|
|
407
|
+
const localISOTime = tomorrow.toISOString().slice(0, -1);
|
|
408
|
+
let date = localISOTime; // this.dateService.selectedDateFormat(localISOTime);
|
|
409
|
+
return date;
|
|
410
|
+
}
|
|
404
411
|
getCurrentTime() {
|
|
405
412
|
const tzoffset = (new Date()).getTimezoneOffset() * 60000; // offset in milliseconds
|
|
406
413
|
const localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0, -1);
|
|
@@ -416,4 +423,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImpo
|
|
|
416
423
|
providedIn: 'root',
|
|
417
424
|
}]
|
|
418
425
|
}], ctorParameters: () => [{ type: i1.DatePipe }, { type: i2.TranslateService }] });
|
|
419
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2VydmljZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9kYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7O0FBSzVCLE1BQU0sT0FBTyxXQUFXO0lBSXRCLFlBQW9CLFFBQWtCLEVBQVMsU0FBMkI7UUFBdEQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFTLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ3hFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFHTSxhQUFhO1FBQ2xCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUN6QixJQUFHLElBQUksS0FBSyxJQUFJO1lBQ2QsTUFBTSxHQUFHLFdBQVcsQ0FBQTtRQUN0QixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFHLElBQUksS0FBSyxJQUFJO1lBQ2QsTUFBTSxHQUFHLFVBQVUsQ0FBQTtRQUNyQixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMxQixJQUFHLElBQUksS0FB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QUFNLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLHlCQUF5QjtRQUNwRixNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFJLElBQUksR0FBRyxZQUFZLENBQUEsQ0FBQSxxREFBcUQ7UUFDNUUsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMseUJBQXlCO1FBQ3BGLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQSxDQUFBLHFEQUFxRDtRQUM1RSxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNwRSxDQUFDOytHQXJnQlUsV0FBVzttSEFBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlU2VydmljZSB7XG4gIGxvY2FsZTpzdHJpbmc7XG4gIGxhbmd1YWdlOnN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSwgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbGUoKTtcbiAgfVxuXG5cbiAgcHVibGljIGdldERhdGVGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnREQvTU0vWVkgJztcbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTS9ERC9ZWSAnXG4gICAgcmV0dXJuIGZvcm1hdFxuICB9XG5cbiAgcHVibGljIGdldERhdGVGb3JtYXQyKCl7XG4gICAgbGV0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2RkL01NL1lZJztcbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTS9kZC9ZWSdcbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF0ZUZvcm1hdDMoKXtcbiAgICBsZXQgbGFuZyA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnREQvTU0vWVlZWSc7XG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vREQvWVlZWSdcbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9uZ0Zvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGRkZCwgTU1NIHl5eXknO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NLCBkZGQgeXl5eSc7XG5cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRNb250aFZpZXdEYXlIZWFkZXIoZGF0ZTpEYXRlKXtcbiAgICBsZXQgbGFuZyA9IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBkYXlzID0gW1wiRFwiLFwiTFwiLCBcIk1cIiwgXCJYXCIsIFwiSlwiLCBcIlZcIiwgXCJTXCJdXG4gICAgaWYobGFuZyA9PT0gJ2NhJyl7XG4gICAgICBkYXlzID0gW1wiREdcIixcIkRMXCIsIFwiRFRcIiwgXCJEQ1wiLCBcIkRKXCIsIFwiRFZcIiwgXCJEU1wiXVxuICAgIH1lbHNlIGlmKGxhbmcgPT09ICdlbicpXG4gICAgICBkYXlzID0gIFtcIlN1blwiLFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCJdXG5cbiAgICBsZXQgbnVtID0gZGF0ZS5nZXREYXkoKVxuICAgIHJldHVybiBkYXlzW251bV1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRTZWxlY3RlZERhdGUoZGF0ZSl7XG4gICAgaWYoZGF0ZSl7XG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIHRoaXMuZ2V0Zm9ybWF0U2VsZWN0ZWREYXRlKCkpO1xuICAgICAgY29uc29sZS5sb2coXCJzZWxlY3RlZCBEYXlcIiwgZGF5KTtcbiAgICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcHVibGljIGdldGZvcm1hdFNlbGVjdGVkRGF0ZSgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnRUVFRSwgZCBNTU1NJ1xuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NTU0gZCwgRUVFRSc7XG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2NhbGUoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgbG9jYWxlID0gJ2VzLUVTJ1xuICAgIGlmKGxhbmcgPT09ICdjYScpe1xuICAgICAgbG9jYWxlID0gJ2NhLUVTJ1xuICAgIH1lbHNlIGlmKGxhbmcgPT09ICdlbicpXG4gICAgICBsb2NhbGUgPSAnZW4tVVMnO1xuXG4gICAgcmV0dXJuIGxvY2FsZTtcblxuICB9XG5cbiAgcHVibGljIGdldFN0YXJ0aW5nRGF5V2Vlaygpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBkYXkgPSAnMSdcbiAgICBpZihsYW5nID09ICdlbicpXG4gICAgICBkYXkgPSAnMCdcblxuICAgIHJldHVybiBkYXk7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRTdGFydGluZ0RheU1vbnRoKCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGRheSA9IDFcbiAgICBpZihsYW5nID09ICdlbicpXG4gICAgICBkYXkgPSAwXG5cbiAgICByZXR1cm4gZGF5O1xuICB9XG5cbiAgJ2RkL01NL3knXG5cbiAgcHVibGljIGRkTU15KCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkZC9NTS95J1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vZGQveSc7XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgcHVibGljIGdldFNob3J0RGF0ZUZvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnREQvTU0vWVknXG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTS9ERC9ZWSc7XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgcHVibGljIGRkTU15eXl5Rm9ybWF0KGRhdGUpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGQvTU0veXl5eSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTS9kZC95eXl5JztcblxuICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgZGRNTXlGb3JtYXQoZGF0ZSl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkZCBNTU0geSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU0gZGQgeSc7XG5cbiAgICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyBkZE1NTXl5eWZvcm1hdChkYXRlKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2RkIE1NTSB5eXknO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJylcbiAgICAgIGZvcm1hdCA9ICdNTU0gZGQgeXl5JztcblxuICAgICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpXG5cbiAgfVxuXG4gIHB1YmxpYyBNTU1NeXl5eUZvcm1hdChkYXRlKXtcblxuICAgIGxldCBmb3JtYXQgPSdNTU1NIHl5eXknO1xuXG4gICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXlNb250aFllYXJGb3JtYXQoZGF0ZSl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdFRUVFLCBkIE1NTU0gWVlZWSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU1NLCBkIEVFRUUgWVlZWSc7XG5cbiAgICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RlZERhdGVGb3JtYXQoZGF0ZTpzdHJpbmcpe1xuXG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdFRUVFLCBkIE1NTU0nXG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU1NIGQsIFlZWVknO1xuXG4gICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG5cblxuICBkZE1NeXl5eUhIbW0oZGF0ZSl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkZC9NTS95eXl5IEhIOm1tJ1xuICAgIGlmKGxhbmcgPT09ICdlbicpXG4gICAgICBmb3JtYXQgPSAgJ01NL2RkL3l5eXkgaGg6bW0gYSc7XG5cbiAgICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKVxuICB9XG5cblxuICBwdWJsaWMgZm9ybWF0RGF0ZUxvbmdGb3JtYXQoZGF0ZT8pe1xuXG4gICAgaWYoZGF0ZSl7XG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIHRoaXMuZ2V0TG9uZ0RhdGVGb3JtYXQoKSk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuXG4gIH1cblxuICBwdWJsaWMgeXl5eU1NZGRISG1tKGRhdGU/KXtcblxuICAgIGlmKGRhdGUpe1xuICAgICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCB0aGlzLnl5eXlNTWRkSEhtbUZvcm1hdCgpKTtcbiAgICAgIGNvbnNvbGUubG9nKFwic2VsZWN0ZWQgRGF5XCIsIGRheSk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgeXl5eU1NZGRISG1tRm9ybWF0KCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICd5eXl5LWRkLU1NIEhIOm1tJztcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ3l5eXktTU0tZGQgSEg6bW0gYSc7XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuXG4gIH1cblxuXG4gIHB1YmxpYyBnZXRMb25nRGF0ZUZvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAgJ0VFRUUsIGQgTU1NTSB5eXl5LCBISDptbSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU1NLCBkIHl5eXksIGhoOm1tIGEnO1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcblxuICB9XG4gIHB1YmxpYyBnZXREYXRldGltZUNvbnRyb2xGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0QgTU1NIFlZWVkgSEg6bW0nXG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU0gRCBZWSBoaDptbSBhJztcblxuICAgICAgcmV0dXJuIGZvcm1hdDtcblxuICB9XG5cbiAgcHVibGljIGdldERheU1vbnRoRm9ybWF0KCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkIE1NTSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU0gZCc7XG5cbiAgICAgIHJldHVybiBmb3JtYXQ7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXREYXlEb3RNb250aEZvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZC4gTU1NJztcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NTS4gZCc7XG5cbiAgICAgIHJldHVybiBmb3JtYXQ7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFdlZWsoZGF0ZTpzdHJpbmcpe1xuXG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdFIGQgTU1NJ1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NIGQsIEUnO1xuXG4gICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFdlZWtGdWxsRGF5KGRhdGU6c3RyaW5nKXtcblxuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnRUVFIGQgTU1NJ1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NIGQsIEVFRSc7XG5cbiAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdERhdGUoZGF0ZT8pe1xuICAgIGlmKGRhdGUpe1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG5cbiAgICAgIGlmKHRoaXMuaXNUb2RheShkYXRlKSlcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICB0aGlzLmdldFRpbWVGb3JtYXQoKSlcbiAgICAgIGVsc2V7XG4gICAgICAgIGxldCBmb3JtYXQgPSB0aGlzLmdldERhdGVGb3JtYXQyKClcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpXG4gICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuXG4gIGRkTU15eXl5KGRhdGUpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGQtTU0teXl5eSdcbiAgICBpZihsYW5nID09PSAnZW4nKVxuICAgICAgZm9ybWF0ID0gJ01NLWRkLXl5eXknO1xuXG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSlcbiAgfVxuXG4gIGhpZ2hjaGFydHNEYXRlc0Zvcm5tYXQoKXtcblxuICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0ge307XG4gIGlmKGxhbmcgPT0gJ2VuJyl7XG4gICAgICAvLyAlYjogU2hvcnQgbW9udGgsIGxpa2UgJ0phbicsJWUgRGF5IG9mIHRoZSBtb250aCwgMSB0aHJvdWdoIDMxXG4gICAgICBmb3JtYXQgPSB7XG4gICAgICAgIG1pbGxpc2Vjb25kOiAnJUg6JU06JVMuJUwnLFxuICAgICAgICBzZWNvbmQ6ICclbDolTTolUyAlUCcsXG4gICAgICAgIG1pbnV0ZTogJyVsOiVNICVwJyxcbiAgICAgICAgaG91cjogJyVsOiVNICVwJyxcbiAgICAgICAgZGF5OiAnJWIuICVlJyxcbiAgICAgICAgd2VlazogJyViLiAlZScsXG4gICAgICAgIG1vbnRoOiAnJWIgXFwnJXknLFxuICAgICAgICB5ZWFyOiAnJVknXG4gICAgICB9XG4gICAgfWVsc2V7XG4gICAgICBmb3JtYXQgPSB7XG4gICAgICAgIG1pbGxpc2Vjb25kOiAnJUg6JU06JVMuJUwnLFxuICAgICAgICBzZWNvbmQ6ICclSDolTTolUycsXG4gICAgICAgIG1pbnV0ZTogJyVIOiVNJyxcbiAgICAgICAgaG91cjogJyVIOiVNJyxcbiAgICAgICAgZGF5OiAnJWUuICViJyxcbiAgICAgICAgd2VlazogJyVlLiAlYicsXG4gICAgICAgIG1vbnRoOiAnJWIgXFwnJXknLFxuICAgICAgICB5ZWFyOiAnJVknXG4gICAgfVxuICAgIH1cbiAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICB5eXl5TU1kZEZvcm1hdChkYXRlKXtcbiAgICBjb25zb2xlLmxvZyhcIkRBVEUgZGF0ZTogXCIsIGRhdGUpO1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGNvbnNvbGUubG9nKFwiREFURSBsYW5nOiBcIiwgbGFuZyk7XG4gICAgbGV0IGZvcm1hdCA9ICd5eXl5LU1NLWRkJztcblxuICAgIGlmKGxhbmcgPT0gJ2VuJylcbiAgICAgIGZvcm1hdCA9ICd5eXl5LWRkLU1NJztcblxuICAgIGNvbnNvbGUubG9nKFwiREFURSBmb3JtYXQ6IFwiLCBmb3JtYXQpO1xuXG4gICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuXG4gICAgY29uc29sZS5sb2coXCJEQVRFIGRheTogXCIsIGRheSk7XG5cbiAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSlcbiAgfVxuXG4gIHB1YmxpYyB5eXl5TU1kZFRISG1tc3NTU1NaRm9ybWF0KGRhdGU/KXtcbiAgICBjb25zdCBmZWNoYUZvcm1hdGVhZGEgPXRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICd5eXl5LU1NLWRkVEhIOm1tOnNzLlNTU1xcJ1pcXCcnKTtcbiAgICByZXR1cm4gZmVjaGFGb3JtYXRlYWRhO1xuICB9XG4gIGNvbnZlcnQxMnRvMjRmb3JtYXQodGltZSl7XG5cbiAgICBjb25zb2xlLmxvZyhcIlRJTUUgMTJ0bzI0OiBcIix0aW1lKTtcbiAgICB2YXIgaG91cnMgPSBOdW1iZXIodGltZS5tYXRjaCgvXihcXGQrKS8pWzFdKTtcbiAgICB2YXIgbWludXRlcyA9IE51bWJlcih0aW1lLm1hdGNoKC86KFxcZCspLylbMV0pO1xuICAgIHZhciBBTVBNID0gdGltZS5tYXRjaCgvXFxzKC4qKSQvKVsxXTtcbiAgICBpZihBTVBNID09IFwiUE1cIiAmJiBob3VyczwxMikgaG91cnMgPSBob3VycysxMjtcbiAgICBpZihBTVBNID09IFwiQU1cIiAmJiBob3Vycz09MTIpIGhvdXJzID0gaG91cnMtMTI7XG4gICAgdmFyIHNIb3VycyA9IGhvdXJzLnRvU3RyaW5nKCk7XG4gICAgdmFyIHNNaW51dGVzID0gbWludXRlcy50b1N0cmluZygpO1xuICAgIGlmKGhvdXJzPDEwKSBzSG91cnMgPSBcIjBcIiArIHNIb3VycztcbiAgICBpZihtaW51dGVzPDEwKSBzTWludXRlcyA9IFwiMFwiICsgc01pbnV0ZXM7XG5cbiAgICBsZXQgaCA9IHNIb3VycyArIFwiOlwiICsgc01pbnV0ZXM7XG5cbiAgICBjb25zb2xlLmxvZyhcIkhPVVJTOiBcIixoKTtcbiAgICByZXR1cm4gaDtcbiAgfVxuXG4gIGZvcm1hdDI0aCh0aW1lKSB7XG5cbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBpZihsYW5nID09PSAnZW4nKXtcbiAgICAgIC8vIENoZWNrIGNvcnJlY3QgdGltZSBmb3JtYXQgYW5kIHNwbGl0IGludG8gY29tcG9uZW50c1xuICAgIHRpbWUgPSB0aW1lLnRvU3RyaW5nICgpLm1hdGNoICgvXihbMDFdXFxkfDJbMC0zXSkoOikoWzAtNV1cXGQpKDpbMC01XVxcZCk/JC8pIHx8IFt0aW1lXTtcblxuICAgIGlmICh0aW1lLmxlbmd0aCA+IDEpIHsgLy8gSWYgdGltZSBmb3JtYXQgY29ycmVjdFxuICAgICAgdGltZSA9IHRpbWUuc2xpY2UgKDEpOyAgLy8gUmVtb3ZlIGZ1bGwgc3RyaW5nIG1hdGNoIHZhbHVlXG4gICAgICB0aW1lWzVdID0gK3RpbWVbMF0gPCAxMiA/ICcgQU0nIDogJyBQTSc7IC8vIFNldCBBTS9QTVxuICAgICAgdGltZVswXSA9ICt0aW1lWzBdICUgMTIgfHwgMTI7IC8vIEFkanVzdCBob3Vyc1xuICAgIH1cbiAgICByZXR1cm4gdGltZS5qb2luICgnJyk7IC8vIHJldHVybiBhZGp1c3RlZCB0aW1lIG9yIG9yaWdpbmFsIHN0cmluZ1xuICAgIH1cbiAgICByZXR1cm4gdGltZTtcblxuICB9XG5cbiAgaXNBbWVyaWNhbkZvcm1hdCgpe1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZyA9PT0gJ2VuJztcbiAgfVxuXG4gIGdldFRpbWVGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gICdISDptbSdcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gICdoaDptbSBhJztcblxuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBpc1RvZGF5KG1EYXRlOiBEYXRlKXtcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKClcbiAgICBpZihkYXRlLmdldERhdGUoKSA9PT0gbURhdGUuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gbURhdGUuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IG1EYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpIHtcbiAgICBjb25zdCBkYXRlUGlwZTogRGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUodGhpcy5nZXRMb2NhbGUoKSk7XG4gICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBmb3JtYXQpO1xuICB9XG5cbiAgZ2V0Q2FsZW5kYXJEYXkoZXBvY2g6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCFlcG9jaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGxldCB0aW1lU3RyaW5nID0gJ2g6bW0gQSc7XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEudG9kYXknKTtcbiAgICBjb25zdCB5ZXN0ZXJkYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEueWVzdGVyZGF5Jyk7XG4gICAgcmV0dXJuIG1vbWVudChlcG9jaCkuY2FsZW5kYXIobnVsbCwge1xuICAgICAgc2FtZURheTogYFske3RvZGF5fV0gYCArIHRpbWVTdHJpbmcsXG4gICAgICBsYXN0RGF5OiBgWyR7eWVzdGVyZGF5fV0gYCArIHRpbWVTdHJpbmcsXG4gICAgICBsYXN0V2VlayA6ICdERC9NTS9ZWSAnICsgdGltZVN0cmluZyxcbiAgICAgIHNhbWVFbHNlOiAnREQvTU0vWVkgJyArIHRpbWVTdHJpbmcsXG4gICAgICBuZXh0RGF5IDogJ0REL01NL1lZICcgKyB0aW1lU3RyaW5nLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2FsZW5kYXJEYXkyKGVwb2NoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghZXBvY2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgdGltZVN0cmluZyA9IHRoaXMuZ2V0VGltZUZvcm1hdCgpO1xuICAgIGxldCBkYXRlU3RyaW5nID0gdGhpcy5nZXRTaG9ydERhdGVGb3JtYXQoKTtcbiAgICBjb25zdCB0b2RheSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FnZW5kYS50b2RheScpO1xuICAgIGNvbnN0IHllc3RlcmRheSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2FnZW5kYS55ZXN0ZXJkYXknKTtcbiAgICByZXR1cm4gbW9tZW50KGVwb2NoKS5jYWxlbmRhcihudWxsLCB7XG4gICAgICBzYW1lRGF5OiBgWyR7dG9kYXl9XSAgYCAgKyB0aW1lU3RyaW5nLFxuICAgICAgbGFzdERheTogYFske3llc3RlcmRheX1dICBgICsgdGltZVN0cmluZyxcbiAgICAgIHNhbWVFbHNlOiBkYXRlU3RyaW5nICsgJyAnICsgdGltZVN0cmluZyxcbiAgICAgIGxhc3RXZWVrIDogZGF0ZVN0cmluZyArICcgJyArIHRpbWVTdHJpbmcsXG4gICAgICBuZXh0RGF5IDogZGF0ZVN0cmluZyArICcgJyArIHRpbWVTdHJpbmdcbiAgICB9KTtcbiAgfVxuXG5cbiAgZ2V0Q2FsZW5kYXJEYXlUaW1lKGVwb2NoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghZXBvY2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgdGltZVN0cmluZyA9IHRoaXMuZ2V0VGltZUZvcm1hdCgpO1xuICAgIGxldCBkYXRlU3RyaW5nID0gdGhpcy5nZXRMb25nRm9ybWF0KCk7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEudG9kYXknKTtcbiAgICBjb25zdCB5ZXN0ZXJkYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEueWVzdGVyZGF5Jyk7XG4gICAgY29uc3QgdG8gPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEudG8nKTtcblxuICAgIGNvbnN0ICBtID0gbW9tZW50XG4gICAgbS5sb2NhbGUobGFuZylcbiAgICByZXR1cm4gbShlcG9jaCkuY2FsZW5kYXIobnVsbCwge1xuICAgICAgc2FtZURheTogYFske3RvZGF5fV0gIGAgICsgYFske3RvfV0gIGAgKyB0aW1lU3RyaW5nLFxuICAgICAgbGFzdERheTogYFske3llc3RlcmRheX1dICBgICsgYFske3RvfV0gIGAgKyB0aW1lU3RyaW5nLFxuICAgICAgc2FtZUVsc2U6IGRhdGVTdHJpbmcgKyAnICcgKyBgWyR7dG99XSAgYCArIHRpbWVTdHJpbmcsXG4gICAgICBsYXN0V2VlazogZGF0ZVN0cmluZyArICcgJyArIGBbJHt0b31dICBgICsgdGltZVN0cmluZyxcbiAgICAgIG5leHREYXkgOiBkYXRlU3RyaW5nICsgJyAnICsgYFske3RvfV0gIGAgKyB0aW1lU3RyaW5nXG4gICAgfSlcbiAgfVxuXG4gIC8vIHJldHVybiBlcG9jaCBzdHJpbmcgYXMgc3BlY2lmaWVkIGZvcm1hdFxuICBmb3JtYXRFcG9jaChlcG9jaCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2FsZW5kYXJEYXkoZXBvY2gpO1xuICB9XG5cbiAgZ2V0VG9kYXkoKXtcbiAgICBjb25zdCB0em9mZnNldCA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDA7IC8vIG9mZnNldCBpbiBtaWxsaXNlY29uZHNcbiAgICBjb25zdCBsb2NhbElTT1RpbWUgPSAobmV3IERhdGUoRGF0ZS5ub3coKSAtIHR6b2Zmc2V0KSkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAtMSk7XG4gICAgbGV0IGRhdGUgPSBsb2NhbElTT1RpbWUvLyB0aGlzLmRhdGVTZXJ2aWNlLnNlbGVjdGVkRGF0ZUZvcm1hdChsb2NhbElTT1RpbWUpO1xuICAgIHJldHVybiBkYXRlXG4gIH1cblxuICBnZXRDdXJyZW50VGltZSgpe1xuICAgIGNvbnN0IHR6b2Zmc2V0ID0gKG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDsgLy8gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuICAgIGNvbnN0IGxvY2FsSVNPVGltZSA9IChuZXcgRGF0ZShEYXRlLm5vdygpIC0gdHpvZmZzZXQpKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIC0xKTtcbiAgICBsZXQgZGF0ZSA9IGxvY2FsSVNPVGltZS8vIHRoaXMuZGF0ZVNlcnZpY2Uuc2VsZWN0ZWREYXRlRm9ybWF0KGxvY2FsSVNPVGltZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkgLSB0em9mZnNldCkuZ2V0VGltZSgpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH1cblxuXG59XG4iXX0=
|
|
426
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2VydmljZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9kYXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7O0FBSzVCLE1BQU0sT0FBTyxXQUFXO0lBSXRCLFlBQW9CLFFBQWtCLEVBQVMsU0FBMkI7UUFBdEQsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFTLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ3hFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFHTSxhQUFhO1FBQ2xCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUN6QixJQUFHLElBQUksS0FBSyxJQUFJO1lBQ2QsTUFBTSxHQUFHLFdBQVcsQ0FBQTtRQUN0QixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQztRQUN4QixJQUFHLElBQUksS0FBSyxJQUFJO1lBQ2QsTUFBTSxHQUFHLFVBQVUsQ0FBQTtRQUNyQixPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMxQixJQUFHLElBQUksS0FB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LEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFJLElBQUksR0FBRyxZQUFZLENBQUEsQ0FBQSxxREFBcUQ7UUFDNUUsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDcEUsQ0FBQzsrR0E1Z0JVLFdBQVc7bUhBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRGF0ZVNlcnZpY2Uge1xuICBsb2NhbGU6c3RyaW5nO1xuICBsYW5ndWFnZTpzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxlKCk7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXREYXRlRm9ybWF0KCl7XG4gICAgbGV0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0REL01NL1lZICc7XG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vREQvWVkgJ1xuICAgIHJldHVybiBmb3JtYXRcbiAgfVxuXG4gIHB1YmxpYyBnZXREYXRlRm9ybWF0Migpe1xuICAgIGxldCBsYW5nID0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkZC9NTS9ZWSc7XG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vZGQvWVknXG4gICAgcmV0dXJuIGZvcm1hdFxuICB9XG5cbiAgcHVibGljIGdldERhdGVGb3JtYXQzKCl7XG4gICAgbGV0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0REL01NL1lZWVknO1xuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NL0REL1lZWVknXG4gICAgcmV0dXJuIGZvcm1hdFxuICB9XG5cbiAgcHVibGljIGdldExvbmdGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2RkZGQsIE1NTSB5eXl5JztcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NTSwgZGRkIHl5eXknO1xuXG4gICAgcmV0dXJuIGZvcm1hdFxuICB9XG5cblxuICBwdWJsaWMgZ2V0TW9udGhWaWV3RGF5SGVhZGVyKGRhdGU6RGF0ZSl7XG4gICAgbGV0IGxhbmcgPSB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZGF5cyA9IFtcIkRcIixcIkxcIiwgXCJNXCIsIFwiWFwiLCBcIkpcIiwgXCJWXCIsIFwiU1wiXVxuICAgIGlmKGxhbmcgPT09ICdjYScpe1xuICAgICAgZGF5cyA9IFtcIkRHXCIsXCJETFwiLCBcIkRUXCIsIFwiRENcIiwgXCJESlwiLCBcIkRWXCIsIFwiRFNcIl1cbiAgICB9ZWxzZSBpZihsYW5nID09PSAnZW4nKVxuICAgICAgZGF5cyA9ICBbXCJTdW5cIixcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXVxuXG4gICAgbGV0IG51bSA9IGRhdGUuZ2V0RGF5KClcbiAgICByZXR1cm4gZGF5c1tudW1dXG4gIH1cblxuICBwdWJsaWMgZm9ybWF0U2VsZWN0ZWREYXRlKGRhdGUpe1xuICAgIGlmKGRhdGUpe1xuICAgICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCB0aGlzLmdldGZvcm1hdFNlbGVjdGVkRGF0ZSgpKTtcbiAgICAgIGNvbnNvbGUubG9nKFwic2VsZWN0ZWQgRGF5XCIsIGRheSk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHB1YmxpYyBnZXRmb3JtYXRTZWxlY3RlZERhdGUoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0VFRUUsIGQgTU1NTSdcbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU1NIGQsIEVFRUUnO1xuICAgIHJldHVybiBmb3JtYXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0TG9jYWxlKCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGxvY2FsZSA9ICdlcy1FUydcbiAgICBpZihsYW5nID09PSAnY2EnKXtcbiAgICAgIGxvY2FsZSA9ICdjYS1FUydcbiAgICB9ZWxzZSBpZihsYW5nID09PSAnZW4nKVxuICAgICAgbG9jYWxlID0gJ2VuLVVTJztcblxuICAgIHJldHVybiBsb2NhbGU7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGFydGluZ0RheVdlZWsoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZGF5ID0gJzEnXG4gICAgaWYobGFuZyA9PSAnZW4nKVxuICAgICAgZGF5ID0gJzAnXG5cbiAgICByZXR1cm4gZGF5O1xuICB9XG5cblxuICBwdWJsaWMgZ2V0U3RhcnRpbmdEYXlNb250aCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBkYXkgPSAxXG4gICAgaWYobGFuZyA9PSAnZW4nKVxuICAgICAgZGF5ID0gMFxuXG4gICAgcmV0dXJuIGRheTtcbiAgfVxuXG4gICdkZC9NTS95J1xuXG4gIHB1YmxpYyBkZE1NeSgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGQvTU0veSdcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NL2RkL3knO1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTaG9ydERhdGVGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0REL01NL1lZJ1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vREQvWVknO1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIHB1YmxpYyBkZE1NeXl5eUZvcm1hdChkYXRlKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2RkL01NL3l5eXknO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU0vZGQveXl5eSc7XG5cbiAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpO1xuICB9XG5cbiAgcHVibGljIGRkTU15Rm9ybWF0KGRhdGUpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGQgTU1NIHknO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NIGRkIHknO1xuXG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgZGRNTU15eXlmb3JtYXQoZGF0ZSl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdkZCBNTU0geXl5JztcblxuICAgIGlmKGxhbmcgPT09ICdlbicpXG4gICAgICBmb3JtYXQgPSAnTU1NIGRkIHl5eSc7XG5cbiAgICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKVxuXG4gIH1cblxuICBwdWJsaWMgTU1NTXl5eXlGb3JtYXQoZGF0ZSl7XG5cbiAgICBsZXQgZm9ybWF0ID0nTU1NTSB5eXl5JztcblxuICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGF5TW9udGhZZWFyRm9ybWF0KGRhdGUpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnRUVFRSwgZCBNTU1NIFlZWVknO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NTSwgZCBFRUVFIFlZWVknO1xuXG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ZWREYXRlRm9ybWF0KGRhdGU6c3RyaW5nKXtcblxuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnRUVFRSwgZCBNTU1NJ1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NTSBkLCBZWVlZJztcblxuICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuXG5cbiAgZGRNTXl5eXlISG1tKGRhdGUpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZGQvTU0veXl5eSBISDptbSdcbiAgICBpZihsYW5nID09PSAnZW4nKVxuICAgICAgZm9ybWF0ID0gICdNTS9kZC95eXl5IGhoOm1tIGEnO1xuXG4gICAgICBsZXQgZGF5ID0gdGhpcy50cmFuc2Zvcm1EYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSlcbiAgfVxuXG5cbiAgcHVibGljIGZvcm1hdERhdGVMb25nRm9ybWF0KGRhdGU/KXtcblxuICAgIGlmKGRhdGUpe1xuICAgICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCB0aGlzLmdldExvbmdEYXRlRm9ybWF0KCkpO1xuICAgICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcblxuICB9XG5cbiAgcHVibGljIHl5eXlNTWRkSEhtbShkYXRlPyl7XG5cbiAgICBpZihkYXRlKXtcbiAgICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgdGhpcy55eXl5TU1kZEhIbW1Gb3JtYXQoKSk7XG4gICAgICBjb25zb2xlLmxvZyhcInNlbGVjdGVkIERheVwiLCBkYXkpO1xuICAgICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIHl5eXlNTWRkSEhtbUZvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAneXl5eS1kZC1NTSBISDptbSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICd5eXl5LU1NLWRkIEhIOm1tIGEnO1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcblxuICB9XG5cblxuICBwdWJsaWMgZ2V0TG9uZ0RhdGVGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gICdFRUVFLCBkIE1NTU0geXl5eSwgSEg6bW0nO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NTSwgZCB5eXl5LCBoaDptbSBhJztcblxuICAgIHJldHVybiBmb3JtYXQ7XG5cbiAgfVxuICBwdWJsaWMgZ2V0RGF0ZXRpbWVDb250cm9sRm9ybWF0KCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICdEIE1NTSBZWVlZIEhIOm1tJ1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NIEQgWVkgaGg6bW0gYSc7XG5cbiAgICAgIHJldHVybiBmb3JtYXQ7XG5cbiAgfVxuXG4gIHB1YmxpYyBnZXREYXlNb250aEZvcm1hdCgpe1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnZCBNTU0nO1xuXG4gICAgaWYobGFuZyA9PT0gJ2VuJyApXG4gICAgICBmb3JtYXQgPSAnTU1NIGQnO1xuXG4gICAgICByZXR1cm4gZm9ybWF0O1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0RGF5RG90TW9udGhGb3JtYXQoKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2QuIE1NTSc7XG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICdNTU0uIGQnO1xuXG4gICAgICByZXR1cm4gZm9ybWF0O1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRXZWVrKGRhdGU6c3RyaW5nKXtcblxuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGxldCBmb3JtYXQgPSAnRSBkIE1NTSdcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NTSBkLCBFJztcblxuICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcbiAgICByZXR1cm4gZGF5WzBdLnRvVXBwZXJDYXNlKCkgKyBkYXkuc2xpY2UoMSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRXZWVrRnVsbERheShkYXRlOnN0cmluZyl7XG5cbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ0VFRSBkIE1NTSdcblxuICAgIGlmKGxhbmcgPT09ICdlbicgKVxuICAgICAgZm9ybWF0ID0gJ01NTSBkLCBFRUUnO1xuXG4gICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgIHJldHVybiBkYXlbMF0udG9VcHBlckNhc2UoKSArIGRheS5zbGljZSgxKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXREYXRlKGRhdGU/KXtcbiAgICBpZihkYXRlKXtcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuXG4gICAgICBpZih0aGlzLmlzVG9kYXkoZGF0ZSkpXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAgdGhpcy5nZXRUaW1lRm9ybWF0KCkpXG4gICAgICBlbHNle1xuICAgICAgICBsZXQgZm9ybWF0ID0gdGhpcy5nZXREYXRlRm9ybWF0MigpXG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KVxuICAgICAgfVxuXG4gICAgfVxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cblxuICBkZE1NeXl5eShkYXRlKXtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBsZXQgZm9ybWF0ID0gJ2RkLU1NLXl5eXknXG4gICAgaWYobGFuZyA9PT0gJ2VuJylcbiAgICAgIGZvcm1hdCA9ICdNTS1kZC15eXl5JztcblxuICAgICAgbGV0IGRheSA9IHRoaXMudHJhbnNmb3JtRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpXG4gIH1cblxuICBoaWdoY2hhcnRzRGF0ZXNGb3JubWF0KCl7XG5cbiAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9IHt9O1xuICBpZihsYW5nID09ICdlbicpe1xuICAgICAgLy8gJWI6IFNob3J0IG1vbnRoLCBsaWtlICdKYW4nLCVlIERheSBvZiB0aGUgbW9udGgsIDEgdGhyb3VnaCAzMVxuICAgICAgZm9ybWF0ID0ge1xuICAgICAgICBtaWxsaXNlY29uZDogJyVIOiVNOiVTLiVMJyxcbiAgICAgICAgc2Vjb25kOiAnJWw6JU06JVMgJVAnLFxuICAgICAgICBtaW51dGU6ICclbDolTSAlcCcsXG4gICAgICAgIGhvdXI6ICclbDolTSAlcCcsXG4gICAgICAgIGRheTogJyViLiAlZScsXG4gICAgICAgIHdlZWs6ICclYi4gJWUnLFxuICAgICAgICBtb250aDogJyViIFxcJyV5JyxcbiAgICAgICAgeWVhcjogJyVZJ1xuICAgICAgfVxuICAgIH1lbHNle1xuICAgICAgZm9ybWF0ID0ge1xuICAgICAgICBtaWxsaXNlY29uZDogJyVIOiVNOiVTLiVMJyxcbiAgICAgICAgc2Vjb25kOiAnJUg6JU06JVMnLFxuICAgICAgICBtaW51dGU6ICclSDolTScsXG4gICAgICAgIGhvdXI6ICclSDolTScsXG4gICAgICAgIGRheTogJyVlLiAlYicsXG4gICAgICAgIHdlZWs6ICclZS4gJWInLFxuICAgICAgICBtb250aDogJyViIFxcJyV5JyxcbiAgICAgICAgeWVhcjogJyVZJ1xuICAgIH1cbiAgICB9XG4gICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgeXl5eU1NZGRGb3JtYXQoZGF0ZSl7XG4gICAgY29uc29sZS5sb2coXCJEQVRFIGRhdGU6IFwiLCBkYXRlKTtcbiAgICBsZXQgbGFuZyA9ICB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZztcbiAgICBjb25zb2xlLmxvZyhcIkRBVEUgbGFuZzogXCIsIGxhbmcpO1xuICAgIGxldCBmb3JtYXQgPSAneXl5eS1NTS1kZCc7XG5cbiAgICBpZihsYW5nID09ICdlbicpXG4gICAgICBmb3JtYXQgPSAneXl5eS1kZC1NTSc7XG5cbiAgICBjb25zb2xlLmxvZyhcIkRBVEUgZm9ybWF0OiBcIiwgZm9ybWF0KTtcblxuICAgIGxldCBkYXkgPSB0aGlzLnRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KTtcblxuICAgIGNvbnNvbGUubG9nKFwiREFURSBkYXk6IFwiLCBkYXkpO1xuXG4gICAgcmV0dXJuIGRheVswXS50b1VwcGVyQ2FzZSgpICsgZGF5LnNsaWNlKDEpXG4gIH1cblxuICBwdWJsaWMgeXl5eU1NZGRUSEhtbXNzU1NTWkZvcm1hdChkYXRlPyl7XG4gICAgY29uc3QgZmVjaGFGb3JtYXRlYWRhID10aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAneXl5eS1NTS1kZFRISDptbTpzcy5TU1NcXCdaXFwnJyk7XG4gICAgcmV0dXJuIGZlY2hhRm9ybWF0ZWFkYTtcbiAgfVxuICBjb252ZXJ0MTJ0bzI0Zm9ybWF0KHRpbWUpe1xuXG4gICAgY29uc29sZS5sb2coXCJUSU1FIDEydG8yNDogXCIsdGltZSk7XG4gICAgdmFyIGhvdXJzID0gTnVtYmVyKHRpbWUubWF0Y2goL14oXFxkKykvKVsxXSk7XG4gICAgdmFyIG1pbnV0ZXMgPSBOdW1iZXIodGltZS5tYXRjaCgvOihcXGQrKS8pWzFdKTtcbiAgICB2YXIgQU1QTSA9IHRpbWUubWF0Y2goL1xccyguKikkLylbMV07XG4gICAgaWYoQU1QTSA9PSBcIlBNXCIgJiYgaG91cnM8MTIpIGhvdXJzID0gaG91cnMrMTI7XG4gICAgaWYoQU1QTSA9PSBcIkFNXCIgJiYgaG91cnM9PTEyKSBob3VycyA9IGhvdXJzLTEyO1xuICAgIHZhciBzSG91cnMgPSBob3Vycy50b1N0cmluZygpO1xuICAgIHZhciBzTWludXRlcyA9IG1pbnV0ZXMudG9TdHJpbmcoKTtcbiAgICBpZihob3VyczwxMCkgc0hvdXJzID0gXCIwXCIgKyBzSG91cnM7XG4gICAgaWYobWludXRlczwxMCkgc01pbnV0ZXMgPSBcIjBcIiArIHNNaW51dGVzO1xuXG4gICAgbGV0IGggPSBzSG91cnMgKyBcIjpcIiArIHNNaW51dGVzO1xuXG4gICAgY29uc29sZS5sb2coXCJIT1VSUzogXCIsaCk7XG4gICAgcmV0dXJuIGg7XG4gIH1cblxuICBmb3JtYXQyNGgodGltZSkge1xuXG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgaWYobGFuZyA9PT0gJ2VuJyl7XG4gICAgICAvLyBDaGVjayBjb3JyZWN0IHRpbWUgZm9ybWF0IGFuZCBzcGxpdCBpbnRvIGNvbXBvbmVudHNcbiAgICB0aW1lID0gdGltZS50b1N0cmluZyAoKS5tYXRjaCAoL14oWzAxXVxcZHwyWzAtM10pKDopKFswLTVdXFxkKSg6WzAtNV1cXGQpPyQvKSB8fCBbdGltZV07XG5cbiAgICBpZiAodGltZS5sZW5ndGggPiAxKSB7IC8vIElmIHRpbWUgZm9ybWF0IGNvcnJlY3RcbiAgICAgIHRpbWUgPSB0aW1lLnNsaWNlICgxKTsgIC8vIFJlbW92ZSBmdWxsIHN0cmluZyBtYXRjaCB2YWx1ZVxuICAgICAgdGltZVs1XSA9ICt0aW1lWzBdIDwgMTIgPyAnIEFNJyA6ICcgUE0nOyAvLyBTZXQgQU0vUE1cbiAgICAgIHRpbWVbMF0gPSArdGltZVswXSAlIDEyIHx8IDEyOyAvLyBBZGp1c3QgaG91cnNcbiAgICB9XG4gICAgcmV0dXJuIHRpbWUuam9pbiAoJycpOyAvLyByZXR1cm4gYWRqdXN0ZWQgdGltZSBvciBvcmlnaW5hbCBzdHJpbmdcbiAgICB9XG4gICAgcmV0dXJuIHRpbWU7XG5cbiAgfVxuXG4gIGlzQW1lcmljYW5Gb3JtYXQoKXtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcgPT09ICdlbic7XG4gIH1cblxuICBnZXRUaW1lRm9ybWF0KCl7XG4gICAgbGV0IGxhbmcgPSAgdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmc7XG4gICAgbGV0IGZvcm1hdCA9ICAnSEg6bW0nXG5cbiAgICBpZihsYW5nID09PSAnZW4nIClcbiAgICAgIGZvcm1hdCA9ICAnaGg6bW0gYSc7XG5cbiAgICByZXR1cm4gZm9ybWF0O1xuICB9XG5cbiAgaXNUb2RheShtRGF0ZTogRGF0ZSl7XG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSgpXG4gICAgaWYoZGF0ZS5nZXREYXRlKCkgPT09IG1EYXRlLmdldERhdGUoKSAmJiBkYXRlLmdldE1vbnRoKCkgPT09IG1EYXRlLmdldE1vbnRoKCkgJiYgZGF0ZS5nZXRGdWxsWWVhcigpID09PSBtRGF0ZS5nZXRGdWxsWWVhcigpKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHRyYW5zZm9ybURhdGUoZGF0ZSwgZm9ybWF0KSB7XG4gICAgY29uc3QgZGF0ZVBpcGU6IERhdGVQaXBlID0gbmV3IERhdGVQaXBlKHRoaXMuZ2V0TG9jYWxlKCkpO1xuICAgIHJldHVybiBkYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgZm9ybWF0KTtcbiAgfVxuXG4gIGdldENhbGVuZGFyRGF5KGVwb2NoOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghZXBvY2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgdGltZVN0cmluZyA9ICdoOm1tIEEnO1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdlbmRhLnRvZGF5Jyk7XG4gICAgY29uc3QgeWVzdGVyZGF5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdlbmRhLnllc3RlcmRheScpO1xuICAgIHJldHVybiBtb21lbnQoZXBvY2gpLmNhbGVuZGFyKG51bGwsIHtcbiAgICAgIHNhbWVEYXk6IGBbJHt0b2RheX1dIGAgKyB0aW1lU3RyaW5nLFxuICAgICAgbGFzdERheTogYFske3llc3RlcmRheX1dIGAgKyB0aW1lU3RyaW5nLFxuICAgICAgbGFzdFdlZWsgOiAnREQvTU0vWVkgJyArIHRpbWVTdHJpbmcsXG4gICAgICBzYW1lRWxzZTogJ0REL01NL1lZICcgKyB0aW1lU3RyaW5nLFxuICAgICAgbmV4dERheSA6ICdERC9NTS9ZWSAnICsgdGltZVN0cmluZyxcbiAgICB9KTtcbiAgfVxuXG4gIGdldENhbGVuZGFyRGF5MihlcG9jaDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIWVwb2NoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IHRpbWVTdHJpbmcgPSB0aGlzLmdldFRpbWVGb3JtYXQoKTtcbiAgICBsZXQgZGF0ZVN0cmluZyA9IHRoaXMuZ2V0U2hvcnREYXRlRm9ybWF0KCk7XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEudG9kYXknKTtcbiAgICBjb25zdCB5ZXN0ZXJkYXkgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdhZ2VuZGEueWVzdGVyZGF5Jyk7XG4gICAgcmV0dXJuIG1vbWVudChlcG9jaCkuY2FsZW5kYXIobnVsbCwge1xuICAgICAgc2FtZURheTogYFske3RvZGF5fV0gIGAgICsgdGltZVN0cmluZyxcbiAgICAgIGxhc3REYXk6IGBbJHt5ZXN0ZXJkYXl9XSAgYCArIHRpbWVTdHJpbmcsXG4gICAgICBzYW1lRWxzZTogZGF0ZVN0cmluZyArICcgJyArIHRpbWVTdHJpbmcsXG4gICAgICBsYXN0V2VlayA6IGRhdGVTdHJpbmcgKyAnICcgKyB0aW1lU3RyaW5nLFxuICAgICAgbmV4dERheSA6IGRhdGVTdHJpbmcgKyAnICcgKyB0aW1lU3RyaW5nXG4gICAgfSk7XG4gIH1cblxuXG4gIGdldENhbGVuZGFyRGF5VGltZShlcG9jaDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIWVwb2NoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbGV0IHRpbWVTdHJpbmcgPSB0aGlzLmdldFRpbWVGb3JtYXQoKTtcbiAgICBsZXQgZGF0ZVN0cmluZyA9IHRoaXMuZ2V0TG9uZ0Zvcm1hdCgpO1xuICAgIGxldCBsYW5nID0gIHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nO1xuICAgIGNvbnN0IHRvZGF5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdlbmRhLnRvZGF5Jyk7XG4gICAgY29uc3QgeWVzdGVyZGF5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdlbmRhLnllc3RlcmRheScpO1xuICAgIGNvbnN0IHRvID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnYWdlbmRhLnRvJyk7XG5cbiAgICBjb25zdCAgbSA9IG1vbWVudFxuICAgIG0ubG9jYWxlKGxhbmcpXG4gICAgcmV0dXJuIG0oZXBvY2gpLmNhbGVuZGFyKG51bGwsIHtcbiAgICAgIHNhbWVEYXk6IGBbJHt0b2RheX1dICBgICArIGBbJHt0b31dICBgICsgdGltZVN0cmluZyxcbiAgICAgIGxhc3REYXk6IGBbJHt5ZXN0ZXJkYXl9XSAgYCArIGBbJHt0b31dICBgICsgdGltZVN0cmluZyxcbiAgICAgIHNhbWVFbHNlOiBkYXRlU3RyaW5nICsgJyAnICsgYFske3RvfV0gIGAgKyB0aW1lU3RyaW5nLFxuICAgICAgbGFzdFdlZWs6IGRhdGVTdHJpbmcgKyAnICcgKyBgWyR7dG99XSAgYCArIHRpbWVTdHJpbmcsXG4gICAgICBuZXh0RGF5IDogZGF0ZVN0cmluZyArICcgJyArIGBbJHt0b31dICBgICsgdGltZVN0cmluZ1xuICAgIH0pXG4gIH1cblxuICAvLyByZXR1cm4gZXBvY2ggc3RyaW5nIGFzIHNwZWNpZmllZCBmb3JtYXRcbiAgZm9ybWF0RXBvY2goZXBvY2gpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldENhbGVuZGFyRGF5KGVwb2NoKTtcbiAgfVxuXG4gIGdldFRvZGF5KCl7XG4gICAgY29uc3QgdHpvZmZzZXQgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwOyAvLyBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzXG4gICAgY29uc3QgbG9jYWxJU09UaW1lID0gKG5ldyBEYXRlKERhdGUubm93KCkgLSB0em9mZnNldCkpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgLTEpO1xuICAgIGxldCBkYXRlID0gbG9jYWxJU09UaW1lLy8gdGhpcy5kYXRlU2VydmljZS5zZWxlY3RlZERhdGVGb3JtYXQobG9jYWxJU09UaW1lKTtcbiAgICByZXR1cm4gZGF0ZVxuICB9XG5cbiAgZ2V0VG9tb3Jyb3coKSB7XG4gICAgY29uc3QgdHpvZmZzZXQgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwOyAvLyBvZmZzZXQgaW4gbWlsbGlzZWNvbmRzXG4gICAgY29uc3QgdG9tb3Jyb3cgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gdHpvZmZzZXQgKyAyNCAqIDYwICogNjAgKiAxMDAwKTsgLy8gYWRkaW5nIDI0IGhvdXJzIGluIG1pbGxpc2Vjb25kc1xuICAgIGNvbnN0IGxvY2FsSVNPVGltZSA9IHRvbW9ycm93LnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgLTEpO1xuICAgIGxldCBkYXRlID0gbG9jYWxJU09UaW1lOyAvLyB0aGlzLmRhdGVTZXJ2aWNlLnNlbGVjdGVkRGF0ZUZvcm1hdChsb2NhbElTT1RpbWUpO1xuICAgIHJldHVybiBkYXRlO1xufVxuICBnZXRDdXJyZW50VGltZSgpe1xuICAgIGNvbnN0IHR6b2Zmc2V0ID0gKG5ldyBEYXRlKCkpLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMDsgLy8gb2Zmc2V0IGluIG1pbGxpc2Vjb25kc1xuICAgIGNvbnN0IGxvY2FsSVNPVGltZSA9IChuZXcgRGF0ZShEYXRlLm5vdygpIC0gdHpvZmZzZXQpKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIC0xKTtcbiAgICBsZXQgZGF0ZSA9IGxvY2FsSVNPVGltZS8vIHRoaXMuZGF0ZVNlcnZpY2Uuc2VsZWN0ZWREYXRlRm9ybWF0KGxvY2FsSVNPVGltZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkgLSB0em9mZnNldCkuZ2V0VGltZSgpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH1cblxuXG59XG4iXX0=
|
package/esm2022/public-api.mjs
CHANGED
|
@@ -32,6 +32,7 @@ export * from './lib/services/pusher/pusher-challenge-notifications.service';
|
|
|
32
32
|
export * from './lib/services/pusher/pusher-connection.service';
|
|
33
33
|
export * from './lib/services/pusher/pusher-message.service';
|
|
34
34
|
export * from './lib/services/pusher/pusher-notification.service';
|
|
35
|
+
export * from './lib/services/auth/firebase-auth.service';
|
|
35
36
|
export * from './lib/util/chatParameters';
|
|
36
37
|
export * from './lib/util/data-store';
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3NlcnZpY2UtbGliL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDOztHQUVHO0FBRUgsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDhEQUE4RCxDQUFDO0FBQzdFLGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBzZXJ2aWNlLWxpYlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2UtbGliLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlLWxpYi5tb2R1bGUnO1xuLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBsYW5kaW5nLWxpYlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2FwaS1lbmRwb2ludHMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2NoYW5nZS1lbmRwb2ludHMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lbmNyeXB0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvdG9rZW4uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9kb29sZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9sYW5ndWFnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2h0dHAuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9kYXRlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvaGlnaGNoYXJ0cy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3JvbGVzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9sb2FkaW5nLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvbG9nZ2luZy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2Vycm9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvb3BlbnRvay5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2FuYWx5dGljcy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3B1c2hlci9wdXNoZXItYWxhcm0uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9wdXNoZXIvcHVzaGVyLWNoYWxsZW5nZS1ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcHVzaGVyL3B1c2hlci1jb25uZWN0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcHVzaGVyL3B1c2hlci1tZXNzYWdlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvcHVzaGVyL3B1c2hlci1ub3RpZmljYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9hdXRoL2ZpcmViYXNlLWF1dGguc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlsL2NoYXRQYXJhbWV0ZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWwvZGF0YS1zdG9yZSc7XG4iXX0=
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { Component, InjectionToken, NgModule, Injectable, Inject, PLATFORM_ID, ViewChild } from '@angular/core';
|
|
3
3
|
import * as i2$1 from '@angular/common';
|
|
4
|
-
import { CommonModule, DatePipe } from '@angular/common';
|
|
5
|
-
import { BehaviorSubject, Subject, Observable, merge, of, fromEvent, ReplaySubject, combineLatest } from 'rxjs';
|
|
4
|
+
import { CommonModule, DatePipe, isPlatformBrowser } from '@angular/common';
|
|
5
|
+
import { BehaviorSubject, Subject, Observable, merge, of, fromEvent, ReplaySubject, combineLatest, from } from 'rxjs';
|
|
6
6
|
import { Preferences } from '@capacitor/preferences';
|
|
7
|
-
import { map, tap, catchError, mapTo, delay, startWith } from 'rxjs/operators';
|
|
7
|
+
import { map, tap, catchError, mapTo, delay, startWith, filter } from 'rxjs/operators';
|
|
8
8
|
import * as i1 from '@angular/common/http';
|
|
9
9
|
import { HttpErrorResponse, HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
|
|
10
10
|
import * as i4 from '@angular/router';
|
|
@@ -26,6 +26,7 @@ import * as i1$3 from '@awesome-cordova-plugins/network/ngx';
|
|
|
26
26
|
import { CallCapacitor } from '@doole/videocall-notications-plugins';
|
|
27
27
|
import { FirebaseAnalytics } from '@capacitor-community/firebase-analytics';
|
|
28
28
|
import 'zone.js';
|
|
29
|
+
import firebase from 'firebase/compat/app';
|
|
29
30
|
|
|
30
31
|
class ServiceLibComponent {
|
|
31
32
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: ServiceLibComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -2633,6 +2634,13 @@ class DateService {
|
|
|
2633
2634
|
let date = localISOTime; // this.dateService.selectedDateFormat(localISOTime);
|
|
2634
2635
|
return date;
|
|
2635
2636
|
}
|
|
2637
|
+
getTomorrow() {
|
|
2638
|
+
const tzoffset = (new Date()).getTimezoneOffset() * 60000; // offset in milliseconds
|
|
2639
|
+
const tomorrow = new Date(Date.now() - tzoffset + 24 * 60 * 60 * 1000); // adding 24 hours in milliseconds
|
|
2640
|
+
const localISOTime = tomorrow.toISOString().slice(0, -1);
|
|
2641
|
+
let date = localISOTime; // this.dateService.selectedDateFormat(localISOTime);
|
|
2642
|
+
return date;
|
|
2643
|
+
}
|
|
2636
2644
|
getCurrentTime() {
|
|
2637
2645
|
const tzoffset = (new Date()).getTimezoneOffset() * 60000; // offset in milliseconds
|
|
2638
2646
|
const localISOTime = (new Date(Date.now() - tzoffset)).toISOString().slice(0, -1);
|
|
@@ -4428,6 +4436,156 @@ class DataStore {
|
|
|
4428
4436
|
}
|
|
4429
4437
|
}
|
|
4430
4438
|
|
|
4439
|
+
class FirebaseProfileModel extends ShellModel {
|
|
4440
|
+
constructor() {
|
|
4441
|
+
super();
|
|
4442
|
+
}
|
|
4443
|
+
}
|
|
4444
|
+
|
|
4445
|
+
class FirebaseAuthService {
|
|
4446
|
+
constructor(angularFire, platform, platformId) {
|
|
4447
|
+
this.angularFire = angularFire;
|
|
4448
|
+
this.platform = platform;
|
|
4449
|
+
this.platformId = platformId;
|
|
4450
|
+
this.redirectResult = new Subject();
|
|
4451
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
4452
|
+
this.angularFire.onAuthStateChanged((user) => {
|
|
4453
|
+
if (user) {
|
|
4454
|
+
// User is signed in.
|
|
4455
|
+
this.currentUser = user;
|
|
4456
|
+
}
|
|
4457
|
+
else {
|
|
4458
|
+
// No user is signed in.
|
|
4459
|
+
this.currentUser = null;
|
|
4460
|
+
}
|
|
4461
|
+
});
|
|
4462
|
+
if (!this.platform.is('capacitor')) {
|
|
4463
|
+
// when using signInWithRedirect, this listens for the redirect results
|
|
4464
|
+
this.angularFire.getRedirectResult()
|
|
4465
|
+
.then((result) => {
|
|
4466
|
+
// result.credential.accessToken gives you the Provider Access Token. You can use it to access the Provider API.
|
|
4467
|
+
if (result.user) {
|
|
4468
|
+
this.userProviderAdditionalInfo = result.additionalUserInfo.profile;
|
|
4469
|
+
this.redirectResult.next(result);
|
|
4470
|
+
}
|
|
4471
|
+
}, (error) => {
|
|
4472
|
+
this.redirectResult.next({ error: error.code });
|
|
4473
|
+
});
|
|
4474
|
+
}
|
|
4475
|
+
}
|
|
4476
|
+
}
|
|
4477
|
+
getRedirectResult() {
|
|
4478
|
+
return this.redirectResult.asObservable();
|
|
4479
|
+
}
|
|
4480
|
+
getPhotoURL(signInProviderId, photoURL) {
|
|
4481
|
+
// Default imgs are too small and our app needs a bigger image
|
|
4482
|
+
switch (signInProviderId) {
|
|
4483
|
+
case 'facebook.com':
|
|
4484
|
+
return photoURL + '?height=400';
|
|
4485
|
+
case 'password':
|
|
4486
|
+
return 'https://s3-us-west-2.amazonaws.com/ionicthemes/otros/avatar-placeholder.png';
|
|
4487
|
+
case 'twitter.com':
|
|
4488
|
+
return photoURL.replace('_normal', '_400x400');
|
|
4489
|
+
case 'google.com':
|
|
4490
|
+
return photoURL.split('=')[0];
|
|
4491
|
+
default:
|
|
4492
|
+
return photoURL;
|
|
4493
|
+
}
|
|
4494
|
+
}
|
|
4495
|
+
signOut() {
|
|
4496
|
+
if (this.platform.is('capacitor')) {
|
|
4497
|
+
//return cfaSignOut();
|
|
4498
|
+
return null;
|
|
4499
|
+
}
|
|
4500
|
+
else {
|
|
4501
|
+
return from(this.angularFire.signOut());
|
|
4502
|
+
}
|
|
4503
|
+
}
|
|
4504
|
+
signInWithEmail(email, password) {
|
|
4505
|
+
return this.angularFire.signInWithEmailAndPassword(email, password);
|
|
4506
|
+
}
|
|
4507
|
+
signUpWithEmail(email, password) {
|
|
4508
|
+
return this.angularFire.createUserWithEmailAndPassword(email, password);
|
|
4509
|
+
}
|
|
4510
|
+
socialSignIn(providerName, scopes) {
|
|
4511
|
+
if (this.platform.is('capacitor')) {
|
|
4512
|
+
//return cfaSignIn(providerName);
|
|
4513
|
+
}
|
|
4514
|
+
else {
|
|
4515
|
+
const provider = new firebase.auth.OAuthProvider(providerName);
|
|
4516
|
+
//console.log("provider. ", provider);
|
|
4517
|
+
if (scopes) {
|
|
4518
|
+
scopes.forEach(scope => {
|
|
4519
|
+
provider.addScope(scope);
|
|
4520
|
+
});
|
|
4521
|
+
}
|
|
4522
|
+
if (this.platform.is('desktop')) {
|
|
4523
|
+
return from(this.angularFire.signInWithPopup(provider));
|
|
4524
|
+
}
|
|
4525
|
+
else {
|
|
4526
|
+
// web but not desktop, for example mobile PWA
|
|
4527
|
+
return from(this.angularFire.signInWithRedirect(provider));
|
|
4528
|
+
}
|
|
4529
|
+
}
|
|
4530
|
+
return null;
|
|
4531
|
+
}
|
|
4532
|
+
signInWithGoogle() {
|
|
4533
|
+
const provider = new firebase.auth.GoogleAuthProvider();
|
|
4534
|
+
//console.log("provider: ", provider);
|
|
4535
|
+
const scopes = ['profile', 'email'];
|
|
4536
|
+
return this.socialSignIn(provider.providerId, scopes);
|
|
4537
|
+
}
|
|
4538
|
+
signInWithTwitter() {
|
|
4539
|
+
const provider = new firebase.auth.TwitterAuthProvider();
|
|
4540
|
+
return this.socialSignIn(provider.providerId);
|
|
4541
|
+
}
|
|
4542
|
+
getProfileDataSource() {
|
|
4543
|
+
// we need to do this differentiation because there is a bug in
|
|
4544
|
+
// platform capacitor ios when executing this.angularFire.user
|
|
4545
|
+
if (this.platform.is('capacitor')) {
|
|
4546
|
+
return of(this.setUserModelForProfile());
|
|
4547
|
+
}
|
|
4548
|
+
else {
|
|
4549
|
+
return this.angularFire.user
|
|
4550
|
+
.pipe(filter((user) => user != null), map((user) => {
|
|
4551
|
+
return this.setUserModelForProfile();
|
|
4552
|
+
}));
|
|
4553
|
+
}
|
|
4554
|
+
}
|
|
4555
|
+
setUserModelForProfile() {
|
|
4556
|
+
const userModel = new FirebaseProfileModel();
|
|
4557
|
+
const provierData = this.currentUser.providerData[0];
|
|
4558
|
+
const userData = this.userProviderAdditionalInfo ? this.userProviderAdditionalInfo : provierData;
|
|
4559
|
+
userModel.image = this.getPhotoURL(provierData.providerId, provierData.photoURL);
|
|
4560
|
+
userModel.name = userData.name || userData.displayName || 'What\'s your name?';
|
|
4561
|
+
userModel.role = 'How would you describe yourself?';
|
|
4562
|
+
userModel.description = userData.description || 'Anything else you would like to share with the world?';
|
|
4563
|
+
userModel.phoneNumber = userData.phoneNumber || 'Is there a number where I can reach you?';
|
|
4564
|
+
userModel.email = userData.email || 'Where can I send you emails?';
|
|
4565
|
+
userModel.provider = (provierData.providerId !== 'password') ? provierData.providerId : 'Credentials';
|
|
4566
|
+
return userModel;
|
|
4567
|
+
}
|
|
4568
|
+
getProfileStore(dataSource) {
|
|
4569
|
+
// Initialize the model specifying that it is a shell model
|
|
4570
|
+
const shellModel = new FirebaseProfileModel();
|
|
4571
|
+
this.profileDataStore = new DataStore(shellModel);
|
|
4572
|
+
// Trigger the loading mechanism (with shell) in the dataStore
|
|
4573
|
+
this.profileDataStore.load(dataSource);
|
|
4574
|
+
return this.profileDataStore;
|
|
4575
|
+
}
|
|
4576
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FirebaseAuthService, deps: [{ token: i5.AngularFireAuth }, { token: i1$1.Platform }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4577
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FirebaseAuthService, providedIn: 'root' }); }
|
|
4578
|
+
}
|
|
4579
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.10", ngImport: i0, type: FirebaseAuthService, decorators: [{
|
|
4580
|
+
type: Injectable,
|
|
4581
|
+
args: [{
|
|
4582
|
+
providedIn: 'root'
|
|
4583
|
+
}]
|
|
4584
|
+
}], ctorParameters: () => [{ type: i5.AngularFireAuth }, { type: i1$1.Platform }, { type: undefined, decorators: [{
|
|
4585
|
+
type: Inject,
|
|
4586
|
+
args: [PLATFORM_ID]
|
|
4587
|
+
}] }] });
|
|
4588
|
+
|
|
4431
4589
|
class ShellRecipientModel extends ShellModel {
|
|
4432
4590
|
constructor() {
|
|
4433
4591
|
super();
|
|
@@ -4452,5 +4610,5 @@ class ShellChatModel extends ShellModel {
|
|
|
4452
4610
|
* Generated bundle index. Do not edit.
|
|
4453
4611
|
*/
|
|
4454
4612
|
|
|
4455
|
-
export { AnalyticsService, ApiEndpointsService, AuthenticationService, ChangeEndpointsService, ComponentsApp, DataStore, DateService, DooleService, EncryptionService, ErrorService, Events, HighchartsService, HttpService, LanguageService, LoadingService, LoggingService, NavigationService, NetworkService, NotificationService, OpentokService, PusherAlarmService, PusherChallengeNotificationsService, PusherConnectionService, PusherMessageService, PusherNotificationService, RolesService, ServiceLibComponent, ServiceLibModule, ShellChatModel, ShellMessageModel, ShellModel, ShellRecipientModel, StorageService, TokenService, User, _INDEX_ENPOINT };
|
|
4613
|
+
export { AnalyticsService, ApiEndpointsService, AuthenticationService, ChangeEndpointsService, ComponentsApp, DataStore, DateService, DooleService, EncryptionService, ErrorService, Events, FirebaseAuthService, HighchartsService, HttpService, LanguageService, LoadingService, LoggingService, NavigationService, NetworkService, NotificationService, OpentokService, PusherAlarmService, PusherChallengeNotificationsService, PusherConnectionService, PusherMessageService, PusherNotificationService, RolesService, ServiceLibComponent, ServiceLibModule, ShellChatModel, ShellMessageModel, ShellModel, ShellRecipientModel, StorageService, TokenService, User, _INDEX_ENPOINT };
|
|
4456
4614
|
//# sourceMappingURL=doolehealth-service-lib.mjs.map
|