http-request-manager 18.7.20 → 18.7.21

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 (197) hide show
  1. package/ARCHITECTURE.md +483 -0
  2. package/DATABASE_README.md +1176 -0
  3. package/HTTP_MANAGER_README.md +579 -0
  4. package/HTTP_SINGNALS_MANAGER_README.md +654 -0
  5. package/HTTP_STATE_MANAGER_README.md +948 -0
  6. package/INTERCEPTOR_README.md +549 -0
  7. package/LOCAL_STORAGE_README.md +1056 -0
  8. package/STORE_STATE_MANAGER_README.md +1322 -0
  9. package/UTILS_README.md +1186 -0
  10. package/WS_MANAGER_README.md +613 -0
  11. package/ng-package.json +8 -0
  12. package/package.json +1 -12
  13. package/src/lib/http-request-manager.module.ts +132 -0
  14. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.html +65 -0
  15. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.scss +0 -0
  16. package/src/lib/http-request-services-demo/database-data-demo/database-data-demo.component.ts +224 -0
  17. package/src/lib/http-request-services-demo/http-request-services-demo.component.html +114 -0
  18. package/src/lib/http-request-services-demo/http-request-services-demo.component.scss +6 -0
  19. package/src/lib/http-request-services-demo/http-request-services-demo.component.ts +52 -0
  20. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.html +195 -0
  21. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.scss +17 -0
  22. package/src/lib/http-request-services-demo/local-storage-demo/local-storage-demo.component.ts +206 -0
  23. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.html +200 -0
  24. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.scss +17 -0
  25. package/src/lib/http-request-services-demo/local-storage-signals-demo/local-storage-signals-demo.component.ts +212 -0
  26. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
  27. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  28. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
  29. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-download.module.ts +28 -0
  30. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.html +10 -0
  31. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  32. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/file-downloader.component.ts +100 -0
  33. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  34. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  35. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  36. package/src/lib/http-request-services-demo/request-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
  37. package/src/lib/http-request-services-demo/request-manager-demo/models/app-session.model.ts +30 -0
  38. package/src/lib/http-request-services-demo/request-manager-demo/models/app.model.ts +19 -0
  39. package/src/lib/http-request-services-demo/request-manager-demo/models/get-sample.model.ts +25 -0
  40. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-ai-prompt.ts +19 -0
  41. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-details.ts +24 -0
  42. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client-info.ts +30 -0
  43. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-client.model.ts +49 -0
  44. package/src/lib/http-request-services-demo/request-manager-demo/models/sample-mapper-client-info.ts +33 -0
  45. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.html +392 -0
  46. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.scss +24 -0
  47. package/src/lib/http-request-services-demo/request-manager-demo/request-manager-demo.component.ts +461 -0
  48. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.html +393 -0
  49. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.scss +24 -0
  50. package/src/lib/http-request-services-demo/request-manager-state-demo/request-manager-state-demo.component.ts +421 -0
  51. package/src/lib/http-request-services-demo/request-manager-state-demo/services/state-manager-demo.service.ts +87 -0
  52. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/services/state-data-request.service.ts +120 -0
  53. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.css +0 -0
  54. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.html +3 -0
  55. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-ai-messaging/ws-ai-messaging.component.ts +16 -0
  56. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.css +0 -0
  57. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.html +3 -0
  58. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-chats/ws-chats.component.ts +16 -0
  59. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.css +31 -0
  60. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.html +72 -0
  61. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.scss +41 -0
  62. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.spec.ts +205 -0
  63. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-data-control/ws-data-control.component.ts +77 -0
  64. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.css +11 -0
  65. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.html +96 -0
  66. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.spec.ts +31 -0
  67. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-messaging/ws-messaging.component.ts +229 -0
  68. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.css +30 -0
  69. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.html +172 -0
  70. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.spec.ts +31 -0
  71. package/src/lib/http-request-services-demo/request-manager-ws-demo/components/ws-notifications/ws-notifications.component.ts +239 -0
  72. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/oidc-client.model.ts +31 -0
  73. package/src/lib/http-request-services-demo/request-manager-ws-demo/models/user-data.model.ts +32 -0
  74. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.css +0 -0
  75. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.html +84 -0
  76. package/src/lib/http-request-services-demo/request-manager-ws-demo/request-manager-ws-demo.component.ts +41 -0
  77. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/index.ts +3 -0
  78. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/message-service-demo.service.ts +83 -0
  79. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/notification-service-demo.service.ts +147 -0
  80. package/src/lib/http-request-services-demo/request-manager-ws-demo/services/state-service-demo.service.ts +158 -0
  81. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.html +53 -0
  82. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.scss +60 -0
  83. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/download-file/download-file.component.ts +72 -0
  84. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-download.module.ts +28 -0
  85. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.html +10 -0
  86. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.scss +29 -0
  87. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/file-downloader.component.ts +100 -0
  88. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/models/download-labels-model.ts +22 -0
  89. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.html +8 -0
  90. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.scss +19 -0
  91. package/src/lib/http-request-services-demo/request-signals-manager-demo/file-downloader/spinner/spinner.component.ts +26 -0
  92. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app-session.model.ts +30 -0
  93. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/app.model.ts +19 -0
  94. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/get-sample.model.ts +25 -0
  95. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-ai-prompt.ts +19 -0
  96. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-details.ts +24 -0
  97. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client-info.ts +30 -0
  98. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-client.model.ts +49 -0
  99. package/src/lib/http-request-services-demo/request-signals-manager-demo/models/sample-mapper-client-info.ts +33 -0
  100. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.html +380 -0
  101. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.scss +24 -0
  102. package/src/lib/http-request-services-demo/request-signals-manager-demo/request-signals-manager-demo.component.ts +410 -0
  103. package/src/lib/http-request-services-demo/store-state-manager-demo/models/settings.model.ts +28 -0
  104. package/src/lib/http-request-services-demo/store-state-manager-demo/services/settings-state.service.ts +48 -0
  105. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.css +0 -0
  106. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.html +23 -0
  107. package/src/lib/http-request-services-demo/store-state-manager-demo/store-state-manager-demo.component.ts +36 -0
  108. package/src/lib/index.ts +3 -0
  109. package/src/lib/interceptors/credentials.interceptor.ts +16 -0
  110. package/src/lib/interceptors/index.ts +6 -0
  111. package/src/lib/interceptors/models/error-settings.model.ts +22 -0
  112. package/src/lib/interceptors/models/index.ts +2 -0
  113. package/src/lib/interceptors/proxy-debugger.interceptor.ts +46 -0
  114. package/src/lib/interceptors/request-error.interceptor.ts +65 -0
  115. package/src/lib/interceptors/request-header.interceptor.ts +53 -0
  116. package/src/lib/models/config-http-options.model.ts +42 -0
  117. package/src/lib/models/config-local-storage-options.model.ts +27 -0
  118. package/src/lib/models/config-options.model.ts +27 -0
  119. package/src/lib/models/config-token.model.ts +9 -0
  120. package/src/lib/models/data-type.enum.ts +5 -0
  121. package/src/lib/models/database-storage.model.ts +24 -0
  122. package/src/lib/models/index.ts +12 -0
  123. package/src/lib/models/retry-options.model.ts +22 -0
  124. package/src/lib/services/database-manager-service/database.manager.service.ts +262 -0
  125. package/src/lib/services/database-manager-service/db.storage.service.ts +207 -0
  126. package/src/lib/services/database-manager-service/index.ts +4 -0
  127. package/src/lib/services/database-manager-service/models/index.ts +2 -0
  128. package/src/lib/services/database-manager-service/models/table-schema.ts +33 -0
  129. package/src/lib/services/index.ts +12 -0
  130. package/src/lib/services/local-storage-manager-service/index.ts +4 -0
  131. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.spec.ts +71 -0
  132. package/src/lib/services/local-storage-manager-service/local-storage-manager.service.ts +426 -0
  133. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.spec.ts +67 -0
  134. package/src/lib/services/local-storage-manager-service/local-storage-signals-manager.service.ts +345 -0
  135. package/src/lib/services/local-storage-manager-service/models/global-store-options.model.ts +30 -0
  136. package/src/lib/services/local-storage-manager-service/models/index.ts +6 -0
  137. package/src/lib/services/local-storage-manager-service/models/setting-options.model.ts +35 -0
  138. package/src/lib/services/local-storage-manager-service/models/storage-data.model.ts +24 -0
  139. package/src/lib/services/local-storage-manager-service/models/storage-option.model.ts +32 -0
  140. package/src/lib/services/local-storage-manager-service/models/storage-type.enum.ts +5 -0
  141. package/src/lib/services/request-manager-services/README.md +268 -0
  142. package/src/lib/services/request-manager-services/http-manager-signals.service.ts +246 -0
  143. package/src/lib/services/request-manager-services/http-manager.service.spec.ts +232 -0
  144. package/src/lib/services/request-manager-services/http-manager.service.ts +274 -0
  145. package/src/lib/services/request-manager-services/index.ts +8 -0
  146. package/src/lib/services/request-manager-services/request-signals.service.ts +214 -0
  147. package/src/lib/services/request-manager-services/request.service.ts +309 -0
  148. package/src/lib/services/request-manager-services/rxjs-operators/countdown.ts +17 -0
  149. package/src/lib/services/request-manager-services/rxjs-operators/delay-retry.ts +16 -0
  150. package/src/lib/services/request-manager-services/rxjs-operators/index.ts +4 -0
  151. package/src/lib/services/request-manager-services/rxjs-operators/request-polling.ts +35 -0
  152. package/src/lib/services/request-manager-services/rxjs-operators/request-streaming.ts +436 -0
  153. package/src/lib/services/request-manager-state-service/http-manager-state.store.ts +1321 -0
  154. package/src/lib/services/request-manager-state-service/index.ts +3 -0
  155. package/src/lib/services/request-manager-state-service/models/api-request.model.ts +61 -0
  156. package/src/lib/services/request-manager-state-service/models/index.ts +6 -0
  157. package/src/lib/services/request-manager-state-service/models/request-options.model.ts +22 -0
  158. package/src/lib/services/request-manager-state-service/models/stream-type.enum.ts +13 -0
  159. package/src/lib/services/request-manager-state-service/models/ws-options.model.ts +39 -0
  160. package/src/lib/services/store-state-manager-service/index.ts +3 -0
  161. package/src/lib/services/store-state-manager-service/models/index.ts +2 -0
  162. package/src/lib/services/store-state-manager-service/models/state-storage-options.model.ts +24 -0
  163. package/src/lib/services/store-state-manager-service/store-state-manager.service.ts +88 -0
  164. package/src/lib/services/utils/app.service.spec.ts +25 -0
  165. package/src/lib/services/utils/app.service.ts +21 -0
  166. package/src/lib/services/utils/encryption/README.md +79 -0
  167. package/src/lib/services/utils/encryption/asymmetrical-encryption.service.ts +282 -0
  168. package/src/lib/services/utils/encryption/encryption-test.service.ts +39 -0
  169. package/src/lib/services/utils/encryption/index.ts +5 -0
  170. package/src/lib/services/utils/encryption/random.ts +81 -0
  171. package/src/lib/services/utils/encryption/symmetrical-encryption.service.ts +93 -0
  172. package/src/lib/services/utils/headers.service.spec.ts +80 -0
  173. package/src/lib/services/utils/headers.service.ts +18 -0
  174. package/src/lib/services/utils/index.ts +7 -0
  175. package/src/lib/services/utils/object-merger.service.spec.ts +18 -0
  176. package/src/lib/services/utils/object-merger.service.ts +78 -0
  177. package/src/lib/services/utils/path-query.service.spec.ts +117 -0
  178. package/src/lib/services/utils/path-query.service.ts +69 -0
  179. package/src/lib/services/utils/random-color.utils.ts +83 -0
  180. package/src/lib/services/utils/utils.service.spec.ts +165 -0
  181. package/src/lib/services/utils/utils.service.ts +192 -0
  182. package/src/lib/services/ws-manager-service/index.ts +4 -0
  183. package/src/lib/services/ws-manager-service/models/channel-info.model.ts +24 -0
  184. package/src/lib/services/ws-manager-service/models/channel-message-data.model.ts +24 -0
  185. package/src/lib/services/ws-manager-service/models/channel-message.model.ts +24 -0
  186. package/src/lib/services/ws-manager-service/models/communication-type.enum.ts +5 -0
  187. package/src/lib/services/ws-manager-service/models/index.ts +5 -0
  188. package/src/lib/services/ws-manager-service/models/ws-user.model.ts +38 -0
  189. package/src/lib/services/ws-manager-service/services/index.ts +3 -0
  190. package/src/lib/services/ws-manager-service/services/websocket.service.ts +392 -0
  191. package/src/public-api.ts +14 -0
  192. package/tsconfig.lib.json +32 -0
  193. package/tsconfig.lib.prod.json +10 -0
  194. package/tsconfig.spec.json +14 -0
  195. package/fesm2022/http-request-manager.mjs +0 -7633
  196. package/fesm2022/http-request-manager.mjs.map +0 -1
  197. package/types/http-request-manager.d.ts +0 -2277
@@ -0,0 +1,3 @@
1
+ export * from "./http-manager-state.store";
2
+
3
+ export * from "./models/index";
@@ -0,0 +1,61 @@
1
+ import { RetryOptions } from "../../request-manager-services"
2
+ import { WSOptions } from "./ws-options.model"
3
+ import { StreamType } from "./stream-type.enum"
4
+
5
+ export interface ApiRequestInterface {
6
+ server: string
7
+ path?: any[]
8
+ headers?: any
9
+ adapter?: any
10
+ mapper?: any
11
+ polling?: number // seconds (undefined | 0 = none)
12
+ retry?: RetryOptions
13
+ stream?: boolean
14
+ streamType?: StreamType
15
+ displayError?: boolean
16
+ saveAs?: string
17
+ fileContentHeader?: string
18
+ ws?: WSOptions // Websocket Options
19
+ }
20
+
21
+ export class ApiRequest implements ApiRequestInterface {
22
+
23
+ constructor(
24
+ public server = '',
25
+ public path?: any[],
26
+ public headers?: any,
27
+ public adapter?: any,
28
+ public mapper?: any,
29
+ public polling?: number,
30
+ public retry?: RetryOptions,
31
+ public stream?: boolean,
32
+ public streamType?: StreamType,
33
+ public displayError?: boolean,
34
+ public saveAs?: string,
35
+ public fileContentHeader?: string,
36
+ public ws?: WSOptions,
37
+ ) {}
38
+
39
+ static adapt(item?: any): ApiRequest {
40
+
41
+ const server = Array.isArray(item?.server) ? item.server.join('/') : item?.server || '';
42
+
43
+ return new ApiRequest(
44
+ server,
45
+ (item?.path) ? item.path : [],
46
+ (item?.headers) ? item.headers : {},
47
+ item?.adapter,
48
+ item?.mapper,
49
+ item?.polling ? Math.floor(item.polling) : 0,
50
+ item?.retry ? RetryOptions.adapt(item.retry) : RetryOptions.adapt(),
51
+ (item?.stream) ? item.stream : false,
52
+ item?.streamType || StreamType.AI_STREAMING,
53
+ (item?.displayError) ? item.displayError : false,
54
+ item?.saveAs,
55
+ item?.fileContentHeader,
56
+ item?.ws,
57
+ )
58
+
59
+ }
60
+
61
+ }
@@ -0,0 +1,6 @@
1
+ export * from "./api-request.model";
2
+ export * from "./request-options.model";
3
+ export * from "./stream-type.enum";
4
+
5
+ export * from "./ws-options.model";
6
+
@@ -0,0 +1,22 @@
1
+ export interface RequestOptionsInterface {
2
+ path: any[],
3
+ headers: any,
4
+ }
5
+
6
+ export class RequestOptions implements RequestOptionsInterface {
7
+
8
+ constructor(
9
+ public path: any[] = [],
10
+ public headers = {},
11
+ ) {}
12
+
13
+ static adapt(item?: any): RequestOptions {
14
+
15
+ return new RequestOptions(
16
+ item?.path,
17
+ item?.headers,
18
+ )
19
+
20
+ }
21
+
22
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Enum representing valid streaming format types
3
+ *
4
+ * This enum defines all supported streaming formats for HTTP requests.
5
+ * Each enum value corresponds to a specific data format and parsing strategy.
6
+ */
7
+ export enum StreamType {
8
+ JSON = 'json',
9
+ NDJSON = 'ndjson',
10
+ AI_STREAMING = 'ai_streaming',
11
+ EVENT_STREAM = 'event_stream',
12
+ AUTO = 'auto'
13
+ }
@@ -0,0 +1,39 @@
1
+ import { RetryOptions } from "../../request-manager-services"
2
+
3
+ export interface WSOptionsInterface {
4
+ id: string,
5
+ wsServer: string,
6
+ jwtToken: string,
7
+ permissions?: string[],
8
+ channels?: string[],
9
+ user?: any,
10
+ retry?: RetryOptions
11
+ }
12
+
13
+ export class WSOptions implements WSOptionsInterface {
14
+
15
+ constructor(
16
+ public id: string = '',
17
+ public wsServer: string = '',
18
+ public jwtToken: string = '',
19
+ public permissions?: string[],
20
+ public channels?: string[],
21
+ public user?: any,
22
+ public retry?: RetryOptions
23
+ ) {}
24
+
25
+ static adapt(item?: any): WSOptions {
26
+
27
+ return new WSOptions(
28
+ item?.id,
29
+ item?.wsServer,
30
+ item?.jwtToken,
31
+ (item?.permissions) ? item.permissions.split(',').map((p: string) => p.trim()) : [],
32
+ item?.channels,
33
+ item?.user,
34
+ item?.retry
35
+ )
36
+
37
+ }
38
+
39
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./store-state-manager.service";
2
+
3
+ export * from "./models/index";
@@ -0,0 +1,2 @@
1
+ export * from "./state-storage-options.model";
2
+
@@ -0,0 +1,24 @@
1
+ import { SettingOptions } from "../../local-storage-manager-service";
2
+
3
+ export interface StateStorageOptionsInterface {
4
+ store?: string;
5
+ options?: SettingOptions;
6
+ model?: (state: any) => any;
7
+ }
8
+
9
+ export class StateStorageOptions implements StateStorageOptionsInterface {
10
+
11
+ constructor(
12
+ public store?: string,
13
+ public options?: SettingOptions,
14
+ public model?: (state: any) => any
15
+ ) {}
16
+
17
+ static adapt(item?: any): StateStorageOptions {
18
+ return new StateStorageOptions(
19
+ item?.store ?? 'temp',
20
+ item?.options ? SettingOptions.adapt(item.options) : SettingOptions.adapt(),
21
+ item?.model
22
+ );
23
+ }
24
+ }
@@ -0,0 +1,88 @@
1
+ import { LocalStorageManagerService } from '../local-storage-manager-service/local-storage-manager.service';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { ComponentStore } from '@ngrx/component-store';
4
+ import { StateStorageOptions } from './models/state-storage-options.model';
5
+ import { Subscription, take } from 'rxjs';
6
+
7
+ export interface StateStoreManagerData<T> {}
8
+
9
+ @Injectable({
10
+ providedIn: 'root'
11
+ })
12
+ export class StoreStateManagerService<T extends object = StateStoreManagerData<any>> extends ComponentStore<T> {
13
+
14
+ localStorageManagerService = inject(LocalStorageManagerService)
15
+
16
+ subscriptions = new Subscription
17
+ settings: any = null
18
+
19
+ private isRestoring = false
20
+
21
+ constructor(
22
+ private options: StateStorageOptions = StateStorageOptions.adapt()
23
+ ) {
24
+ super(StoreStateManagerService.init(options))
25
+ this.init(options)
26
+ }
27
+
28
+ private static init(options: StateStorageOptions): any {
29
+
30
+ const model = options?.model
31
+ return (model) ? (model as () => any)() : {}
32
+
33
+ }
34
+
35
+ init(options?: StateStorageOptions) {
36
+
37
+ this.settings = options
38
+
39
+ this.localStorageManagerService.createStore({
40
+ name: this.settings?.store,
41
+ data: this.settings?.model(),
42
+ options: this.settings?.options,
43
+ })
44
+
45
+ this.localStorageManagerService.store$(this.settings?.store)
46
+ .subscribe(data => this.setState(data))
47
+
48
+ }
49
+
50
+ restoreState(): Subscription {
51
+
52
+ return this.localStorageManagerService.store$(this.settings?.store)
53
+ .pipe(take(1))
54
+ .subscribe(data => {
55
+ this.updateData(data)
56
+ })
57
+
58
+ }
59
+
60
+ updateState(state: any) {
61
+ if(this.isRestoring) return
62
+ this.localStorageManagerService.updateStore({
63
+ name: this.settings?.store,
64
+ data: state
65
+ })
66
+
67
+ }
68
+
69
+ // Selectors
70
+ readonly data$ = this.select((state: any) => {
71
+ const model = this.options.model;
72
+ return (typeof model === 'function' && !model.prototype) ? model(state) : state
73
+ });
74
+
75
+ // Updaters
76
+ readonly updateData = this.updater((state, data: any) => {
77
+
78
+ const key = Object.keys(data)[0]
79
+ const hasKey = Object.keys(state).includes(key)
80
+
81
+ if (!hasKey) return state
82
+ const newState = { ...state, [key]: data[key] }
83
+ this.updateState(newState)
84
+ return { ...state, ...newState }
85
+
86
+ })
87
+
88
+ }
@@ -0,0 +1,25 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+ import { APP_ID } from '@angular/core';
3
+ import { AppService } from './app.service';
4
+
5
+ describe('AppService', () => {
6
+ let service: AppService;
7
+
8
+ beforeEach(() => {
9
+ TestBed.configureTestingModule({
10
+ providers: [
11
+ AppService,
12
+ { provide: APP_ID, useValue: 'test-app-id' }
13
+ ]
14
+ });
15
+ service = TestBed.inject(AppService);
16
+ });
17
+
18
+ it('should be created', () => {
19
+ expect(service).toBeTruthy();
20
+ });
21
+
22
+ it('should have appID assigned from APP_ID', () => {
23
+ expect(service.appID).toBe('test-app-id');
24
+ });
25
+ });
@@ -0,0 +1,21 @@
1
+ import { APP_ID, Inject, Injectable } from '@angular/core';
2
+
3
+ // Must provide a value for APP_ID in AppModule->Providers
4
+ // providers: [
5
+ // {
6
+ // provide: APP_ID,
7
+ // useValue: "056991ac-3537-43ab-b5b9-83edf6554eff",
8
+ // },
9
+
10
+ @Injectable({
11
+ providedIn: 'root'
12
+ })
13
+ export class AppService {
14
+
15
+ appID: string
16
+
17
+ constructor(@Inject(APP_ID) private id: string) {
18
+ this.appID = this.id
19
+ }
20
+
21
+ }
@@ -0,0 +1,79 @@
1
+ # Generate a Key Pair on Mac
2
+
3
+ To generate a key pair on a Mac, you can use the built-in openssl command-line tool. This tool is available on most Unix-like operating systems, including macOS. Below are the steps to generate an RSA key pair using openssl:
4
+
5
+ ### Step 1: Open Terminal
6
+
7
+ Open the Terminal application on your Mac. You can find it in the Utilities folder within the Applications folder, or you can use Spotlight to search for "Terminal".
8
+
9
+ ### Step 2: Generate the Private Key
10
+
11
+ Run the following command to generate a 2048-bit RSA private key:
12
+
13
+ ```sh
14
+ openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
15
+ ```
16
+
17
+ ### Step 3: Generate the Public Key
18
+
19
+ Run the following command to extract the public key from the private key:
20
+
21
+ ```sh
22
+ openssl rsa -pubout -in private_key.pem -out public_key.pem
23
+ ```
24
+
25
+ ### Step 4: View the Keys (Optional)
26
+
27
+ You can view the contents of the generated key files using the cat command:
28
+
29
+ To view the private key:
30
+
31
+ ```sh
32
+ cat private_key.pem
33
+ ```
34
+
35
+ To view the public key:
36
+
37
+ ```sh
38
+ cat public_key.pem
39
+ ```
40
+
41
+ -----BEGIN PRIVATE KEY-----
42
+ MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC2mvvEWn/aMikX
43
+ A8+/Po2R4+PHwC9wxa10fr75sR9Wbuq8NY/yY174JHR4rRmyV8EnKEfyoTzfsvTO
44
+ 858lPD4DuUKESh+NDKiLNUdY4isrR060rxzJn+30OzKkZIHWhIZY3jqEw7C+glMV
45
+ Fmphtci4WQqPYwi1rX3YswE0MJhF/a+HCZ5erDmET/PFZJtTSsx47zbeck2Mnfta
46
+ KpF/wS9jYtpUFrf/vSuTo4Q0libauiFwPgCeYTGEBGGbKVnbAbM71qqmjOxT0ItW
47
+ TbsrGWG54G6vTxg/mnzxpJfMNlVOogv9u2YcG0lEQ/xo9P88WBWPdE0TK5V37GOq
48
+ 3twvUruHAgMBAAECggEAThZZqr6OpQbFRofFO8GqtaQQAJghUWbfRY176ngBcCtP
49
+ azu2ek9fSdsBCafwcLERMscJeWrVBs5W3PcWa8xmsp3zIXI3KtCqdJlMkOhq0H+W
50
+ WzL1Kw2eqs3z2pP2Z/9VGkSyHps2hklh8QccZ/teQeMl3mpZy6NMyTHHRoOvYmIg
51
+ TBhDPL+WWJXPVlgKle3RRDVeD1JVo5XmsOW4I8FRyp5f7BZE1IwPTNDUATAtwC8u
52
+ dHHo1rTkWIk2gxVPRcH61w8ceij4VPv7Sk7iFobcLkscTwbTzondU3YssSYEmayW
53
+ 5+qhIbHXWnn4FVMPVrDUORVAW8naCrVVBCYGWFDnQQKBgQDcsQ07EaYWDnRQ0xcq
54
+ 5hTQUnd137CKNQcLXJ8T+ghuj5v0ZhPpu3YZDjm+rX52mrFN4+kEMKkCjFJAeKaI
55
+ omqKb/i57t7tcQKsbGdtUyRt7PirnHed7dlEo0ElwBWr58hTcUuTnoIiQM3sgmpn
56
+ VrlntlWpVWr0hoJMxRS6Pb6xQQKBgQDT0gVdNm0+ZrBKDWWKkeaQHHyxdva8Dt6C
57
+ NEjP+uU16hF6CsPGCvDuNA9PMIqGHR914aeEwYWtma6/zI1T74jhlUiyAHkpW373
58
+ +xNWmruq8k3UlVBK8JIjH/LOXNV5Gw85yLJwokhl6A8m4DSMkDJZTLVXfYQ24su1
59
+ TMDz0yhyxwKBgA/jNx6fgKNp2vnOmIZgFfOBXFRCDEWG18D7pAAeKek7sXCAwMI8
60
+ 2p2nJoURnF8Rd94xoB7LGf+y9mDpzqNbfewFb5SDG81gK18aVr/KEn9PZf+Evh/C
61
+ dbe5QQFkuKqtfwBy0YwJBzlMDQcPxHU4CxTqTXRpT8/Wtx6ruXhG5amBAoGANXmC
62
+ 8ypHYAaKoNdK+DWnMGCQtjijR4y1bceHTkI31WmXKelHzVp7wpcP+lz1y6/Ufm0O
63
+ XnyAo/f1XuRkFXmWY+TNKmrmK6O2pSIUmruLfzeWoIFleNXM/uMU6DYVinJjYKIj
64
+ Mj416swv7w+RFJ9epp6v9Ttxwm11IfsThzqarocCgYAPbtk6kqJwxq5I49NoC3Nm
65
+ WozUs31UywHJLS4JeudityA7ZTD8kULyhCig+Mrupiu3qLAmFtJzYFFIoP4msIOC
66
+ xMQ2qHvUyX9BwpONDwZ6fjwQYa8/kt22MelVICKqDpyYlOipV/YRKMNXsaQJd6xB
67
+ pkaCFGUW4xoRwTR/So/RnQ==
68
+ -----END PRIVATE KEY-----
69
+ (base) mike.boni@Mikes-MacBook-Pro ~ % cat public_key.pem
70
+
71
+ -----BEGIN PUBLIC KEY-----
72
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtpr7xFp/2jIpFwPPvz6N
73
+ kePjx8AvcMWtdH6++bEfVm7qvDWP8mNe+CR0eK0ZslfBJyhH8qE837L0zvOfJTw+
74
+ A7lChEofjQyoizVHWOIrK0dOtK8cyZ/t9DsypGSB1oSGWN46hMOwvoJTFRZqYbXI
75
+ uFkKj2MIta192LMBNDCYRf2vhwmeXqw5hE/zxWSbU0rMeO823nJNjJ37WiqRf8Ev
76
+ Y2LaVBa3/70rk6OENJYm2rohcD4AnmExhARhmylZ2wGzO9aqpozsU9CLVk27Kxlh
77
+ ueBur08YP5p88aSXzDZVTqIL/btmHBtJREP8aPT/PFgVj3RNEyuVd+xjqt7cL1K7
78
+ hwIDAQAB
79
+ -----END PUBLIC KEY-----
@@ -0,0 +1,282 @@
1
+ import { Injectable } from '@angular/core';
2
+
3
+ import { BehaviorSubject, EMPTY, Observable, from, of } from 'rxjs';
4
+ import { map, catchError } from 'rxjs/operators';
5
+
6
+ @Injectable({
7
+ providedIn: 'root'
8
+ })
9
+ export class AsymmetricalEncryptionService {
10
+
11
+ constructor() {}
12
+
13
+ generateKeyPair(modulusLength = 2048): Observable<CryptoKeyPair> {
14
+
15
+ // modulusLength - 1024, 2048, 4096
16
+ // hash - SHA-256
17
+
18
+ return from(crypto.subtle.generateKey(
19
+ {
20
+ name: "RSA-OAEP",
21
+ modulusLength,
22
+ publicExponent: new Uint8Array([1, 0, 1]), // 65537
23
+ hash: { name: "SHA-256" }
24
+ },
25
+ true, // Extractable keys
26
+ ["encrypt", "decrypt"]
27
+ ))
28
+
29
+ }
30
+
31
+ encryptData(publicKey: CryptoKey, data: string) {
32
+
33
+ const encodedData = new TextEncoder().encode(data)
34
+
35
+ return from(crypto.subtle.encrypt(
36
+ {
37
+ name: "RSA-OAEP"
38
+ },
39
+ publicKey,
40
+ encodedData
41
+ )).pipe(
42
+ map(enc => this.arrayBufferToBase64(enc))
43
+ )
44
+
45
+ }
46
+
47
+ decryptData(privateKey: CryptoKey, encryptedData: string) {
48
+
49
+ const encStr = this.base64ToArrayBuffer(encryptedData)
50
+
51
+ return from(crypto.subtle.decrypt(
52
+ {
53
+ name: "RSA-OAEP"
54
+ },
55
+ privateKey,
56
+ encStr
57
+ ).then(decryptedData => {
58
+ return new TextDecoder().decode(decryptedData)
59
+ }))
60
+
61
+ }
62
+
63
+ pemToArrayBuffer(pem: string): ArrayBuffer {
64
+
65
+ const b64 = pem.replace(/(-----BEGIN (RSA )?(PRIVATE|PUBLIC) KEY-----|-----END (RSA )?(PRIVATE|PUBLIC) KEY-----|\n)/g, '')
66
+ const binaryString = atob(b64)
67
+ const len = binaryString.length
68
+ const buffer = new ArrayBuffer(len)
69
+ const view = new Uint8Array(buffer)
70
+
71
+ for (let i = 0; i < len; i++) {
72
+ view[i] = binaryString.charCodeAt(i)
73
+ }
74
+
75
+ return buffer
76
+
77
+ }
78
+
79
+ base64ToArrayBuffer(base64: string): ArrayBuffer {
80
+
81
+ const binaryString = atob(base64);
82
+ const len = binaryString.length;
83
+ const buffer = new ArrayBuffer(len);
84
+ const view = new Uint8Array(buffer);
85
+
86
+ for (let i = 0; i < len; i++) {
87
+ view[i] = binaryString.charCodeAt(i);
88
+ }
89
+
90
+ return buffer;
91
+ }
92
+
93
+ arrayBufferToBase64(buffer: ArrayBuffer): string {
94
+
95
+ let binary = '';
96
+ const bytes = new Uint8Array(buffer);
97
+ const len = bytes.byteLength;
98
+
99
+ for (let i = 0; i < len; i++) {
100
+ binary += String.fromCharCode(bytes[i]);
101
+ }
102
+
103
+ return window.btoa(binary)
104
+
105
+ }
106
+
107
+ base64ToPEM(base64Key: string, publicKey = true) {
108
+
109
+ const keyType = (publicKey) ? 'PUBLIC' : 'PRIVATE'
110
+
111
+ const header = `-----BEGIN ${keyType} KEY-----\n`
112
+ const footer = `\n-----END ${keyType} KEY-----`
113
+
114
+ const keyBody = base64Key.match(/.{1,64}/g)?.join("\n") || ""
115
+
116
+ return header + keyBody + footer
117
+
118
+ }
119
+
120
+ pemToCryptoKey(
121
+ pem: string,
122
+ algorithm: RsaHashedKeyGenParams,
123
+ extractable: boolean,
124
+ keyUsages: KeyUsage[],
125
+ format: any = "pkcs8" //"raw" | "pkcs8" | "spki"
126
+ ) {
127
+
128
+ const buffer = this.pemToArrayBuffer(pem);
129
+
130
+ console.log('buffer found ', buffer);
131
+
132
+ return from(crypto.subtle.importKey(
133
+ format,
134
+ buffer,
135
+ algorithm,
136
+ extractable,
137
+ keyUsages
138
+ ))
139
+
140
+ }
141
+
142
+ // TESTING
143
+
144
+ testGenerateKeys(): Observable<string> {
145
+ const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>("");
146
+ const testSequence$: Observable<string> = testSequence.asObservable();
147
+ testSequence.next("Test Generating Keys");
148
+
149
+ // GENERATE KEYS
150
+ this.generateKeyPair().subscribe((data) => {
151
+
152
+ console.log("GEN-GENERATED KEYS: ", data)
153
+
154
+ crypto.subtle.exportKey('spki', data.publicKey)
155
+ .then(key => {
156
+ const publicKeyBase64 = this.arrayBufferToBase64(key);
157
+ console.log("GEN-EXPORT PUBLIC KEY: ", this.base64ToPEM(publicKeyBase64, true));
158
+ })
159
+
160
+ crypto.subtle.exportKey('pkcs8', data.privateKey)
161
+ .then(key => {
162
+ const privateKeyBase64 = this.arrayBufferToBase64(key);
163
+ console.log("GEN-EXPORT PRIVATE KEY: ", this.base64ToPEM(privateKeyBase64, false));
164
+ });
165
+
166
+ // TEST WITH GENERATED KEYS
167
+ this.encryptData(data.publicKey, "Sample Data here - Mike Bonifacio")
168
+ .subscribe((enc) => {
169
+
170
+ console.log("GEN-ENCRYPT==>: ", enc)
171
+
172
+ this.decryptData(data.privateKey, enc).subscribe((dec) => {
173
+ testSequence.next('Test Passed');
174
+ testSequence.complete();
175
+ })
176
+
177
+ })
178
+
179
+ })
180
+ return testSequence$;
181
+
182
+ }
183
+
184
+ testDecryptionWithKeys(): Observable<string> {
185
+ const testSequence: BehaviorSubject<string> = new BehaviorSubject<string>("");
186
+ const testSequence$: Observable<string> = testSequence.asObservable();
187
+ testSequence.next("Test Generating Keys");
188
+
189
+ const privateKey = `-----BEGIN PRIVATE KEY-----
190
+ MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDKVBkCWNb9eHVF
191
+ twAA5mdAyvXFix3WavdrsoYRkvtCl8ogDBQf8f6N0bRkDF1zcVHRrNAEyozXDtuD
192
+ kFgSiivBFREI7fiS3sOvduq6FaGXzX0IY6oaVMu8oOPgDvC0yvoohR+0Qxq2d6lP
193
+ SPyHeKQaxP4KxzCJJzB1XAcbd2eFzUUDv25mNlwdVkmW8FI/sAxnJLgPTW78dzfX
194
+ Ddfk+nxdIqxVKSLATnL0kMN7aGJx24UozioAIpzvvvF5/+7HTd1gi6NeCqrAYr3g
195
+ iP364AE26CFwFvHnafO9uNQhlQ+uiNnOoInXByfFGVP+RidSpfLzaxDjs6RDwpol
196
+ h098btONAgMBAAECggEAAVhHM2OD5IkUtuowwcKNaCTKGmrClRE3gMuzJeBsSJEy
197
+ uAReUFILZylcnhegDytSti2vDA9T7xqtO6CU0p3V8LpU89JMOPRb/deirI4UXSpx
198
+ xbNyjirOO6bnrNlOWfKexdQQsikYPzF2iM1Scpr1u9ZDCHZOl1ZYSrkve5My4coP
199
+ 3Gx6tTBqL0jQBfcpf4ES8BH3JSawR/MgqzDS74+bI2VH+kvuPAC1L4fBgaV3VUv0
200
+ nFzim5A3s5VaXPgJbEIghP9BkYGFkeT9ma3nliEZWc96AzsmowFn1ayCvrNVPo9R
201
+ ECD2NnttBiCJZt3H93sR9+OTeA8Bls+aZGlKd5mLAQKBgQDpf8nIYUm/Zmls7/lQ
202
+ QBUSGHEYrbjNsEejQsPgNDtg2EVSxdUkvTn7Wb+HExTk09Z5bNvhaO2532/FH9y8
203
+ ahSXafiMXpfR2olwXdOB9yXXl4F5C0LGnmzGim4OSeWzAX0JCL470KaS0QN3EmoG
204
+ 9F0YCfMnZXNTweSSx4xvlO6ggQKBgQDd01uIolm7z1DIWCwNERAXP2GDwcvxyzYK
205
+ YqJfKDeHt2t6yIzZMMotnPDy+OlcdGspIIHkB5a+SZN5Nt7DUKg/MnyOZ3KbVq41
206
+ k7dR4Ka3LRnGkesy7lSr7ef1rfquyR75OXJQcPWvkFcLu0TMiQhvptatZ8VN+F4n
207
+ fDQELRotDQKBgQCgN+AUT7VT0QjcCBnRV/ddUEoiPenFsYSmYMSYzh5ESIHg1wB2
208
+ 0iS79Iw4Of6nOTg8X1bM57vfQ5Kk90T2P+/bKYqzfqC8DTErWiYsUpKzyTC9Bt4N
209
+ /Vz0Kr5zrX8ggg/yp/4oevYhXav8AzWfigNq4EDpMnKc8TlPAf+5/L50gQKBgQC2
210
+ mLPhPhr1gUszD3l7bA89w7uGlLFHoQoj9FtKTzWervp3QLzIT+QtNeIVb5XQuDg5
211
+ y3uAdEq+6pvNjMBEMJG+K9Xh9v+dJPYUPjsJ2A4D/MkZ7qWX8B2cxSJK1uLim8W2
212
+ S3ZxBvsGgJ9WldmlMCvUlJZkeWYtr4P5psC+q02/xQKBgQCDII/jcV2+lRM2iNTe
213
+ vBijZSaNMEWOK/Y+/HFK8GYKXnB+xNWhrm8rKgWGzpDJAUPMh9Tt+leW9LKEBuzF
214
+ Y1bGblmGm1zsPWpIx05Fdtv9eOJmFnXbGzIsYyhadZnPcQOWhqxtpVxSuul0Jc7Q
215
+ XNq4qPaPXhbQAshgtyBt75DMkw==
216
+ -----END PRIVATE KEY-----`
217
+
218
+ const pubKey = `-----BEGIN PUBLIC KEY-----
219
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylQZAljW/Xh1RbcAAOZn
220
+ QMr1xYsd1mr3a7KGEZL7QpfKIAwUH/H+jdG0ZAxdc3FR0azQBMqM1w7bg5BYEoor
221
+ wRURCO34kt7Dr3bquhWhl819CGOqGlTLvKDj4A7wtMr6KIUftEMatnepT0j8h3ik
222
+ GsT+CscwiScwdVwHG3dnhc1FA79uZjZcHVZJlvBSP7AMZyS4D01u/Hc31w3X5Pp8
223
+ XSKsVSkiwE5y9JDDe2hicduFKM4qACKc777xef/ux03dYIujXgqqwGK94Ij9+uAB
224
+ NughcBbx52nzvbjUIZUProjZzqCJ1wcnxRlT/kYnUqXy82sQ47OkQ8KaJYdPfG7T
225
+ jQIDAQAB
226
+ -----END PUBLIC KEY-----`
227
+
228
+ const algorithm: RsaHashedKeyGenParams = {
229
+ name: "RSA-OAEP",
230
+ modulusLength: 2048,
231
+ publicExponent: new Uint8Array([1, 0, 1]),
232
+ hash: "SHA-256"
233
+ };
234
+
235
+ // ENCRYPT
236
+ this.pemToCryptoKey(
237
+ pubKey,
238
+ algorithm,
239
+ true,
240
+ ["encrypt"],
241
+ "spki"
242
+ ).subscribe((keyPublic) => {
243
+
244
+ // console.log("PUBLIC KEY: ", keyPublic)
245
+
246
+ this.encryptData(keyPublic, "Sample Data here - Mike Bonifacio")
247
+ .subscribe((str) => {
248
+ console.log("ENCRYPTED STRING: ", str);
249
+ testSequence.next('encrypted string success');
250
+ })
251
+
252
+ })
253
+
254
+ const enc = "r7UOuEGBZ6jbVTOIBuv9jFOEtRiedmS27hfW40k7XKCTsQ5VhWup0qu2BA2ANZaGKii/uehJ/RSPiyfGbJ6leJrat0mA1hPqH/XodaBzLMDigvdYM1NSXFZMDa40OpLUIXbPlAvybjcGu7Bal+LMA8htHrFu/OmM/fHI66xOzzpuXSYx0OkWjtY81rUQ1FFkvrkx2jGFPZ0p+Nw/v3Q4cJnet6V63vCueFlD749VMcVXo7pvz4AIPpB+IOy3kbxaYTPakLVioJERU6GFMXWkECuRvohhS9CETcORZtRVRkvhcHk3lxgIhfqojUKYgD6K5dDELDPsWIS+iTG1XIQIlg==";
255
+
256
+ // DECRYPTION
257
+ this.pemToCryptoKey(
258
+ privateKey,
259
+ algorithm,
260
+ false,
261
+ ["decrypt"],
262
+ "pkcs8"
263
+ ).subscribe((key) => {
264
+
265
+ // console.log("DECRYPT ===", key)
266
+
267
+ this.decryptData(key, enc)
268
+ .pipe(
269
+ catchError(err => {
270
+ console.log("ERROR: ", err);
271
+ return EMPTY
272
+ })
273
+ ).subscribe((str) => {
274
+ console.log("DECRYPTED STRING: ", str);
275
+ testSequence.next('decrypted string success');
276
+ })
277
+
278
+ })
279
+
280
+ return testSequence$;
281
+ };
282
+ }