http-request-manager 19.0.0 → 19.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +585 -300
  2. package/fesm2022/http-request-manager.mjs +9434 -3133
  3. package/fesm2022/http-request-manager.mjs.map +1 -1
  4. package/package.json +7 -9
  5. package/types/http-request-manager.d.ts +3546 -0
  6. package/esm2022/http-request-manager.mjs +0 -5
  7. package/esm2022/lib/http-request-manager.module.mjs +0 -186
  8. package/esm2022/lib/http-request-services-demo/database-data-demo/database-data-demo.component.mjs +0 -71
  9. package/esm2022/lib/http-request-services-demo/http-request-services-demo.component.mjs +0 -45
  10. package/esm2022/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.mjs +0 -173
  11. package/esm2022/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.mjs +0 -184
  12. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.mjs +0 -80
  13. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.mjs +0 -42
  14. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.mjs +0 -88
  15. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.mjs +0 -11
  16. package/esm2022/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.mjs +0 -29
  17. package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.mjs +0 -9
  18. package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.mjs +0 -12
  19. package/esm2022/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.mjs +0 -14
  20. package/esm2022/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.mjs +0 -315
  21. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.mjs +0 -270
  22. package/esm2022/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.mjs +0 -67
  23. package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.mjs +0 -9
  24. package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.mjs +0 -12
  25. package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.mjs +0 -14
  26. package/esm2022/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.mjs +0 -336
  27. package/esm2022/lib/index.mjs +0 -4
  28. package/esm2022/lib/interceptors/credentials.interceptor.mjs +0 -14
  29. package/esm2022/lib/interceptors/index.mjs +0 -5
  30. package/esm2022/lib/interceptors/models/error-settings.model.mjs +0 -10
  31. package/esm2022/lib/interceptors/proxy-debugger.interceptor.mjs +0 -47
  32. package/esm2022/lib/interceptors/request-error.interceptor.mjs +0 -49
  33. package/esm2022/lib/interceptors/request-header.interceptor.mjs +0 -41
  34. package/esm2022/lib/models/config-http-options.model.mjs +0 -18
  35. package/esm2022/lib/models/config-local-storage-options.model.mjs +0 -12
  36. package/esm2022/lib/models/config-options.model.mjs +0 -12
  37. package/esm2022/lib/models/config-token.model.mjs +0 -8
  38. package/esm2022/lib/models/data-type.enum.mjs +0 -7
  39. package/esm2022/lib/models/database-storage.model.mjs +0 -10
  40. package/esm2022/lib/models/index.mjs +0 -7
  41. package/esm2022/lib/models/retry-options.model.mjs +0 -10
  42. package/esm2022/lib/services/database-manager-services/database.manager.service.mjs +0 -119
  43. package/esm2022/lib/services/database-manager-services/db.storage.service.mjs +0 -143
  44. package/esm2022/lib/services/database-manager-services/index.mjs +0 -4
  45. package/esm2022/lib/services/database-manager-services/models/table-schema.mjs +0 -20
  46. package/esm2022/lib/services/index.mjs +0 -6
  47. package/esm2022/lib/services/local-storage-manager-service/index.mjs +0 -4
  48. package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +0 -302
  49. package/esm2022/lib/services/local-storage-manager-service/local-storage-signals-manager.service.mjs +0 -277
  50. package/esm2022/lib/services/local-storage-manager-service/models/global-store-options.model.mjs +0 -13
  51. package/esm2022/lib/services/local-storage-manager-service/models/index.mjs +0 -6
  52. package/esm2022/lib/services/local-storage-manager-service/models/setting-options.model.mjs +0 -17
  53. package/esm2022/lib/services/local-storage-manager-service/models/storage-data.model.mjs +0 -10
  54. package/esm2022/lib/services/local-storage-manager-service/models/storage-option.model.mjs +0 -12
  55. package/esm2022/lib/services/local-storage-manager-service/models/storage-type.enum.mjs +0 -7
  56. package/esm2022/lib/services/request-manager-services/http-manager-signals.service.mjs +0 -199
  57. package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +0 -207
  58. package/esm2022/lib/services/request-manager-services/index.mjs +0 -6
  59. package/esm2022/lib/services/request-manager-services/request-signals.service.mjs +0 -170
  60. package/esm2022/lib/services/request-manager-services/request.service.mjs +0 -191
  61. package/esm2022/lib/services/request-manager-services/rxjs-operators/countdown.mjs +0 -9
  62. package/esm2022/lib/services/request-manager-services/rxjs-operators/delay-retry.mjs +0 -10
  63. package/esm2022/lib/services/request-manager-services/rxjs-operators/index.mjs +0 -5
  64. package/esm2022/lib/services/request-manager-services/rxjs-operators/request-polling.mjs +0 -33
  65. package/esm2022/lib/services/request-manager-services/rxjs-operators/request-streaming.mjs +0 -19
  66. package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +0 -360
  67. package/esm2022/lib/services/request-manager-state-service/index.mjs +0 -3
  68. package/esm2022/lib/services/request-manager-state-service/models/api-request.model.mjs +0 -21
  69. package/esm2022/lib/services/request-manager-state-service/models/index.mjs +0 -3
  70. package/esm2022/lib/services/request-manager-state-service/models/request-options.model.mjs +0 -10
  71. package/esm2022/lib/services/request-manager-state-service/models/ws-options.model.mjs +0 -12
  72. package/esm2022/lib/services/utils/app.service.mjs +0 -26
  73. package/esm2022/lib/services/utils/encryption/asymmetrical-encryption.service.mjs +0 -186
  74. package/esm2022/lib/services/utils/encryption/encryption-test.service.mjs +0 -35
  75. package/esm2022/lib/services/utils/encryption/index.mjs +0 -4
  76. package/esm2022/lib/services/utils/encryption/random.mjs +0 -52
  77. package/esm2022/lib/services/utils/encryption/symmetrical-encryption.service.mjs +0 -77
  78. package/esm2022/lib/services/utils/headers.service.mjs +0 -21
  79. package/esm2022/lib/services/utils/index.mjs +0 -6
  80. package/esm2022/lib/services/utils/object-merger.service.mjs +0 -70
  81. package/esm2022/lib/services/utils/path-query.service.mjs +0 -54
  82. package/esm2022/lib/services/utils/utils.service.mjs +0 -155
  83. package/esm2022/lib/services/ws-manager-service/models/assortment-data.model.mjs +0 -10
  84. package/esm2022/lib/services/ws-manager-service/websocket.service.mjs +0 -133
  85. package/esm2022/public-api.mjs +0 -11
  86. package/http-request-manager-19.0.0.tgz +0 -0
  87. package/index.d.ts +0 -5
  88. package/lib/http-request-manager.module.d.ts +0 -35
  89. package/lib/http-request-services-demo/database-data-demo/database-data-demo.component.d.ts +0 -19
  90. package/lib/http-request-services-demo/http-request-services-demo.component.d.ts +0 -32
  91. package/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.d.ts +0 -56
  92. package/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.d.ts +0 -55
  93. package/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.d.ts +0 -26
  94. package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.d.ts +0 -13
  95. package/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.d.ts +0 -27
  96. package/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.d.ts +0 -12
  97. package/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.d.ts +0 -16
  98. package/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.d.ts +0 -8
  99. package/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.d.ts +0 -14
  100. package/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.d.ts +0 -14
  101. package/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.d.ts +0 -107
  102. package/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.d.ts +0 -122
  103. package/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.d.ts +0 -15
  104. package/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.d.ts +0 -8
  105. package/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.d.ts +0 -14
  106. package/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.d.ts +0 -14
  107. package/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.d.ts +0 -106
  108. package/lib/index.d.ts +0 -3
  109. package/lib/interceptors/credentials.interceptor.d.ts +0 -8
  110. package/lib/interceptors/index.d.ts +0 -4
  111. package/lib/interceptors/models/error-settings.model.d.ts +0 -10
  112. package/lib/interceptors/proxy-debugger.interceptor.d.ts +0 -12
  113. package/lib/interceptors/request-error.interceptor.d.ts +0 -10
  114. package/lib/interceptors/request-header.interceptor.d.ts +0 -15
  115. package/lib/models/config-http-options.model.d.ts +0 -21
  116. package/lib/models/config-local-storage-options.model.d.ts +0 -13
  117. package/lib/models/config-options.model.d.ts +0 -12
  118. package/lib/models/config-token.model.d.ts +0 -8
  119. package/lib/models/data-type.enum.d.ts +0 -5
  120. package/lib/models/database-storage.model.d.ts +0 -10
  121. package/lib/models/index.d.ts +0 -6
  122. package/lib/models/retry-options.model.d.ts +0 -10
  123. package/lib/services/database-manager-services/database.manager.service.d.ts +0 -31
  124. package/lib/services/database-manager-services/db.storage.service.d.ts +0 -26
  125. package/lib/services/database-manager-services/index.d.ts +0 -3
  126. package/lib/services/database-manager-services/models/table-schema.d.ts +0 -11
  127. package/lib/services/index.d.ts +0 -4
  128. package/lib/services/local-storage-manager-service/index.d.ts +0 -3
  129. package/lib/services/local-storage-manager-service/local-storage-manager.service.d.ts +0 -86
  130. package/lib/services/local-storage-manager-service/local-storage-signals-manager.service.d.ts +0 -64
  131. package/lib/services/local-storage-manager-service/models/global-store-options.model.d.ts +0 -15
  132. package/lib/services/local-storage-manager-service/models/index.d.ts +0 -5
  133. package/lib/services/local-storage-manager-service/models/setting-options.model.d.ts +0 -15
  134. package/lib/services/local-storage-manager-service/models/storage-data.model.d.ts +0 -10
  135. package/lib/services/local-storage-manager-service/models/storage-option.model.d.ts +0 -13
  136. package/lib/services/local-storage-manager-service/models/storage-type.enum.d.ts +0 -5
  137. package/lib/services/request-manager-services/http-manager-signals.service.d.ts +0 -38
  138. package/lib/services/request-manager-services/http-manager.service.d.ts +0 -41
  139. package/lib/services/request-manager-services/index.d.ts +0 -4
  140. package/lib/services/request-manager-services/request-signals.service.d.ts +0 -26
  141. package/lib/services/request-manager-services/request.service.d.ts +0 -28
  142. package/lib/services/request-manager-services/rxjs-operators/countdown.d.ts +0 -2
  143. package/lib/services/request-manager-services/rxjs-operators/delay-retry.d.ts +0 -2
  144. package/lib/services/request-manager-services/rxjs-operators/index.d.ts +0 -4
  145. package/lib/services/request-manager-services/rxjs-operators/request-polling.d.ts +0 -2
  146. package/lib/services/request-manager-services/rxjs-operators/request-streaming.d.ts +0 -2
  147. package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +0 -64
  148. package/lib/services/request-manager-state-service/index.d.ts +0 -2
  149. package/lib/services/request-manager-state-service/models/api-request.model.d.ts +0 -30
  150. package/lib/services/request-manager-state-service/models/index.d.ts +0 -2
  151. package/lib/services/request-manager-state-service/models/request-options.model.d.ts +0 -10
  152. package/lib/services/request-manager-state-service/models/ws-options.model.d.ts +0 -14
  153. package/lib/services/utils/app.service.d.ts +0 -8
  154. package/lib/services/utils/encryption/asymmetrical-encryption.service.d.ts +0 -17
  155. package/lib/services/utils/encryption/encryption-test.service.d.ts +0 -10
  156. package/lib/services/utils/encryption/index.d.ts +0 -3
  157. package/lib/services/utils/encryption/random.d.ts +0 -7
  158. package/lib/services/utils/encryption/symmetrical-encryption.service.d.ts +0 -14
  159. package/lib/services/utils/headers.service.d.ts +0 -10
  160. package/lib/services/utils/index.d.ts +0 -5
  161. package/lib/services/utils/object-merger.service.d.ts +0 -14
  162. package/lib/services/utils/path-query.service.d.ts +0 -11
  163. package/lib/services/utils/utils.service.d.ts +0 -24
  164. package/lib/services/ws-manager-service/models/assortment-data.model.d.ts +0 -10
  165. package/lib/services/ws-manager-service/websocket.service.d.ts +0 -21
  166. package/public-api.d.ts +0 -7
@@ -1,170 +0,0 @@
1
- import { HttpClient, HttpEventType, HttpHeaderResponse } from '@angular/common/http';
2
- import { Injectable, inject, signal, computed } from '@angular/core';
3
- import { throwError } from 'rxjs';
4
- import { catchError, finalize, map } from 'rxjs/operators';
5
- import { PathQueryService, HeadersService } from '../utils';
6
- import { requestStreaming } from './rxjs-operators/request-streaming';
7
- import * as i0 from "@angular/core";
8
- export class RequestSignalsService {
9
- constructor() {
10
- this.http = inject(HttpClient);
11
- this.pathQueryService = inject(PathQueryService);
12
- this.headersService = inject(HeadersService);
13
- this.isPending = signal(false);
14
- this.progress = signal(0);
15
- this.isIdle = computed(() => !this.isPending());
16
- }
17
- getRecordRequest(options) {
18
- const urlPath = this.buildUrlPath(options);
19
- const headers = this.buildCombinedHeaders(options);
20
- this.isPending.set(true);
21
- return (options.stream)
22
- ? this.http.get(urlPath, headers).pipe(requestStreaming(), this.handleFinalize())
23
- : this.http.get(urlPath, headers).pipe(this.request(options), this.handleFinalize());
24
- }
25
- createRecordRequest(options, data) {
26
- const urlPath = this.buildUrlPath(options);
27
- const headers = this.buildCombinedHeaders(options);
28
- this.isPending.set(true);
29
- return (options.stream)
30
- ? this.http.post(urlPath, data, headers).pipe(requestStreaming(), this.handleFinalize())
31
- : this.http.post(urlPath, data, headers).pipe(this.request(options), this.handleFinalize());
32
- }
33
- updateRecordRequest(options, data) {
34
- const urlPath = this.buildUrlPath(options);
35
- const headers = this.buildHeaders(options);
36
- this.isPending.set(true);
37
- return this.http.put(urlPath, data, headers).pipe(this.request(options), this.handleFinalize());
38
- }
39
- deleteRecordRequest(options) {
40
- const urlPath = this.buildUrlPath(options);
41
- const headers = this.buildHeaders(options);
42
- this.isPending.set(true);
43
- return this.http.delete(urlPath, headers).pipe(this.request(options), this.handleFinalize());
44
- }
45
- buildUrlPath(options) {
46
- return this.pathQueryService.buildAPIPath(options.server, options.path);
47
- }
48
- buildHeaders(options) {
49
- return this.headersService.generateHeaders(options.headers);
50
- }
51
- buildCombinedHeaders(options) {
52
- const headers = this.headersService.generateHeaders(options.headers);
53
- return this.combineHeaders(headers, options.stream || false);
54
- }
55
- request(options) {
56
- return (source$) => {
57
- return source$.pipe(map(data => {
58
- if (options?.adapter) {
59
- return Array.isArray(data)
60
- ? data.map((item) => options.adapter(item))
61
- : options.adapter(data);
62
- }
63
- return data;
64
- }));
65
- };
66
- }
67
- downloadFileRequest(options) {
68
- this.isPending.set(true);
69
- const urlPath = this.buildUrlPath(options);
70
- return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })
71
- .pipe(map((event) => {
72
- this.isPending.set(true);
73
- if (event instanceof HttpHeaderResponse) {
74
- if (event.status !== 200) {
75
- this.isPending.set(false);
76
- throw new Error('Download failed');
77
- }
78
- }
79
- switch (event.type) {
80
- case HttpEventType.DownloadProgress:
81
- const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100;
82
- this.progress.set(status);
83
- return status;
84
- case HttpEventType.Response:
85
- try {
86
- const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : [];
87
- const header_content = event.headers.get('Content-Disposition') || '';
88
- const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : '';
89
- const fileName = (fileNamePath !== '') ? fileNamePath : file;
90
- if (fileName === '') {
91
- this.isPending.set(false);
92
- throw new Error('Save File: (file name and extension) not found in Headers or Path');
93
- }
94
- this.downloadFile(fileName, event.body);
95
- this.isPending.set(false);
96
- return 100;
97
- }
98
- catch (error) {
99
- throw new Error('Download failed');
100
- }
101
- default:
102
- this.isPending.set(false);
103
- return 0;
104
- }
105
- }), catchError(err => {
106
- return throwError(() => err);
107
- }));
108
- }
109
- handleFinalize() {
110
- return finalize(() => this.isPending.set(false));
111
- }
112
- downloadFile(file, fileData) {
113
- const navigatorAny = window.navigator;
114
- const extension = file.split('.')[1]?.toLowerCase();
115
- const newBlob = new Blob([fileData], { type: this.createFileType(extension) });
116
- if (navigatorAny.msSaveOrOpenBlob) {
117
- navigatorAny.msSaveOrOpenBlob(newBlob, file);
118
- }
119
- else {
120
- const link = document.createElement('a');
121
- const url = window.URL.createObjectURL(newBlob);
122
- link.href = url;
123
- link.download = file;
124
- link.click();
125
- window.URL.revokeObjectURL(url);
126
- }
127
- }
128
- createFileType(ext) {
129
- let fileType = "";
130
- if (ext === 'pdf' || ext === 'csv')
131
- fileType = `application/${ext}`;
132
- else if (ext === 'jpeg' || ext === 'jpg' || ext === 'png')
133
- fileType = `image/${ext}`;
134
- else if (ext === 'txt')
135
- fileType = 'text/plain';
136
- else if (ext === 'ppt' || ext === 'pot' || ext === 'pps' || ext === 'ppa')
137
- fileType = 'application/vnd.ms-powerpoint';
138
- else if (ext === 'pptx')
139
- fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
140
- else if (ext === 'doc' || ext === 'dot')
141
- fileType = 'application/msword';
142
- else if (ext === 'docx')
143
- fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
144
- else if (ext === 'xls' || ext === 'xlt' || ext === 'xla')
145
- fileType = 'application/vnd.ms-excel';
146
- else if (ext === 'xlsx')
147
- fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
148
- return fileType;
149
- }
150
- combineHeaders(headers, isStreaming) {
151
- return (isStreaming)
152
- ? {
153
- ...headers,
154
- observe: 'events',
155
- responseType: 'text',
156
- reportProgress: true,
157
- Accept: 'text/event-stream'
158
- }
159
- : headers;
160
- }
161
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestSignalsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
162
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestSignalsService, providedIn: 'root' }); }
163
- }
164
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestSignalsService, decorators: [{
165
- type: Injectable,
166
- args: [{
167
- providedIn: 'root'
168
- }]
169
- }] });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1zaWduYWxzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcy9yZXF1ZXN0LXNpZ25hbHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckUsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOztBQUt0RSxNQUFNLE9BQU8scUJBQXFCO0lBSGxDO1FBS1UsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVoRCxjQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLGFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckIsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBZ001QztJQTlMQyxnQkFBZ0IsQ0FBSSxPQUFt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QkFDakIsWUFBWSxFQUFFLE1BQU07Z0JBQ3BCLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixNQUFNLEVBQUUsbUJBQW1CO2FBQzVCO1lBQ0gsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNkLENBQUM7K0dBeE1VLHFCQUFxQjttSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBIZWFkZXJSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXBpUmVxdWVzdCB9IGZyb20gJy4uL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL21vZGVscy9hcGktcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBQYXRoUXVlcnlTZXJ2aWNlLCBIZWFkZXJzU2VydmljZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHJlcXVlc3RTdHJlYW1pbmcgfSBmcm9tICcuL3J4anMtb3BlcmF0b3JzL3JlcXVlc3Qtc3RyZWFtaW5nJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUmVxdWVzdFNpZ25hbHNTZXJ2aWNlIHtcblxuICBwcml2YXRlIGh0dHAgPSBpbmplY3QoSHR0cENsaWVudCk7XG4gIHByaXZhdGUgcGF0aFF1ZXJ5U2VydmljZSA9IGluamVjdChQYXRoUXVlcnlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBoZWFkZXJzU2VydmljZSA9IGluamVjdChIZWFkZXJzU2VydmljZSk7XG5cbiAgaXNQZW5kaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvZ3Jlc3MgPSBzaWduYWwoMCk7XG5cbiAgaXNJZGxlID0gY29tcHV0ZWQoKCkgPT4gIXRoaXMuaXNQZW5kaW5nKCkpO1xuXG4gIGdldFJlY29yZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmJ1aWxkVXJsUGF0aChvcHRpb25zKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5idWlsZENvbWJpbmVkSGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuaXNQZW5kaW5nLnNldCh0cnVlKTtcblxuICAgIHJldHVybiAob3B0aW9ucy5zdHJlYW0pXG4gICAgICA/IHRoaXMuaHR0cC5nZXQ8YW55Pih1cmxQYXRoLCBoZWFkZXJzKS5waXBlKFxuICAgICAgICAgIHJlcXVlc3RTdHJlYW1pbmcoKSxcbiAgICAgICAgICB0aGlzLmhhbmRsZUZpbmFsaXplKClcbiAgICAgICAgKVxuICAgICAgOiB0aGlzLmh0dHAuZ2V0PFQ+KHVybFBhdGgsIGhlYWRlcnMpLnBpcGUoXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0KG9wdGlvbnMpLFxuICAgICAgICAgIHRoaXMuaGFuZGxlRmluYWxpemUoKVxuICAgICAgICApO1xuICB9XG5cbiAgY3JlYXRlUmVjb3JkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5idWlsZFVybFBhdGgob3B0aW9ucyk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuYnVpbGRDb21iaW5lZEhlYWRlcnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5zZXQodHJ1ZSk7XG5cbiAgICByZXR1cm4gKG9wdGlvbnMuc3RyZWFtKVxuICAgICAgPyB0aGlzLmh0dHAucG9zdDxhbnk+KHVybFBhdGgsIGRhdGEsIGhlYWRlcnMpLnBpcGUoXG4gICAgICAgICAgcmVxdWVzdFN0cmVhbWluZygpLFxuICAgICAgICAgIHRoaXMuaGFuZGxlRmluYWxpemUoKVxuICAgICAgICApXG4gICAgICA6IHRoaXMuaHR0cC5wb3N0PFQ+KHVybFBhdGgsIGRhdGEsIGhlYWRlcnMpLnBpcGUoXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0KG9wdGlvbnMpLFxuICAgICAgICAgIHRoaXMuaGFuZGxlRmluYWxpemUoKVxuICAgICAgICApO1xuICB9XG5cbiAgdXBkYXRlUmVjb3JkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5idWlsZFVybFBhdGgob3B0aW9ucyk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuYnVpbGRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc1BlbmRpbmcuc2V0KHRydWUpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8YW55Pih1cmxQYXRoLCBkYXRhLCBoZWFkZXJzKS5waXBlKFxuICAgICAgdGhpcy5yZXF1ZXN0KG9wdGlvbnMpLFxuICAgICAgdGhpcy5oYW5kbGVGaW5hbGl6ZSgpXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVJlY29yZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmJ1aWxkVXJsUGF0aChvcHRpb25zKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5idWlsZEhlYWRlcnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5zZXQodHJ1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KHVybFBhdGgsIGhlYWRlcnMpLnBpcGUoXG4gICAgICB0aGlzLnJlcXVlc3Qob3B0aW9ucyksXG4gICAgICB0aGlzLmhhbmRsZUZpbmFsaXplKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFVybFBhdGgob3B0aW9uczogQXBpUmVxdWVzdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGF0aFF1ZXJ5U2VydmljZS5idWlsZEFQSVBhdGgob3B0aW9ucy5zZXJ2ZXIsIG9wdGlvbnMucGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkSGVhZGVycyhvcHRpb25zOiBBcGlSZXF1ZXN0KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJzU2VydmljZS5nZW5lcmF0ZUhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb21iaW5lZEhlYWRlcnMob3B0aW9uczogQXBpUmVxdWVzdCk6IGFueSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVyc1NlcnZpY2UuZ2VuZXJhdGVIZWFkZXJzKG9wdGlvbnMuaGVhZGVycyk7XG4gICAgcmV0dXJuIHRoaXMuY29tYmluZUhlYWRlcnMoaGVhZGVycywgb3B0aW9ucy5zdHJlYW0gfHwgZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXN0PFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QpOiAoc291cmNlOiBPYnNlcnZhYmxlPGFueT4pID0+IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiAoc291cmNlJDogT2JzZXJ2YWJsZTxhbnk+KTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgICByZXR1cm4gc291cmNlJC5waXBlKFxuICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LmFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEpXG4gICAgICAgICAgICAgID8gZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gb3B0aW9ucy5hZGFwdGVyKGl0ZW0pKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMuYWRhcHRlcihkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICBkb3dubG9hZEZpbGVSZXF1ZXN0KG9wdGlvbnM6IEFwaVJlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMuaXNQZW5kaW5nLnNldCh0cnVlKTtcblxuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmJ1aWxkVXJsUGF0aChvcHRpb25zKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybFBhdGgsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicsIG9ic2VydmU6ICdldmVudHMnLCByZXBvcnRQcm9ncmVzczogdHJ1ZSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1BlbmRpbmcuc2V0KHRydWUpO1xuXG4gICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cEhlYWRlclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb3dubG9hZCBmYWlsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzOlxuICAgICAgICAgICAgICBjb25zdCBzdGF0dXMgPSAoZXZlbnQudG90YWwpID8gTWF0aC5yb3VuZChldmVudC5sb2FkZWQgLyAoZXZlbnQudG90YWwgfHwgMSkgKiAxMDApIDogMTAwO1xuICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzLnNldChzdGF0dXMpO1xuICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzO1xuXG4gICAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuUmVzcG9uc2U6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWVQYXRoID0gKG9wdGlvbnM/LnNhdmVBcykgPyBvcHRpb25zLnNhdmVBcyA6IChvcHRpb25zLnBhdGgpID8gb3B0aW9ucy5wYXRoW29wdGlvbnMucGF0aC5sZW5ndGggLSAxXSA6IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcl9jb250ZW50ID0gZXZlbnQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKSB8fCAnJztcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gKGhlYWRlcl9jb250ZW50KSA/IGhlYWRlcl9jb250ZW50LnNwbGl0KCc9JylbMV0uc3Vic3RyaW5nKDAsIGhlYWRlcl9jb250ZW50LnNwbGl0KCc9JylbMV0ubGVuZ3RoKSA6ICcnO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSAoZmlsZU5hbWVQYXRoICE9PSAnJykgPyBmaWxlTmFtZVBhdGggOiBmaWxlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2F2ZSBGaWxlOiAoZmlsZSBuYW1lIGFuZCBleHRlbnNpb24pIG5vdCBmb3VuZCBpbiBIZWFkZXJzIG9yIFBhdGgnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkRmlsZShmaWxlTmFtZSwgZXZlbnQuYm9keSk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcuc2V0KGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiAxMDA7XG5cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rvd25sb2FkIGZhaWxlZCcpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRoaXMuaXNQZW5kaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRmluYWxpemUoKTogKHNvdXJjZTogT2JzZXJ2YWJsZTxhbnk+KSA9PiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBmaW5hbGl6ZSgoKSA9PiB0aGlzLmlzUGVuZGluZy5zZXQoZmFsc2UpKTtcbiAgfVxuXG4gIHByaXZhdGUgZG93bmxvYWRGaWxlKGZpbGU6IHN0cmluZywgZmlsZURhdGE6IGFueSkge1xuICAgIGNvbnN0IG5hdmlnYXRvckFueSA9IHdpbmRvdy5uYXZpZ2F0b3IgYXMgYW55O1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGZpbGUuc3BsaXQoJy4nKVsxXT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBuZXdCbG9iID0gbmV3IEJsb2IoW2ZpbGVEYXRhXSwgeyB0eXBlOiB0aGlzLmNyZWF0ZUZpbGVUeXBlKGV4dGVuc2lvbikgfSk7XG5cbiAgICBpZiAobmF2aWdhdG9yQW55Lm1zU2F2ZU9yT3BlbkJsb2IpIHtcbiAgICAgIG5hdmlnYXRvckFueS5tc1NhdmVPck9wZW5CbG9iKG5ld0Jsb2IsIGZpbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3QmxvYik7XG4gICAgICBsaW5rLmhyZWYgPSB1cmw7XG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGaWxlVHlwZShleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGZpbGVUeXBlID0gXCJcIjtcblxuICAgIGlmIChleHQgPT09ICdwZGYnIHx8IGV4dCA9PT0gJ2NzdicpIGZpbGVUeXBlID0gYGFwcGxpY2F0aW9uLyR7ZXh0fWA7XG4gICAgZWxzZSBpZiAoZXh0ID09PSAnanBlZycgfHwgZXh0ID09PSAnanBnJyB8fCBleHQgPT09ICdwbmcnKSBmaWxlVHlwZSA9IGBpbWFnZS8ke2V4dH1gO1xuICAgIGVsc2UgaWYgKGV4dCA9PT0gJ3R4dCcpIGZpbGVUeXBlID0gJ3RleHQvcGxhaW4nO1xuICAgIGVsc2UgaWYgKGV4dCA9PT0gJ3BwdCcgfHwgZXh0ID09PSAncG90JyB8fCBleHQgPT09ICdwcHMnIHx8IGV4dCA9PT0gJ3BwYScpIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JztcbiAgICBlbHNlIGlmIChleHQgPT09ICdwcHR4JykgZmlsZVR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbic7XG4gICAgZWxzZSBpZiAoZXh0ID09PSAnZG9jJyB8fCBleHQgPT09ICdkb3QnKSBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi9tc3dvcmQnO1xuICAgIGVsc2UgaWYgKGV4dCA9PT0gJ2RvY3gnKSBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCc7XG4gICAgZWxzZSBpZiAoZXh0ID09PSAneGxzJyB8fCBleHQgPT09ICd4bHQnIHx8IGV4dCA9PT0gJ3hsYScpIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCc7XG4gICAgZWxzZSBpZiAoZXh0ID09PSAneGxzeCcpIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JztcblxuICAgIHJldHVybiBmaWxlVHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgY29tYmluZUhlYWRlcnMoaGVhZGVyczogYW55LCBpc1N0cmVhbWluZzogYm9vbGVhbikge1xuICAgIHJldHVybiAoaXNTdHJlYW1pbmcpXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgICAgIG9ic2VydmU6ICdldmVudHMnLFxuICAgICAgICAgIHJlc3BvbnNlVHlwZTogJ3RleHQnLFxuICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiB0cnVlLFxuICAgICAgICAgIEFjY2VwdDogJ3RleHQvZXZlbnQtc3RyZWFtJ1xuICAgICAgICB9XG4gICAgICA6IGhlYWRlcnM7XG4gIH1cbn1cbiJdfQ==
@@ -1,191 +0,0 @@
1
- import { HttpClient, HttpEventType, HttpHeaderResponse } from '@angular/common/http';
2
- import { Injectable, inject } from '@angular/core';
3
- import { BehaviorSubject, throwError } from 'rxjs';
4
- import { catchError, delay, finalize, map } from 'rxjs/operators';
5
- import { PathQueryService, HeadersService } from '../utils';
6
- import { requestStreaming } from './rxjs-operators/request-streaming';
7
- import { WebsocketService } from '../ws-manager-service/websocket.service';
8
- import * as i0 from "@angular/core";
9
- export class RequestService extends WebsocketService {
10
- constructor() {
11
- super(...arguments);
12
- this.http = inject(HttpClient);
13
- this.pathQueryService = inject(PathQueryService);
14
- this.headersService = inject(HeadersService);
15
- this.isPending = new BehaviorSubject(false);
16
- this.isPending$ = this.isPending.asObservable().pipe(delay(1));
17
- this.progress = new BehaviorSubject(0);
18
- this.progress$ = this.progress.asObservable();
19
- }
20
- getRecordRequest(options) {
21
- const urlPath = this.buildUrlPath(options);
22
- const headers = this.buildCombinedHeaders(options);
23
- this.isPending.next(true);
24
- return (options.stream)
25
- ? this.http.get(urlPath, headers).pipe(requestStreaming(), this.handleFinalize())
26
- : this.http.get(urlPath, headers).pipe(this.request(options));
27
- }
28
- createRecordRequest(options, data) {
29
- const urlPath = this.buildUrlPath(options);
30
- const headers = this.buildCombinedHeaders(options);
31
- this.isPending.next(true);
32
- return (options.stream)
33
- ? this.http.post(urlPath, data, headers).pipe(requestStreaming(), this.handleFinalize())
34
- : this.http.post(urlPath, data, headers).pipe(this.request(options));
35
- }
36
- updateRecordRequest(options, data) {
37
- const urlPath = this.buildUrlPath(options);
38
- const headers = this.buildHeaders(options);
39
- this.isPending.next(true);
40
- return this.http.put(urlPath, data, headers).pipe(this.request(options));
41
- }
42
- deleteRecordRequest(options) {
43
- const urlPath = this.buildUrlPath(options);
44
- const headers = this.buildHeaders(options);
45
- this.isPending.next(true);
46
- return this.http.delete(urlPath, headers).pipe(this.request(options));
47
- }
48
- // Helper functions
49
- buildUrlPath(options) {
50
- return this.pathQueryService.buildAPIPath(options.server, options.path);
51
- }
52
- buildHeaders(options) {
53
- return this.headersService.generateHeaders(options.headers);
54
- }
55
- buildCombinedHeaders(options) {
56
- const headers = this.headersService.generateHeaders(options.headers);
57
- return this.combineHeaders(headers, options.stream || false);
58
- }
59
- request(options) {
60
- return (source$) => {
61
- return source$.pipe(map(data => {
62
- if (options?.adapter) {
63
- return Array.isArray(data)
64
- ? data.map((item) => options.adapter(item))
65
- : options.adapter(data);
66
- }
67
- return data;
68
- }));
69
- };
70
- }
71
- downloadFileRequest(options) {
72
- this.isPending.next(true);
73
- const urlPath = this.buildUrlPath(options);
74
- return this.http.get(urlPath, { responseType: 'blob', observe: 'events', reportProgress: true })
75
- .pipe(map((event) => {
76
- this.isPending.next(true);
77
- if (event instanceof HttpHeaderResponse) {
78
- if (event.status !== 200) {
79
- this.isPending.next(false);
80
- throw new Error('Download failed');
81
- }
82
- }
83
- // 0 Sent Request has been sent.
84
- // 1 UploadProgress Upload is in progress.
85
- // 2 ResponseHeader Response headers received.
86
- // 3 DownloadProgress Download is in progress.
87
- // 4 Response Response is fully received.
88
- // 5 User Custom user event.
89
- switch (event.type) {
90
- case HttpEventType.DownloadProgress:
91
- const status = (event.total) ? Math.round(event.loaded / (event.total || 1) * 100) : 100;
92
- this.progress.next(status);
93
- return status;
94
- case HttpEventType.Response:
95
- try {
96
- const fileNamePath = (options?.saveAs) ? options.saveAs : (options.path) ? options.path[options.path.length - 1] : [];
97
- const header_content = event.headers.get('Content-Disposition') || '';
98
- // checks if header_content is not empty and splits the header_content to get the file name
99
- // otherwise, it will use the fileDownload - contains the file name and extension
100
- const file = (header_content) ? header_content.split('=')[1].substring(0, header_content.split('=')[1].length) : '';
101
- const fileName = (fileNamePath !== '') ? fileNamePath : file;
102
- if (fileName === '') {
103
- this.isPending.next(false);
104
- throw new Error('Save File: (file name and extension) not found in Headers or Path');
105
- }
106
- this.downloadFile(fileName, event.body);
107
- this.isPending.next(false);
108
- return 100;
109
- }
110
- catch (error) {
111
- throw new Error('Download failed');
112
- }
113
- default:
114
- this.isPending.next(false);
115
- return 0;
116
- }
117
- }), catchError(err => {
118
- return throwError(() => err);
119
- }));
120
- }
121
- handleFinalize() {
122
- return finalize(() => this.isPending.next(false));
123
- }
124
- downloadFile(file, fileData) {
125
- const navigatorAny = window.navigator;
126
- const extension = file.split('.')[1].toLowerCase();
127
- var newBlob = new Blob([fileData], { type: this.createFileType(extension) });
128
- if (navigatorAny.msSaveOrOpenBlob) {
129
- navigatorAny.msSaveOrOpenBlob(newBlob, file);
130
- }
131
- else {
132
- const link = document.createElement('a');
133
- const url = window.URL.createObjectURL(newBlob);
134
- link.href = url;
135
- link.download = file;
136
- link.click();
137
- window.URL.revokeObjectURL(url);
138
- }
139
- }
140
- createFileType(ext) {
141
- let fileType = "";
142
- if (ext == 'pdf' || ext == 'csv') {
143
- fileType = `application/${ext}`;
144
- }
145
- else if (ext == 'jpeg' || ext == 'jpg' || ext == 'png') {
146
- fileType = `image/${ext}`;
147
- }
148
- else if (ext == 'txt') {
149
- fileType = 'text/plain';
150
- }
151
- else if (ext == 'ppt' || ext == 'pot' || ext == 'pps' || ext == 'ppa') {
152
- fileType = 'application/vnd.ms-powerpoint';
153
- }
154
- else if (ext == 'pptx') {
155
- fileType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
156
- }
157
- else if (ext == 'doc' || ext == 'dot') {
158
- fileType = 'application/msword';
159
- }
160
- else if (ext == 'docx') {
161
- fileType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
162
- }
163
- else if (ext == 'xls' || ext == 'xlt' || ext == 'xla') {
164
- fileType = 'application/vnd.ms-excel';
165
- }
166
- else if (ext == 'xlsx') {
167
- fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
168
- }
169
- return fileType;
170
- }
171
- combineHeaders(headers, isStreaming) {
172
- return (isStreaming) ?
173
- {
174
- ...headers,
175
- observe: 'events',
176
- responseType: 'text',
177
- reportProgress: true,
178
- Accept: 'text/event-stream'
179
- }
180
- : headers;
181
- }
182
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
183
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, providedIn: 'root' }); }
184
- }
185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RequestService, decorators: [{
186
- type: Injectable,
187
- args: [{
188
- providedIn: 'root'
189
- }]
190
- }] });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMvcmVxdWVzdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBTTNFLE1BQU0sT0FBTyxjQUFlLFNBQVEsZ0JBQWdCO0lBSHBEOztRQUtVLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFekIscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDM0MsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUE7UUFFL0MsY0FBUyxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFBO1FBQy9DLGVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUV6RCxhQUFR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RyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN0RCxRQUFRLEdBQUcsMEJBQTBCLENBQUE7UUFDdkMsQ0FBQzthQUNJLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLFFBQVEsR0FBRyxtRUFBbUUsQ0FBQTtRQUNoRixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUE7SUFFakIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxPQUFZLEVBQUUsV0FBb0I7UUFFdkQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDdEI7Z0JBQ0UsR0FBRyxPQUFPO2dCQUNWLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixZQUFZLEVBQUUsTUFBTTtnQkFDcEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLE1BQU0sRUFBRSxtQkFBbUI7YUFDNUI7WUFDRCxDQUFDLENBQUMsT0FBTyxDQUFBO0lBRVgsQ0FBQzsrR0FyUFUsY0FBYzttSEFBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXZlbnQsIEh0dHBFdmVudFR5cGUsIEh0dHBIZWFkZXJSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWxheSwgZmluYWxpemUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXBpUmVxdWVzdCB9IGZyb20gJy4uL3JlcXVlc3QtbWFuYWdlci1zdGF0ZS1zZXJ2aWNlL21vZGVscy9hcGktcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBQYXRoUXVlcnlTZXJ2aWNlLCBIZWFkZXJzU2VydmljZSB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHJlcXVlc3RTdHJlYW1pbmcgfSBmcm9tICcuL3J4anMtb3BlcmF0b3JzL3JlcXVlc3Qtc3RyZWFtaW5nJztcbmltcG9ydCB7IFdlYnNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi93cy1tYW5hZ2VyLXNlcnZpY2Uvd2Vic29ja2V0LnNlcnZpY2UnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFJlcXVlc3RTZXJ2aWNlIGV4dGVuZHMgV2Vic29ja2V0U2VydmljZSB7XG5cbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpXG5cbiAgcHJpdmF0ZSBwYXRoUXVlcnlTZXJ2aWNlID0gaW5qZWN0KFBhdGhRdWVyeVNlcnZpY2UpXG4gIHByaXZhdGUgaGVhZGVyc1NlcnZpY2UgPSBpbmplY3QoSGVhZGVyc1NlcnZpY2UpXG5cbiAgaXNQZW5kaW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcbiAgaXNQZW5kaW5nJCA9IHRoaXMuaXNQZW5kaW5nLmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGVsYXkoMSkpXG5cbiAgcHJvZ3Jlc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMClcbiAgcHJvZ3Jlc3MkID0gdGhpcy5wcm9ncmVzcy5hc09ic2VydmFibGUoKVxuXG4gIGdldFJlY29yZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8VD4ge1xuXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmJ1aWxkQ29tYmluZWRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiAob3B0aW9ucy5zdHJlYW0pXG4gICAgICAgID8gdGhpcy5odHRwLmdldDxhbnk+KHVybFBhdGgsIGhlYWRlcnMpLnBpcGUoXG4gICAgICAgICAgICByZXF1ZXN0U3RyZWFtaW5nKCksXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbmFsaXplKClcbiAgICAgICAgKVxuICAgICAgICA6IHRoaXMuaHR0cC5nZXQ8VD4odXJsUGF0aCwgaGVhZGVycykucGlwZShcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdChvcHRpb25zKSxcbiAgICAgICAgKVxuICB9XG5cbiAgY3JlYXRlUmVjb3JkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcblxuICAgIGNvbnN0IHVybFBhdGggPSB0aGlzLmJ1aWxkVXJsUGF0aChvcHRpb25zKTtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5idWlsZENvbWJpbmVkSGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gKG9wdGlvbnMuc3RyZWFtKVxuICAgICAgICA/IHRoaXMuaHR0cC5wb3N0PGFueT4odXJsUGF0aCwgZGF0YSwgaGVhZGVycykucGlwZShcbiAgICAgICAgICAgIHJlcXVlc3RTdHJlYW1pbmcoKSxcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmluYWxpemUoKVxuICAgICAgICApXG4gICAgICAgIDogdGhpcy5odHRwLnBvc3Q8VD4odXJsUGF0aCwgZGF0YSwgaGVhZGVycykucGlwZShcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdChvcHRpb25zKSxcbiAgICAgICAgKVxuICB9XG5cbiAgdXBkYXRlUmVjb3JkUmVxdWVzdDxUPihvcHRpb25zOiBBcGlSZXF1ZXN0LCBkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5idWlsZFVybFBhdGgob3B0aW9ucyk7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuYnVpbGRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5pc1BlbmRpbmcubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PGFueT4odXJsUGF0aCwgZGF0YSwgaGVhZGVycykucGlwZShcbiAgICAgICAgdGhpcy5yZXF1ZXN0KG9wdGlvbnMpLFxuICAgIClcbiAgfVxuXG4gIGRlbGV0ZVJlY29yZFJlcXVlc3Q8VD4ob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8VD4ge1xuXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmJ1aWxkSGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KHVybFBhdGgsIGhlYWRlcnMpLnBpcGUoXG4gICAgICB0aGlzLnJlcXVlc3Qob3B0aW9ucyksXG4gICAgKVxuICB9XG5cbiAgLy8gSGVscGVyIGZ1bmN0aW9uc1xuICBwcml2YXRlIGJ1aWxkVXJsUGF0aChvcHRpb25zOiBBcGlSZXF1ZXN0KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoUXVlcnlTZXJ2aWNlLmJ1aWxkQVBJUGF0aChvcHRpb25zLnNlcnZlciwgb3B0aW9ucy5wYXRoKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRIZWFkZXJzKG9wdGlvbnM6IEFwaVJlcXVlc3QpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmhlYWRlcnNTZXJ2aWNlLmdlbmVyYXRlSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbWJpbmVkSGVhZGVycyhvcHRpb25zOiBBcGlSZXF1ZXN0KTogYW55IHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5oZWFkZXJzU2VydmljZS5nZW5lcmF0ZUhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICAgIHJldHVybiB0aGlzLmNvbWJpbmVIZWFkZXJzKGhlYWRlcnMsIG9wdGlvbnMuc3RyZWFtIHx8IGZhbHNlKVxuICB9XG5cbiAgcHJpdmF0ZSByZXF1ZXN0PFQ+KG9wdGlvbnM6IEFwaVJlcXVlc3QpOiAoc291cmNlOiBPYnNlcnZhYmxlPGFueT4pID0+IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiAoc291cmNlJDogT2JzZXJ2YWJsZTxhbnk+KTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgICByZXR1cm4gc291cmNlJC5waXBlKFxuICAgICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgICAgaWYgKG9wdGlvbnM/LmFkYXB0ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEpXG4gICAgICAgICAgICAgID8gZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4gb3B0aW9ucy5hZGFwdGVyKGl0ZW0pKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMuYWRhcHRlcihkYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGRvd25sb2FkRmlsZVJlcXVlc3Qob3B0aW9uczogQXBpUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICB0aGlzLmlzUGVuZGluZy5uZXh0KHRydWUpO1xuXG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuYnVpbGRVcmxQYXRoKG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsUGF0aCwgeyByZXNwb25zZVR5cGU6ICdibG9iJywgb2JzZXJ2ZTogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzOiB0cnVlIH0pXG4gICAgLnBpcGUoXG4gICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xuXG4gICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQodHJ1ZSlcblxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwSGVhZGVyUmVzcG9uc2UpIHtcbiAgICAgICAgICBpZihldmVudC5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRG93bmxvYWQgZmFpbGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMFx0U2VudFx0UmVxdWVzdCBoYXMgYmVlbiBzZW50LlxuICAgICAgICAvLyAxXHRVcGxvYWRQcm9ncmVzc1x0VXBsb2FkIGlzIGluIHByb2dyZXNzLlxuICAgICAgICAvLyAyXHRSZXNwb25zZUhlYWRlclx0UmVzcG9uc2UgaGVhZGVycyByZWNlaXZlZC5cbiAgICAgICAgLy8gM1x0RG93bmxvYWRQcm9ncmVzc1x0RG93bmxvYWQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAgICAgIC8vIDRcdFJlc3BvbnNlXHRSZXNwb25zZSBpcyBmdWxseSByZWNlaXZlZC5cbiAgICAgICAgLy8gNVx0VXNlclx0Q3VzdG9tIHVzZXIgZXZlbnQuXG5cbiAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG5cbiAgICAgICAgICBjYXNlIEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzczpcblxuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IChldmVudC50b3RhbCkgPyBNYXRoLnJvdW5kKGV2ZW50LmxvYWRlZCAvIChldmVudC50b3RhbCB8fCAxKSAqIDEwMCkgOiAxMDBcbiAgICAgICAgICB0aGlzLnByb2dyZXNzLm5leHQoc3RhdHVzKVxuICAgICAgICAgIHJldHVybiBzdGF0dXNcblxuICAgICAgICAgIGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcblxuICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZVBhdGggPSAob3B0aW9ucz8uc2F2ZUFzKSA/IG9wdGlvbnMuc2F2ZUFzIDogKG9wdGlvbnMucGF0aCkgPyBvcHRpb25zLnBhdGhbb3B0aW9ucy5wYXRoLmxlbmd0aCAtIDFdIDogW11cbiAgICAgICAgICAgICAgY29uc3QgaGVhZGVyX2NvbnRlbnQgPSBldmVudC5oZWFkZXJzLmdldCgnQ29udGVudC1EaXNwb3NpdGlvbicpIHx8ICcnO1xuICAgICAgICAgICAgICAvLyBjaGVja3MgaWYgaGVhZGVyX2NvbnRlbnQgaXMgbm90IGVtcHR5IGFuZCBzcGxpdHMgdGhlIGhlYWRlcl9jb250ZW50IHRvIGdldCB0aGUgZmlsZSBuYW1lXG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGZpbGVEb3dubG9hZCAtIGNvbnRhaW5zIHRoZSBmaWxlIG5hbWUgYW5kIGV4dGVuc2lvblxuICAgICAgICAgICAgICBjb25zdCBmaWxlID0gKGhlYWRlcl9jb250ZW50KSA/IGhlYWRlcl9jb250ZW50LnNwbGl0KCc9JylbMV0uc3Vic3RyaW5nKDAsIGhlYWRlcl9jb250ZW50LnNwbGl0KCc9JylbMV0ubGVuZ3RoKSA6ICcnXG5cbiAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWUgPSAoZmlsZU5hbWVQYXRoICE9PSAnJykgPyBmaWxlTmFtZVBhdGggOiBmaWxlXG5cbiAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lID09PSAnJykge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNQZW5kaW5nLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2F2ZSBGaWxlOiAoZmlsZSBuYW1lIGFuZCBleHRlbnNpb24pIG5vdCBmb3VuZCBpbiBIZWFkZXJzIG9yIFBhdGgnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRGaWxlKGZpbGVOYW1lLCBldmVudC5ib2R5KVxuICAgICAgICAgICAgICB0aGlzLmlzUGVuZGluZy5uZXh0KGZhbHNlKVxuXG4gICAgICAgICAgICAgIHJldHVybiAxMDBcblxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb3dubG9hZCBmYWlsZWQnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSlcbiAgICAgICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgfVxuXG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKVxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUZpbmFsaXplKCk6IChzb3VyY2U6IE9ic2VydmFibGU8YW55PikgPT4gT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gZmluYWxpemUoKCkgPT4gdGhpcy5pc1BlbmRpbmcubmV4dChmYWxzZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb3dubG9hZEZpbGUoZmlsZTpzdHJpbmcsIGZpbGVEYXRhOiBhbnkpIHtcblxuICAgIGNvbnN0IG5hdmlnYXRvckFueSA9IHdpbmRvdy5uYXZpZ2F0b3IgYXMgYW55XG5cbiAgICBjb25zdCBleHRlbnNpb24gPSBmaWxlLnNwbGl0KCcuJylbMV0udG9Mb3dlckNhc2UoKVxuXG4gICAgdmFyIG5ld0Jsb2IgPSBuZXcgQmxvYihbZmlsZURhdGFdLCB7IHR5cGU6IHRoaXMuY3JlYXRlRmlsZVR5cGUoZXh0ZW5zaW9uKSB9KVxuXG4gICAgaWYgKG5hdmlnYXRvckFueS5tc1NhdmVPck9wZW5CbG9iKSB7XG4gICAgICBuYXZpZ2F0b3JBbnkubXNTYXZlT3JPcGVuQmxvYihuZXdCbG9iLCBmaWxlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXdCbG9iKVxuICAgICAgbGluay5ocmVmID0gdXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZVxuICAgICAgbGluay5jbGljaygpXG4gICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpXG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpbGVUeXBlKGV4dDogYW55KTogc3RyaW5nIHtcblxuICAgIGxldCBmaWxlVHlwZTogc3RyaW5nID0gXCJcIlxuXG4gICAgaWYgKGV4dCA9PSAncGRmJyB8fCBleHQgPT0gJ2NzdicpIHtcbiAgICAgIGZpbGVUeXBlID0gYGFwcGxpY2F0aW9uLyR7ZXh0fWBcbiAgICB9XG4gICAgZWxzZSBpZiAoZXh0ID09ICdqcGVnJyB8fCBleHQgPT0gJ2pwZycgfHwgZXh0ID09ICdwbmcnKSB7XG4gICAgICBmaWxlVHlwZSA9IGBpbWFnZS8ke2V4dH1gXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAndHh0Jykge1xuICAgICAgZmlsZVR5cGUgPSAndGV4dC9wbGFpbidcbiAgICB9XG5cbiAgICBlbHNlIGlmIChleHQgPT0gJ3BwdCcgfHwgZXh0ID09ICdwb3QnIHx8IGV4dCA9PSAncHBzJyB8fCBleHQgPT0gJ3BwYScpIHtcbiAgICAgIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50J1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ3BwdHgnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJ1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ2RvYycgfHwgZXh0ID09ICdkb3QnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi9tc3dvcmQnXG4gICAgfVxuICAgIGVsc2UgaWYgKGV4dCA9PSAnZG9jeCcpIHtcbiAgICAgIGZpbGVUeXBlID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50J1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ3hscycgfHwgZXh0ID09ICd4bHQnIHx8IGV4dCA9PSAneGxhJykge1xuICAgICAgZmlsZVR5cGUgPSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJ1xuICAgIH1cbiAgICBlbHNlIGlmIChleHQgPT0gJ3hsc3gnKSB7XG4gICAgICBmaWxlVHlwZSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCdcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZVR5cGVcblxuICB9XG5cbiAgcHJpdmF0ZSBjb21iaW5lSGVhZGVycyhoZWFkZXJzOiBhbnksIGlzU3RyZWFtaW5nOiBib29sZWFuKSB7XG5cbiAgICByZXR1cm4gKGlzU3RyZWFtaW5nKSA/XG4gICAge1xuICAgICAgLi4uaGVhZGVycyxcbiAgICAgIG9ic2VydmU6ICdldmVudHMnLFxuICAgICAgcmVzcG9uc2VUeXBlOiAndGV4dCcsXG4gICAgICByZXBvcnRQcm9ncmVzczogdHJ1ZSxcbiAgICAgIEFjY2VwdDogJ3RleHQvZXZlbnQtc3RyZWFtJ1xuICAgIH1cbiAgICA6IGhlYWRlcnNcblxuICB9XG5cbn1cbiJdfQ==
@@ -1,9 +0,0 @@
1
- import { defer, interval } from 'rxjs';
2
- import { takeWhile, map } from 'rxjs/operators';
3
- export function countdown(duration) {
4
- return defer(() => {
5
- const currentCount = { current: duration };
6
- return interval(1000).pipe(map(() => --currentCount.current), takeWhile(count => count >= 0));
7
- });
8
- }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRkb3duLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMvcnhqcy1vcGVyYXRvcnMvY291bnRkb3duLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxRQUFnQjtJQUV4QyxPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFFaEIsTUFBTSxZQUFZLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUE7UUFFMUMsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUN4QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQ2pDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FDL0IsQ0FBQTtJQUVILENBQUMsQ0FBQyxDQUFBO0FBRUosQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIGRlZmVyLCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVdoaWxlLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50ZG93bihkdXJhdGlvbjogbnVtYmVyKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcblxuICByZXR1cm4gZGVmZXIoKCkgPT4ge1xuXG4gICAgY29uc3QgY3VycmVudENvdW50ID0geyBjdXJyZW50OiBkdXJhdGlvbiB9XG5cbiAgICByZXR1cm4gaW50ZXJ2YWwoMTAwMCkucGlwZShcbiAgICAgIG1hcCgoKSA9PiAtLWN1cnJlbnRDb3VudC5jdXJyZW50KSxcbiAgICAgIHRha2VXaGlsZShjb3VudCA9PiBjb3VudCA+PSAwKVxuICAgIClcblxuICB9KVxuXG59XG4iXX0=
@@ -1,10 +0,0 @@
1
- import { timer } from 'rxjs';
2
- import { retry } from 'rxjs/operators';
3
- const DEFAULT_MAX_RETRIES = 3;
4
- export function delayedRetry(delayMs, maxRetry = DEFAULT_MAX_RETRIES) {
5
- return (src) => src.pipe(retry({
6
- count: maxRetry,
7
- delay: () => timer(delayMs)
8
- }));
9
- }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsYXktcmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcy9yeGpzLW9wZXJhdG9ycy9kZWxheS1yZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUU5QixNQUFNLFVBQVUsWUFBWSxDQUFJLE9BQWUsRUFBRSxRQUFRLEdBQUcsbUJBQW1CO0lBQzdFLE9BQU8sQ0FBQyxHQUFrQixFQUFFLEVBQUUsQ0FDNUIsR0FBRyxDQUFDLElBQUksQ0FDTixLQUFLLENBQUM7UUFDSixLQUFLLEVBQUUsUUFBUTtRQUNmLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0tBQzVCLENBQUMsQ0FDSCxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyByZXRyeSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuY29uc3QgREVGQVVMVF9NQVhfUkVUUklFUyA9IDM7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheWVkUmV0cnk8VD4oZGVsYXlNczogbnVtYmVyLCBtYXhSZXRyeSA9IERFRkFVTFRfTUFYX1JFVFJJRVMpIHtcbiAgcmV0dXJuIChzcmM6IE9ic2VydmFibGU8VD4pID0+XG4gICAgc3JjLnBpcGUoXG4gICAgICByZXRyeSh7XG4gICAgICAgIGNvdW50OiBtYXhSZXRyeSxcbiAgICAgICAgZGVsYXk6ICgpID0+IHRpbWVyKGRlbGF5TXMpXG4gICAgICB9KVxuICAgICk7XG59XG5cblxuIl19
@@ -1,5 +0,0 @@
1
- export * from "./countdown";
2
- export * from "./delay-retry";
3
- export * from "./request-polling";
4
- export * from "./request-streaming";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcy9yeGpzLW9wZXJhdG9ycy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jb3VudGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlbGF5LXJldHJ5XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXF1ZXN0LXBvbGxpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlcXVlc3Qtc3RyZWFtaW5nXCI7XG4iXX0=
@@ -1,33 +0,0 @@
1
- import { interval } from 'rxjs';
2
- import { mergeMap, startWith, takeUntil, tap } from 'rxjs/operators';
3
- export function requestPolling(pollInterval, stopCondition$, isPending$) {
4
- return (source) => {
5
- return interval(pollInterval * 1000)
6
- .pipe(startWith(0), tap(() => {
7
- try {
8
- if (isPending$ && typeof isPending$.next === 'function') {
9
- isPending$.next(true);
10
- }
11
- else if (isPending$ && typeof isPending$.set === 'function') {
12
- isPending$.set(true);
13
- }
14
- }
15
- catch (e) {
16
- // no-op if setting fails
17
- }
18
- }), mergeMap(() => source), tap(() => {
19
- try {
20
- if (isPending$ && typeof isPending$.next === 'function') {
21
- isPending$.next(false);
22
- }
23
- else if (isPending$ && typeof isPending$.set === 'function') {
24
- isPending$.set(false);
25
- }
26
- }
27
- catch (e) {
28
- // no-op if setting fails
29
- }
30
- }), takeUntil(stopCondition$));
31
- };
32
- }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1wb2xsaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LW1hbmFnZXItc2VydmljZXMvcnhqcy1vcGVyYXRvcnMvcmVxdWVzdC1wb2xsaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJFLE1BQU0sVUFBVSxjQUFjLENBQUksWUFBb0IsRUFBRSxjQUErQixFQUFFLFVBQWU7SUFDdEcsT0FBTyxDQUFDLE1BQXFCLEVBQWlCLEVBQUU7UUFDOUMsT0FBTyxRQUFRLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzthQUNuQyxJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUNaLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxVQUFVLElBQUksT0FBTyxVQUFVLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUN4RCxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN4QixDQUFDO3FCQUFNLElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDOUQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLHlCQUF5QjtZQUMzQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQ0YsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUN0QixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDO2dCQUNILElBQUksVUFBVSxJQUFJLE9BQU8sVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDeEQsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekIsQ0FBQztxQkFBTSxJQUFJLFVBQVUsSUFBSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQzlELFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDWCx5QkFBeUI7WUFDM0IsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FDMUIsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWVyZ2VNYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0UG9sbGluZzxUPihwb2xsSW50ZXJ2YWw6IG51bWJlciwgc3RvcENvbmRpdGlvbiQ6IE9ic2VydmFibGU8YW55PiwgaXNQZW5kaW5nJDogYW55KSB7XG4gIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiA9PiB7XG4gICAgcmV0dXJuIGludGVydmFsKHBvbGxJbnRlcnZhbCAqIDEwMDApXG4gICAgLnBpcGUoXG4gICAgICBzdGFydFdpdGgoMCksXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChpc1BlbmRpbmckICYmIHR5cGVvZiBpc1BlbmRpbmckLm5leHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGlzUGVuZGluZyQubmV4dCh0cnVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzUGVuZGluZyQgJiYgdHlwZW9mIGlzUGVuZGluZyQuc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpc1BlbmRpbmckLnNldCh0cnVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBuby1vcCBpZiBzZXR0aW5nIGZhaWxzXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbWVyZ2VNYXAoKCkgPT4gc291cmNlKSxcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKGlzUGVuZGluZyQgJiYgdHlwZW9mIGlzUGVuZGluZyQubmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaXNQZW5kaW5nJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzUGVuZGluZyQgJiYgdHlwZW9mIGlzUGVuZGluZyQuc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpc1BlbmRpbmckLnNldChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gbm8tb3AgaWYgc2V0dGluZyBmYWlsc1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbChzdG9wQ29uZGl0aW9uJCksXG4gICAgKTtcbiAgfTtcbn1cbiJdfQ==
@@ -1,19 +0,0 @@
1
- import { filter, map } from 'rxjs/operators';
2
- import { HttpEventType } from '@angular/common/http';
3
- export function requestStreaming() {
4
- return input$ => input$.pipe(filter((event) => event.type === HttpEventType.DownloadProgress || event.type === HttpEventType.Response), map((event) => {
5
- if (event.type === HttpEventType.DownloadProgress) {
6
- return event.partialText || '';
7
- }
8
- else if (event.type === HttpEventType.Response) {
9
- return event.body;
10
- }
11
- }), map((data) => {
12
- if (typeof data === 'string') {
13
- const matches = data.match(/{[^}]+}/g) || [];
14
- return (matches.length > 0) ? matches.map(match => JSON.parse(match)) : data;
15
- }
16
- return data;
17
- }));
18
- }
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1zdHJlYW1pbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3JlcXVlc3QtbWFuYWdlci1zZXJ2aWNlcy9yeGpzLW9wZXJhdG9ycy9yZXF1ZXN0LXN0cmVhbWluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxNQUFNLFVBQVUsZ0JBQWdCO0lBRTlCLE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMxQixNQUFNLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUNwQixLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQ3ZGLEVBRUQsR0FBRyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7UUFFakIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2xELE9BQU8sS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUE7UUFDaEMsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFBO1FBQ25CLENBQUM7SUFFSCxDQUFDLENBQUMsRUFFRixHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtRQUNoQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFBO1lBQzVDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7UUFDOUUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtBQUVILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcGVyYXRvckZ1bmN0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0U3RyZWFtaW5nKCk6IE9wZXJhdG9yRnVuY3Rpb248YW55LCBhbnk+IHtcblxuICByZXR1cm4gaW5wdXQkID0+IGlucHV0JC5waXBlKFxuICAgIGZpbHRlcigoZXZlbnQ6IGFueSkgPT5cbiAgICAgIGV2ZW50LnR5cGUgPT09IEh0dHBFdmVudFR5cGUuRG93bmxvYWRQcm9ncmVzcyB8fCBldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlXG4gICAgKSxcblxuICAgIG1hcCgoZXZlbnQ6IGFueSkgPT4ge1xuXG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybiBldmVudC5wYXJ0aWFsVGV4dCB8fCAnJ1xuICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiBldmVudC5ib2R5XG4gICAgICB9XG5cbiAgICB9KSxcblxuICAgIG1hcCgoZGF0YTogYW55KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBkYXRhLm1hdGNoKC97W159XSt9L2cpIHx8IFtdXG4gICAgICAgIHJldHVybiAobWF0Y2hlcy5sZW5ndGggPiAwKSA/IG1hdGNoZXMubWFwKG1hdGNoID0+IEpTT04ucGFyc2UobWF0Y2gpKSA6IGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSlcbiAgKVxuXG59XG5cbiJdfQ==