@dereekb/dbx-firebase 12.5.10 → 12.6.1
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/development/development.widget.service.mjs +1 -1
- package/esm2022/lib/modules/storagefile/container/storagefile.download.button.component.mjs +66 -22
- package/esm2022/lib/modules/storagefile/service/storagefile.download.service.mjs +55 -17
- package/esm2022/lib/modules/storagefile/service/storagefile.download.storage.service.mjs +7 -5
- package/fesm2022/dereekb-dbx-firebase.mjs +121 -40
- package/fesm2022/dereekb-dbx-firebase.mjs.map +1 -1
- package/lib/development/development.widget.service.d.ts +1 -1
- package/lib/modules/storagefile/container/storagefile.download.button.component.d.ts +82 -17
- package/lib/modules/storagefile/service/storagefile.download.service.d.ts +32 -1
- package/lib/modules/storagefile/service/storagefile.download.storage.service.d.ts +8 -4
- package/package.json +1 -1
|
@@ -53,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
53
53
|
type: Inject,
|
|
54
54
|
args: [DEFAULT_FIREBASE_DEVELOPMENT_WIDGET_PROVIDERS_TOKEN]
|
|
55
55
|
}] }] });
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2ZWxvcG1lbnQud2lkZ2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9kZXZlbG9wbWVudC9kZXZlbG9wbWVudC53aWRnZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBaUIsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHbkU7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtREFBbUQsR0FBRyxJQUFJLGNBQWMsQ0FBc0MsNENBQTRDLENBQUMsQ0FBQztBQUV6Szs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLG1DQUFtQztJQUNyQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVwQyxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQW9ELENBQUM7SUFFeEYsWUFBcUYsY0FBbUQ7UUFDdEksSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLENBQUMsUUFBMkMsRUFBRSxXQUFvQixJQUFJO1FBQzVFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRWxDLElBQUksUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzFELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQzt3R0FuQ1UsbUNBQW1DLGtCQUtkLG1EQUFtRDs0R0FMeEUsbUNBQW1DOzs0RkFBbkMsbUNBQW1DO2tCQUQvQyxVQUFVOzswQkFNSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1EQUFtRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGl0ZXJhYmxlVG9BcnJheSB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGJ4V2lkZ2V0U2VydmljZSwgRGJ4V2lkZ2V0VHlwZSB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWInO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VEZXZlbG9wbWVudFdpZGdldEVudHJ5IH0gZnJvbSAnLi9kZXZlbG9wbWVudC53aWRnZXQnO1xuXG4vKipcbiAqIERlZmF1bHQgcHJvdmlkZXJzIHRvIGluamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRklSRUJBU0VfREVWRUxPUE1FTlRfV0lER0VUX1BST1ZJREVSU19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYnhGaXJlYmFzZURldmVsb3BtZW50V2lkZ2V0RW50cnlbXT4oJ0RlZmF1bHREYnhGaXJlYmFzZURldmVsb3BtZW50V2lkZ2V0RW50cmllcycpO1xuXG4vKipcbiAqIFNlcnZpY2UgdXNlZCBmb3IgcmVnaXN0ZXJpbmcgd2lkZ2V0cyB1c2VkIGZvciBkZXZlbG9wbWVudC5cbiAqXG4gKiBEZWZhdWx0IHByb3ZpZGVycyBjYW4gYmUgY29uZmlndXJlZCBieSB0aGUgREVGQVVMVF9GSVJFQkFTRV9BVVRIX0xPR0lOX1BST1ZJREVSU19UT0tFTiBpbmplY3RhYmxlIHZhbHVlLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGJ4RmlyZWJhc2VEZXZlbG9wbWVudFdpZGdldFNlcnZpY2Uge1xuICByZWFkb25seSBkYnhXaWRnZXRTZXJ2aWNlID0gaW5qZWN0KERieFdpZGdldFNlcnZpY2UpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VudHJpZXMgPSBuZXcgTWFwPERieFdpZGdldFR5cGUsIERieEZpcmViYXNlRGV2ZWxvcG1lbnRXaWRnZXRFbnRyeT4oKTtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KERFRkFVTFRfRklSRUJBU0VfREVWRUxPUE1FTlRfV0lER0VUX1BST1ZJREVSU19UT0tFTikgZGVmYXVsdEVudHJpZXM6IERieEZpcmViYXNlRGV2ZWxvcG1lbnRXaWRnZXRFbnRyeVtdKSB7XG4gICAgaWYgKGRlZmF1bHRFbnRyaWVzKSB7XG4gICAgICBkZWZhdWx0RW50cmllcy5mb3JFYWNoKCh4KSA9PiB0aGlzLnJlZ2lzdGVyKHgsIGZhbHNlKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gcmVnaXN0ZXIgYSBwcm92aWRlci4gSWYgYSBwcm92aWRlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQsIHRoaXMgd2lsbCBvdmVycmlkZSBpdCBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBAcGFyYW0gcHJvdmlkZXJcbiAgICogQHBhcmFtIG92ZXJyaWRlXG4gICAqL1xuICByZWdpc3Rlcihwcm92aWRlcjogRGJ4RmlyZWJhc2VEZXZlbG9wbWVudFdpZGdldEVudHJ5LCBvdmVycmlkZTogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCB0eXBlID0gcHJvdmlkZXIud2lkZ2V0LnR5cGU7XG5cbiAgICBpZiAob3ZlcnJpZGUgfHwgIXRoaXMuX2VudHJpZXMuaGFzKHR5cGUpKSB7XG4gICAgICB0aGlzLl9lbnRyaWVzLnNldCh0eXBlLCBwcm92aWRlcik7XG4gICAgICB0aGlzLmRieFdpZGdldFNlcnZpY2UucmVnaXN0ZXIocHJvdmlkZXIud2lkZ2V0LCBvdmVycmlkZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldEVudHJ5V2lkZ2V0SWRlbnRpZmllcnMoKTogRGJ4V2lkZ2V0VHlwZVtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9lbnRyaWVzLmtleXMoKSk7XG4gIH1cblxuICBnZXRFbnRyaWVzKCk6IERieEZpcmViYXNlRGV2ZWxvcG1lbnRXaWRnZXRFbnRyeVtdIHtcbiAgICByZXR1cm4gaXRlcmFibGVUb0FycmF5KHRoaXMuX2VudHJpZXMudmFsdWVzKCkpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal } from '@angular/core';
|
|
2
|
-
import { DbxActionDialogDirective, DbxActionModule, DbxActionSnackbarErrorDirective, DbxAnchorComponent, DbxButtonComponent,
|
|
3
|
-
import {
|
|
2
|
+
import { DbxActionDialogDirective, DbxActionModule, DbxActionSnackbarErrorDirective, DbxAnchorComponent, DbxButtonComponent, DbxWebFilePreviewService } from '@dereekb/dbx-web';
|
|
3
|
+
import { dateFromDateOrTimeSecondsNumber, isPast, MS_IN_SECOND } from '@dereekb/util';
|
|
4
4
|
import { DbxFirebaseStorageFileDownloadService } from '../service/storagefile.download.service';
|
|
5
|
+
import { maybeValueFromObservableOrValue } from '@dereekb/rxjs';
|
|
5
6
|
import { toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
6
|
-
import { distinctUntilChanged, interval, map, of, shareReplay, switchMap } from 'rxjs';
|
|
7
|
+
import { combineLatest, distinctUntilChanged, interval, map, of, shareReplay, switchMap } from 'rxjs';
|
|
7
8
|
import { MatDialog } from '@angular/material/dialog';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@dereekb/dbx-core";
|
|
10
|
-
export class
|
|
11
|
-
dbxFirebaseStorageFileDownloadService = inject(DbxFirebaseStorageFileDownloadService);
|
|
11
|
+
export class DbxFirebaseStorageFileDownloadButtonComponent {
|
|
12
12
|
matDialog = inject(MatDialog);
|
|
13
|
+
dbxWebFilePreviewService = inject(DbxWebFilePreviewService);
|
|
14
|
+
dbxFirebaseStorageFileDownloadService = inject(DbxFirebaseStorageFileDownloadService);
|
|
13
15
|
/**
|
|
14
16
|
* The StorageFileKey to set up the download button for.
|
|
15
17
|
*/
|
|
@@ -28,11 +30,17 @@ export class DbxFirebaseStorageFileDownloadButton {
|
|
|
28
30
|
* Defaults to true.
|
|
29
31
|
*/
|
|
30
32
|
showPreviewButton = input(true);
|
|
33
|
+
/**
|
|
34
|
+
* Whether or not to pre-load the download URL from the source.
|
|
35
|
+
*/
|
|
36
|
+
preload = input(undefined);
|
|
31
37
|
/**
|
|
32
38
|
* Output event emitted when the download URL changes.
|
|
33
39
|
*/
|
|
34
40
|
downloadUrlChange = output();
|
|
35
41
|
config = input();
|
|
42
|
+
source = input();
|
|
43
|
+
source$ = toObservable(this.source);
|
|
36
44
|
configSignal = computed(() => {
|
|
37
45
|
const config = this.config();
|
|
38
46
|
const result = {
|
|
@@ -48,12 +56,20 @@ export class DbxFirebaseStorageFileDownloadButton {
|
|
|
48
56
|
return result;
|
|
49
57
|
});
|
|
50
58
|
preloadSignal = computed(() => {
|
|
59
|
+
const preload = this.preload();
|
|
60
|
+
const source = this.source();
|
|
51
61
|
const config = this.configSignal();
|
|
52
|
-
return config.preload ?? false;
|
|
62
|
+
return preload ?? source?.preload ?? config.preload ?? false;
|
|
53
63
|
});
|
|
54
64
|
downloadUrlSignal = signal(undefined);
|
|
65
|
+
downloadMimeTypeSignal = signal(undefined);
|
|
55
66
|
downloadUrlExpiresAtSignal = signal(undefined);
|
|
56
|
-
|
|
67
|
+
storageFileKeyFromInput$ = toObservable(this.storageFileKey).pipe(distinctUntilChanged(), shareReplay(1));
|
|
68
|
+
storageFileKeyFromSource$ = this.source$.pipe(map((source) => source?.storageFileKey), maybeValueFromObservableOrValue(), distinctUntilChanged(), shareReplay(1));
|
|
69
|
+
storageFileKey$ = combineLatest([this.storageFileKeyFromInput$, this.storageFileKeyFromSource$]).pipe(map(([storageFileKeyFromInput, storageFileKeyFromSource]) => {
|
|
70
|
+
return storageFileKeyFromInput ?? storageFileKeyFromSource;
|
|
71
|
+
}), distinctUntilChanged(), shareReplay(1));
|
|
72
|
+
storageFileKeySignal = toSignal(this.storageFileKey$);
|
|
57
73
|
hasDownloadUrlSignal = computed(() => Boolean(this.downloadUrlSignal()));
|
|
58
74
|
buttonStyleSignal = computed(() => {
|
|
59
75
|
const config = this.configSignal();
|
|
@@ -113,14 +129,17 @@ export class DbxFirebaseStorageFileDownloadButton {
|
|
|
113
129
|
const hasDownloadUrl = this.hasDownloadUrlSignal();
|
|
114
130
|
return hasDownloadUrl && (config.showPreviewButton ?? true);
|
|
115
131
|
});
|
|
132
|
+
openCustomPreviewSignal = computed(() => {
|
|
133
|
+
const config = this.configSignal();
|
|
134
|
+
return config.openCustomPreview;
|
|
135
|
+
});
|
|
116
136
|
handleOpenPreviewDialog = () => {
|
|
137
|
+
const openPreview = this.openCustomPreviewSignal();
|
|
117
138
|
const srcUrl = this.downloadUrlSignal();
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
sanitizeUrl: true
|
|
123
|
-
});
|
|
139
|
+
const inputEmbedMimeType = this.embedMimeType();
|
|
140
|
+
const downloadMimeType = this.downloadMimeTypeSignal();
|
|
141
|
+
const embedMimeType = inputEmbedMimeType ?? downloadMimeType;
|
|
142
|
+
return openPreview?.(srcUrl, embedMimeType) ?? this.dbxWebFilePreviewService.openPreviewDialog(srcUrl, embedMimeType);
|
|
124
143
|
};
|
|
125
144
|
// Cached Url Effect
|
|
126
145
|
// When the key changes, check the cache to see if it is already available, and populate the download url if it is.
|
|
@@ -130,13 +149,14 @@ export class DbxFirebaseStorageFileDownloadButton {
|
|
|
130
149
|
const cachedPair = this.cachedUrlForStorageFileKeySignal();
|
|
131
150
|
if (cachedPair) {
|
|
132
151
|
this.downloadUrlSignal.set(cachedPair.downloadUrl);
|
|
152
|
+
this.downloadMimeTypeSignal.set(cachedPair.mimeType);
|
|
133
153
|
this.downloadUrlExpiresAtSignal.set(cachedPair.expiresAt);
|
|
134
154
|
}
|
|
135
155
|
}, {
|
|
136
156
|
allowSignalWrites: true
|
|
137
157
|
});
|
|
138
158
|
// Expiration Effect
|
|
139
|
-
downloadUrlExpiresAt$ = toObservable(this.downloadUrlExpiresAtSignal).pipe(map(
|
|
159
|
+
downloadUrlExpiresAt$ = toObservable(this.downloadUrlExpiresAtSignal).pipe(map(dateFromDateOrTimeSecondsNumber), distinctUntilChanged(), shareReplay(1));
|
|
140
160
|
downloadUrlHasExpired$ = this.downloadUrlExpiresAt$.pipe(switchMap((x) => {
|
|
141
161
|
let obs;
|
|
142
162
|
if (x) {
|
|
@@ -152,6 +172,7 @@ export class DbxFirebaseStorageFileDownloadButton {
|
|
|
152
172
|
const expired = this.downloadUrlHasExpiredSignal();
|
|
153
173
|
if (expired) {
|
|
154
174
|
this.downloadUrlSignal.set(undefined);
|
|
175
|
+
this.downloadMimeTypeSignal.set(undefined);
|
|
155
176
|
this.downloadUrlExpiresAtSignal.set(undefined);
|
|
156
177
|
}
|
|
157
178
|
}, {
|
|
@@ -160,23 +181,46 @@ export class DbxFirebaseStorageFileDownloadButton {
|
|
|
160
181
|
// Output Effect
|
|
161
182
|
downloadUrlChangeEffect = effect(() => {
|
|
162
183
|
const downloadUrl = this.downloadUrlSignal();
|
|
184
|
+
const source = this.source();
|
|
163
185
|
this.downloadUrlChange.emit(downloadUrl);
|
|
186
|
+
if (source?.downloadUrlChanged) {
|
|
187
|
+
source.downloadUrlChanged(downloadUrl);
|
|
188
|
+
}
|
|
164
189
|
});
|
|
165
190
|
// Handlers
|
|
166
|
-
handleGetDownloadUrl = (value) => {
|
|
167
|
-
|
|
191
|
+
handleGetDownloadUrl = (value, context) => {
|
|
192
|
+
const source = this.source();
|
|
193
|
+
const { customSource, handleGetDownloadUrl } = source ?? {};
|
|
194
|
+
if (handleGetDownloadUrl) {
|
|
195
|
+
handleGetDownloadUrl(value, context);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
context.startWorkingWithObservable(this.dbxFirebaseStorageFileDownloadService.downloadPairForStorageFileUsingSource(value, customSource));
|
|
199
|
+
}
|
|
168
200
|
};
|
|
169
201
|
handleGetDownloadUrlSuccess = (value) => {
|
|
202
|
+
const source = this.source();
|
|
203
|
+
const { handleGetDownloadUrlSuccess } = source ?? {};
|
|
170
204
|
this.downloadUrlSignal.set(value.downloadUrl);
|
|
205
|
+
this.downloadMimeTypeSignal.set(value.mimeType);
|
|
171
206
|
this.downloadUrlExpiresAtSignal.set(value.expiresAt);
|
|
207
|
+
if (handleGetDownloadUrlSuccess) {
|
|
208
|
+
handleGetDownloadUrlSuccess(value);
|
|
209
|
+
}
|
|
172
210
|
};
|
|
173
211
|
handleGetDownloadUrlError = (error) => {
|
|
212
|
+
const source = this.source();
|
|
213
|
+
const { handleGetDownloadUrlError } = source ?? {};
|
|
174
214
|
this.downloadUrlSignal.set(undefined);
|
|
215
|
+
this.downloadMimeTypeSignal.set(undefined);
|
|
175
216
|
this.downloadUrlExpiresAtSignal.set(undefined);
|
|
217
|
+
if (handleGetDownloadUrlError) {
|
|
218
|
+
handleGetDownloadUrlError(error);
|
|
219
|
+
}
|
|
176
220
|
};
|
|
177
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type:
|
|
178
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type:
|
|
179
|
-
<dbx-anchor dbxActionAnchor [anchor]="anchorSignal()" dbxAction [dbxActionAutoTrigger]="preloadSignal()" dbxActionSnackbarError [dbxActionDisabled]="!
|
|
221
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
222
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFirebaseStorageFileDownloadButtonComponent, isStandalone: true, selector: "dbx-firebase-storagefile-download-button", inputs: { storageFileKey: { classPropertyName: "storageFileKey", publicName: "storageFileKey", isSignal: true, isRequired: false, transformFunction: null }, storageFileDownloadUrl: { classPropertyName: "storageFileDownloadUrl", publicName: "storageFileDownloadUrl", isSignal: true, isRequired: false, transformFunction: null }, embedMimeType: { classPropertyName: "embedMimeType", publicName: "embedMimeType", isSignal: true, isRequired: false, transformFunction: null }, showPreviewButton: { classPropertyName: "showPreviewButton", publicName: "showPreviewButton", isSignal: true, isRequired: false, transformFunction: null }, preload: { classPropertyName: "preload", publicName: "preload", isSignal: true, isRequired: false, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null }, source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { downloadUrlChange: "downloadUrlChange" }, ngImport: i0, template: `
|
|
223
|
+
<dbx-anchor dbxActionAnchor [anchor]="anchorSignal()" dbxAction [dbxActionAutoTrigger]="preloadSignal()" dbxActionSnackbarError [dbxActionDisabled]="!storageFileKeySignal()" [dbxActionValue]="storageFileKeySignal()" [dbxActionHandler]="handleGetDownloadUrl" [dbxActionSuccessHandler]="handleGetDownloadUrlSuccess" [dbxActionErrorHandler]="handleGetDownloadUrlError">
|
|
180
224
|
<dbx-button dbxActionButton [buttonStyle]="buttonStyleSignal()" [icon]="iconSignal()" [text]="textSignal()"></dbx-button>
|
|
181
225
|
</dbx-anchor>
|
|
182
226
|
@if (showPreviewButtonSignal()) {
|
|
@@ -187,12 +231,12 @@ export class DbxFirebaseStorageFileDownloadButton {
|
|
|
187
231
|
}
|
|
188
232
|
`, isInline: true, dependencies: [{ kind: "component", type: DbxButtonComponent, selector: "dbx-button", inputs: ["bar", "type", "buttonStyle", "color", "spinnerColor", "customButtonColor", "customTextColor", "customSpinnerColor", "basic", "raised", "stroked", "flat", "iconOnly", "fab", "mode"] }, { kind: "ngmodule", type: DbxActionModule }, { kind: "directive", type: i1.DbxActionDirective, selector: "dbx-action,[dbxAction],dbx-action-context,[dbxActionContext]", exportAs: ["action", "dbxAction"] }, { kind: "directive", type: i1.DbxActionHandlerDirective, selector: "[dbxActionHandler]", inputs: ["dbxActionHandler"] }, { kind: "directive", type: i1.DbxActionHandlerValueDirective, selector: "[dbxActionHandlerValue]", inputs: ["dbxActionHandlerValue"] }, { kind: "directive", type: i1.DbxActionDisabledDirective, selector: "[dbxActionDisabled]", inputs: ["dbxActionDisabled"] }, { kind: "directive", type: i1.DbxActionAutoTriggerDirective, selector: "dbxActionAutoTrigger,[dbxActionAutoTrigger]", inputs: ["triggerDebounce", "triggerThrottle", "triggerErrorThrottle", "maxErrorsForThrottle", "triggerLimit", "dbxActionAutoTrigger", "useFastTriggerPreset", "useInstantTriggerPreset"] }, { kind: "directive", type: i1.DbxActionValueDirective, selector: "dbxActionValue,[dbxActionValue]", inputs: ["dbxActionValue"] }, { kind: "directive", type: i1.DbxActionSuccessHandlerDirective, selector: "[dbxActionSuccessHandler]", inputs: ["dbxActionSuccessHandler"] }, { kind: "directive", type: i1.DbxActionErrorHandlerDirective, selector: "[dbxActionErrorHandler]", inputs: ["dbxActionErrorHandler"] }, { kind: "directive", type: i1.DbxActionButtonDirective, selector: "[dbxActionButton]" }, { kind: "directive", type: DbxActionSnackbarErrorDirective, selector: "[dbxActionSnackbarError]", inputs: ["dbxActionSnackbarError"] }, { kind: "directive", type: DbxActionDialogDirective, selector: "[dbxActionDialog]", inputs: ["dbxActionDialog", "dbxActionDialogIsModified", "dbxActionDialogIsEqual"], exportAs: ["dbxActionDialog"] }, { kind: "component", type: DbxAnchorComponent, selector: "dbx-anchor, [dbx-anchor]", inputs: ["block"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
189
233
|
}
|
|
190
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type:
|
|
234
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButtonComponent, decorators: [{
|
|
191
235
|
type: Component,
|
|
192
236
|
args: [{
|
|
193
237
|
selector: 'dbx-firebase-storagefile-download-button',
|
|
194
238
|
template: `
|
|
195
|
-
<dbx-anchor dbxActionAnchor [anchor]="anchorSignal()" dbxAction [dbxActionAutoTrigger]="preloadSignal()" dbxActionSnackbarError [dbxActionDisabled]="!
|
|
239
|
+
<dbx-anchor dbxActionAnchor [anchor]="anchorSignal()" dbxAction [dbxActionAutoTrigger]="preloadSignal()" dbxActionSnackbarError [dbxActionDisabled]="!storageFileKeySignal()" [dbxActionValue]="storageFileKeySignal()" [dbxActionHandler]="handleGetDownloadUrl" [dbxActionSuccessHandler]="handleGetDownloadUrlSuccess" [dbxActionErrorHandler]="handleGetDownloadUrlError">
|
|
196
240
|
<dbx-button dbxActionButton [buttonStyle]="buttonStyleSignal()" [icon]="iconSignal()" [text]="textSignal()"></dbx-button>
|
|
197
241
|
</dbx-anchor>
|
|
198
242
|
@if (showPreviewButtonSignal()) {
|
|
@@ -207,4 +251,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
207
251
|
standalone: true
|
|
208
252
|
}]
|
|
209
253
|
}] });
|
|
210
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG93bmxvYWQuYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvY29udGFpbmVyL3N0b3JhZ2VmaWxlLmRvd25sb2FkLmJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsd0JBQXdCLEVBQTJCLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBa0IsdUJBQXVCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV4TixPQUFPLEVBQXVCLHdCQUF3QixFQUF3QixNQUFNLEVBQVMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBR2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFbkcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUF5Q3JELE1BQU0sT0FBTyxvQ0FBb0M7SUFDdEMscUNBQXFDLEdBQUcsTUFBTSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDdEYsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2Qzs7T0FFRztJQUNNLGNBQWMsR0FBRyxLQUFL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QztRQUN0QyxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQzt3R0F0T1Msb0NBQW9DOzRGQUFwQyxvQ0FBb0MsMDRCQWZyQzs7Ozs7Ozs7OztHQVVULDREQUNTLGtCQUFrQixzUEFBRSxlQUFlLGkyQ0FBRSwrQkFBK0IseUdBQUUsd0JBQXdCLGlMQUFFLGtCQUFrQjs7NEZBSWpILG9DQUFvQztrQkFqQmhELFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDBDQUEwQztvQkFDcEQsUUFBUSxFQUFFOzs7Ozs7Ozs7O0dBVVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLCtCQUErQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixDQUFDO29CQUM3SCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgb3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERieEFjdGlvbkRpYWxvZ0RpcmVjdGl2ZSwgRGJ4QWN0aW9uRGlhbG9nRnVuY3Rpb24sIERieEFjdGlvbk1vZHVsZSwgRGJ4QWN0aW9uU25hY2tiYXJFcnJvckRpcmVjdGl2ZSwgRGJ4QW5jaG9yQ29tcG9uZW50LCBEYnhCdXR0b25Db21wb25lbnQsIERieEJ1dHRvblN0eWxlLCBEYnhFbWJlZERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ0BkZXJlZWtiL2RieC13ZWInO1xuaW1wb3J0IHsgU3RvcmFnZUZpbGVLZXksIFN0b3JhZ2VGaWxlUHVibGljRG93bmxvYWRVcmwsIFN0b3JhZ2VGaWxlU2lnbmVkRG93bmxvYWRVcmwgfSBmcm9tICdAZGVyZWVrYi9maXJlYmFzZSc7XG5pbXBvcnQgeyBDb250ZW50VHlwZU1pbWVUeXBlLCBkYXRlRnJvbURhdGVPclRpbWVOdW1iZXIsIERhdGVPclVuaXhUaW1lTnVtYmVyLCBpc1Bhc3QsIE1heWJlLCBNU19JTl9TRUNPTkQgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3N0b3JhZ2VmaWxlLmRvd25sb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2xpY2thYmxlQW5jaG9yIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgV29ya1VzaW5nT2JzZXJ2YWJsZSB9IGZyb20gJ0BkZXJlZWtiL3J4anMnO1xuaW1wb3J0IHsgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBpbnRlcnZhbCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpciB9IGZyb20gJy4uL3NlcnZpY2Uvc3RvcmFnZWZpbGUuZG93bmxvYWQuc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db25maWcge1xuICByZWFkb25seSBidXR0b25TdHlsZT86IE1heWJlPERieEJ1dHRvblN0eWxlPjtcbiAgcmVhZG9ubHkgcHJldmlld0J1dHRvblN0eWxlPzogTWF5YmU8RGJ4QnV0dG9uU3R5bGU+O1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcHJlLWxvYWQgdGhlIGRvd25sb2FkIHVybCBmcm9tIHRoZSBzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBwcmVsb2FkPzogTWF5YmU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgcHJldmlldyBidXR0b24uXG4gICAqL1xuICByZWFkb25seSBzaG93UHJldmlld0J1dHRvbj86IE1heWJlPGJvb2xlYW4+O1xuICByZWFkb25seSBpY29uPzogTWF5YmU8c3RyaW5nPjtcbiAgcmVhZG9ubHkgdGV4dD86IE1heWJlPHN0cmluZz47XG4gIHJlYWRvbmx5IGRvd25sb2FkUmVhZHlJY29uPzogTWF5YmU8c3RyaW5nPjtcbiAgcmVhZG9ubHkgZG93bmxvYWRSZWFkeVRleHQ/OiBNYXliZTxzdHJpbmc+O1xuICByZWFkb25seSBwcmV2aWV3SWNvbj86IE1heWJlPHN0cmluZz47XG4gIHJlYWRvbmx5IHByZXZpZXdUZXh0PzogTWF5YmU8c3RyaW5nPjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LWZpcmViYXNlLXN0b3JhZ2VmaWxlLWRvd25sb2FkLWJ1dHRvbicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRieC1hbmNob3IgZGJ4QWN0aW9uQW5jaG9yIFthbmNob3JdPVwiYW5jaG9yU2lnbmFsKClcIiBkYnhBY3Rpb24gW2RieEFjdGlvbkF1dG9UcmlnZ2VyXT1cInByZWxvYWRTaWduYWwoKVwiIGRieEFjdGlvblNuYWNrYmFyRXJyb3IgW2RieEFjdGlvbkRpc2FibGVkXT1cIiFzdG9yYWdlRmlsZUtleSgpXCIgW2RieEFjdGlvblZhbHVlXT1cInN0b3JhZ2VGaWxlS2V5XCIgW2RieEFjdGlvbkhhbmRsZXJdPVwiaGFuZGxlR2V0RG93bmxvYWRVcmxcIiBbZGJ4QWN0aW9uU3VjY2Vzc0hhbmRsZXJdPVwiaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzXCIgW2RieEFjdGlvbkVycm9ySGFuZGxlcl09XCJoYW5kbGVHZXREb3dubG9hZFVybEVycm9yXCI+XG4gICAgICA8ZGJ4LWJ1dHRvbiBkYnhBY3Rpb25CdXR0b24gW2J1dHRvblN0eWxlXT1cImJ1dHRvblN0eWxlU2lnbmFsKClcIiBbaWNvbl09XCJpY29uU2lnbmFsKClcIiBbdGV4dF09XCJ0ZXh0U2lnbmFsKClcIj48L2RieC1idXR0b24+XG4gICAgPC9kYngtYW5jaG9yPlxuICAgIEBpZiAoc2hvd1ByZXZpZXdCdXR0b25TaWduYWwoKSkge1xuICAgICAgPG5nLWNvbnRhaW5lciBkYnhBY3Rpb24gW2RieEFjdGlvbkRpYWxvZ109XCJoYW5kbGVPcGVuUHJldmlld0RpYWxvZ1wiIGRieEFjdGlvbkhhbmRsZXJWYWx1ZT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkYngtYnV0dG9uLXNwYWNlclwiPjwvc3Bhbj5cbiAgICAgICAgPGRieC1idXR0b24gZGJ4QWN0aW9uQnV0dG9uIFtidXR0b25TdHlsZV09XCJwcmV2aWV3QnV0dG9uU3R5bGVTaWduYWwoKVwiIFtpY29uXT1cInByZXZpZXdJY29uU2lnbmFsKClcIiBbdGV4dF09XCJwcmV2aWV3VGV4dFNpZ25hbCgpXCI+PC9kYngtYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgfVxuICBgLFxuICBpbXBvcnRzOiBbRGJ4QnV0dG9uQ29tcG9uZW50LCBEYnhBY3Rpb25Nb2R1bGUsIERieEFjdGlvblNuYWNrYmFyRXJyb3JEaXJlY3RpdmUsIERieEFjdGlvbkRpYWxvZ0RpcmVjdGl2ZSwgRGJ4QW5jaG9yQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uIHtcbiAgcmVhZG9ubHkgZGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZSA9IGluamVjdChEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgbWF0RGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG5cbiAgLyoqXG4gICAqIFRoZSBTdG9yYWdlRmlsZUtleSB0byBzZXQgdXAgdGhlIGRvd25sb2FkIGJ1dHRvbiBmb3IuXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlRmlsZUtleSA9IGlucHV0PE1heWJlPFN0b3JhZ2VGaWxlS2V5Pj4oKTtcblxuICAvKipcbiAgICogVGhlIGRvd25sb2FkIFVSTCB0byB1c2UgZm9yIHRoZSBkb3dubG9hZCBidXR0b24uXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlRmlsZURvd25sb2FkVXJsID0gaW5wdXQ8TWF5YmU8U3RvcmFnZUZpbGVTaWduZWREb3dubG9hZFVybCB8IFN0b3JhZ2VGaWxlUHVibGljRG93bmxvYWRVcmw+PigpO1xuXG4gIC8qKlxuICAgKiBUaGUgTUlNRSB0eXBlIHRvIHVzZSB0aGUgZW1iZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgZW1iZWRNaW1lVHlwZSA9IGlucHV0PE1heWJlPENvbnRlbnRUeXBlTWltZVR5cGUgfCBzdHJpbmc+PigpO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgcHJldmlldyBidXR0b24uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSBzaG93UHJldmlld0J1dHRvbiA9IGlucHV0PE1heWJlPGJvb2xlYW4+Pih0cnVlKTtcblxuICAvKipcbiAgICogT3V0cHV0IGV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZG93bmxvYWQgVVJMIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSBkb3dubG9hZFVybENoYW5nZSA9IG91dHB1dDxNYXliZTxTdG9yYWdlRmlsZVNpZ25lZERvd25sb2FkVXJsPj4oKTtcblxuICByZWFkb25seSBjb25maWcgPSBpbnB1dDxNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db25maWc+PigpO1xuXG4gIHJlYWRvbmx5IGNvbmZpZ1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db25maWcgPSB7XG4gICAgICBidXR0b25TdHlsZTogY29uZmlnPy5idXR0b25TdHlsZSxcbiAgICAgIHByZXZpZXdCdXR0b25TdHlsZTogY29uZmlnPy5wcmV2aWV3QnV0dG9uU3R5bGUsXG4gICAgICBpY29uOiBjb25maWc/Lmljb24gPz8gJ2Nsb3VkX2Rvd25sb2FkJyxcbiAgICAgIHRleHQ6IGNvbmZpZz8udGV4dCA/PyAnU3RhcnQgRG93bmxvYWQnLFxuICAgICAgZG93bmxvYWRSZWFkeUljb246IGNvbmZpZz8uZG93bmxvYWRSZWFkeUljb24gPz8gJ2Rvd25sb2FkJyxcbiAgICAgIGRvd25sb2FkUmVhZHlUZXh0OiBjb25maWc/LmRvd25sb2FkUmVhZHlUZXh0ID8/ICdTYXZlIEZpbGUnLFxuICAgICAgcHJldmlld0ljb246IGNvbmZpZz8ucHJldmlld0ljb24gPz8gJ3ByZXZpZXcnLFxuICAgICAgcHJldmlld1RleHQ6IGNvbmZpZz8ucHJldmlld1RleHQgPz8gJ1ZpZXcgRmlsZSdcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcHJlbG9hZFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIHJldHVybiBjb25maWcucHJlbG9hZCA/PyBmYWxzZTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxTaWduYWwgPSBzaWduYWw8TWF5YmU8U3RvcmFnZUZpbGVTaWduZWREb3dubG9hZFVybD4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsID0gc2lnbmFsPE1heWJlPERhdGVPclVuaXhUaW1lTnVtYmVyPj4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBzdG9yYWdlRmlsZUtleSQgPSB0b09ic2VydmFibGUodGhpcy5zdG9yYWdlRmlsZUtleSkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBzaGFyZVJlcGxheSgxKSk7XG5cbiAgcmVhZG9ubHkgaGFzRG93bmxvYWRVcmxTaWduYWwgPSBjb21wdXRlZCgoKSA9PiBCb29sZWFuKHRoaXMuZG93bmxvYWRVcmxTaWduYWwoKSkpO1xuXG4gIHJlYWRvbmx5IGJ1dHRvblN0eWxlU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IERieEJ1dHRvblN0eWxlID0ge1xuICAgICAgdHlwZTogJ3JhaXNlZCcsXG4gICAgICAuLi5jb25maWcuYnV0dG9uU3R5bGVcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcHJldmlld0J1dHRvblN0eWxlU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IERieEJ1dHRvblN0eWxlID0ge1xuICAgICAgdHlwZTogJ3JhaXNlZCcsXG4gICAgICAuLi5jb25maWcucHJldmlld0J1dHRvblN0eWxlXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGljb25TaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcbiAgICBjb25zdCBoYXNEb3dubG9hZFVybCA9IHRoaXMuaGFzRG93bmxvYWRVcmxTaWduYWwoKTtcbiAgICByZXR1cm4gaGFzRG93bmxvYWRVcmwgPyAoY29uZmlnLmRvd25sb2FkUmVhZHlJY29uID8/IGNvbmZpZy5pY29uKSA6IGNvbmZpZy5pY29uO1xuICB9KTtcblxuICByZWFkb25seSB0ZXh0U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgY29uc3QgaGFzRG93bmxvYWRVcmwgPSB0aGlzLmhhc0Rvd25sb2FkVXJsU2lnbmFsKCk7XG4gICAgcmV0dXJuIGhhc0Rvd25sb2FkVXJsID8gKGNvbmZpZy5kb3dubG9hZFJlYWR5VGV4dCA/PyBjb25maWcudGV4dCkgOiBjb25maWcudGV4dDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcHJldmlld0ljb25TaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcbiAgICByZXR1cm4gY29uZmlnLnByZXZpZXdJY29uO1xuICB9KTtcblxuICByZWFkb25seSBwcmV2aWV3VGV4dFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIHJldHVybiBjb25maWcucHJldmlld1RleHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFuY2hvclNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkb3dubG9hZFVybCA9IHRoaXMuZG93bmxvYWRVcmxTaWduYWwoKTtcblxuICAgIGxldCByZXN1bHQ6IE1heWJlPENsaWNrYWJsZUFuY2hvcj47XG5cbiAgICBpZiAoZG93bmxvYWRVcmwpIHtcbiAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgdXJsOiBkb3dubG9hZFVybFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICByZWFkb25seSBzdG9yYWdlRmlsZURvd25sb2FkVXJsRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGRvd25sb2FkVXJsID0gdGhpcy5zdG9yYWdlRmlsZURvd25sb2FkVXJsKCk7XG5cbiAgICAgIGlmIChkb3dubG9hZFVybCB8fCBkb3dubG9hZFVybCA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmRvd25sb2FkVXJsU2lnbmFsLnNldChkb3dubG9hZFVybCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZVxuICAgIH1cbiAgKTtcblxuICAvLyBQcmV2aWV3XG4gIHJlYWRvbmx5IHNob3dQcmV2aWV3QnV0dG9uU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgY29uc3QgaGFzRG93bmxvYWRVcmwgPSB0aGlzLmhhc0Rvd25sb2FkVXJsU2lnbmFsKCk7XG4gICAgcmV0dXJuIGhhc0Rvd25sb2FkVXJsICYmIChjb25maWcuc2hvd1ByZXZpZXdCdXR0b24gPz8gdHJ1ZSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhhbmRsZU9wZW5QcmV2aWV3RGlhbG9nOiBEYnhBY3Rpb25EaWFsb2dGdW5jdGlvbiA9ICgpID0+IHtcbiAgICBjb25zdCBzcmNVcmwgPSB0aGlzLmRvd25sb2FkVXJsU2lnbmFsKCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGVtYmVkTWltZVR5cGUgPSB0aGlzLmVtYmVkTWltZVR5cGUoKTtcblxuICAgIHJldHVybiBEYnhFbWJlZERpYWxvZ0NvbXBvbmVudC5vcGVuRGlhbG9nKHRoaXMubWF0RGlhbG9nLCB7XG4gICAgICBzcmNVcmwsXG4gICAgICBlbWJlZE1pbWVUeXBlLFxuICAgICAgc2FuaXRpemVVcmw6IHRydWVcbiAgICB9KTtcbiAgfTtcblxuICAvLyBDYWNoZWQgVXJsIEVmZmVjdFxuICAvLyBXaGVuIHRoZSBrZXkgY2hhbmdlcywgY2hlY2sgdGhlIGNhY2hlIHRvIHNlZSBpZiBpdCBpcyBhbHJlYWR5IGF2YWlsYWJsZSwgYW5kIHBvcHVsYXRlIHRoZSBkb3dubG9hZCB1cmwgaWYgaXQgaXMuXG4gIHJlYWRvbmx5IGNhY2hlZFVybEZvclN0b3JhZ2VGaWxlS2V5JCA9IHRoaXMuc3RvcmFnZUZpbGVLZXkkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChrZXkpID0+IChrZXkgPyB0aGlzLmRieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UuZ2V0Q2FjaGVkRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoa2V5KSA6IG9mKG51bGwpKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcbiAgcmVhZG9ubHkgY2FjaGVkVXJsRm9yU3RvcmFnZUZpbGVLZXlTaWduYWwgPSB0b1NpZ25hbCh0aGlzLmNhY2hlZFVybEZvclN0b3JhZ2VGaWxlS2V5JCk7XG5cbiAgcmVhZG9ubHkgY2FjaGVkVXJsRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGNhY2hlZFBhaXIgPSB0aGlzLmNhY2hlZFVybEZvclN0b3JhZ2VGaWxlS2V5U2lnbmFsKCk7XG5cbiAgICAgIGlmIChjYWNoZWRQYWlyKSB7XG4gICAgICAgIHRoaXMuZG93bmxvYWRVcmxTaWduYWwuc2V0KGNhY2hlZFBhaXIuZG93bmxvYWRVcmwpO1xuICAgICAgICB0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsLnNldChjYWNoZWRQYWlyLmV4cGlyZXNBdCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZVxuICAgIH1cbiAgKTtcblxuICAvLyBFeHBpcmF0aW9uIEVmZmVjdFxuICByZWFkb25seSBkb3dubG9hZFVybEV4cGlyZXNBdCQgPSB0b09ic2VydmFibGUodGhpcy5kb3dubG9hZFVybEV4cGlyZXNBdFNpZ25hbCkucGlwZShtYXAoZGF0ZUZyb21EYXRlT3JUaW1lTnVtYmVyKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsSGFzRXhwaXJlZCQgPSB0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgICAgaWYgKHgpIHtcbiAgICAgICAgb2JzID0gaW50ZXJ2YWwoTVNfSU5fU0VDT05EKS5waXBlKFxuICAgICAgICAgIG1hcCgoKSA9PiBpc1Bhc3QoeCkpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9icyA9IG9mKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxIYXNFeHBpcmVkU2lnbmFsID0gdG9TaWduYWwodGhpcy5kb3dubG9hZFVybEhhc0V4cGlyZWQkKTtcbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxIYXNFeHBpcmVkRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGV4cGlyZWQgPSB0aGlzLmRvd25sb2FkVXJsSGFzRXhwaXJlZFNpZ25hbCgpO1xuXG4gICAgICBpZiAoZXhwaXJlZCkge1xuICAgICAgICB0aGlzLmRvd25sb2FkVXJsU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgYWxsb3dTaWduYWxXcml0ZXM6IHRydWVcbiAgICB9XG4gICk7XG5cbiAgLy8gT3V0cHV0IEVmZmVjdFxuICByZWFkb25seSBkb3dubG9hZFVybENoYW5nZUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZG93bmxvYWRVcmwgPSB0aGlzLmRvd25sb2FkVXJsU2lnbmFsKCk7XG4gICAgdGhpcy5kb3dubG9hZFVybENoYW5nZS5lbWl0KGRvd25sb2FkVXJsKTtcbiAgfSk7XG5cbiAgLy8gSGFuZGxlcnNcbiAgcmVhZG9ubHkgaGFuZGxlR2V0RG93bmxvYWRVcmw6IFdvcmtVc2luZ09ic2VydmFibGU8U3RvcmFnZUZpbGVLZXksIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+ID0gKHZhbHVlOiBTdG9yYWdlRmlsZUtleSkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UuZG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUodmFsdWUpO1xuICB9O1xuXG4gIHJlYWRvbmx5IGhhbmRsZUdldERvd25sb2FkVXJsU3VjY2VzcyA9ICh2YWx1ZTogRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcikgPT4ge1xuICAgIHRoaXMuZG93bmxvYWRVcmxTaWduYWwuc2V0KHZhbHVlLmRvd25sb2FkVXJsKTtcbiAgICB0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsLnNldCh2YWx1ZS5leHBpcmVzQXQpO1xuICB9O1xuXG4gIHJlYWRvbmx5IGhhbmRsZUdldERvd25sb2FkVXJsRXJyb3IgPSAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICB0aGlzLmRvd25sb2FkVXJsU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gIH07XG59XG4iXX0=
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG93bmxvYWQuYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvY29udGFpbmVyL3N0b3JhZ2VmaWxlLmRvd25sb2FkLmJ1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsd0JBQXdCLEVBQTJCLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBa0Isd0JBQXdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV6TixPQUFPLEVBQXVCLCtCQUErQixFQUFtQyxNQUFNLEVBQVMsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25KLE9BQU8sRUFBRSxxQ0FBcUMsRUFBcUQsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuSixPQUFPLEVBQTBCLCtCQUErQixFQUFrQyxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsSCxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLDBCQUEwQixDQUFDOzs7QUFnR25FLE1BQU0sT0FBTyw2Q0FBNkM7SUFDL0MsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU5Qix3QkFBd0IsR0FBRyxN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ckMsQ0FBQztJQUNILENBQUMsQ0FBQztJQUVPLHlCQUF5QixHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7UUFDdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzdCLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFFbkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFL0MsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQzlCLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDLENBQUM7d0dBelNTLDZDQUE2Qzs0RkFBN0MsNkNBQTZDLG1vQ0FmOUM7Ozs7Ozs7Ozs7R0FVVCw0REFDUyxrQkFBa0Isc1BBQUUsZUFBZSxpMkNBQUUsK0JBQStCLHlHQUFFLHdCQUF3QixpTEFBRSxrQkFBa0I7OzRGQUlqSCw2Q0FBNkM7a0JBakJ6RCxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQ0FBMEM7b0JBQ3BELFFBQVEsRUFBRTs7Ozs7Ozs7OztHQVVUO29CQUNELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSx3QkFBd0IsRUFBRSxrQkFBa0IsQ0FBQztvQkFDN0gsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYnhBY3Rpb25EaWFsb2dEaXJlY3RpdmUsIERieEFjdGlvbkRpYWxvZ0Z1bmN0aW9uLCBEYnhBY3Rpb25Nb2R1bGUsIERieEFjdGlvblNuYWNrYmFyRXJyb3JEaXJlY3RpdmUsIERieEFuY2hvckNvbXBvbmVudCwgRGJ4QnV0dG9uQ29tcG9uZW50LCBEYnhCdXR0b25TdHlsZSwgRGJ4V2ViRmlsZVByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnQGRlcmVla2IvZGJ4LXdlYic7XG5pbXBvcnQgeyBTdG9yYWdlRmlsZURvd25sb2FkVXJsLCBTdG9yYWdlRmlsZUtleSB9IGZyb20gJ0BkZXJlZWtiL2ZpcmViYXNlJztcbmltcG9ydCB7IENvbnRlbnRUeXBlTWltZVR5cGUsIGRhdGVGcm9tRGF0ZU9yVGltZVNlY29uZHNOdW1iZXIsIERhdGVPclVuaXhEYXRlVGltZVNlY29uZHNOdW1iZXIsIGlzUGFzdCwgTWF5YmUsIE1TX0lOX1NFQ09ORCB9IGZyb20gJ0BkZXJlZWtiL3V0aWwnO1xuaW1wb3J0IHsgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZSwgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZUN1c3RvbVNvdXJjZSB9IGZyb20gJy4uL3NlcnZpY2Uvc3RvcmFnZWZpbGUuZG93bmxvYWQuc2VydmljZSc7XG5pbXBvcnQgeyBDbGlja2FibGVBbmNob3IgfSBmcm9tICdAZGVyZWVrYi9kYngtY29yZSc7XG5pbXBvcnQgeyBNYXliZU9ic2VydmFibGVPclZhbHVlLCBtYXliZVZhbHVlRnJvbU9ic2VydmFibGVPclZhbHVlLCBXb3JrSW5zdGFuY2UsIFdvcmtVc2luZ0NvbnRleHQgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgaW50ZXJ2YWwsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXIgfSBmcm9tICcuLi9zZXJ2aWNlL3N0b3JhZ2VmaWxlLmRvd25sb2FkLnN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbi8qKlxuICogU291cmNlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uU291cmNlIHtcbiAgLyoqXG4gICAqIEEgc3RhdGljIFN0b3JhZ2VGaWxlS2V5IHRvIHVzZS5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5PzogTWF5YmVPYnNlcnZhYmxlT3JWYWx1ZTxTdG9yYWdlRmlsZUtleT47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBwcmUtbG9hZCB0aGUgZG93bmxvYWQgdXJsIGZyb20gdGhlIHNvdXJjZS5cbiAgICpcbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICByZWFkb25seSBwcmVsb2FkPzogTWF5YmU8Ym9vbGVhbj47XG4gIC8qKlxuICAgKiBUaGUgZXhwZWN0ZWQgbWltZSB0eXBlIG9mIHRoZSBTdG9yYWdlRmlsZSB0byB1c2Ugd2hlbiBwcmV2aWV3aW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVFbWJlZE1pbWVUeXBlPzogTWF5YmVPYnNlcnZhYmxlT3JWYWx1ZTxDb250ZW50VHlwZU1pbWVUeXBlIHwgc3RyaW5nPjtcbiAgLyoqXG4gICAqIEN1c3RvbSBzb3VyY2UgdG8gdXNlIHdpdGggdGhlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UuIEEgbW9yZSBzaW1wbGUgYWx0ZXJuYXRpdmUgdG8gdXNpbmcgaGFuZGxlR2V0RG93bmxvYWRVcmwoKS5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVNvdXJjZT86IE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2VDdXN0b21Tb3VyY2U+O1xuICAvKipcbiAgICogT3B0aW9uYWwgY3VzdG9tIHdvcmsgdG8gdXNlIHRvIGdldCB0aGUgZG93bmxvYWQgVVJMLlxuICAgKlxuICAgKiBJZiBwcm92aWRlZCwgY3VzdG9tU291cmNlIGlzIGlnbm9yZWQuXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybD86IE1heWJlPFdvcmtVc2luZ0NvbnRleHQ8U3RvcmFnZUZpbGVLZXksIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+PjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBzdWNjZXNzIGhhbmRsZXIgZm9yIHRoZSBkb3dubG9hZCBVUkwuXG4gICAqL1xuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3M/OiAodmFsdWU6IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXIpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBjdXN0b20gZXJyb3IgaGFuZGxlciBmb3IgdGhlIGRvd25sb2FkIFVSTC5cbiAgICovXG4gIHJlYWRvbmx5IGhhbmRsZUdldERvd25sb2FkVXJsRXJyb3I/OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZG93bmxvYWQgVVJMIGNoYW5nZXMuXG4gICAqL1xuICByZWFkb25seSBkb3dubG9hZFVybENoYW5nZWQ/OiBNYXliZTwoZG93bmxvYWRVcmw6IE1heWJlPFN0b3JhZ2VGaWxlRG93bmxvYWRVcmw+KSA9PiB2b2lkPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkQnV0dG9uQ29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvbkNvbmZpZyB7XG4gIHJlYWRvbmx5IGJ1dHRvblN0eWxlPzogTWF5YmU8RGJ4QnV0dG9uU3R5bGU+O1xuICByZWFkb25seSBwcmV2aWV3QnV0dG9uU3R5bGU/OiBNYXliZTxEYnhCdXR0b25TdHlsZT47XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0byBzaG93IGEgcHJldmlldyBidXR0b24uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICByZWFkb25seSBzaG93UHJldmlld0J1dHRvbj86IE1heWJlPGJvb2xlYW4+O1xuICByZWFkb25seSBpY29uPzogTWF5YmU8c3RyaW5nPjtcbiAgcmVhZG9ubHkgdGV4dD86IE1heWJlPHN0cmluZz47XG4gIHJlYWRvbmx5IGRvd25sb2FkUmVhZHlJY29uPzogTWF5YmU8c3RyaW5nPjtcbiAgcmVhZG9ubHkgZG93bmxvYWRSZWFkeVRleHQ/OiBNYXliZTxzdHJpbmc+O1xuICByZWFkb25seSBwcmV2aWV3SWNvbj86IE1heWJlPHN0cmluZz47XG4gIHJlYWRvbmx5IHByZXZpZXdUZXh0PzogTWF5YmU8c3RyaW5nPjtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBmdW5jdGlvbiB0byBvcGVuIGEgcHJldmlldyBkaWFsb2cuIElmIG5vdCBwcm92aWRlZCwgdGhlIGRlZmF1bHQgcHJldmlldyBkaWFsb2cgcHJvdmlkZWQgYnkgdGhlIERieFdlYkZpbGVQcmV2aWV3U2VydmljZSB3aWxsIGJlIHVzZWQuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBjYW4gcmV0dXJuIHVuZGVmaW5lZCwgaW4gd2hpY2ggY2FzZSB0aGUgZGVmYXVsdCBwcmV2aWV3IGRpYWxvZyB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBvcGVuQ3VzdG9tUHJldmlldz86IE1heWJlPChkb3dubG9hZFVybDogU3RvcmFnZUZpbGVEb3dubG9hZFVybCwgZW1iZWRNaW1lVHlwZT86IE1heWJlPHN0cmluZz4pID0+IE1heWJlPE1hdERpYWxvZ1JlZjxhbnk+Pj47XG4gIC8vIENPTVBBVFxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gcHJlLWxvYWQgdGhlIGRvd25sb2FkIHVybCBmcm9tIHRoZSBzb3VyY2UuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgdGhlIHByZWxvYWQgcHJvcGVydHkgb24gdGhlIHNvdXJjZS9EYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Tb3VyY2UgaW5zdGVhZC5cbiAgICovXG4gIHJlYWRvbmx5IHByZWxvYWQ/OiBNYXliZTxib29sZWFuPjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGJ4LWZpcmViYXNlLXN0b3JhZ2VmaWxlLWRvd25sb2FkLWJ1dHRvbicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRieC1hbmNob3IgZGJ4QWN0aW9uQW5jaG9yIFthbmNob3JdPVwiYW5jaG9yU2lnbmFsKClcIiBkYnhBY3Rpb24gW2RieEFjdGlvbkF1dG9UcmlnZ2VyXT1cInByZWxvYWRTaWduYWwoKVwiIGRieEFjdGlvblNuYWNrYmFyRXJyb3IgW2RieEFjdGlvbkRpc2FibGVkXT1cIiFzdG9yYWdlRmlsZUtleVNpZ25hbCgpXCIgW2RieEFjdGlvblZhbHVlXT1cInN0b3JhZ2VGaWxlS2V5U2lnbmFsKClcIiBbZGJ4QWN0aW9uSGFuZGxlcl09XCJoYW5kbGVHZXREb3dubG9hZFVybFwiIFtkYnhBY3Rpb25TdWNjZXNzSGFuZGxlcl09XCJoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3NcIiBbZGJ4QWN0aW9uRXJyb3JIYW5kbGVyXT1cImhhbmRsZUdldERvd25sb2FkVXJsRXJyb3JcIj5cbiAgICAgIDxkYngtYnV0dG9uIGRieEFjdGlvbkJ1dHRvbiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uU3R5bGVTaWduYWwoKVwiIFtpY29uXT1cImljb25TaWduYWwoKVwiIFt0ZXh0XT1cInRleHRTaWduYWwoKVwiPjwvZGJ4LWJ1dHRvbj5cbiAgICA8L2RieC1hbmNob3I+XG4gICAgQGlmIChzaG93UHJldmlld0J1dHRvblNpZ25hbCgpKSB7XG4gICAgICA8bmctY29udGFpbmVyIGRieEFjdGlvbiBbZGJ4QWN0aW9uRGlhbG9nXT1cImhhbmRsZU9wZW5QcmV2aWV3RGlhbG9nXCIgZGJ4QWN0aW9uSGFuZGxlclZhbHVlPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRieC1idXR0b24tc3BhY2VyXCI+PC9zcGFuPlxuICAgICAgICA8ZGJ4LWJ1dHRvbiBkYnhBY3Rpb25CdXR0b24gW2J1dHRvblN0eWxlXT1cInByZXZpZXdCdXR0b25TdHlsZVNpZ25hbCgpXCIgW2ljb25dPVwicHJldmlld0ljb25TaWduYWwoKVwiIFt0ZXh0XT1cInByZXZpZXdUZXh0U2lnbmFsKClcIj48L2RieC1idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIGAsXG4gIGltcG9ydHM6IFtEYnhCdXR0b25Db21wb25lbnQsIERieEFjdGlvbk1vZHVsZSwgRGJ4QWN0aW9uU25hY2tiYXJFcnJvckRpcmVjdGl2ZSwgRGJ4QWN0aW9uRGlhbG9nRGlyZWN0aXZlLCBEYnhBbmNob3JDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRCdXR0b25Db21wb25lbnQge1xuICByZWFkb25seSBtYXREaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcblxuICByZWFkb25seSBkYnhXZWJGaWxlUHJldmlld1NlcnZpY2UgPSBpbmplY3QoRGJ4V2ViRmlsZVByZXZpZXdTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgZGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZSA9IGluamVjdChEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlKTtcblxuICAvKipcbiAgICogVGhlIFN0b3JhZ2VGaWxlS2V5IHRvIHNldCB1cCB0aGUgZG93bmxvYWQgYnV0dG9uIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5ID0gaW5wdXQ8TWF5YmU8U3RvcmFnZUZpbGVLZXk+PigpO1xuXG4gIC8qKlxuICAgKiBUaGUgZG93bmxvYWQgVVJMIHRvIHVzZSBmb3IgdGhlIGRvd25sb2FkIGJ1dHRvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlRG93bmxvYWRVcmwgPSBpbnB1dDxNYXliZTxTdG9yYWdlRmlsZURvd25sb2FkVXJsPj4oKTtcblxuICAvKipcbiAgICogVGhlIE1JTUUgdHlwZSB0byB1c2UgdGhlIGVtYmVkIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGVtYmVkTWltZVR5cGUgPSBpbnB1dDxNYXliZTxDb250ZW50VHlwZU1pbWVUeXBlIHwgc3RyaW5nPj4oKTtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdG8gc2hvdyBhIHByZXZpZXcgYnV0dG9uLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1ByZXZpZXdCdXR0b24gPSBpbnB1dDxNYXliZTxib29sZWFuPj4odHJ1ZSk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRvIHByZS1sb2FkIHRoZSBkb3dubG9hZCBVUkwgZnJvbSB0aGUgc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlbG9hZCA9IGlucHV0PE1heWJlPGJvb2xlYW4+Pih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBPdXRwdXQgZXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkb3dubG9hZCBVUkwgY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsQ2hhbmdlID0gb3V0cHV0PE1heWJlPFN0b3JhZ2VGaWxlRG93bmxvYWRVcmw+PigpO1xuXG4gIHJlYWRvbmx5IGNvbmZpZyA9IGlucHV0PE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvbkNvbmZpZz4+KCk7XG4gIHJlYWRvbmx5IHNvdXJjZSA9IGlucHV0PE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvblNvdXJjZT4+KCk7XG5cbiAgcmVhZG9ubHkgc291cmNlJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNvdXJjZSk7XG5cbiAgcmVhZG9ubHkgY29uZmlnU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZEJ1dHRvbkNvbmZpZyA9IHtcbiAgICAgIGJ1dHRvblN0eWxlOiBjb25maWc/LmJ1dHRvblN0eWxlLFxuICAgICAgcHJldmlld0J1dHRvblN0eWxlOiBjb25maWc/LnByZXZpZXdCdXR0b25TdHlsZSxcbiAgICAgIGljb246IGNvbmZpZz8uaWNvbiA/PyAnY2xvdWRfZG93bmxvYWQnLFxuICAgICAgdGV4dDogY29uZmlnPy50ZXh0ID8/ICdTdGFydCBEb3dubG9hZCcsXG4gICAgICBkb3dubG9hZFJlYWR5SWNvbjogY29uZmlnPy5kb3dubG9hZFJlYWR5SWNvbiA/PyAnZG93bmxvYWQnLFxuICAgICAgZG93bmxvYWRSZWFkeVRleHQ6IGNvbmZpZz8uZG93bmxvYWRSZWFkeVRleHQgPz8gJ1NhdmUgRmlsZScsXG4gICAgICBwcmV2aWV3SWNvbjogY29uZmlnPy5wcmV2aWV3SWNvbiA/PyAncHJldmlldycsXG4gICAgICBwcmV2aWV3VGV4dDogY29uZmlnPy5wcmV2aWV3VGV4dCA/PyAnVmlldyBGaWxlJ1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICByZWFkb25seSBwcmVsb2FkU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHByZWxvYWQgPSB0aGlzLnByZWxvYWQoKTtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgcmV0dXJuIHByZWxvYWQgPz8gc291cmNlPy5wcmVsb2FkID8/IGNvbmZpZy5wcmVsb2FkID8/IGZhbHNlO1xuICB9KTtcblxuICByZWFkb25seSBkb3dubG9hZFVybFNpZ25hbCA9IHNpZ25hbDxNYXliZTxTdG9yYWdlRmlsZURvd25sb2FkVXJsPj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZG93bmxvYWRNaW1lVHlwZVNpZ25hbCA9IHNpZ25hbDxNYXliZTxDb250ZW50VHlwZU1pbWVUeXBlPj4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwgPSBzaWduYWw8TWF5YmU8RGF0ZU9yVW5peERhdGVUaW1lU2Vjb25kc051bWJlcj4+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVLZXlGcm9tSW5wdXQkID0gdG9PYnNlcnZhYmxlKHRoaXMuc3RvcmFnZUZpbGVLZXkpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5RnJvbVNvdXJjZSQ6IE9ic2VydmFibGU8TWF5YmU8U3RvcmFnZUZpbGVLZXk+PiA9IHRoaXMuc291cmNlJC5waXBlKFxuICAgIG1hcCgoc291cmNlKSA9PiBzb3VyY2U/LnN0b3JhZ2VGaWxlS2V5KSxcbiAgICBtYXliZVZhbHVlRnJvbU9ic2VydmFibGVPclZhbHVlKCksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5JDogT2JzZXJ2YWJsZTxNYXliZTxTdG9yYWdlRmlsZUtleT4+ID0gY29tYmluZUxhdGVzdChbdGhpcy5zdG9yYWdlRmlsZUtleUZyb21JbnB1dCQsIHRoaXMuc3RvcmFnZUZpbGVLZXlGcm9tU291cmNlJF0pLnBpcGUoXG4gICAgbWFwKChbc3RvcmFnZUZpbGVLZXlGcm9tSW5wdXQsIHN0b3JhZ2VGaWxlS2V5RnJvbVNvdXJjZV0pID0+IHtcbiAgICAgIHJldHVybiBzdG9yYWdlRmlsZUtleUZyb21JbnB1dCA/PyBzdG9yYWdlRmlsZUtleUZyb21Tb3VyY2U7XG4gICAgfSksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlS2V5U2lnbmFsID0gdG9TaWduYWwodGhpcy5zdG9yYWdlRmlsZUtleSQpO1xuXG4gIHJlYWRvbmx5IGhhc0Rvd25sb2FkVXJsU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gQm9vbGVhbih0aGlzLmRvd25sb2FkVXJsU2lnbmFsKCkpKTtcblxuICByZWFkb25seSBidXR0b25TdHlsZVNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBEYnhCdXR0b25TdHlsZSA9IHtcbiAgICAgIHR5cGU6ICdyYWlzZWQnLFxuICAgICAgLi4uY29uZmlnLmJ1dHRvblN0eWxlXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHByZXZpZXdCdXR0b25TdHlsZVNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBEYnhCdXR0b25TdHlsZSA9IHtcbiAgICAgIHR5cGU6ICdyYWlzZWQnLFxuICAgICAgLi4uY29uZmlnLnByZXZpZXdCdXR0b25TdHlsZVxuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICByZWFkb25seSBpY29uU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgY29uc3QgaGFzRG93bmxvYWRVcmwgPSB0aGlzLmhhc0Rvd25sb2FkVXJsU2lnbmFsKCk7XG4gICAgcmV0dXJuIGhhc0Rvd25sb2FkVXJsID8gKGNvbmZpZy5kb3dubG9hZFJlYWR5SWNvbiA/PyBjb25maWcuaWNvbikgOiBjb25maWcuaWNvbjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdGV4dFNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIGNvbnN0IGhhc0Rvd25sb2FkVXJsID0gdGhpcy5oYXNEb3dubG9hZFVybFNpZ25hbCgpO1xuICAgIHJldHVybiBoYXNEb3dubG9hZFVybCA/IChjb25maWcuZG93bmxvYWRSZWFkeVRleHQgPz8gY29uZmlnLnRleHQpIDogY29uZmlnLnRleHQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHByZXZpZXdJY29uU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY29uZmlnU2lnbmFsKCk7XG4gICAgcmV0dXJuIGNvbmZpZy5wcmV2aWV3SWNvbjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcHJldmlld1RleHRTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTaWduYWwoKTtcbiAgICByZXR1cm4gY29uZmlnLnByZXZpZXdUZXh0O1xuICB9KTtcblxuICByZWFkb25seSBhbmNob3JTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZG93bmxvYWRVcmwgPSB0aGlzLmRvd25sb2FkVXJsU2lnbmFsKCk7XG5cbiAgICBsZXQgcmVzdWx0OiBNYXliZTxDbGlja2FibGVBbmNob3I+O1xuXG4gICAgaWYgKGRvd25sb2FkVXJsKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIHVybDogZG93bmxvYWRVcmxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVEb3dubG9hZFVybEVmZmVjdCA9IGVmZmVjdChcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBkb3dubG9hZFVybCA9IHRoaXMuc3RvcmFnZUZpbGVEb3dubG9hZFVybCgpO1xuXG4gICAgICBpZiAoZG93bmxvYWRVcmwgfHwgZG93bmxvYWRVcmwgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZFVybFNpZ25hbC5zZXQoZG93bmxvYWRVcmwpO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgYWxsb3dTaWduYWxXcml0ZXM6IHRydWVcbiAgICB9XG4gICk7XG5cbiAgLy8gUHJldmlld1xuICByZWFkb25seSBzaG93UHJldmlld0J1dHRvblNpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIGNvbnN0IGhhc0Rvd25sb2FkVXJsID0gdGhpcy5oYXNEb3dubG9hZFVybFNpZ25hbCgpO1xuICAgIHJldHVybiBoYXNEb3dubG9hZFVybCAmJiAoY29uZmlnLnNob3dQcmV2aWV3QnV0dG9uID8/IHRydWUpO1xuICB9KTtcblxuICByZWFkb25seSBvcGVuQ3VzdG9tUHJldmlld1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NpZ25hbCgpO1xuICAgIHJldHVybiBjb25maWcub3BlbkN1c3RvbVByZXZpZXc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhhbmRsZU9wZW5QcmV2aWV3RGlhbG9nOiBEYnhBY3Rpb25EaWFsb2dGdW5jdGlvbiA9ICgpID0+IHtcbiAgICBjb25zdCBvcGVuUHJldmlldyA9IHRoaXMub3BlbkN1c3RvbVByZXZpZXdTaWduYWwoKTtcblxuICAgIGNvbnN0IHNyY1VybCA9IHRoaXMuZG93bmxvYWRVcmxTaWduYWwoKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgaW5wdXRFbWJlZE1pbWVUeXBlID0gdGhpcy5lbWJlZE1pbWVUeXBlKCk7XG4gICAgY29uc3QgZG93bmxvYWRNaW1lVHlwZSA9IHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbCgpO1xuICAgIGNvbnN0IGVtYmVkTWltZVR5cGUgPSBpbnB1dEVtYmVkTWltZVR5cGUgPz8gZG93bmxvYWRNaW1lVHlwZTtcblxuICAgIHJldHVybiBvcGVuUHJldmlldz8uKHNyY1VybCwgZW1iZWRNaW1lVHlwZSkgPz8gdGhpcy5kYnhXZWJGaWxlUHJldmlld1NlcnZpY2Uub3BlblByZXZpZXdEaWFsb2coc3JjVXJsLCBlbWJlZE1pbWVUeXBlKTtcbiAgfTtcblxuICAvLyBDYWNoZWQgVXJsIEVmZmVjdFxuICAvLyBXaGVuIHRoZSBrZXkgY2hhbmdlcywgY2hlY2sgdGhlIGNhY2hlIHRvIHNlZSBpZiBpdCBpcyBhbHJlYWR5IGF2YWlsYWJsZSwgYW5kIHBvcHVsYXRlIHRoZSBkb3dubG9hZCB1cmwgaWYgaXQgaXMuXG4gIHJlYWRvbmx5IGNhY2hlZFVybEZvclN0b3JhZ2VGaWxlS2V5JCA9IHRoaXMuc3RvcmFnZUZpbGVLZXkkLnBpcGUoXG4gICAgc3dpdGNoTWFwKChrZXkpID0+IChrZXkgPyB0aGlzLmRieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2UuZ2V0Q2FjaGVkRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoa2V5KSA6IG9mKG51bGwpKSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICByZWFkb25seSBjYWNoZWRVcmxGb3JTdG9yYWdlRmlsZUtleVNpZ25hbCA9IHRvU2lnbmFsKHRoaXMuY2FjaGVkVXJsRm9yU3RvcmFnZUZpbGVLZXkkKTtcblxuICByZWFkb25seSBjYWNoZWRVcmxFZmZlY3QgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgY2FjaGVkUGFpciA9IHRoaXMuY2FjaGVkVXJsRm9yU3RvcmFnZUZpbGVLZXlTaWduYWwoKTtcblxuICAgICAgaWYgKGNhY2hlZFBhaXIpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZFVybFNpZ25hbC5zZXQoY2FjaGVkUGFpci5kb3dubG9hZFVybCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbC5zZXQoY2FjaGVkUGFpci5taW1lVHlwZSk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KGNhY2hlZFBhaXIuZXhwaXJlc0F0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlXG4gICAgfVxuICApO1xuXG4gIC8vIEV4cGlyYXRpb24gRWZmZWN0XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsRXhwaXJlc0F0JCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0U2lnbmFsKS5waXBlKG1hcChkYXRlRnJvbURhdGVPclRpbWVTZWNvbmRzTnVtYmVyKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgc2hhcmVSZXBsYXkoMSkpO1xuXG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsSGFzRXhwaXJlZCQgPSB0aGlzLmRvd25sb2FkVXJsRXhwaXJlc0F0JC5waXBlKFxuICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xuICAgICAgbGV0IG9iczogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgICAgaWYgKHgpIHtcbiAgICAgICAgb2JzID0gaW50ZXJ2YWwoTVNfSU5fU0VDT05EKS5waXBlKFxuICAgICAgICAgIG1hcCgoKSA9PiBpc1Bhc3QoeCkpLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9icyA9IG9mKGZhbHNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9icztcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxIYXNFeHBpcmVkU2lnbmFsID0gdG9TaWduYWwodGhpcy5kb3dubG9hZFVybEhhc0V4cGlyZWQkKTtcbiAgcmVhZG9ubHkgZG93bmxvYWRVcmxIYXNFeHBpcmVkRWZmZWN0ID0gZWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGV4cGlyZWQgPSB0aGlzLmRvd25sb2FkVXJsSGFzRXhwaXJlZFNpZ25hbCgpO1xuXG4gICAgICBpZiAoZXhwaXJlZCkge1xuICAgICAgICB0aGlzLmRvd25sb2FkVXJsU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmRvd25sb2FkTWltZVR5cGVTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZVxuICAgIH1cbiAgKTtcblxuICAvLyBPdXRwdXQgRWZmZWN0XG4gIHJlYWRvbmx5IGRvd25sb2FkVXJsQ2hhbmdlRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkb3dubG9hZFVybCA9IHRoaXMuZG93bmxvYWRVcmxTaWduYWwoKTtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZSgpO1xuXG4gICAgdGhpcy5kb3dubG9hZFVybENoYW5nZS5lbWl0KGRvd25sb2FkVXJsKTtcblxuICAgIGlmIChzb3VyY2U/LmRvd25sb2FkVXJsQ2hhbmdlZCkge1xuICAgICAgc291cmNlLmRvd25sb2FkVXJsQ2hhbmdlZChkb3dubG9hZFVybCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBIYW5kbGVyc1xuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybDogV29ya1VzaW5nQ29udGV4dDxTdG9yYWdlRmlsZUtleSwgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcj4gPSAodmFsdWU6IFN0b3JhZ2VGaWxlS2V5LCBjb250ZXh0OiBXb3JrSW5zdGFuY2U8U3RvcmFnZUZpbGVLZXksIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+KSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcbiAgICBjb25zdCB7IGN1c3RvbVNvdXJjZSwgaGFuZGxlR2V0RG93bmxvYWRVcmwgfSA9IHNvdXJjZSA/PyB7fTtcblxuICAgIGlmIChoYW5kbGVHZXREb3dubG9hZFVybCkge1xuICAgICAgaGFuZGxlR2V0RG93bmxvYWRVcmwodmFsdWUsIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LnN0YXJ0V29ya2luZ1dpdGhPYnNlcnZhYmxlKHRoaXMuZGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZS5kb3dubG9hZFBhaXJGb3JTdG9yYWdlRmlsZVVzaW5nU291cmNlKHZhbHVlLCBjdXN0b21Tb3VyY2UpKTtcbiAgICB9XG4gIH07XG5cbiAgcmVhZG9ubHkgaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzID0gKHZhbHVlOiBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcbiAgICBjb25zdCB7IGhhbmRsZUdldERvd25sb2FkVXJsU3VjY2VzcyB9ID0gc291cmNlID8/IHt9O1xuXG4gICAgdGhpcy5kb3dubG9hZFVybFNpZ25hbC5zZXQodmFsdWUuZG93bmxvYWRVcmwpO1xuICAgIHRoaXMuZG93bmxvYWRNaW1lVHlwZVNpZ25hbC5zZXQodmFsdWUubWltZVR5cGUpO1xuICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KHZhbHVlLmV4cGlyZXNBdCk7XG5cbiAgICBpZiAoaGFuZGxlR2V0RG93bmxvYWRVcmxTdWNjZXNzKSB7XG4gICAgICBoYW5kbGVHZXREb3dubG9hZFVybFN1Y2Nlc3ModmFsdWUpO1xuICAgIH1cbiAgfTtcblxuICByZWFkb25seSBoYW5kbGVHZXREb3dubG9hZFVybEVycm9yID0gKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2UoKTtcbiAgICBjb25zdCB7IGhhbmRsZUdldERvd25sb2FkVXJsRXJyb3IgfSA9IHNvdXJjZSA/PyB7fTtcblxuICAgIHRoaXMuZG93bmxvYWRVcmxTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5kb3dubG9hZE1pbWVUeXBlU2lnbmFsLnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuZG93bmxvYWRVcmxFeHBpcmVzQXRTaWduYWwuc2V0KHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoaGFuZGxlR2V0RG93bmxvYWRVcmxFcnJvcikge1xuICAgICAgaGFuZGxlR2V0RG93bmxvYWRVcmxFcnJvcihlcnJvcik7XG4gICAgfVxuICB9O1xufVxuIl19
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { inject, Injectable } from '@angular/core';
|
|
2
2
|
import { StorageFileFunctions, firestoreModelId, firestoreModelKey, storageFileIdentity } from '@dereekb/firebase';
|
|
3
|
-
import { addMilliseconds, MS_IN_DAY, MS_IN_HOUR, MS_IN_MINUTE, SECONDS_IN_MINUTE,
|
|
3
|
+
import { addMilliseconds, MS_IN_DAY, MS_IN_HOUR, MS_IN_MINUTE, SECONDS_IN_MINUTE, unixDateTimeSecondsNumberForNow, unixDateTimeSecondsNumberFromDate } from '@dereekb/util';
|
|
4
4
|
import { DbxFirebaseStorageFileDownloadStorage } from './storagefile.download.storage.service';
|
|
5
|
-
import {
|
|
5
|
+
import { first, firstValueFrom, from, interval, map, of, shareReplay, startWith, switchMap, tap } from 'rxjs';
|
|
6
|
+
import { throwErrorFromLoadingStateError, valueFromFinishedLoadingState } from '@dereekb/rxjs';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
8
|
+
export function dbxFirebaseStorageFileDownloadServiceCustomSourceFromObs(obsForInput) {
|
|
9
|
+
return {
|
|
10
|
+
downloadStorageFileResult: (params, storageFileId) => firstValueFrom(obsForInput(params, storageFileId).pipe(throwErrorFromLoadingStateError(), valueFromFinishedLoadingState()))
|
|
11
|
+
};
|
|
12
|
+
}
|
|
7
13
|
/**
|
|
8
14
|
* Service used for retrieving download links for StorageFiles.
|
|
9
15
|
*/
|
|
@@ -11,7 +17,7 @@ export class DbxFirebaseStorageFileDownloadService {
|
|
|
11
17
|
/**
|
|
12
18
|
* Expiration duration for cached download URLs.
|
|
13
19
|
*/
|
|
14
|
-
_expiresAfterTime =
|
|
20
|
+
_expiresAfterTime = MS_IN_HOUR * 12;
|
|
15
21
|
/**
|
|
16
22
|
* When reading cached values, this buffer is added to the expiration time to prevent the URL from expiring while it is being used.
|
|
17
23
|
*/
|
|
@@ -45,14 +51,21 @@ export class DbxFirebaseStorageFileDownloadService {
|
|
|
45
51
|
let result;
|
|
46
52
|
if (pair) {
|
|
47
53
|
const expiresAt = pair.expiresAt - this._expiresAfterTimeBuffer;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
.pipe(map(() => {
|
|
51
|
-
const now = unixTimeNumberForNow();
|
|
54
|
+
function pairIfNotExpired() {
|
|
55
|
+
const now = unixDateTimeSecondsNumberForNow();
|
|
52
56
|
const isExpired = now > expiresAt;
|
|
53
|
-
return isExpired ? null : pair;
|
|
54
|
-
}
|
|
55
|
-
|
|
57
|
+
return isExpired ? null : pair;
|
|
58
|
+
}
|
|
59
|
+
const initialPair = pairIfNotExpired();
|
|
60
|
+
if (initialPair) {
|
|
61
|
+
// every minute emit the result again
|
|
62
|
+
result = interval(MS_IN_MINUTE).pipe(map(pairIfNotExpired), first((x) => x == null), // only emit the first null value
|
|
63
|
+
startWith(initialPair), // send the initial value first
|
|
64
|
+
shareReplay(1));
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
result = of(null);
|
|
68
|
+
}
|
|
56
69
|
}
|
|
57
70
|
else {
|
|
58
71
|
result = of(null);
|
|
@@ -69,14 +82,25 @@ export class DbxFirebaseStorageFileDownloadService {
|
|
|
69
82
|
* @returns
|
|
70
83
|
*/
|
|
71
84
|
downloadPairForStorageFile(storageFileIdOrKey) {
|
|
85
|
+
return this.downloadPairForStorageFileUsingSource(storageFileIdOrKey, undefined);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Retrieves the download URL for the StorageFile using the default parameters and pulled from the input source, if applicable.
|
|
89
|
+
*
|
|
90
|
+
* If no source is provided, uses the default internal source.
|
|
91
|
+
*
|
|
92
|
+
* These URLs are cached locally to prevent extra/redundant calls to the server.
|
|
93
|
+
*
|
|
94
|
+
* @param storageFileIdOrKey
|
|
95
|
+
* @returns
|
|
96
|
+
*/
|
|
97
|
+
downloadPairForStorageFileUsingSource(storageFileIdOrKey, source) {
|
|
72
98
|
const storageFileId = firestoreModelId(storageFileIdOrKey);
|
|
73
99
|
const obs = this.getCachedDownloadPairForStorageFile(storageFileId).pipe(switchMap((cachedPair) => {
|
|
74
100
|
let result;
|
|
75
101
|
const downloadAndCacheResult = () => {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
// add to the cache
|
|
79
|
-
this.storageFileDownloadStorage.addDownloadUrl(downloadUrlPair).pipe(first()).subscribe();
|
|
102
|
+
return from(this._createDownloadPairForStorageFileUsingSource(source, storageFileIdOrKey)).pipe(tap((downloadUrlPair) => {
|
|
103
|
+
this.addPairForStorageFileToCache(downloadUrlPair);
|
|
80
104
|
}));
|
|
81
105
|
};
|
|
82
106
|
if (cachedPair) {
|
|
@@ -89,6 +113,12 @@ export class DbxFirebaseStorageFileDownloadService {
|
|
|
89
113
|
}), first(), shareReplay(1));
|
|
90
114
|
return obs;
|
|
91
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Adds the given download URL pair to the cache.
|
|
118
|
+
*/
|
|
119
|
+
addPairForStorageFileToCache(downloadUrlPair) {
|
|
120
|
+
this.storageFileDownloadStorage.addDownloadUrl(downloadUrlPair).pipe(first()).subscribe();
|
|
121
|
+
}
|
|
92
122
|
/**
|
|
93
123
|
* Creates a new download URL for the StorageFile.
|
|
94
124
|
*
|
|
@@ -97,17 +127,25 @@ export class DbxFirebaseStorageFileDownloadService {
|
|
|
97
127
|
* @returns
|
|
98
128
|
*/
|
|
99
129
|
createDownloadPairForStorageFile(storageFileIdOrKey, inputParams) {
|
|
130
|
+
return this._createDownloadPairForStorageFileUsingSource(undefined, storageFileIdOrKey, inputParams);
|
|
131
|
+
}
|
|
132
|
+
_createDownloadPairForStorageFileUsingSource(inputSource, storageFileIdOrKey, inputParams) {
|
|
133
|
+
const source = inputSource ?? {
|
|
134
|
+
downloadStorageFileResult: (params) => this.storageFileFunctions.storageFile.readStorageFile.download(params)
|
|
135
|
+
};
|
|
100
136
|
const storageFileId = firestoreModelId(storageFileIdOrKey);
|
|
101
137
|
const expiresAt = inputParams?.expiresAt ?? addMilliseconds(new Date(), this._expiresAfterTime);
|
|
102
138
|
const params = {
|
|
103
139
|
...inputParams,
|
|
140
|
+
expiresAt,
|
|
104
141
|
key: firestoreModelKey(storageFileIdentity, storageFileId)
|
|
105
142
|
};
|
|
106
|
-
return
|
|
143
|
+
return source.downloadStorageFileResult(params, storageFileId).then((x) => {
|
|
107
144
|
return {
|
|
108
145
|
id: storageFileId,
|
|
109
146
|
downloadUrl: x.url,
|
|
110
|
-
|
|
147
|
+
mimeType: x.mimeType,
|
|
148
|
+
expiresAt: x.expiresAt ?? unixDateTimeSecondsNumberFromDate(expiresAt)
|
|
111
149
|
};
|
|
112
150
|
});
|
|
113
151
|
}
|
|
@@ -117,4 +155,4 @@ export class DbxFirebaseStorageFileDownloadService {
|
|
|
117
155
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadService, decorators: [{
|
|
118
156
|
type: Injectable
|
|
119
157
|
}] });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG93bmxvYWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvc2VydmljZS9zdG9yYWdlZmlsZS5kb3dubG9hZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBNEQsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3SyxPQUFPLEVBQUUsZUFBZSxFQUF1QixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBVyxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwTCxPQUFPLEVBQUUscUNBQXFDLEVBQXlDLE1BQU0sd0NBQXdDLENBQUM7QUFDdEksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFeEk7O0dBRUc7QUFFSCxNQUFNLE9BQU8scUNBQXFDO0lBQ2hEOztPQUVHO0lBQ08saUJBQWlCLEdBQWlCLENBQUMsR0FBRyxTQUFTLENBQUM7SUFFMUQ7O09BRUc7SUFDTyx1QkFBdUIsR0FBWSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFFM0Qsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDcEQsMEJBQTBCLEdBQUcsTUFBTSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFFcEYsZUFBZTtJQUNmLG1CQUFtQjtRQUNqQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsWUFBb0I7UUFDdEMsTUFBTSxVQUFVLEdBQUcsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVsQyxJQUFJLFlBQVksR0FBRyxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQzthQUFNLElBQUksWUFBWSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFlBQVksQ0FBQztJQUN4QyxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCOzs7OztPQUtHO0lBQ0gsbUNBQW1DLENBQUMsa0JBQWtEO1FBQ3BGLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUMzRSxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqQixJQUFJLE1BQWdFLENBQUM7WUFFckUsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztnQkFFaEUscUNBQXFDO2dCQUNyQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksQ0FBQztxQkFDNUIsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLEVBQUU7b0JBQ1AsTUFBTSxHQUFHLEdBQUcsb0JBQW9CLEVBQUUsQ0FBQztvQkFDbkMsTUFBTSxTQUFTLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztvQkFDbEMsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMseUJBQXlCO2dCQUMzRCxDQUFDLENBQUMsQ0FDSDtxQkFDQSxJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQ3hCLEtBQUssRUFBRSxFQUNQLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDZixvQkFBb0IsRUFBRSxFQUN0QixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztZQUNOLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLENBQUM7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCwwQkFBMEIsQ0FBQyxrQkFBa0Q7UUFDM0UsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxNQUFNLEdBQUcsR0FBc0QsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FDekgsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdkIsSUFBSSxNQUF5RCxDQUFDO1lBRTlELE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxFQUFFO2dCQUNsQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDdEUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDeEYsR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLEVBQUU7b0JBQ3RCLG1CQUFtQjtvQkFDbkIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDNUYsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQztZQUVGLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxHQUFHLHNCQUFzQixFQUFFLENBQUM7WUFDcEMsQ0FBQztZQUVELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxFQUNGLEtBQUssRUFBRSxFQUNQLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRUYsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZ0NBQWdDLENBQUMsa0JBQWtELEVBQUUsV0FBb0Q7UUFDdkksTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FBRyxXQUFXLEVBQUUsU0FBUyxJQUFJLGVBQWUsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhHLE1BQU0sTUFBTSxHQUE4QjtZQUN4QyxHQUFHLFdBQVc7WUFDZCxHQUFHLEVBQUUsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDO1NBQzNELENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2RixPQUFPO2dCQUNMLEVBQUUsRUFBRSxhQUFhO2dCQUNqQixXQUFXLEVBQUUsQ0FBQyxDQUFDLEdBQUc7Z0JBQ2xCLFNBQVMsRUFBRSxzQkFBc0IsQ0FBQyxTQUFTLENBQUM7YUFDN0MsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F0SVUscUNBQXFDOzRHQUFyQyxxQ0FBcUM7OzRGQUFyQyxxQ0FBcUM7a0JBRGpELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2VGaWxlRnVuY3Rpb25zLCBEb3dubG9hZFN0b3JhZ2VGaWxlUGFyYW1zLCBTdG9yYWdlRmlsZUtleSwgU3RvcmFnZUZpbGVJZCwgZmlyZXN0b3JlTW9kZWxJZCwgZmlyZXN0b3JlTW9kZWxLZXksIHN0b3JhZ2VGaWxlSWRlbnRpdHkgfSBmcm9tICdAZGVyZWVrYi9maXJlYmFzZSc7XG5pbXBvcnQgeyBhZGRNaWxsaXNlY29uZHMsIE1heWJlLCBNaWxsaXNlY29uZHMsIE1TX0lOX0RBWSwgTVNfSU5fSE9VUiwgTVNfSU5fTUlOVVRFLCBTZWNvbmRzLCBTRUNPTkRTX0lOX01JTlVURSwgdW5peFRpbWVOdW1iZXJGb3JOb3csIHVuaXhUaW1lTnVtYmVyRnJvbURhdGUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFN0b3JhZ2UsIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXIgfSBmcm9tICcuL3N0b3JhZ2VmaWxlLmRvd25sb2FkLnN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgZnJvbSwgaW50ZXJ2YWwsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogU2VydmljZSB1c2VkIGZvciByZXRyaWV2aW5nIGRvd25sb2FkIGxpbmtzIGZvciBTdG9yYWdlRmlsZXMuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEV4cGlyYXRpb24gZHVyYXRpb24gZm9yIGNhY2hlZCBkb3dubG9hZCBVUkxzLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9leHBpcmVzQWZ0ZXJUaW1lOiBNaWxsaXNlY29uZHMgPSAzICogTVNfSU5fREFZO1xuXG4gIC8qKlxuICAgKiBXaGVuIHJlYWRpbmcgY2FjaGVkIHZhbHVlcywgdGhpcyBidWZmZXIgaXMgYWRkZWQgdG8gdGhlIGV4cGlyYXRpb24gdGltZSB0byBwcmV2ZW50IHRoZSBVUkwgZnJvbSBleHBpcmluZyB3aGlsZSBpdCBpcyBiZWluZyB1c2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9leHBpcmVzQWZ0ZXJUaW1lQnVmZmVyOiBTZWNvbmRzID0gU0VDT05EU19JTl9NSU5VVEUgKiAxMDtcblxuICByZWFkb25seSBzdG9yYWdlRmlsZUZ1bmN0aW9ucyA9IGluamVjdChTdG9yYWdlRmlsZUZ1bmN0aW9ucyk7XG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlRG93bmxvYWRTdG9yYWdlID0gaW5qZWN0KERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFN0b3JhZ2UpO1xuXG4gIC8vIE1BUks6IENvbmZpZ1xuICBnZXRFeHBpcmVzQWZ0ZXJUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGlyZXNBZnRlclRpbWU7XG4gIH1cblxuICBzZXRFeHBpcmVzQWZ0ZXJUaW1lKGV4cGlyZXNBZnRlcjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbWF4QWxsb3dlZCA9IE1TX0lOX0RBWSAqIDIwO1xuXG4gICAgaWYgKGV4cGlyZXNBZnRlciA+IG1heEFsbG93ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwaXJlcyBhZnRlciB0aW1lIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMjAgZGF5cy5gKTtcbiAgICB9IGVsc2UgaWYgKGV4cGlyZXNBZnRlciA8IE1TX0lOX0hPVVIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwaXJlcyBhZnRlciB0aW1lIGNhbm5vdCBiZSBsZXNzIHRoYW4gMSBob3VyLmApO1xuICAgIH1cblxuICAgIHRoaXMuX2V4cGlyZXNBZnRlclRpbWUgPSBleHBpcmVzQWZ0ZXI7XG4gIH1cblxuICAvLyBNQVJLOiBEb3dubG9hZFxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgcmV0dXJucyB0aGUgY2FjaGVkIGRvd25sb2FkIFVSTCBwYWlyIGZvciB0aGUgU3RvcmFnZUZpbGUsIGFuZCBlbWl0cyBudWxsIG9uY2UgaXQgZXhwaXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHN0b3JhZ2VGaWxlSWRPcktleVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0Q2FjaGVkRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoc3RvcmFnZUZpbGVJZE9yS2V5OiBTdG9yYWdlRmlsZUlkIHwgU3RvcmFnZUZpbGVLZXkpOiBPYnNlcnZhYmxlPE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+PiB7XG4gICAgY29uc3Qgc3RvcmFnZUZpbGVJZCA9IGZpcmVzdG9yZU1vZGVsSWQoc3RvcmFnZUZpbGVJZE9yS2V5KTtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlRmlsZURvd25sb2FkU3RvcmFnZS5nZXREb3dubG9hZFVybFBhaXIoc3RvcmFnZUZpbGVJZCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGFpcikgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBPYnNlcnZhYmxlPE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+PjtcblxuICAgICAgICBpZiAocGFpcikge1xuICAgICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IHBhaXIuZXhwaXJlc0F0IC0gdGhpcy5fZXhwaXJlc0FmdGVyVGltZUJ1ZmZlcjtcblxuICAgICAgICAgIC8vIGV2ZXJ5IG1pbnV0ZSBlbWl0IHRoZSByZXN1bHQgYWdhaW5cbiAgICAgICAgICByZXN1bHQgPSBpbnRlcnZhbChNU19JTl9NSU5VVEUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSB1bml4VGltZU51bWJlckZvck5vdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IG5vdyA+IGV4cGlyZXNBdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNFeHBpcmVkID8gbnVsbCA6IHBhaXI7IC8vIGVtaXQgbnVsbCBvbmNlIGV4cGlyZWRcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHggPT0gbnVsbCksXG4gICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgIHN0YXJ0V2l0aChwYWlyKSxcbiAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gb2YobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZG93bmxvYWQgVVJMIGZvciB0aGUgU3RvcmFnZUZpbGUgdXNpbmcgdGhlIGRlZmF1bHQgcGFyYW1ldGVycy5cbiAgICpcbiAgICogVGhlc2UgVVJMcyBhcmUgY2FjaGVkIGxvY2FsbHkgdG8gcHJldmVudCBleHRyYS9yZWR1bmRhbnQgY2FsbHMgdG8gdGhlIHNlcnZlci5cbiAgICpcbiAgICogQHBhcmFtIHN0b3JhZ2VGaWxlSWRPcktleVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoc3RvcmFnZUZpbGVJZE9yS2V5OiBTdG9yYWdlRmlsZUlkIHwgU3RvcmFnZUZpbGVLZXkpOiBPYnNlcnZhYmxlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+IHtcbiAgICBjb25zdCBzdG9yYWdlRmlsZUlkID0gZmlyZXN0b3JlTW9kZWxJZChzdG9yYWdlRmlsZUlkT3JLZXkpO1xuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyPiA9IHRoaXMuZ2V0Q2FjaGVkRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoc3RvcmFnZUZpbGVJZCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoY2FjaGVkUGFpcikgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBPYnNlcnZhYmxlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+O1xuXG4gICAgICAgIGNvbnN0IGRvd25sb2FkQW5kQ2FjaGVSZXN1bHQgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKCksIHRoaXMuX2V4cGlyZXNBZnRlclRpbWUpO1xuICAgICAgICAgIHJldHVybiBmcm9tKHRoaXMuY3JlYXRlRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoc3RvcmFnZUZpbGVJZE9yS2V5LCB7IGV4cGlyZXNBdCB9KSkucGlwZShcbiAgICAgICAgICAgIHRhcCgoZG93bmxvYWRVcmxQYWlyKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGFkZCB0byB0aGUgY2FjaGVcbiAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlRmlsZURvd25sb2FkU3RvcmFnZS5hZGREb3dubG9hZFVybChkb3dubG9hZFVybFBhaXIpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNhY2hlZFBhaXIpIHtcbiAgICAgICAgICByZXN1bHQgPSBvZihjYWNoZWRQYWlyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBkb3dubG9hZEFuZENhY2hlUmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSksXG4gICAgICBmaXJzdCgpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgcmV0dXJuIG9icztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGRvd25sb2FkIFVSTCBmb3IgdGhlIFN0b3JhZ2VGaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gc3RvcmFnZUZpbGVJZE9yS2V5XG4gICAqIEBwYXJhbSBpbnB1dFBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgY3JlYXRlRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoc3RvcmFnZUZpbGVJZE9yS2V5OiBTdG9yYWdlRmlsZUlkIHwgU3RvcmFnZUZpbGVLZXksIGlucHV0UGFyYW1zPzogT21pdDxEb3dubG9hZFN0b3JhZ2VGaWxlUGFyYW1zLCAna2V5Jz4pOiBQcm9taXNlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+IHtcbiAgICBjb25zdCBzdG9yYWdlRmlsZUlkID0gZmlyZXN0b3JlTW9kZWxJZChzdG9yYWdlRmlsZUlkT3JLZXkpO1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IGlucHV0UGFyYW1zPy5leHBpcmVzQXQgPz8gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKCksIHRoaXMuX2V4cGlyZXNBZnRlclRpbWUpO1xuXG4gICAgY29uc3QgcGFyYW1zOiBEb3dubG9hZFN0b3JhZ2VGaWxlUGFyYW1zID0ge1xuICAgICAgLi4uaW5wdXRQYXJhbXMsXG4gICAgICBrZXk6IGZpcmVzdG9yZU1vZGVsS2V5KHN0b3JhZ2VGaWxlSWRlbnRpdHksIHN0b3JhZ2VGaWxlSWQpXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VGaWxlRnVuY3Rpb25zLnN0b3JhZ2VGaWxlLnJlYWRTdG9yYWdlRmlsZS5kb3dubG9hZChwYXJhbXMpLnRoZW4oKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBzdG9yYWdlRmlsZUlkLFxuICAgICAgICBkb3dubG9hZFVybDogeC51cmwsXG4gICAgICAgIGV4cGlyZXNBdDogdW5peFRpbWVOdW1iZXJGcm9tRGF0ZShleHBpcmVzQXQpXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG93bmxvYWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvc2VydmljZS9zdG9yYWdlZmlsZS5kb3dubG9hZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBNEQsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQTZCLE1BQU0sbUJBQW1CLENBQUM7QUFDeE0sT0FBTyxFQUFFLGVBQWUsRUFBdUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQVcsaUJBQWlCLEVBQUUsK0JBQStCLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMU0sT0FBTyxFQUFFLHFDQUFxQyxFQUF5QyxNQUFNLHdDQUF3QyxDQUFDO0FBQ3RJLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUgsT0FBTyxFQUFnQiwrQkFBK0IsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFpQjdHLE1BQU0sVUFBVSx3REFBd0QsQ0FBQyxXQUFxSTtJQUM1TSxPQUFPO1FBQ0wseUJBQXlCLEVBQUUsQ0FBQyxNQUFpQyxFQUFFLGFBQTRCLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRSxFQUFFLDZCQUE2QixFQUFFLENBQUMsQ0FBdUM7S0FDbFEsQ0FB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QUFxRSxFQUFFLGtCQUFrRCxFQUFFLFdBQW9EO1FBQ2xPLE1BQU0sTUFBTSxHQUFHLFdBQVcsSUFBSTtZQUM1Qix5QkFBeUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztTQUM5RyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMzRCxNQUFNLFNBQVMsR0FBRyxXQUFXLEVBQUUsU0FBUyxJQUFJLGVBQWUsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhHLE1BQU0sTUFBTSxHQUE4QjtZQUN4QyxHQUFHLFdBQVc7WUFDZCxTQUFTO1lBQ1QsR0FBRyxFQUFFLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQztTQUMzRCxDQUFDO1FBRUYsT0FBTyxNQUFNLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3hFLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLGFBQWE7Z0JBQ2pCLFdBQVcsRUFBRSxDQUFDLENBQUMsR0FBRztnQkFDbEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO2dCQUNwQixTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxpQ0FBaUMsQ0FBQyxTQUFTLENBQUM7YUFDdkUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F0S1UscUNBQXFDOzRHQUFyQyxxQ0FBcUM7OzRGQUFyQyxxQ0FBcUM7a0JBRGpELFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2VGaWxlRnVuY3Rpb25zLCBEb3dubG9hZFN0b3JhZ2VGaWxlUGFyYW1zLCBTdG9yYWdlRmlsZUtleSwgU3RvcmFnZUZpbGVJZCwgZmlyZXN0b3JlTW9kZWxJZCwgZmlyZXN0b3JlTW9kZWxLZXksIHN0b3JhZ2VGaWxlSWRlbnRpdHksIERvd25sb2FkU3RvcmFnZUZpbGVSZXN1bHQgfSBmcm9tICdAZGVyZWVrYi9maXJlYmFzZSc7XG5pbXBvcnQgeyBhZGRNaWxsaXNlY29uZHMsIE1heWJlLCBNaWxsaXNlY29uZHMsIE1TX0lOX0RBWSwgTVNfSU5fSE9VUiwgTVNfSU5fTUlOVVRFLCBTZWNvbmRzLCBTRUNPTkRTX0lOX01JTlVURSwgdW5peERhdGVUaW1lU2Vjb25kc051bWJlckZvck5vdywgdW5peERhdGVUaW1lU2Vjb25kc051bWJlckZyb21EYXRlIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTdG9yYWdlLCBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyIH0gZnJvbSAnLi9zdG9yYWdlZmlsZS5kb3dubG9hZC5zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZmlyc3QsIGZpcnN0VmFsdWVGcm9tLCBmcm9tLCBpbnRlcnZhbCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvYWRpbmdTdGF0ZSwgdGhyb3dFcnJvckZyb21Mb2FkaW5nU3RhdGVFcnJvciwgdmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUgfSBmcm9tICdAZGVyZWVrYi9yeGpzJztcblxuZXhwb3J0IHR5cGUgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZUN1c3RvbVNvdXJjZURvd25sb2FkRnVuY3Rpb24gPSAocGFyYW1zOiBEb3dubG9hZFN0b3JhZ2VGaWxlUGFyYW1zLCBzdG9yYWdlRmlsZUlkOiBTdG9yYWdlRmlsZUlkKSA9PiBQcm9taXNlPERvd25sb2FkU3RvcmFnZUZpbGVSZXN1bHQ+O1xuXG4vKipcbiAqIFVzZWQgYXMgYSBjdXN0b20gc291cmNlIGZvciBkb3dubG9hZGluZyBTdG9yYWdlRmlsZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZUN1c3RvbVNvdXJjZSB7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGRvd25sb2FkIHJlc3VsdCBmb3IgdGhlIFN0b3JhZ2VGaWxlIHVzaW5nIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gc3RvcmFnZUZpbGVJZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZG93bmxvYWRTdG9yYWdlRmlsZVJlc3VsdDogRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZUN1c3RvbVNvdXJjZURvd25sb2FkRnVuY3Rpb247XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlQ3VzdG9tU291cmNlRnJvbU9icyhvYnNGb3JJbnB1dDogKHBhcmFtczogRG93bmxvYWRTdG9yYWdlRmlsZVBhcmFtcywgc3RvcmFnZUZpbGVJZDogU3RvcmFnZUZpbGVJZCkgPT4gT2JzZXJ2YWJsZTxMb2FkaW5nU3RhdGU8RG93bmxvYWRTdG9yYWdlRmlsZVJlc3VsdD4+KTogRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU2VydmljZUN1c3RvbVNvdXJjZSB7XG4gIHJldHVybiB7XG4gICAgZG93bmxvYWRTdG9yYWdlRmlsZVJlc3VsdDogKHBhcmFtczogRG93bmxvYWRTdG9yYWdlRmlsZVBhcmFtcywgc3RvcmFnZUZpbGVJZDogU3RvcmFnZUZpbGVJZCkgPT4gZmlyc3RWYWx1ZUZyb20ob2JzRm9ySW5wdXQocGFyYW1zLCBzdG9yYWdlRmlsZUlkKS5waXBlKHRocm93RXJyb3JGcm9tTG9hZGluZ1N0YXRlRXJyb3IoKSwgdmFsdWVGcm9tRmluaXNoZWRMb2FkaW5nU3RhdGUoKSkpIGFzIFByb21pc2U8RG93bmxvYWRTdG9yYWdlRmlsZVJlc3VsdD5cbiAgfTtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIHVzZWQgZm9yIHJldHJpZXZpbmcgZG93bmxvYWQgbGlua3MgZm9yIFN0b3JhZ2VGaWxlcy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2Uge1xuICAvKipcbiAgICogRXhwaXJhdGlvbiBkdXJhdGlvbiBmb3IgY2FjaGVkIGRvd25sb2FkIFVSTHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2V4cGlyZXNBZnRlclRpbWU6IE1pbGxpc2Vjb25kcyA9IE1TX0lOX0hPVVIgKiAxMjtcblxuICAvKipcbiAgICogV2hlbiByZWFkaW5nIGNhY2hlZCB2YWx1ZXMsIHRoaXMgYnVmZmVyIGlzIGFkZGVkIHRvIHRoZSBleHBpcmF0aW9uIHRpbWUgdG8gcHJldmVudCB0aGUgVVJMIGZyb20gZXhwaXJpbmcgd2hpbGUgaXQgaXMgYmVpbmcgdXNlZC5cbiAgICovXG4gIHByb3RlY3RlZCBfZXhwaXJlc0FmdGVyVGltZUJ1ZmZlcjogU2Vjb25kcyA9IFNFQ09ORFNfSU5fTUlOVVRFICogMTA7XG5cbiAgcmVhZG9ubHkgc3RvcmFnZUZpbGVGdW5jdGlvbnMgPSBpbmplY3QoU3RvcmFnZUZpbGVGdW5jdGlvbnMpO1xuICByZWFkb25seSBzdG9yYWdlRmlsZURvd25sb2FkU3RvcmFnZSA9IGluamVjdChEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTdG9yYWdlKTtcblxuICAvLyBNQVJLOiBDb25maWdcbiAgZ2V0RXhwaXJlc0FmdGVyVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9leHBpcmVzQWZ0ZXJUaW1lO1xuICB9XG5cbiAgc2V0RXhwaXJlc0FmdGVyVGltZShleHBpcmVzQWZ0ZXI6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG1heEFsbG93ZWQgPSBNU19JTl9EQVkgKiAyMDtcblxuICAgIGlmIChleHBpcmVzQWZ0ZXIgPiBtYXhBbGxvd2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGlyZXMgYWZ0ZXIgdGltZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDIwIGRheXMuYCk7XG4gICAgfSBlbHNlIGlmIChleHBpcmVzQWZ0ZXIgPCBNU19JTl9IT1VSKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGlyZXMgYWZ0ZXIgdGltZSBjYW5ub3QgYmUgbGVzcyB0aGFuIDEgaG91ci5gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9leHBpcmVzQWZ0ZXJUaW1lID0gZXhwaXJlc0FmdGVyO1xuICB9XG5cbiAgLy8gTUFSSzogRG93bmxvYWRcbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSB0aGF0IHJldHVybnMgdGhlIGNhY2hlZCBkb3dubG9hZCBVUkwgcGFpciBmb3IgdGhlIFN0b3JhZ2VGaWxlLCBhbmQgZW1pdHMgbnVsbCBvbmNlIGl0IGV4cGlyZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzdG9yYWdlRmlsZUlkT3JLZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldENhY2hlZERvd25sb2FkUGFpckZvclN0b3JhZ2VGaWxlKHN0b3JhZ2VGaWxlSWRPcktleTogU3RvcmFnZUZpbGVJZCB8IFN0b3JhZ2VGaWxlS2V5KTogT2JzZXJ2YWJsZTxNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyPj4ge1xuICAgIGNvbnN0IHN0b3JhZ2VGaWxlSWQgPSBmaXJlc3RvcmVNb2RlbElkKHN0b3JhZ2VGaWxlSWRPcktleSk7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmFnZUZpbGVEb3dubG9hZFN0b3JhZ2UuZ2V0RG93bmxvYWRVcmxQYWlyKHN0b3JhZ2VGaWxlSWQpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHBhaXIpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdDogT2JzZXJ2YWJsZTxNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyPj47XG5cbiAgICAgICAgaWYgKHBhaXIpIHtcbiAgICAgICAgICBjb25zdCBleHBpcmVzQXQgPSBwYWlyLmV4cGlyZXNBdCAtIHRoaXMuX2V4cGlyZXNBZnRlclRpbWVCdWZmZXI7XG5cbiAgICAgICAgICBmdW5jdGlvbiBwYWlySWZOb3RFeHBpcmVkKCk6IE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHVuaXhEYXRlVGltZVNlY29uZHNOdW1iZXJGb3JOb3coKTtcbiAgICAgICAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IG5vdyA+IGV4cGlyZXNBdDtcbiAgICAgICAgICAgIHJldHVybiBpc0V4cGlyZWQgPyBudWxsIDogcGFpcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBpbml0aWFsUGFpciA9IHBhaXJJZk5vdEV4cGlyZWQoKTtcblxuICAgICAgICAgIGlmIChpbml0aWFsUGFpcikge1xuICAgICAgICAgICAgLy8gZXZlcnkgbWludXRlIGVtaXQgdGhlIHJlc3VsdCBhZ2FpblxuICAgICAgICAgICAgcmVzdWx0ID0gaW50ZXJ2YWwoTVNfSU5fTUlOVVRFKS5waXBlKFxuICAgICAgICAgICAgICBtYXAocGFpcklmTm90RXhwaXJlZCksXG4gICAgICAgICAgICAgIGZpcnN0KCh4KSA9PiB4ID09IG51bGwpLCAvLyBvbmx5IGVtaXQgdGhlIGZpcnN0IG51bGwgdmFsdWVcbiAgICAgICAgICAgICAgc3RhcnRXaXRoKGluaXRpYWxQYWlyKSwgLy8gc2VuZCB0aGUgaW5pdGlhbCB2YWx1ZSBmaXJzdFxuICAgICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gb2YobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IG9mKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGRvd25sb2FkIFVSTCBmb3IgdGhlIFN0b3JhZ2VGaWxlIHVzaW5nIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIFRoZXNlIFVSTHMgYXJlIGNhY2hlZCBsb2NhbGx5IHRvIHByZXZlbnQgZXh0cmEvcmVkdW5kYW50IGNhbGxzIHRvIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBzdG9yYWdlRmlsZUlkT3JLZXlcbiAgICogQHJldHVybnNcbiAgICovXG4gIGRvd25sb2FkUGFpckZvclN0b3JhZ2VGaWxlKHN0b3JhZ2VGaWxlSWRPcktleTogU3RvcmFnZUZpbGVJZCB8IFN0b3JhZ2VGaWxlS2V5KTogT2JzZXJ2YWJsZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyPiB7XG4gICAgcmV0dXJuIHRoaXMuZG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGVVc2luZ1NvdXJjZShzdG9yYWdlRmlsZUlkT3JLZXksIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBkb3dubG9hZCBVUkwgZm9yIHRoZSBTdG9yYWdlRmlsZSB1c2luZyB0aGUgZGVmYXVsdCBwYXJhbWV0ZXJzIGFuZCBwdWxsZWQgZnJvbSB0aGUgaW5wdXQgc291cmNlLCBpZiBhcHBsaWNhYmxlLlxuICAgKlxuICAgKiBJZiBubyBzb3VyY2UgaXMgcHJvdmlkZWQsIHVzZXMgdGhlIGRlZmF1bHQgaW50ZXJuYWwgc291cmNlLlxuICAgKlxuICAgKiBUaGVzZSBVUkxzIGFyZSBjYWNoZWQgbG9jYWxseSB0byBwcmV2ZW50IGV4dHJhL3JlZHVuZGFudCBjYWxscyB0byB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBAcGFyYW0gc3RvcmFnZUZpbGVJZE9yS2V5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBkb3dubG9hZFBhaXJGb3JTdG9yYWdlRmlsZVVzaW5nU291cmNlKHN0b3JhZ2VGaWxlSWRPcktleTogU3RvcmFnZUZpbGVJZCB8IFN0b3JhZ2VGaWxlS2V5LCBzb3VyY2U6IE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFNlcnZpY2VDdXN0b21Tb3VyY2U+KTogT2JzZXJ2YWJsZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyPiB7XG4gICAgY29uc3Qgc3RvcmFnZUZpbGVJZCA9IGZpcmVzdG9yZU1vZGVsSWQoc3RvcmFnZUZpbGVJZE9yS2V5KTtcbiAgICBjb25zdCBvYnM6IE9ic2VydmFibGU8RGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcj4gPSB0aGlzLmdldENhY2hlZERvd25sb2FkUGFpckZvclN0b3JhZ2VGaWxlKHN0b3JhZ2VGaWxlSWQpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGNhY2hlZFBhaXIpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdDogT2JzZXJ2YWJsZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyPjtcblxuICAgICAgICBjb25zdCBkb3dubG9hZEFuZENhY2hlUmVzdWx0ID0gKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBmcm9tKHRoaXMuX2NyZWF0ZURvd25sb2FkUGFpckZvclN0b3JhZ2VGaWxlVXNpbmdTb3VyY2Uoc291cmNlLCBzdG9yYWdlRmlsZUlkT3JLZXkpKS5waXBlKFxuICAgICAgICAgICAgdGFwKChkb3dubG9hZFVybFBhaXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hZGRQYWlyRm9yU3RvcmFnZUZpbGVUb0NhY2hlKGRvd25sb2FkVXJsUGFpcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNhY2hlZFBhaXIpIHtcbiAgICAgICAgICByZXN1bHQgPSBvZihjYWNoZWRQYWlyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBkb3dubG9hZEFuZENhY2hlUmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSksXG4gICAgICBmaXJzdCgpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgcmV0dXJuIG9icztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHRoZSBnaXZlbiBkb3dubG9hZCBVUkwgcGFpciB0byB0aGUgY2FjaGUuXG4gICAqL1xuICBhZGRQYWlyRm9yU3RvcmFnZUZpbGVUb0NhY2hlKGRvd25sb2FkVXJsUGFpcjogRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcik6IHZvaWQge1xuICAgIHRoaXMuc3RvcmFnZUZpbGVEb3dubG9hZFN0b3JhZ2UuYWRkRG93bmxvYWRVcmwoZG93bmxvYWRVcmxQYWlyKS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZG93bmxvYWQgVVJMIGZvciB0aGUgU3RvcmFnZUZpbGUuXG4gICAqXG4gICAqIEBwYXJhbSBzdG9yYWdlRmlsZUlkT3JLZXlcbiAgICogQHBhcmFtIGlucHV0UGFyYW1zXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBjcmVhdGVEb3dubG9hZFBhaXJGb3JTdG9yYWdlRmlsZShzdG9yYWdlRmlsZUlkT3JLZXk6IFN0b3JhZ2VGaWxlSWQgfCBTdG9yYWdlRmlsZUtleSwgaW5wdXRQYXJhbXM/OiBPbWl0PERvd25sb2FkU3RvcmFnZUZpbGVQYXJhbXMsICdrZXknPik6IFByb21pc2U8RGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcj4ge1xuICAgIHJldHVybiB0aGlzLl9jcmVhdGVEb3dubG9hZFBhaXJGb3JTdG9yYWdlRmlsZVVzaW5nU291cmNlKHVuZGVmaW5lZCwgc3RvcmFnZUZpbGVJZE9yS2V5LCBpbnB1dFBhcmFtcyk7XG4gIH1cblxuICBwcml2YXRlIF9jcmVhdGVEb3dubG9hZFBhaXJGb3JTdG9yYWdlRmlsZVVzaW5nU291cmNlKGlucHV0U291cmNlOiBNYXliZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlQ3VzdG9tU291cmNlPiwgc3RvcmFnZUZpbGVJZE9yS2V5OiBTdG9yYWdlRmlsZUlkIHwgU3RvcmFnZUZpbGVLZXksIGlucHV0UGFyYW1zPzogT21pdDxEb3dubG9hZFN0b3JhZ2VGaWxlUGFyYW1zLCAna2V5Jz4pOiBQcm9taXNlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+IHtcbiAgICBjb25zdCBzb3VyY2UgPSBpbnB1dFNvdXJjZSA/PyB7XG4gICAgICBkb3dubG9hZFN0b3JhZ2VGaWxlUmVzdWx0OiAocGFyYW1zKSA9PiB0aGlzLnN0b3JhZ2VGaWxlRnVuY3Rpb25zLnN0b3JhZ2VGaWxlLnJlYWRTdG9yYWdlRmlsZS5kb3dubG9hZChwYXJhbXMpXG4gICAgfTtcblxuICAgIGNvbnN0IHN0b3JhZ2VGaWxlSWQgPSBmaXJlc3RvcmVNb2RlbElkKHN0b3JhZ2VGaWxlSWRPcktleSk7XG4gICAgY29uc3QgZXhwaXJlc0F0ID0gaW5wdXRQYXJhbXM/LmV4cGlyZXNBdCA/PyBhZGRNaWxsaXNlY29uZHMobmV3IERhdGUoKSwgdGhpcy5fZXhwaXJlc0FmdGVyVGltZSk7XG5cbiAgICBjb25zdCBwYXJhbXM6IERvd25sb2FkU3RvcmFnZUZpbGVQYXJhbXMgPSB7XG4gICAgICAuLi5pbnB1dFBhcmFtcyxcbiAgICAgIGV4cGlyZXNBdCxcbiAgICAgIGtleTogZmlyZXN0b3JlTW9kZWxLZXkoc3RvcmFnZUZpbGVJZGVudGl0eSwgc3RvcmFnZUZpbGVJZClcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNvdXJjZS5kb3dubG9hZFN0b3JhZ2VGaWxlUmVzdWx0KHBhcmFtcywgc3RvcmFnZUZpbGVJZCkudGhlbigoeCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHN0b3JhZ2VGaWxlSWQsXG4gICAgICAgIGRvd25sb2FkVXJsOiB4LnVybCxcbiAgICAgICAgbWltZVR5cGU6IHgubWltZVR5cGUsXG4gICAgICAgIGV4cGlyZXNBdDogeC5leHBpcmVzQXQgPz8gdW5peERhdGVUaW1lU2Vjb25kc051bWJlckZyb21EYXRlKGV4cGlyZXNBdClcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|