@dereekb/dbx-firebase 12.5.8 → 12.5.10

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.
@@ -1,7 +1,8 @@
1
+ export * from './storagefile.download.button.component';
1
2
  export * from './storagefile.upload.action.handler.directive';
2
3
  export * from './storagefile.upload.error';
3
4
  export * from './storagefile.upload.handler';
4
5
  export * from './storagefile.upload.initialize.document.directive';
5
6
  export * from './storagefile.upload.store.directive';
6
7
  export * from './storagefile.upload.sync.directive';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL2NvbnRhaW5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUudXBsb2FkLmFjdGlvbi5oYW5kbGVyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JhZ2VmaWxlLnVwbG9hZC5lcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JhZ2VmaWxlLnVwbG9hZC5oYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUudXBsb2FkLmluaXRpYWxpemUuZG9jdW1lbnQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUudXBsb2FkLnN0b3JlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JhZ2VmaWxlLnVwbG9hZC5zeW5jLmRpcmVjdGl2ZSc7XG4iXX0=
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL2NvbnRhaW5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zdG9yYWdlZmlsZS5kb3dubG9hZC5idXR0b24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUudXBsb2FkLmFjdGlvbi5oYW5kbGVyLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JhZ2VmaWxlLnVwbG9hZC5lcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JhZ2VmaWxlLnVwbG9hZC5oYW5kbGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUudXBsb2FkLmluaXRpYWxpemUuZG9jdW1lbnQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUudXBsb2FkLnN0b3JlLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JhZ2VmaWxlLnVwbG9hZC5zeW5jLmRpcmVjdGl2ZSc7XG4iXX0=
@@ -0,0 +1,210 @@
1
+ import { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal } from '@angular/core';
2
+ import { DbxActionDialogDirective, DbxActionModule, DbxActionSnackbarErrorDirective, DbxAnchorComponent, DbxButtonComponent, DbxEmbedDialogComponent } from '@dereekb/dbx-web';
3
+ import { dateFromDateOrTimeNumber, isPast, MS_IN_SECOND } from '@dereekb/util';
4
+ import { DbxFirebaseStorageFileDownloadService } from '../service/storagefile.download.service';
5
+ import { toObservable, toSignal } from '@angular/core/rxjs-interop';
6
+ import { distinctUntilChanged, interval, map, of, shareReplay, switchMap } from 'rxjs';
7
+ import { MatDialog } from '@angular/material/dialog';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@dereekb/dbx-core";
10
+ export class DbxFirebaseStorageFileDownloadButton {
11
+ dbxFirebaseStorageFileDownloadService = inject(DbxFirebaseStorageFileDownloadService);
12
+ matDialog = inject(MatDialog);
13
+ /**
14
+ * The StorageFileKey to set up the download button for.
15
+ */
16
+ storageFileKey = input();
17
+ /**
18
+ * The download URL to use for the download button.
19
+ */
20
+ storageFileDownloadUrl = input();
21
+ /**
22
+ * The MIME type to use the embed component.
23
+ */
24
+ embedMimeType = input();
25
+ /**
26
+ * Whether or not to show a preview button.
27
+ *
28
+ * Defaults to true.
29
+ */
30
+ showPreviewButton = input(true);
31
+ /**
32
+ * Output event emitted when the download URL changes.
33
+ */
34
+ downloadUrlChange = output();
35
+ config = input();
36
+ configSignal = computed(() => {
37
+ const config = this.config();
38
+ const result = {
39
+ buttonStyle: config?.buttonStyle,
40
+ previewButtonStyle: config?.previewButtonStyle,
41
+ icon: config?.icon ?? 'cloud_download',
42
+ text: config?.text ?? 'Start Download',
43
+ downloadReadyIcon: config?.downloadReadyIcon ?? 'download',
44
+ downloadReadyText: config?.downloadReadyText ?? 'Save File',
45
+ previewIcon: config?.previewIcon ?? 'preview',
46
+ previewText: config?.previewText ?? 'View File'
47
+ };
48
+ return result;
49
+ });
50
+ preloadSignal = computed(() => {
51
+ const config = this.configSignal();
52
+ return config.preload ?? false;
53
+ });
54
+ downloadUrlSignal = signal(undefined);
55
+ downloadUrlExpiresAtSignal = signal(undefined);
56
+ storageFileKey$ = toObservable(this.storageFileKey).pipe(distinctUntilChanged(), shareReplay(1));
57
+ hasDownloadUrlSignal = computed(() => Boolean(this.downloadUrlSignal()));
58
+ buttonStyleSignal = computed(() => {
59
+ const config = this.configSignal();
60
+ const result = {
61
+ type: 'raised',
62
+ ...config.buttonStyle
63
+ };
64
+ return result;
65
+ });
66
+ previewButtonStyleSignal = computed(() => {
67
+ const config = this.configSignal();
68
+ const result = {
69
+ type: 'raised',
70
+ ...config.previewButtonStyle
71
+ };
72
+ return result;
73
+ });
74
+ iconSignal = computed(() => {
75
+ const config = this.configSignal();
76
+ const hasDownloadUrl = this.hasDownloadUrlSignal();
77
+ return hasDownloadUrl ? (config.downloadReadyIcon ?? config.icon) : config.icon;
78
+ });
79
+ textSignal = computed(() => {
80
+ const config = this.configSignal();
81
+ const hasDownloadUrl = this.hasDownloadUrlSignal();
82
+ return hasDownloadUrl ? (config.downloadReadyText ?? config.text) : config.text;
83
+ });
84
+ previewIconSignal = computed(() => {
85
+ const config = this.configSignal();
86
+ return config.previewIcon;
87
+ });
88
+ previewTextSignal = computed(() => {
89
+ const config = this.configSignal();
90
+ return config.previewText;
91
+ });
92
+ anchorSignal = computed(() => {
93
+ const downloadUrl = this.downloadUrlSignal();
94
+ let result;
95
+ if (downloadUrl) {
96
+ result = {
97
+ url: downloadUrl
98
+ };
99
+ }
100
+ return result;
101
+ });
102
+ storageFileDownloadUrlEffect = effect(() => {
103
+ const downloadUrl = this.storageFileDownloadUrl();
104
+ if (downloadUrl || downloadUrl === null) {
105
+ this.downloadUrlSignal.set(downloadUrl);
106
+ }
107
+ }, {
108
+ allowSignalWrites: true
109
+ });
110
+ // Preview
111
+ showPreviewButtonSignal = computed(() => {
112
+ const config = this.configSignal();
113
+ const hasDownloadUrl = this.hasDownloadUrlSignal();
114
+ return hasDownloadUrl && (config.showPreviewButton ?? true);
115
+ });
116
+ handleOpenPreviewDialog = () => {
117
+ const srcUrl = this.downloadUrlSignal();
118
+ const embedMimeType = this.embedMimeType();
119
+ return DbxEmbedDialogComponent.openDialog(this.matDialog, {
120
+ srcUrl,
121
+ embedMimeType,
122
+ sanitizeUrl: true
123
+ });
124
+ };
125
+ // Cached Url Effect
126
+ // When the key changes, check the cache to see if it is already available, and populate the download url if it is.
127
+ cachedUrlForStorageFileKey$ = this.storageFileKey$.pipe(switchMap((key) => (key ? this.dbxFirebaseStorageFileDownloadService.getCachedDownloadPairForStorageFile(key) : of(null))), shareReplay(1));
128
+ cachedUrlForStorageFileKeySignal = toSignal(this.cachedUrlForStorageFileKey$);
129
+ cachedUrlEffect = effect(() => {
130
+ const cachedPair = this.cachedUrlForStorageFileKeySignal();
131
+ if (cachedPair) {
132
+ this.downloadUrlSignal.set(cachedPair.downloadUrl);
133
+ this.downloadUrlExpiresAtSignal.set(cachedPair.expiresAt);
134
+ }
135
+ }, {
136
+ allowSignalWrites: true
137
+ });
138
+ // Expiration Effect
139
+ downloadUrlExpiresAt$ = toObservable(this.downloadUrlExpiresAtSignal).pipe(map(dateFromDateOrTimeNumber), distinctUntilChanged(), shareReplay(1));
140
+ downloadUrlHasExpired$ = this.downloadUrlExpiresAt$.pipe(switchMap((x) => {
141
+ let obs;
142
+ if (x) {
143
+ obs = interval(MS_IN_SECOND).pipe(map(() => isPast(x)), distinctUntilChanged(), shareReplay(1));
144
+ }
145
+ else {
146
+ obs = of(false);
147
+ }
148
+ return obs;
149
+ }), distinctUntilChanged(), shareReplay(1));
150
+ downloadUrlHasExpiredSignal = toSignal(this.downloadUrlHasExpired$);
151
+ downloadUrlHasExpiredEffect = effect(() => {
152
+ const expired = this.downloadUrlHasExpiredSignal();
153
+ if (expired) {
154
+ this.downloadUrlSignal.set(undefined);
155
+ this.downloadUrlExpiresAtSignal.set(undefined);
156
+ }
157
+ }, {
158
+ allowSignalWrites: true
159
+ });
160
+ // Output Effect
161
+ downloadUrlChangeEffect = effect(() => {
162
+ const downloadUrl = this.downloadUrlSignal();
163
+ this.downloadUrlChange.emit(downloadUrl);
164
+ });
165
+ // Handlers
166
+ handleGetDownloadUrl = (value) => {
167
+ return this.dbxFirebaseStorageFileDownloadService.downloadPairForStorageFile(value);
168
+ };
169
+ handleGetDownloadUrlSuccess = (value) => {
170
+ this.downloadUrlSignal.set(value.downloadUrl);
171
+ this.downloadUrlExpiresAtSignal.set(value.expiresAt);
172
+ };
173
+ handleGetDownloadUrlError = (error) => {
174
+ this.downloadUrlSignal.set(undefined);
175
+ this.downloadUrlExpiresAtSignal.set(undefined);
176
+ };
177
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
178
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: DbxFirebaseStorageFileDownloadButton, 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 }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { downloadUrlChange: "downloadUrlChange" }, ngImport: i0, template: `
179
+ <dbx-anchor dbxActionAnchor [anchor]="anchorSignal()" dbxAction [dbxActionAutoTrigger]="preloadSignal()" dbxActionSnackbarError [dbxActionDisabled]="!storageFileKey()" [dbxActionValue]="storageFileKey" [dbxActionHandler]="handleGetDownloadUrl" [dbxActionSuccessHandler]="handleGetDownloadUrlSuccess" [dbxActionErrorHandler]="handleGetDownloadUrlError">
180
+ <dbx-button dbxActionButton [buttonStyle]="buttonStyleSignal()" [icon]="iconSignal()" [text]="textSignal()"></dbx-button>
181
+ </dbx-anchor>
182
+ @if (showPreviewButtonSignal()) {
183
+ <ng-container dbxAction [dbxActionDialog]="handleOpenPreviewDialog" dbxActionHandlerValue>
184
+ <span class="dbx-button-spacer"></span>
185
+ <dbx-button dbxActionButton [buttonStyle]="previewButtonStyleSignal()" [icon]="previewIconSignal()" [text]="previewTextSignal()"></dbx-button>
186
+ </ng-container>
187
+ }
188
+ `, 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
+ }
190
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadButton, decorators: [{
191
+ type: Component,
192
+ args: [{
193
+ selector: 'dbx-firebase-storagefile-download-button',
194
+ template: `
195
+ <dbx-anchor dbxActionAnchor [anchor]="anchorSignal()" dbxAction [dbxActionAutoTrigger]="preloadSignal()" dbxActionSnackbarError [dbxActionDisabled]="!storageFileKey()" [dbxActionValue]="storageFileKey" [dbxActionHandler]="handleGetDownloadUrl" [dbxActionSuccessHandler]="handleGetDownloadUrlSuccess" [dbxActionErrorHandler]="handleGetDownloadUrlError">
196
+ <dbx-button dbxActionButton [buttonStyle]="buttonStyleSignal()" [icon]="iconSignal()" [text]="textSignal()"></dbx-button>
197
+ </dbx-anchor>
198
+ @if (showPreviewButtonSignal()) {
199
+ <ng-container dbxAction [dbxActionDialog]="handleOpenPreviewDialog" dbxActionHandlerValue>
200
+ <span class="dbx-button-spacer"></span>
201
+ <dbx-button dbxActionButton [buttonStyle]="previewButtonStyleSignal()" [icon]="previewIconSignal()" [text]="previewTextSignal()"></dbx-button>
202
+ </ng-container>
203
+ }
204
+ `,
205
+ imports: [DbxButtonComponent, DbxActionModule, DbxActionSnackbarErrorDirective, DbxActionDialogDirective, DbxAnchorComponent],
206
+ changeDetection: ChangeDetectionStrategy.OnPush,
207
+ standalone: true
208
+ }]
209
+ }] });
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=
@@ -1,4 +1,6 @@
1
1
  export * from './container';
2
2
  export * from './store';
3
+ export * from './service';
3
4
  export * from './storagefile.upload.module';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbnRhaW5lcic7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUudXBsb2FkLm1vZHVsZSc7XG4iXX0=
5
+ export * from './storagefile.providers';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29udGFpbmVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUudXBsb2FkLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3N0b3JhZ2VmaWxlLnByb3ZpZGVycyc7XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './storagefile.download.service';
2
+ export * from './storagefile.download.storage.service';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL3NlcnZpY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHdDQUF3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zdG9yYWdlZmlsZS5kb3dubG9hZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZWZpbGUuZG93bmxvYWQuc3RvcmFnZS5zZXJ2aWNlJztcbiJdfQ==
@@ -0,0 +1,120 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { StorageFileFunctions, firestoreModelId, firestoreModelKey, storageFileIdentity } from '@dereekb/firebase';
3
+ import { addMilliseconds, MS_IN_DAY, MS_IN_HOUR, MS_IN_MINUTE, SECONDS_IN_MINUTE, unixTimeNumberForNow, unixTimeNumberFromDate } from '@dereekb/util';
4
+ import { DbxFirebaseStorageFileDownloadStorage } from './storagefile.download.storage.service';
5
+ import { distinctUntilChanged, filter, first, from, interval, map, of, shareReplay, startWith, switchMap, tap } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Service used for retrieving download links for StorageFiles.
9
+ */
10
+ export class DbxFirebaseStorageFileDownloadService {
11
+ /**
12
+ * Expiration duration for cached download URLs.
13
+ */
14
+ _expiresAfterTime = 3 * MS_IN_DAY;
15
+ /**
16
+ * When reading cached values, this buffer is added to the expiration time to prevent the URL from expiring while it is being used.
17
+ */
18
+ _expiresAfterTimeBuffer = SECONDS_IN_MINUTE * 10;
19
+ storageFileFunctions = inject(StorageFileFunctions);
20
+ storageFileDownloadStorage = inject(DbxFirebaseStorageFileDownloadStorage);
21
+ // MARK: Config
22
+ getExpiresAfterTime() {
23
+ return this._expiresAfterTime;
24
+ }
25
+ setExpiresAfterTime(expiresAfter) {
26
+ const maxAllowed = MS_IN_DAY * 20;
27
+ if (expiresAfter > maxAllowed) {
28
+ throw new Error(`Expires after time cannot be greater than 20 days.`);
29
+ }
30
+ else if (expiresAfter < MS_IN_HOUR) {
31
+ throw new Error(`Expires after time cannot be less than 1 hour.`);
32
+ }
33
+ this._expiresAfterTime = expiresAfter;
34
+ }
35
+ // MARK: Download
36
+ /**
37
+ * Returns an observable that returns the cached download URL pair for the StorageFile, and emits null once it expires.
38
+ *
39
+ * @param storageFileIdOrKey
40
+ * @returns
41
+ */
42
+ getCachedDownloadPairForStorageFile(storageFileIdOrKey) {
43
+ const storageFileId = firestoreModelId(storageFileIdOrKey);
44
+ return this.storageFileDownloadStorage.getDownloadUrlPair(storageFileId).pipe(switchMap((pair) => {
45
+ let result;
46
+ if (pair) {
47
+ const expiresAt = pair.expiresAt - this._expiresAfterTimeBuffer;
48
+ // every minute emit the result again
49
+ result = interval(MS_IN_MINUTE)
50
+ .pipe(map(() => {
51
+ const now = unixTimeNumberForNow();
52
+ const isExpired = now > expiresAt;
53
+ return isExpired ? null : pair; // emit null once expired
54
+ }))
55
+ .pipe(filter((x) => x == null), first(), startWith(pair), distinctUntilChanged(), shareReplay(1));
56
+ }
57
+ else {
58
+ result = of(null);
59
+ }
60
+ return result;
61
+ }));
62
+ }
63
+ /**
64
+ * Retrieves the download URL for the StorageFile using the default parameters.
65
+ *
66
+ * These URLs are cached locally to prevent extra/redundant calls to the server.
67
+ *
68
+ * @param storageFileIdOrKey
69
+ * @returns
70
+ */
71
+ downloadPairForStorageFile(storageFileIdOrKey) {
72
+ const storageFileId = firestoreModelId(storageFileIdOrKey);
73
+ const obs = this.getCachedDownloadPairForStorageFile(storageFileId).pipe(switchMap((cachedPair) => {
74
+ let result;
75
+ const downloadAndCacheResult = () => {
76
+ const expiresAt = addMilliseconds(new Date(), this._expiresAfterTime);
77
+ return from(this.createDownloadPairForStorageFile(storageFileIdOrKey, { expiresAt })).pipe(tap((downloadUrlPair) => {
78
+ // add to the cache
79
+ this.storageFileDownloadStorage.addDownloadUrl(downloadUrlPair).pipe(first()).subscribe();
80
+ }));
81
+ };
82
+ if (cachedPair) {
83
+ result = of(cachedPair);
84
+ }
85
+ else {
86
+ result = downloadAndCacheResult();
87
+ }
88
+ return result;
89
+ }), first(), shareReplay(1));
90
+ return obs;
91
+ }
92
+ /**
93
+ * Creates a new download URL for the StorageFile.
94
+ *
95
+ * @param storageFileIdOrKey
96
+ * @param inputParams
97
+ * @returns
98
+ */
99
+ createDownloadPairForStorageFile(storageFileIdOrKey, inputParams) {
100
+ const storageFileId = firestoreModelId(storageFileIdOrKey);
101
+ const expiresAt = inputParams?.expiresAt ?? addMilliseconds(new Date(), this._expiresAfterTime);
102
+ const params = {
103
+ ...inputParams,
104
+ key: firestoreModelKey(storageFileIdentity, storageFileId)
105
+ };
106
+ return this.storageFileFunctions.storageFile.readStorageFile.download(params).then((x) => {
107
+ return {
108
+ id: storageFileId,
109
+ downloadUrl: x.url,
110
+ expiresAt: unixTimeNumberFromDate(expiresAt)
111
+ };
112
+ });
113
+ }
114
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
115
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadService });
116
+ }
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadService, decorators: [{
118
+ type: Injectable
119
+ }] });
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG93bmxvYWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RieC1maXJlYmFzZS9zcmMvbGliL21vZHVsZXMvc3RvcmFnZWZpbGUvc2VydmljZS9zdG9yYWdlZmlsZS5kb3dubG9hZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBNEQsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM3SyxPQUFPLEVBQUUsZUFBZSxFQUF1QixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBVyxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwTCxPQUFPLEVBQUUscUNBQXFDLEVBQXlDLE1BQU0sd0NBQXdDLENBQUM7QUFDdEksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFeEk7O0dBRUc7QUFFSCxNQUFNLE9BQU8scUNBQXFDO0lBQ2hEOztPQUVHO0lBQ08saUJBQWlCLEdBQWlCLENBQUMsR0FBRyxTQUFTLENBQUM7SUFFMUQ7O09BRUc7SUFDTyx1QkFBdUIsR0FBWSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFFM0Qsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDcEQsMEJBQTBCLEdBQUcsTUFBTSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFFcEYsZUFBZTtJQUNmLG1CQUFtQjtR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amVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2VGaWxlRnVuY3Rpb25zLCBEb3dubG9hZFN0b3JhZ2VGaWxlUGFyYW1zLCBTdG9yYWdlRmlsZUtleSwgU3RvcmFnZUZpbGVJZCwgZmlyZXN0b3JlTW9kZWxJZCwgZmlyZXN0b3JlTW9kZWxLZXksIHN0b3JhZ2VGaWxlSWRlbnRpdHkgfSBmcm9tICdAZGVyZWVrYi9maXJlYmFzZSc7XG5pbXBvcnQgeyBhZGRNaWxsaXNlY29uZHMsIE1heWJlLCBNaWxsaXNlY29uZHMsIE1TX0lOX0RBWSwgTVNfSU5fSE9VUiwgTVNfSU5fTUlOVVRFLCBTZWNvbmRzLCBTRUNPTkRTX0lOX01JTlVURSwgdW5peFRpbWVOdW1iZXJGb3JOb3csIHVuaXhUaW1lTnVtYmVyRnJvbURhdGUgfSBmcm9tICdAZGVyZWVrYi91dGlsJztcbmltcG9ydCB7IERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFN0b3JhZ2UsIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXIgfSBmcm9tICcuL3N0b3JhZ2VmaWxlLmRvd25sb2FkLnN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgZnJvbSwgaW50ZXJ2YWwsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbi8qKlxuICogU2VydmljZSB1c2VkIGZvciByZXRyaWV2aW5nIGRvd25sb2FkIGxpbmtzIGZvciBTdG9yYWdlRmlsZXMuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEV4cGlyYXRpb24gZHVyYXRpb24gZm9yIGNhY2hlZCBkb3dubG9hZCBVUkxzLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9leHBpcmVzQWZ0ZXJUaW1lOiBNaWxsaXNlY29uZHMgPSAzICogTVNfSU5fREFZO1xuXG4gIC8qKlxuICAgKiBXaGVuIHJlYWRpbmcgY2FjaGVkIHZhbHVlcywgdGhpcyBidWZmZXIgaXMgYWRkZWQgdG8gdGhlIGV4cGlyYXRpb24gdGltZSB0byBwcmV2ZW50IHRoZSBVUkwgZnJvbSBleHBpcmluZyB3aGlsZSBpdCBpcyBiZWluZyB1c2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9leHBpcmVzQWZ0ZXJUaW1lQnVmZmVyOiBTZWNvbmRzID0gU0VDT05EU19JTl9NSU5VVEUgKiAxMDtcblxuICByZWFkb25seSBzdG9yYWdlRmlsZUZ1bmN0aW9ucyA9IGluamVjdChTdG9yYWdlRmlsZUZ1bmN0aW9ucyk7XG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlRG93bmxvYWRTdG9yYWdlID0gaW5qZWN0KERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFN0b3JhZ2UpO1xuXG4gIC8vIE1BUks6IENvbmZpZ1xuICBnZXRFeHBpcmVzQWZ0ZXJUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGlyZXNBZnRlclRpbWU7XG4gIH1cblxuICBzZXRFeHBpcmVzQWZ0ZXJUaW1lKGV4cGlyZXNBZnRlcjogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbWF4QWxsb3dlZCA9IE1TX0lOX0RBWSAqIDIwO1xuXG4gICAgaWYgKGV4cGlyZXNBZnRlciA+IG1heEFsbG93ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwaXJlcyBhZnRlciB0aW1lIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMjAgZGF5cy5gKTtcbiAgICB9IGVsc2UgaWYgKGV4cGlyZXNBZnRlciA8IE1TX0lOX0hPVVIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwaXJlcyBhZnRlciB0aW1lIGNhbm5vdCBiZSBsZXNzIHRoYW4gMSBob3VyLmApO1xuICAgIH1cblxuICAgIHRoaXMuX2V4cGlyZXNBZnRlclRpbWUgPSBleHBpcmVzQWZ0ZXI7XG4gIH1cblxuICAvLyBNQVJLOiBEb3dubG9hZFxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYnNlcnZhYmxlIHRoYXQgcmV0dXJucyB0aGUgY2FjaGVkIGRvd25sb2FkIFVSTCBwYWlyIGZvciB0aGUgU3RvcmFnZUZpbGUsIGFuZCBlbWl0cyBudWxsIG9uY2UgaXQgZXhwaXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHN0b3JhZ2VGaWxlSWRPcktleVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0Q2FjaGVkRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoc3RvcmFnZUZpbGVJZE9yS2V5OiBTdG9yYWdlRmlsZUlkIHwgU3RvcmFnZUZpbGVLZXkpOiBPYnNlcnZhYmxlPE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+PiB7XG4gICAgY29uc3Qgc3RvcmFnZUZpbGVJZCA9IGZpcmVzdG9yZU1vZGVsSWQoc3RvcmFnZUZpbGVJZE9yS2V5KTtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlRmlsZURvd25sb2FkU3RvcmFnZS5nZXREb3dubG9hZFVybFBhaXIoc3RvcmFnZUZpbGVJZCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocGFpcikgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBPYnNlcnZhYmxlPE1heWJlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+PjtcblxuICAgICAgICBpZiAocGFpcikge1xuICAgICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IHBhaXIuZXhwaXJlc0F0IC0gdGhpcy5fZXhwaXJlc0FmdGVyVGltZUJ1ZmZlcjtcblxuICAgICAgICAgIC8vIGV2ZXJ5IG1pbnV0ZSBlbWl0IHRoZSByZXN1bHQgYWdhaW5cbiAgICAgICAgICByZXN1bHQgPSBpbnRlcnZhbChNU19JTl9NSU5VVEUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSB1bml4VGltZU51bWJlckZvck5vdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRXhwaXJlZCA9IG5vdyA+IGV4cGlyZXNBdDtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNFeHBpcmVkID8gbnVsbCA6IHBhaXI7IC8vIGVtaXQgbnVsbCBvbmNlIGV4cGlyZWRcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHggPT0gbnVsbCksXG4gICAgICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgICAgIHN0YXJ0V2l0aChwYWlyKSxcbiAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gb2YobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZG93bmxvYWQgVVJMIGZvciB0aGUgU3RvcmFnZUZpbGUgdXNpbmcgdGhlIGRlZmF1bHQgcGFyYW1ldGVycy5cbiAgICpcbiAgICogVGhlc2UgVVJMcyBhcmUgY2FjaGVkIGxvY2FsbHkgdG8gcHJldmVudCBleHRyYS9yZWR1bmRhbnQgY2FsbHMgdG8gdGhlIHNlcnZlci5cbiAgICpcbiAgICogQHBhcmFtIHN0b3JhZ2VGaWxlSWRPcktleVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoc3RvcmFnZUZpbGVJZE9yS2V5OiBTdG9yYWdlRmlsZUlkIHwgU3RvcmFnZUZpbGVLZXkpOiBPYnNlcnZhYmxlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+IHtcbiAgICBjb25zdCBzdG9yYWdlRmlsZUlkID0gZmlyZXN0b3JlTW9kZWxJZChzdG9yYWdlRmlsZUlkT3JLZXkpO1xuICAgIGNvbnN0IG9iczogT2JzZXJ2YWJsZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyPiA9IHRoaXMuZ2V0Q2FjaGVkRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoc3RvcmFnZUZpbGVJZCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoY2FjaGVkUGFpcikgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0OiBPYnNlcnZhYmxlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+O1xuXG4gICAgICAgIGNvbnN0IGRvd25sb2FkQW5kQ2FjaGVSZXN1bHQgPSAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKCksIHRoaXMuX2V4cGlyZXNBZnRlclRpbWUpO1xuICAgICAgICAgIHJldHVybiBmcm9tKHRoaXMuY3JlYXRlRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoc3RvcmFnZUZpbGVJZE9yS2V5LCB7IGV4cGlyZXNBdCB9KSkucGlwZShcbiAgICAgICAgICAgIHRhcCgoZG93bmxvYWRVcmxQYWlyKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGFkZCB0byB0aGUgY2FjaGVcbiAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlRmlsZURvd25sb2FkU3RvcmFnZS5hZGREb3dubG9hZFVybChkb3dubG9hZFVybFBhaXIpLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNhY2hlZFBhaXIpIHtcbiAgICAgICAgICByZXN1bHQgPSBvZihjYWNoZWRQYWlyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSBkb3dubG9hZEFuZENhY2hlUmVzdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSksXG4gICAgICBmaXJzdCgpLFxuICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApO1xuXG4gICAgcmV0dXJuIG9icztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGRvd25sb2FkIFVSTCBmb3IgdGhlIFN0b3JhZ2VGaWxlLlxuICAgKlxuICAgKiBAcGFyYW0gc3RvcmFnZUZpbGVJZE9yS2V5XG4gICAqIEBwYXJhbSBpbnB1dFBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgY3JlYXRlRG93bmxvYWRQYWlyRm9yU3RvcmFnZUZpbGUoc3RvcmFnZUZpbGVJZE9yS2V5OiBTdG9yYWdlRmlsZUlkIHwgU3RvcmFnZUZpbGVLZXksIGlucHV0UGFyYW1zPzogT21pdDxEb3dubG9hZFN0b3JhZ2VGaWxlUGFyYW1zLCAna2V5Jz4pOiBQcm9taXNlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXI+IHtcbiAgICBjb25zdCBzdG9yYWdlRmlsZUlkID0gZmlyZXN0b3JlTW9kZWxJZChzdG9yYWdlRmlsZUlkT3JLZXkpO1xuICAgIGNvbnN0IGV4cGlyZXNBdCA9IGlucHV0UGFyYW1zPy5leHBpcmVzQXQgPz8gYWRkTWlsbGlzZWNvbmRzKG5ldyBEYXRlKCksIHRoaXMuX2V4cGlyZXNBZnRlclRpbWUpO1xuXG4gICAgY29uc3QgcGFyYW1zOiBEb3dubG9hZFN0b3JhZ2VGaWxlUGFyYW1zID0ge1xuICAgICAgLi4uaW5wdXRQYXJhbXMsXG4gICAgICBrZXk6IGZpcmVzdG9yZU1vZGVsS2V5KHN0b3JhZ2VGaWxlSWRlbnRpdHksIHN0b3JhZ2VGaWxlSWQpXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VGaWxlRnVuY3Rpb25zLnN0b3JhZ2VGaWxlLnJlYWRTdG9yYWdlRmlsZS5kb3dubG9hZChwYXJhbXMpLnRoZW4oKHgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBzdG9yYWdlRmlsZUlkLFxuICAgICAgICBkb3dubG9hZFVybDogeC51cmwsXG4gICAgICAgIGV4cGlyZXNBdDogdW5peFRpbWVOdW1iZXJGcm9tRGF0ZShleHBpcmVzQXQpXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,89 @@
1
+ import { Injectable, InjectionToken, inject } from '@angular/core';
2
+ import { map, mergeMap, catchError, of, switchMap, first } from 'rxjs';
3
+ import { firestoreModelId } from '@dereekb/firebase';
4
+ import { DbxFirebaseAuthService } from '../../../auth/service/firebase.auth.service';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Token that corresponds to a StorageAccessor<DbxFirebaseStorageFileDownloadUserCache> that is used by DbxModelViewTrackerStorage.
8
+ */
9
+ export const DBX_FIREBASE_STORAGEFILE_DOWNLOAD_STORAGE_ACCESSOR_TOKEN = new InjectionToken('DbxFirebaseStorageFileDownloadStorageAccessor');
10
+ /**
11
+ * Used for managing DbxModelViewTrackerEvent storage.
12
+ */
13
+ export class DbxFirebaseStorageFileDownloadStorage {
14
+ static DEFAULT_MAX_DOWNLOAD_URLS = 100;
15
+ authService = inject(DbxFirebaseAuthService);
16
+ storageAccessor = inject(DBX_FIREBASE_STORAGEFILE_DOWNLOAD_STORAGE_ACCESSOR_TOKEN);
17
+ addDownloadUrl({ id, downloadUrl, expiresAt }) {
18
+ return this.getCurrentUserDownloadCache().pipe(mergeMap((cache) => {
19
+ const { uid, pairs: currentPairs } = cache;
20
+ const storageKey = this.getStorageKeyForUid(uid);
21
+ const pairs = {
22
+ ...currentPairs,
23
+ [id]: `${expiresAt}_${downloadUrl}`
24
+ };
25
+ return this.storageAccessor.set(storageKey, {
26
+ uid,
27
+ pairs
28
+ });
29
+ }), first());
30
+ }
31
+ /**
32
+ * Returns the cached download URL pair for the given key.
33
+ *
34
+ * The pair may be expired.
35
+ *
36
+ * @param key
37
+ * @returns
38
+ */
39
+ getDownloadUrlPair(input) {
40
+ const id = firestoreModelId(input);
41
+ return this.authService.uid$.pipe(switchMap((uid) => {
42
+ return this.getUserDownloadCache(uid).pipe(map((cache) => {
43
+ const pair = cache?.pairs[id];
44
+ let result;
45
+ if (pair) {
46
+ const [expiresAt, downloadUrl] = pair.split('_', 2);
47
+ result = {
48
+ id,
49
+ downloadUrl,
50
+ expiresAt: Number(expiresAt)
51
+ };
52
+ }
53
+ return result;
54
+ }));
55
+ }), first());
56
+ }
57
+ getAllDownloadUrlPairsRecord(uid) {
58
+ return this.getUserDownloadCache(uid).pipe(map((x) => x.pairs));
59
+ }
60
+ getCurrentUserDownloadCache() {
61
+ return this.authService.uid$.pipe(switchMap((uid) => this.getUserDownloadCache(uid)));
62
+ }
63
+ getUserDownloadCache(uid) {
64
+ const storageKey = this.getStorageKeyForUid(uid);
65
+ return this._getUserDownloadCacheForStorageKey(storageKey, uid);
66
+ }
67
+ clearCurrentUserDownloadCache() {
68
+ return this.authService.uid$.pipe(switchMap((uid) => this.clearUserDownloadCache(uid)));
69
+ }
70
+ clearUserDownloadCache(uid) {
71
+ const storageKey = this.getStorageKeyForUid(uid);
72
+ return this.storageAccessor.remove(storageKey);
73
+ }
74
+ _getUserDownloadCacheForStorageKey(storageKey, uid) {
75
+ return this.storageAccessor.get(storageKey).pipe(catchError((e) => {
76
+ return of(undefined);
77
+ }), map((result) => result ?? { uid, pairs: {} }));
78
+ }
79
+ getStorageKeyForUid(uid) {
80
+ const storageKey = `sf_dl_cache_${uid}`;
81
+ return storageKey;
82
+ }
83
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
84
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadStorage });
85
+ }
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DbxFirebaseStorageFileDownloadStorage, decorators: [{
87
+ type: Injectable
88
+ }] });
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG93bmxvYWQuc3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZpcmViYXNlL3NyYy9saWIvbW9kdWxlcy9zdG9yYWdlZmlsZS9zZXJ2aWNlL3N0b3JhZ2VmaWxlLmRvd25sb2FkLnN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25GLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQXNFLE1BQU0sbUJBQW1CLENBQUM7QUFDN0ksT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7O0FBcUJyRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdEQUF3RCxHQUFHLElBQUksY0FBYyxDQUFDLCtDQUErQyxDQUFDLENBQUM7QUFFNUk7O0dBRUc7QUFFSCxNQUFNLE9BQU8scUNBQXFDO0lBQ2hELE1BQU0sQ0FBVSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFFdkMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzdDLGVBQWUsR0FBRyxNQUFNLENBQTJELHdEQUF3RCxDQUFDLENBQUM7SUFFdEosY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQXlDO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUMsSUFBSSxDQUM1QyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsR0FBRyxL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QUMsQ0FBQyxJQUFJLENBQzlDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQzlDLENBQUM7SUFDSixDQUFDO0lBRUQsbUJBQW1CLENBQUMsR0FBdUI7UUFDekMsTUFBTSxVQUFVLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUN4QyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO3dHQWhHVSxxQ0FBcUM7NEdBQXJDLHFDQUFxQzs7NEZBQXJDLHFDQUFxQztrQkFEakQsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2VBY2Nlc3NvciB9IGZyb20gJ0BkZXJlZWtiL2RieC1jb3JlJztcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIGNhdGNoRXJyb3IsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIGZpcnN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaXJlYmFzZUF1dGhVc2VySWQsIGZpcmVzdG9yZU1vZGVsSWQsIEZpcmVzdG9yZU1vZGVsSWRJbnB1dCwgU3RvcmFnZUZpbGVJZCwgU3RvcmFnZUZpbGVTaWduZWREb3dubG9hZFVybCB9IGZyb20gJ0BkZXJlZWtiL2ZpcmViYXNlJztcbmltcG9ydCB7IERieEZpcmViYXNlQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hdXRoL3NlcnZpY2UvZmlyZWJhc2UuYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFVuaXhUaW1lTnVtYmVyIH0gZnJvbSAnQGRlcmVla2IvdXRpbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpciB7XG4gIHJlYWRvbmx5IGlkOiBTdG9yYWdlRmlsZUlkO1xuICByZWFkb25seSBkb3dubG9hZFVybDogU3RvcmFnZUZpbGVTaWduZWREb3dubG9hZFVybDtcbiAgLyoqXG4gICAqIEV4cGlyYXRpb24gaW4gc2Vjb25kcyBzaW5jZSBlcG9jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4cGlyZXNBdDogVW5peFRpbWVOdW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXJTdHJpbmcgPSBgJHtVbml4VGltZU51bWJlcn1fJHtTdG9yYWdlRmlsZVNpZ25lZERvd25sb2FkVXJsfWA7XG5cbmV4cG9ydCB0eXBlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXJzUmVjb3JkID0gUmVjb3JkPFN0b3JhZ2VGaWxlSWQsIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXJTdHJpbmc+O1xuXG5leHBvcnQgaW50ZXJmYWNlIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVzZXJDYWNoZSB7XG4gIHJlYWRvbmx5IHVpZDogRmlyZWJhc2VBdXRoVXNlcklkO1xuICByZWFkb25seSBwYWlyczogRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcnNSZWNvcmQ7XG59XG5cbi8qKlxuICogVG9rZW4gdGhhdCBjb3JyZXNwb25kcyB0byBhIFN0b3JhZ2VBY2Nlc3NvcjxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVc2VyQ2FjaGU+IHRoYXQgaXMgdXNlZCBieSBEYnhNb2RlbFZpZXdUcmFja2VyU3RvcmFnZS5cbiAqL1xuZXhwb3J0IGNvbnN0IERCWF9GSVJFQkFTRV9TVE9SQUdFRklMRV9ET1dOTE9BRF9TVE9SQUdFX0FDQ0VTU09SX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuKCdEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTdG9yYWdlQWNjZXNzb3InKTtcblxuLyoqXG4gKiBVc2VkIGZvciBtYW5hZ2luZyBEYnhNb2RlbFZpZXdUcmFja2VyRXZlbnQgc3RvcmFnZS5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFN0b3JhZ2Uge1xuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NQVhfRE9XTkxPQURfVVJMUyA9IDEwMDtcblxuICByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChEYnhGaXJlYmFzZUF1dGhTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgc3RvcmFnZUFjY2Vzc29yID0gaW5qZWN0PFN0b3JhZ2VBY2Nlc3NvcjxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVc2VyQ2FjaGU+PihEQlhfRklSRUJBU0VfU1RPUkFHRUZJTEVfRE9XTkxPQURfU1RPUkFHRV9BQ0NFU1NPUl9UT0tFTik7XG5cbiAgYWRkRG93bmxvYWRVcmwoeyBpZCwgZG93bmxvYWRVcmwsIGV4cGlyZXNBdCB9OiBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VycmVudFVzZXJEb3dubG9hZENhY2hlKCkucGlwZShcbiAgICAgIG1lcmdlTWFwKChjYWNoZSkgPT4ge1xuICAgICAgICBjb25zdCB7IHVpZCwgcGFpcnM6IGN1cnJlbnRQYWlycyB9ID0gY2FjaGU7XG5cbiAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IHRoaXMuZ2V0U3RvcmFnZUtleUZvclVpZCh1aWQpO1xuICAgICAgICBjb25zdCBwYWlyczogRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpcnNSZWNvcmQgPSB7XG4gICAgICAgICAgLi4uY3VycmVudFBhaXJzLFxuICAgICAgICAgIFtpZF06IGAke2V4cGlyZXNBdH1fJHtkb3dubG9hZFVybH1gXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZUFjY2Vzc29yLnNldChzdG9yYWdlS2V5LCB7XG4gICAgICAgICAgdWlkLFxuICAgICAgICAgIHBhaXJzXG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjYWNoZWQgZG93bmxvYWQgVVJMIHBhaXIgZm9yIHRoZSBnaXZlbiBrZXkuXG4gICAqXG4gICAqIFRoZSBwYWlyIG1heSBiZSBleHBpcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXREb3dubG9hZFVybFBhaXIoaW5wdXQ6IEZpcmVzdG9yZU1vZGVsSWRJbnB1dCk6IE9ic2VydmFibGU8RGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXJsUGFpciB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGlkID0gZmlyZXN0b3JlTW9kZWxJZChpbnB1dCk7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UudWlkJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh1aWQpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlckRvd25sb2FkQ2FjaGUodWlkKS5waXBlKFxuICAgICAgICAgIG1hcCgoY2FjaGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhaXIgPSBjYWNoZT8ucGFpcnNbaWRdO1xuXG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVcmxQYWlyIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICBpZiAocGFpcikge1xuICAgICAgICAgICAgICBjb25zdCBbZXhwaXJlc0F0LCBkb3dubG9hZFVybF0gPSBwYWlyLnNwbGl0KCdfJywgMik7XG5cbiAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIGRvd25sb2FkVXJsLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNBdDogTnVtYmVyKGV4cGlyZXNBdClcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBmaXJzdCgpXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbERvd25sb2FkVXJsUGFpcnNSZWNvcmQodWlkOiBGaXJlYmFzZUF1dGhVc2VySWQpOiBPYnNlcnZhYmxlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVybFBhaXJzUmVjb3JkPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VXNlckRvd25sb2FkQ2FjaGUodWlkKS5waXBlKG1hcCgoeCkgPT4geC5wYWlycykpO1xuICB9XG5cbiAgZ2V0Q3VycmVudFVzZXJEb3dubG9hZENhY2hlKCk6IE9ic2VydmFibGU8RGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXNlckNhY2hlPiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UudWlkJC5waXBlKHN3aXRjaE1hcCgodWlkKSA9PiB0aGlzLmdldFVzZXJEb3dubG9hZENhY2hlKHVpZCkpKTtcbiAgfVxuXG4gIGdldFVzZXJEb3dubG9hZENhY2hlKHVpZDogRmlyZWJhc2VBdXRoVXNlcklkKTogT2JzZXJ2YWJsZTxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVc2VyQ2FjaGU+IHtcbiAgICBjb25zdCBzdG9yYWdlS2V5ID0gdGhpcy5nZXRTdG9yYWdlS2V5Rm9yVWlkKHVpZCk7XG4gICAgcmV0dXJuIHRoaXMuX2dldFVzZXJEb3dubG9hZENhY2hlRm9yU3RvcmFnZUtleShzdG9yYWdlS2V5LCB1aWQpO1xuICB9XG5cbiAgY2xlYXJDdXJyZW50VXNlckRvd25sb2FkQ2FjaGUoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZpY2UudWlkJC5waXBlKHN3aXRjaE1hcCgodWlkKSA9PiB0aGlzLmNsZWFyVXNlckRvd25sb2FkQ2FjaGUodWlkKSkpO1xuICB9XG5cbiAgY2xlYXJVc2VyRG93bmxvYWRDYWNoZSh1aWQ6IEZpcmViYXNlQXV0aFVzZXJJZCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSB0aGlzLmdldFN0b3JhZ2VLZXlGb3JVaWQodWlkKTtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlQWNjZXNzb3IucmVtb3ZlKHN0b3JhZ2VLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VXNlckRvd25sb2FkQ2FjaGVGb3JTdG9yYWdlS2V5KHN0b3JhZ2VLZXk6IHN0cmluZywgdWlkOiBGaXJlYmFzZUF1dGhVc2VySWQpOiBPYnNlcnZhYmxlPERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFVzZXJDYWNoZT4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VBY2Nlc3Nvci5nZXQoc3RvcmFnZUtleSkucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoKGUpID0+IHtcbiAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgocmVzdWx0KSA9PiByZXN1bHQgPz8geyB1aWQsIHBhaXJzOiB7fSB9KVxuICAgICk7XG4gIH1cblxuICBnZXRTdG9yYWdlS2V5Rm9yVWlkKHVpZDogRmlyZWJhc2VBdXRoVXNlcklkKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdG9yYWdlS2V5ID0gYHNmX2RsX2NhY2hlXyR7dWlkfWA7XG4gICAgcmV0dXJuIHN0b3JhZ2VLZXk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,33 @@
1
+ import { makeEnvironmentProviders } from '@angular/core';
2
+ import { SimpleStorageAccessorFactory } from '@dereekb/dbx-core';
3
+ import { DBX_FIREBASE_STORAGEFILE_DOWNLOAD_STORAGE_ACCESSOR_TOKEN, DbxFirebaseStorageFileDownloadStorage } from './service/storagefile.download.storage.service';
4
+ import { DbxFirebaseStorageFileDownloadService } from './service/storagefile.download.service';
5
+ /**
6
+ * Factory function for creating a StorageAccessor for the model view tracker.
7
+ */
8
+ export function defaultDbxFirebaseStorageFileDownloadStorageAccessorFactory(storageAccessorFactory) {
9
+ const accessor = storageAccessorFactory.createStorageAccessor({
10
+ prefix: 'sfds'
11
+ });
12
+ return accessor;
13
+ }
14
+ /**
15
+ * Creates EnvironmentProviders for providing DbxModelTrackerService, DbxModelObjectStateService and sets up the NgRx store for DbxModelTrackerEffects.
16
+ *
17
+ * @returns EnvironmentProviders
18
+ */
19
+ export function provideDbxFirebaseStorageFileService() {
20
+ const providers = [
21
+ // Storage accessor
22
+ {
23
+ provide: DBX_FIREBASE_STORAGEFILE_DOWNLOAD_STORAGE_ACCESSOR_TOKEN,
24
+ useFactory: defaultDbxFirebaseStorageFileDownloadStorageAccessorFactory,
25
+ deps: [SimpleStorageAccessorFactory]
26
+ },
27
+ // Service
28
+ DbxFirebaseStorageFileDownloadStorage,
29
+ DbxFirebaseStorageFileDownloadService
30
+ ];
31
+ return makeEnvironmentProviders(providers);
32
+ }
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUucHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGJ4LWZpcmViYXNlL3NyYy9saWIvbW9kdWxlcy9zdG9yYWdlZmlsZS9zdG9yYWdlZmlsZS5wcm92aWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0Qyx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsNEJBQTRCLEVBQXdCLE1BQU0sbUJBQW1CLENBQUM7QUFDdkYsT0FBTyxFQUFFLHdEQUF3RCxFQUFFLHFDQUFxQyxFQUFnRCxNQUFNLGdEQUFnRCxDQUFDO0FBQy9NLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRS9GOztHQUVHO0FBQ0gsTUFBTSxVQUFVLDJEQUEyRCxDQUFDLHNCQUFvRDtJQUM5SCxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBMEM7UUFDckcsTUFBTSxFQUFFLE1BQU07S0FDZixDQUFDLENBQUM7SUFFSCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxvQ0FBb0M7SUFDbEQsTUFBTSxTQUFTLEdBQXdDO1FBQ3JELG1CQUFtQjtRQUNuQjtZQUNFLE9BQU8sRUFBRSx3REFBd0Q7WUFDakUsVUFBVSxFQUFFLDJEQUEyRDtZQUN2RSxJQUFJLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQztTQUNyQztRQUNELFVBQVU7UUFDVixxQ0FBcUM7UUFDckMscUNBQXFDO0tBQ3RDLENBQUM7SUFFRixPQUFPLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEVudmlyb25tZW50UHJvdmlkZXJzLCB0eXBlIFByb3ZpZGVyLCBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNpbXBsZVN0b3JhZ2VBY2Nlc3NvckZhY3RvcnksIHR5cGUgU3RvcmFnZUFjY2Vzc29yIH0gZnJvbSAnQGRlcmVla2IvZGJ4LWNvcmUnO1xuaW1wb3J0IHsgREJYX0ZJUkVCQVNFX1NUT1JBR0VGSUxFX0RPV05MT0FEX1NUT1JBR0VfQUNDRVNTT1JfVE9LRU4sIERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFN0b3JhZ2UsIHR5cGUgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkVXNlckNhY2hlIH0gZnJvbSAnLi9zZXJ2aWNlL3N0b3JhZ2VmaWxlLmRvd25sb2FkLnN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlL3N0b3JhZ2VmaWxlLmRvd25sb2FkLnNlcnZpY2UnO1xuXG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgU3RvcmFnZUFjY2Vzc29yIGZvciB0aGUgbW9kZWwgdmlldyB0cmFja2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdERieEZpcmViYXNlU3RvcmFnZUZpbGVEb3dubG9hZFN0b3JhZ2VBY2Nlc3NvckZhY3Rvcnkoc3RvcmFnZUFjY2Vzc29yRmFjdG9yeTogU2ltcGxlU3RvcmFnZUFjY2Vzc29yRmFjdG9yeSk6IFN0b3JhZ2VBY2Nlc3NvcjxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVc2VyQ2FjaGU+IHtcbiAgY29uc3QgYWNjZXNzb3IgPSBzdG9yYWdlQWNjZXNzb3JGYWN0b3J5LmNyZWF0ZVN0b3JhZ2VBY2Nlc3NvcjxEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRVc2VyQ2FjaGU+KHtcbiAgICBwcmVmaXg6ICdzZmRzJ1xuICB9KTtcblxuICByZXR1cm4gYWNjZXNzb3I7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBFbnZpcm9ubWVudFByb3ZpZGVycyBmb3IgcHJvdmlkaW5nIERieE1vZGVsVHJhY2tlclNlcnZpY2UsIERieE1vZGVsT2JqZWN0U3RhdGVTZXJ2aWNlIGFuZCBzZXRzIHVwIHRoZSBOZ1J4IHN0b3JlIGZvciBEYnhNb2RlbFRyYWNrZXJFZmZlY3RzLlxuICpcbiAqIEByZXR1cm5zIEVudmlyb25tZW50UHJvdmlkZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZVNlcnZpY2UoKTogRW52aXJvbm1lbnRQcm92aWRlcnMge1xuICBjb25zdCBwcm92aWRlcnM6IChQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKVtdID0gW1xuICAgIC8vIFN0b3JhZ2UgYWNjZXNzb3JcbiAgICB7XG4gICAgICBwcm92aWRlOiBEQlhfRklSRUJBU0VfU1RPUkFHRUZJTEVfRE9XTkxPQURfU1RPUkFHRV9BQ0NFU1NPUl9UT0tFTixcbiAgICAgIHVzZUZhY3Rvcnk6IGRlZmF1bHREYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTdG9yYWdlQWNjZXNzb3JGYWN0b3J5LFxuICAgICAgZGVwczogW1NpbXBsZVN0b3JhZ2VBY2Nlc3NvckZhY3RvcnldXG4gICAgfSxcbiAgICAvLyBTZXJ2aWNlXG4gICAgRGJ4RmlyZWJhc2VTdG9yYWdlRmlsZURvd25sb2FkU3RvcmFnZSxcbiAgICBEYnhGaXJlYmFzZVN0b3JhZ2VGaWxlRG93bmxvYWRTZXJ2aWNlXG4gIF07XG5cbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhwcm92aWRlcnMpO1xufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { Injectable, inject } from '@angular/core';
2
- import { AbstractDbxFirebaseDocumentStore, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreCrudFunction, firebaseDocumentStoreDeleteFunction, firebaseDocumentStoreUpdateFunction } from '../../../model/modules/store';
2
+ import { AbstractDbxFirebaseDocumentStore, firebaseDocumentStoreCreateFunction, firebaseDocumentStoreCrudFunction, firebaseDocumentStoreDeleteFunction, firebaseDocumentStoreReadFunction, firebaseDocumentStoreUpdateFunction } from '../../../model/modules/store';
3
3
  import { StorageFileFirestoreCollections, StorageFileFunctions } from '@dereekb/firebase';
4
4
  import * as i0 from "@angular/core";
5
5
  export class StorageFileDocumentStore extends AbstractDbxFirebaseDocumentStore {
@@ -13,10 +13,11 @@ export class StorageFileDocumentStore extends AbstractDbxFirebaseDocumentStore {
13
13
  updateStorageFile = firebaseDocumentStoreUpdateFunction(this, this.storageFileFunctions.storageFile.updateStorageFile.update);
14
14
  processStorageFile = firebaseDocumentStoreUpdateFunction(this, this.storageFileFunctions.storageFile.updateStorageFile.process);
15
15
  deleteStorageFile = firebaseDocumentStoreDeleteFunction(this, this.storageFileFunctions.storageFile.deleteStorageFile.delete);
16
+ downloadStorageFile = firebaseDocumentStoreReadFunction(this, this.storageFileFunctions.storageFile.readStorageFile.download);
16
17
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileDocumentStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
17
18
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileDocumentStore });
18
19
  }
19
20
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StorageFileDocumentStore, decorators: [{
20
21
  type: Injectable
21
22
  }], ctorParameters: () => [] });
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG9jdW1lbnQuc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL3N0b3JlL3N0b3JhZ2VmaWxlLmRvY3VtZW50LnN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxtQ0FBbUMsRUFBRSxpQ0FBaUMsRUFBRSxtQ0FBbUMsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xPLE9BQU8sRUFBb0MsK0JBQStCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHNUgsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGdDQUFrRTtJQUNyRyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUU3RDtRQUNFLEtBQUssQ0FBQyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRVEsMkJBQTJCLEdBQUcsbUNBQW1DLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEksK0JBQStCLEdBQUcsbUNBQW1DLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEosbUNBQW1DLEdBQUcsaUNBQWlDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUUvSSxpQkFBaUIsR0FBRyxtQ0FBbUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5SCxrQkFBa0IsR0FBRyxtQ0FBbUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVoSSxpQkFBaUIsR0FBRyxtQ0FBbUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3R0FkNUgsd0JBQXdCOzRHQUF4Qix3QkFBd0I7OzRGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0RGJ4RmlyZWJhc2VEb2N1bWVudFN0b3JlLCBmaXJlYmFzZURvY3VtZW50U3RvcmVDcmVhdGVGdW5jdGlvbiwgZmlyZWJhc2VEb2N1bWVudFN0b3JlQ3J1ZEZ1bmN0aW9uLCBmaXJlYmFzZURvY3VtZW50U3RvcmVEZWxldGVGdW5jdGlvbiwgZmlyZWJhc2VEb2N1bWVudFN0b3JlVXBkYXRlRnVuY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbC9tb2R1bGVzL3N0b3JlJztcbmltcG9ydCB7IFN0b3JhZ2VGaWxlLCBTdG9yYWdlRmlsZURvY3VtZW50LCBTdG9yYWdlRmlsZUZpcmVzdG9yZUNvbGxlY3Rpb25zLCBTdG9yYWdlRmlsZUZ1bmN0aW9ucyB9IGZyb20gJ0BkZXJlZWtiL2ZpcmViYXNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VGaWxlRG9jdW1lbnRTdG9yZSBleHRlbmRzIEFic3RyYWN0RGJ4RmlyZWJhc2VEb2N1bWVudFN0b3JlPFN0b3JhZ2VGaWxlLCBTdG9yYWdlRmlsZURvY3VtZW50PiB7XG4gIHJlYWRvbmx5IHN0b3JhZ2VGaWxlRnVuY3Rpb25zID0gaW5qZWN0KFN0b3JhZ2VGaWxlRnVuY3Rpb25zKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7IGZpcmVzdG9yZUNvbGxlY3Rpb246IGluamVjdChTdG9yYWdlRmlsZUZpcmVzdG9yZUNvbGxlY3Rpb25zKS5zdG9yYWdlRmlsZUNvbGxlY3Rpb24gfSk7XG4gIH1cblxuICByZWFkb25seSBjcmVhdGVTdG9yYWdlRmlsZUZyb21VcGxvYWQgPSBmaXJlYmFzZURvY3VtZW50U3RvcmVDcmVhdGVGdW5jdGlvbih0aGlzLCB0aGlzLnN0b3JhZ2VGaWxlRnVuY3Rpb25zLnN0b3JhZ2VGaWxlLmNyZWF0ZVN0b3JhZ2VGaWxlLmNyZWF0ZSk7XG4gIHJlYWRvbmx5IGluaXRpYWxpemVTdG9yYWdlRmlsZUZyb21VcGxvYWQgPSBmaXJlYmFzZURvY3VtZW50U3RvcmVDcmVhdGVGdW5jdGlvbih0aGlzLCB0aGlzLnN0b3JhZ2VGaWxlRnVuY3Rpb25zLnN0b3JhZ2VGaWxlLmNyZWF0ZVN0b3JhZ2VGaWxlLmZyb21VcGxvYWQpO1xuICByZWFkb25seSBpbml0aWFsaXplQWxsU3RvcmFnZUZpbGVzRnJvbVVwbG9hZCA9IGZpcmViYXNlRG9jdW1lbnRTdG9yZUNydWRGdW5jdGlvbih0aGlzLnN0b3JhZ2VGaWxlRnVuY3Rpb25zLnN0b3JhZ2VGaWxlLmNyZWF0ZVN0b3JhZ2VGaWxlLmFsbEZyb21VcGxvYWQpO1xuXG4gIHJlYWRvbmx5IHVwZGF0ZVN0b3JhZ2VGaWxlID0gZmlyZWJhc2VEb2N1bWVudFN0b3JlVXBkYXRlRnVuY3Rpb24odGhpcywgdGhpcy5zdG9yYWdlRmlsZUZ1bmN0aW9ucy5zdG9yYWdlRmlsZS51cGRhdGVTdG9yYWdlRmlsZS51cGRhdGUpO1xuICByZWFkb25seSBwcm9jZXNzU3RvcmFnZUZpbGUgPSBmaXJlYmFzZURvY3VtZW50U3RvcmVVcGRhdGVGdW5jdGlvbih0aGlzLCB0aGlzLnN0b3JhZ2VGaWxlRnVuY3Rpb25zLnN0b3JhZ2VGaWxlLnVwZGF0ZVN0b3JhZ2VGaWxlLnByb2Nlc3MpO1xuXG4gIHJlYWRvbmx5IGRlbGV0ZVN0b3JhZ2VGaWxlID0gZmlyZWJhc2VEb2N1bWVudFN0b3JlRGVsZXRlRnVuY3Rpb24odGhpcywgdGhpcy5zdG9yYWdlRmlsZUZ1bmN0aW9ucy5zdG9yYWdlRmlsZS5kZWxldGVTdG9yYWdlRmlsZS5kZWxldGUpO1xufVxuIl19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZWZpbGUuZG9jdW1lbnQuc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYngtZmlyZWJhc2Uvc3JjL2xpYi9tb2R1bGVzL3N0b3JhZ2VmaWxlL3N0b3JlL3N0b3JhZ2VmaWxlLmRvY3VtZW50LnN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxtQ0FBbUMsRUFBRSxpQ0FBaUMsRUFBRSxtQ0FBbUMsRUFBRSxpQ0FBaUMsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JRLE9BQU8sRUFBb0MsK0JBQStCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHNUgsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGdDQUFrRTtJQUNyRyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUU3RDtRQUNFLEtBQUssQ0FBQyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRVEsMkJBQTJCLEdBQUcsbUNBQW1DLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEksK0JBQStCLEdBQUcsbUNBQW1DLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEosbUNBQW1DLEdBQUcsaUNBQWlDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUUvSSxpQkFBaUIsR0FBRyxtQ0FBbUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5SCxrQkFBa0IsR0FBRyxtQ0FBbUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVoSSxpQkFBaUIsR0FBRyxtQ0FBbUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5SCxtQkFBbUIsR0FBRyxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7d0dBaEI1SCx3QkFBd0I7NEdBQXhCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3REYnhGaXJlYmFzZURvY3VtZW50U3RvcmUsIGZpcmViYXNlRG9jdW1lbnRTdG9yZUNyZWF0ZUZ1bmN0aW9uLCBmaXJlYmFzZURvY3VtZW50U3RvcmVDcnVkRnVuY3Rpb24sIGZpcmViYXNlRG9jdW1lbnRTdG9yZURlbGV0ZUZ1bmN0aW9uLCBmaXJlYmFzZURvY3VtZW50U3RvcmVSZWFkRnVuY3Rpb24sIGZpcmViYXNlRG9jdW1lbnRTdG9yZVVwZGF0ZUZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWwvbW9kdWxlcy9zdG9yZSc7XG5pbXBvcnQgeyBTdG9yYWdlRmlsZSwgU3RvcmFnZUZpbGVEb2N1bWVudCwgU3RvcmFnZUZpbGVGaXJlc3RvcmVDb2xsZWN0aW9ucywgU3RvcmFnZUZpbGVGdW5jdGlvbnMgfSBmcm9tICdAZGVyZWVrYi9maXJlYmFzZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdG9yYWdlRmlsZURvY3VtZW50U3RvcmUgZXh0ZW5kcyBBYnN0cmFjdERieEZpcmViYXNlRG9jdW1lbnRTdG9yZTxTdG9yYWdlRmlsZSwgU3RvcmFnZUZpbGVEb2N1bWVudD4ge1xuICByZWFkb25seSBzdG9yYWdlRmlsZUZ1bmN0aW9ucyA9IGluamVjdChTdG9yYWdlRmlsZUZ1bmN0aW9ucyk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoeyBmaXJlc3RvcmVDb2xsZWN0aW9uOiBpbmplY3QoU3RvcmFnZUZpbGVGaXJlc3RvcmVDb2xsZWN0aW9ucykuc3RvcmFnZUZpbGVDb2xsZWN0aW9uIH0pO1xuICB9XG5cbiAgcmVhZG9ubHkgY3JlYXRlU3RvcmFnZUZpbGVGcm9tVXBsb2FkID0gZmlyZWJhc2VEb2N1bWVudFN0b3JlQ3JlYXRlRnVuY3Rpb24odGhpcywgdGhpcy5zdG9yYWdlRmlsZUZ1bmN0aW9ucy5zdG9yYWdlRmlsZS5jcmVhdGVTdG9yYWdlRmlsZS5jcmVhdGUpO1xuICByZWFkb25seSBpbml0aWFsaXplU3RvcmFnZUZpbGVGcm9tVXBsb2FkID0gZmlyZWJhc2VEb2N1bWVudFN0b3JlQ3JlYXRlRnVuY3Rpb24odGhpcywgdGhpcy5zdG9yYWdlRmlsZUZ1bmN0aW9ucy5zdG9yYWdlRmlsZS5jcmVhdGVTdG9yYWdlRmlsZS5mcm9tVXBsb2FkKTtcbiAgcmVhZG9ubHkgaW5pdGlhbGl6ZUFsbFN0b3JhZ2VGaWxlc0Zyb21VcGxvYWQgPSBmaXJlYmFzZURvY3VtZW50U3RvcmVDcnVkRnVuY3Rpb24odGhpcy5zdG9yYWdlRmlsZUZ1bmN0aW9ucy5zdG9yYWdlRmlsZS5jcmVhdGVTdG9yYWdlRmlsZS5hbGxGcm9tVXBsb2FkKTtcblxuICByZWFkb25seSB1cGRhdGVTdG9yYWdlRmlsZSA9IGZpcmViYXNlRG9jdW1lbnRTdG9yZVVwZGF0ZUZ1bmN0aW9uKHRoaXMsIHRoaXMuc3RvcmFnZUZpbGVGdW5jdGlvbnMuc3RvcmFnZUZpbGUudXBkYXRlU3RvcmFnZUZpbGUudXBkYXRlKTtcbiAgcmVhZG9ubHkgcHJvY2Vzc1N0b3JhZ2VGaWxlID0gZmlyZWJhc2VEb2N1bWVudFN0b3JlVXBkYXRlRnVuY3Rpb24odGhpcywgdGhpcy5zdG9yYWdlRmlsZUZ1bmN0aW9ucy5zdG9yYWdlRmlsZS51cGRhdGVTdG9yYWdlRmlsZS5wcm9jZXNzKTtcblxuICByZWFkb25seSBkZWxldGVTdG9yYWdlRmlsZSA9IGZpcmViYXNlRG9jdW1lbnRTdG9yZURlbGV0ZUZ1bmN0aW9uKHRoaXMsIHRoaXMuc3RvcmFnZUZpbGVGdW5jdGlvbnMuc3RvcmFnZUZpbGUuZGVsZXRlU3RvcmFnZUZpbGUuZGVsZXRlKTtcblxuICByZWFkb25seSBkb3dubG9hZFN0b3JhZ2VGaWxlID0gZmlyZWJhc2VEb2N1bWVudFN0b3JlUmVhZEZ1bmN0aW9uKHRoaXMsIHRoaXMuc3RvcmFnZUZpbGVGdW5jdGlvbnMuc3RvcmFnZUZpbGUucmVhZFN0b3JhZ2VGaWxlLmRvd25sb2FkKTtcbn1cbiJdfQ==