@en-solutions/tgm-client-sdk 1.6.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 (533) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +788 -0
  3. package/esm2022/en-solutions-tgm-client-sdk.mjs +5 -0
  4. package/esm2022/lib/components/database-manager/database-manager/database-manager.component.mjs +308 -0
  5. package/esm2022/lib/components/database-manager/database-manager.module.mjs +66 -0
  6. package/esm2022/lib/components/database-manager/object-browser/object-browser.component.mjs +98 -0
  7. package/esm2022/lib/components/database-manager/query-editor/query-editor.component.mjs +196 -0
  8. package/esm2022/lib/components/database-manager/query-toolbar/query-toolbar.component.mjs +70 -0
  9. package/esm2022/lib/components/database-manager/record-detail/record-detail.component.mjs +112 -0
  10. package/esm2022/lib/components/database-manager/registry/entity-registry.mjs +512 -0
  11. package/esm2022/lib/components/database-manager/results-grid/results-grid.component.mjs +165 -0
  12. package/esm2022/lib/components/database-manager/services/entity-schema.service.mjs +91 -0
  13. package/esm2022/lib/components/database-manager/services/query-executor.service.mjs +204 -0
  14. package/esm2022/lib/components/database-manager/table-data-viewer/table-data-viewer.component.mjs +166 -0
  15. package/esm2022/lib/components/database-manager/table-structure/table-structure.component.mjs +42 -0
  16. package/esm2022/lib/components/database-manager/types/database-manager.types.mjs +6 -0
  17. package/esm2022/lib/components/reporting/export-button/export-button.component.mjs +203 -0
  18. package/esm2022/lib/components/reporting/generated-report-list/generated-report-list.component.mjs +285 -0
  19. package/esm2022/lib/components/reporting/report-definition-form/report-definition-form.component.mjs +206 -0
  20. package/esm2022/lib/components/reporting/report-definition-list/report-definition-list.component.mjs +252 -0
  21. package/esm2022/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.mjs +122 -0
  22. package/esm2022/lib/components/reporting/report-stats/report-stats.component.mjs +164 -0
  23. package/esm2022/lib/components/reporting/report-template-list/report-template-list.component.mjs +114 -0
  24. package/esm2022/lib/components/reporting/reporting.module.mjs +60 -0
  25. package/esm2022/lib/components/video-call/incoming-call/incoming-call.component.mjs +80 -0
  26. package/esm2022/lib/components/video-call/services/livekit-room.service.mjs +142 -0
  27. package/esm2022/lib/components/video-call/services/video-call-signaling.service.mjs +42 -0
  28. package/esm2022/lib/components/video-call/services/video-call-state.service.mjs +52 -0
  29. package/esm2022/lib/components/video-call/types/video-call.types.mjs +2 -0
  30. package/esm2022/lib/components/video-call/video-call.module.mjs +42 -0
  31. package/esm2022/lib/components/video-call/video-controls/video-controls.component.mjs +33 -0
  32. package/esm2022/lib/components/video-call/video-participant/video-participant.component.mjs +68 -0
  33. package/esm2022/lib/components/video-call/video-room/video-room.component.mjs +89 -0
  34. package/esm2022/lib/core/auth-interceptor.mjs +33 -0
  35. package/esm2022/lib/core/client-interceptor.mjs +34 -0
  36. package/esm2022/lib/core/error-handler.mjs +32 -0
  37. package/esm2022/lib/core/http-client.service.mjs +254 -0
  38. package/esm2022/lib/core/websocket.service.mjs +185 -0
  39. package/esm2022/lib/models/admin/audit.models.mjs +2 -0
  40. package/esm2022/lib/models/admin/backup.models.mjs +2 -0
  41. package/esm2022/lib/models/admin/client.models.mjs +2 -0
  42. package/esm2022/lib/models/admin/email-provider.models.mjs +2 -0
  43. package/esm2022/lib/models/admin/erp.models.mjs +2 -0
  44. package/esm2022/lib/models/admin/identity-provider.models.mjs +2 -0
  45. package/esm2022/lib/models/admin/index.mjs +14 -0
  46. package/esm2022/lib/models/admin/messaging-provider.models.mjs +2 -0
  47. package/esm2022/lib/models/admin/platform-admin.models.mjs +2 -0
  48. package/esm2022/lib/models/admin/queue.models.mjs +2 -0
  49. package/esm2022/lib/models/admin/role.models.mjs +2 -0
  50. package/esm2022/lib/models/admin/sandbox.models.mjs +2 -0
  51. package/esm2022/lib/models/admin/ticket.models.mjs +2 -0
  52. package/esm2022/lib/models/admin/webhook.models.mjs +2 -0
  53. package/esm2022/lib/models/api/ai.models.mjs +2 -0
  54. package/esm2022/lib/models/api/aip.models.mjs +2 -0
  55. package/esm2022/lib/models/api/cat.models.mjs +2 -0
  56. package/esm2022/lib/models/api/company.models.mjs +2 -0
  57. package/esm2022/lib/models/api/compliance.models.mjs +2 -0
  58. package/esm2022/lib/models/api/component.models.mjs +2 -0
  59. package/esm2022/lib/models/api/cortex-edge.models.mjs +2 -0
  60. package/esm2022/lib/models/api/cortex-event.models.mjs +2 -0
  61. package/esm2022/lib/models/api/cortex-insight.models.mjs +2 -0
  62. package/esm2022/lib/models/api/cortex-node.models.mjs +2 -0
  63. package/esm2022/lib/models/api/custom-field.models.mjs +2 -0
  64. package/esm2022/lib/models/api/deferral.models.mjs +2 -0
  65. package/esm2022/lib/models/api/diagnostic-report.models.mjs +2 -0
  66. package/esm2022/lib/models/api/document.models.mjs +2 -0
  67. package/esm2022/lib/models/api/energy.models.mjs +2 -0
  68. package/esm2022/lib/models/api/failure.models.mjs +2 -0
  69. package/esm2022/lib/models/api/fleet.models.mjs +2 -0
  70. package/esm2022/lib/models/api/inspection.models.mjs +2 -0
  71. package/esm2022/lib/models/api/intervention.models.mjs +2 -0
  72. package/esm2022/lib/models/api/iot.models.mjs +2 -0
  73. package/esm2022/lib/models/api/knowledge.models.mjs +2 -0
  74. package/esm2022/lib/models/api/loto.models.mjs +2 -0
  75. package/esm2022/lib/models/api/maintenance-record.models.mjs +2 -0
  76. package/esm2022/lib/models/api/maintenance.models.mjs +2 -0
  77. package/esm2022/lib/models/api/material.models.mjs +2 -0
  78. package/esm2022/lib/models/api/media.models.mjs +2 -0
  79. package/esm2022/lib/models/api/misc.models.mjs +2 -0
  80. package/esm2022/lib/models/api/project.models.mjs +2 -0
  81. package/esm2022/lib/models/api/quality.models.mjs +2 -0
  82. package/esm2022/lib/models/api/reporting.models.mjs +3 -0
  83. package/esm2022/lib/models/api/reservoir-websocket.models.mjs +17 -0
  84. package/esm2022/lib/models/api/reservoir.models.mjs +2 -0
  85. package/esm2022/lib/models/api/search.models.mjs +2 -0
  86. package/esm2022/lib/models/api/sensor.models.mjs +2 -0
  87. package/esm2022/lib/models/api/unit.models.mjs +2 -0
  88. package/esm2022/lib/models/api/user.models.mjs +2 -0
  89. package/esm2022/lib/models/api/warranty.models.mjs +2 -0
  90. package/esm2022/lib/models/api/work-permit.models.mjs +2 -0
  91. package/esm2022/lib/models/api/workflow.models.mjs +2 -0
  92. package/esm2022/lib/models/auth/index.mjs +4 -0
  93. package/esm2022/lib/models/auth/login.models.mjs +2 -0
  94. package/esm2022/lib/models/auth/sso.models.mjs +2 -0
  95. package/esm2022/lib/models/auth/totp.models.mjs +2 -0
  96. package/esm2022/lib/models/base.models.mjs +99 -0
  97. package/esm2022/lib/models/chat/chat.models.mjs +2 -0
  98. package/esm2022/lib/models/enums/cat.enums.mjs +17 -0
  99. package/esm2022/lib/models/enums/energy.enums.mjs +8 -0
  100. package/esm2022/lib/models/enums/erp.enums.mjs +5 -0
  101. package/esm2022/lib/models/enums/index.mjs +15 -0
  102. package/esm2022/lib/models/enums/inspection.enums.mjs +7 -0
  103. package/esm2022/lib/models/enums/loto.enums.mjs +25 -0
  104. package/esm2022/lib/models/enums/misc.enums.mjs +19 -0
  105. package/esm2022/lib/models/enums/quality.enums.mjs +22 -0
  106. package/esm2022/lib/models/enums/reservoir.enums.mjs +13 -0
  107. package/esm2022/lib/models/enums/sso.enums.mjs +3 -0
  108. package/esm2022/lib/models/enums/status.enums.mjs +41 -0
  109. package/esm2022/lib/models/enums/time.enums.mjs +5 -0
  110. package/esm2022/lib/models/enums/type.enums.mjs +45 -0
  111. package/esm2022/lib/models/enums/user.enums.mjs +6 -0
  112. package/esm2022/lib/models/enums/work-permit.enums.mjs +33 -0
  113. package/esm2022/lib/models/index.mjs +42 -0
  114. package/esm2022/lib/models/realtime/realtime-event.models.mjs +9 -0
  115. package/esm2022/lib/models/video/video-call.models.mjs +2 -0
  116. package/esm2022/lib/services/admin/activity-log.service.mjs +28 -0
  117. package/esm2022/lib/services/admin/announcement.service.mjs +37 -0
  118. package/esm2022/lib/services/admin/article-admin.service.mjs +37 -0
  119. package/esm2022/lib/services/admin/audit-log.service.mjs +53 -0
  120. package/esm2022/lib/services/admin/backup.service.mjs +28 -0
  121. package/esm2022/lib/services/admin/cache-admin.service.mjs +64 -0
  122. package/esm2022/lib/services/admin/client-admin.service.mjs +101 -0
  123. package/esm2022/lib/services/admin/client-api-key.service.mjs +31 -0
  124. package/esm2022/lib/services/admin/client-ocr.service.mjs +28 -0
  125. package/esm2022/lib/services/admin/client-usage.service.mjs +31 -0
  126. package/esm2022/lib/services/admin/data-export.service.mjs +19 -0
  127. package/esm2022/lib/services/admin/document-admin.service.mjs +40 -0
  128. package/esm2022/lib/services/admin/email-admin.service.mjs +28 -0
  129. package/esm2022/lib/services/admin/email-provider.service.mjs +58 -0
  130. package/esm2022/lib/services/admin/erp-admin.service.mjs +111 -0
  131. package/esm2022/lib/services/admin/identity-provider.service.mjs +46 -0
  132. package/esm2022/lib/services/admin/impersonation.service.mjs +19 -0
  133. package/esm2022/lib/services/admin/index.mjs +31 -0
  134. package/esm2022/lib/services/admin/messaging-provider.service.mjs +55 -0
  135. package/esm2022/lib/services/admin/notification.service.mjs +31 -0
  136. package/esm2022/lib/services/admin/platform-admin.service.mjs +34 -0
  137. package/esm2022/lib/services/admin/platform-webhook.service.mjs +34 -0
  138. package/esm2022/lib/services/admin/queue-admin.service.mjs +55 -0
  139. package/esm2022/lib/services/admin/role-admin.service.mjs +81 -0
  140. package/esm2022/lib/services/admin/sandbox-admin.service.mjs +34 -0
  141. package/esm2022/lib/services/admin/scheduler-admin.service.mjs +34 -0
  142. package/esm2022/lib/services/admin/subscription.service.mjs +28 -0
  143. package/esm2022/lib/services/admin/system-health.service.mjs +22 -0
  144. package/esm2022/lib/services/admin/user-admin.service.mjs +67 -0
  145. package/esm2022/lib/services/admin/user-permission.service.mjs +40 -0
  146. package/esm2022/lib/services/admin/webhook-admin.service.mjs +61 -0
  147. package/esm2022/lib/services/api/agent.service.mjs +29 -0
  148. package/esm2022/lib/services/api/ai-feedback.service.mjs +17 -0
  149. package/esm2022/lib/services/api/ai.service.mjs +66 -0
  150. package/esm2022/lib/services/api/aip-analysis.service.mjs +20 -0
  151. package/esm2022/lib/services/api/aip-financial.service.mjs +29 -0
  152. package/esm2022/lib/services/api/aip-geographic.service.mjs +30 -0
  153. package/esm2022/lib/services/api/aip-network.service.mjs +29 -0
  154. package/esm2022/lib/services/api/aip-performance.service.mjs +29 -0
  155. package/esm2022/lib/services/api/aip-resource.service.mjs +23 -0
  156. package/esm2022/lib/services/api/aip-workflow.service.mjs +32 -0
  157. package/esm2022/lib/services/api/aip.service.mjs +158 -0
  158. package/esm2022/lib/services/api/alert.service.mjs +26 -0
  159. package/esm2022/lib/services/api/anomaly-detection.service.mjs +40 -0
  160. package/esm2022/lib/services/api/asset-lifecycle.service.mjs +78 -0
  161. package/esm2022/lib/services/api/audit-entry.service.mjs +22 -0
  162. package/esm2022/lib/services/api/base-crud.service.mjs +37 -0
  163. package/esm2022/lib/services/api/bid.service.mjs +17 -0
  164. package/esm2022/lib/services/api/budget.service.mjs +17 -0
  165. package/esm2022/lib/services/api/bulk-operation.service.mjs +65 -0
  166. package/esm2022/lib/services/api/capex-project.service.mjs +17 -0
  167. package/esm2022/lib/services/api/cat.service.mjs +77 -0
  168. package/esm2022/lib/services/api/client-article.service.mjs +23 -0
  169. package/esm2022/lib/services/api/community.service.mjs +41 -0
  170. package/esm2022/lib/services/api/company-material-type.service.mjs +17 -0
  171. package/esm2022/lib/services/api/company-material.service.mjs +17 -0
  172. package/esm2022/lib/services/api/company.service.mjs +30 -0
  173. package/esm2022/lib/services/api/compliance.service.mjs +74 -0
  174. package/esm2022/lib/services/api/component-info.service.mjs +17 -0
  175. package/esm2022/lib/services/api/component-location.service.mjs +17 -0
  176. package/esm2022/lib/services/api/component.service.mjs +53 -0
  177. package/esm2022/lib/services/api/cortex-event.service.mjs +17 -0
  178. package/esm2022/lib/services/api/cortex-insight.service.mjs +23 -0
  179. package/esm2022/lib/services/api/cortex-node.service.mjs +17 -0
  180. package/esm2022/lib/services/api/cortex.service.mjs +29 -0
  181. package/esm2022/lib/services/api/custom-field.service.mjs +70 -0
  182. package/esm2022/lib/services/api/custom.service.mjs +43 -0
  183. package/esm2022/lib/services/api/dashboard.service.mjs +44 -0
  184. package/esm2022/lib/services/api/deferral.service.mjs +54 -0
  185. package/esm2022/lib/services/api/department.service.mjs +17 -0
  186. package/esm2022/lib/services/api/device-gateway.service.mjs +33 -0
  187. package/esm2022/lib/services/api/diagnostic-report.service.mjs +23 -0
  188. package/esm2022/lib/services/api/digital-twin.service.mjs +56 -0
  189. package/esm2022/lib/services/api/document.service.mjs +53 -0
  190. package/esm2022/lib/services/api/dynamic-crud.service.mjs +67 -0
  191. package/esm2022/lib/services/api/energy-analytics.service.mjs +42 -0
  192. package/esm2022/lib/services/api/energy-production.service.mjs +17 -0
  193. package/esm2022/lib/services/api/energy.service.mjs +91 -0
  194. package/esm2022/lib/services/api/entity-comment.service.mjs +31 -0
  195. package/esm2022/lib/services/api/event.service.mjs +17 -0
  196. package/esm2022/lib/services/api/export.service.mjs +216 -0
  197. package/esm2022/lib/services/api/extension.service.mjs +56 -0
  198. package/esm2022/lib/services/api/failure.service.mjs +53 -0
  199. package/esm2022/lib/services/api/fleet.service.mjs +140 -0
  200. package/esm2022/lib/services/api/inactive-component.service.mjs +17 -0
  201. package/esm2022/lib/services/api/index.mjs +101 -0
  202. package/esm2022/lib/services/api/inspection.service.mjs +29 -0
  203. package/esm2022/lib/services/api/intervention-request.service.mjs +17 -0
  204. package/esm2022/lib/services/api/intervention.service.mjs +17 -0
  205. package/esm2022/lib/services/api/knowledge.service.mjs +209 -0
  206. package/esm2022/lib/services/api/license.service.mjs +25 -0
  207. package/esm2022/lib/services/api/location.service.mjs +17 -0
  208. package/esm2022/lib/services/api/log.service.mjs +17 -0
  209. package/esm2022/lib/services/api/login-history.service.mjs +17 -0
  210. package/esm2022/lib/services/api/maintenance-plan.service.mjs +17 -0
  211. package/esm2022/lib/services/api/maintenance-record.service.mjs +17 -0
  212. package/esm2022/lib/services/api/material-consumable.service.mjs +41 -0
  213. package/esm2022/lib/services/api/material-instrument.service.mjs +29 -0
  214. package/esm2022/lib/services/api/material-item.service.mjs +53 -0
  215. package/esm2022/lib/services/api/material-tooling.service.mjs +41 -0
  216. package/esm2022/lib/services/api/measurement-unit.service.mjs +17 -0
  217. package/esm2022/lib/services/api/misc-crud.service.mjs +329 -0
  218. package/esm2022/lib/services/api/note.service.mjs +37 -0
  219. package/esm2022/lib/services/api/outage-resource.service.mjs +28 -0
  220. package/esm2022/lib/services/api/plant-data.service.mjs +31 -0
  221. package/esm2022/lib/services/api/procurement.service.mjs +53 -0
  222. package/esm2022/lib/services/api/project.service.mjs +17 -0
  223. package/esm2022/lib/services/api/property-template.service.mjs +17 -0
  224. package/esm2022/lib/services/api/quality.service.mjs +29 -0
  225. package/esm2022/lib/services/api/recurring-event.service.mjs +17 -0
  226. package/esm2022/lib/services/api/reporting.service.mjs +117 -0
  227. package/esm2022/lib/services/api/reservoir-data.service.mjs +19 -0
  228. package/esm2022/lib/services/api/reservoir.service.mjs +209 -0
  229. package/esm2022/lib/services/api/room.service.mjs +17 -0
  230. package/esm2022/lib/services/api/sandbox.service.mjs +62 -0
  231. package/esm2022/lib/services/api/scheduled-report.service.mjs +17 -0
  232. package/esm2022/lib/services/api/search.service.mjs +77 -0
  233. package/esm2022/lib/services/api/sensor.service.mjs +36 -0
  234. package/esm2022/lib/services/api/sla-policy.service.mjs +17 -0
  235. package/esm2022/lib/services/api/sla.service.mjs +17 -0
  236. package/esm2022/lib/services/api/threshold-alert-rule.service.mjs +17 -0
  237. package/esm2022/lib/services/api/ticket.service.mjs +73 -0
  238. package/esm2022/lib/services/api/time-entry.service.mjs +17 -0
  239. package/esm2022/lib/services/api/todo.service.mjs +17 -0
  240. package/esm2022/lib/services/api/unit.service.mjs +17 -0
  241. package/esm2022/lib/services/api/upload.service.mjs +84 -0
  242. package/esm2022/lib/services/api/user.service.mjs +107 -0
  243. package/esm2022/lib/services/api/warehouse.service.mjs +29 -0
  244. package/esm2022/lib/services/api/warranty.service.mjs +29 -0
  245. package/esm2022/lib/services/api/work-order.service.mjs +28 -0
  246. package/esm2022/lib/services/api/work-permit.service.mjs +17 -0
  247. package/esm2022/lib/services/api/workflow.service.mjs +86 -0
  248. package/esm2022/lib/services/auth/auth.service.mjs +97 -0
  249. package/esm2022/lib/services/auth/index.mjs +5 -0
  250. package/esm2022/lib/services/auth/platform-auth.service.mjs +39 -0
  251. package/esm2022/lib/services/auth/sso-auth.service.mjs +46 -0
  252. package/esm2022/lib/services/auth/totp.service.mjs +34 -0
  253. package/esm2022/lib/services/chat/chat-rest.service.mjs +104 -0
  254. package/esm2022/lib/services/chat/chat-websocket.service.mjs +70 -0
  255. package/esm2022/lib/services/chat/index.mjs +3 -0
  256. package/esm2022/lib/services/index.mjs +8 -0
  257. package/esm2022/lib/services/realtime/index.mjs +2 -0
  258. package/esm2022/lib/services/realtime/realtime-event.service.mjs +187 -0
  259. package/esm2022/lib/services/reservoir/index.mjs +2 -0
  260. package/esm2022/lib/services/reservoir/reservoir-websocket.service.mjs +105 -0
  261. package/esm2022/lib/services/video/index.mjs +3 -0
  262. package/esm2022/lib/services/video/video-call-rest.service.mjs +42 -0
  263. package/esm2022/lib/services/video/video-call-websocket.service.mjs +55 -0
  264. package/esm2022/lib/tgm-sdk.config.mjs +32 -0
  265. package/esm2022/lib/tgm-sdk.module.mjs +38 -0
  266. package/esm2022/public-api.mjs +52 -0
  267. package/fesm2022/en-solutions-tgm-client-sdk.mjs +11029 -0
  268. package/fesm2022/en-solutions-tgm-client-sdk.mjs.map +1 -0
  269. package/index.d.ts +5 -0
  270. package/lib/components/database-manager/database-manager/database-manager.component.d.ts +70 -0
  271. package/lib/components/database-manager/database-manager.module.d.ts +15 -0
  272. package/lib/components/database-manager/object-browser/object-browser.component.d.ts +35 -0
  273. package/lib/components/database-manager/query-editor/query-editor.component.d.ts +31 -0
  274. package/lib/components/database-manager/query-toolbar/query-toolbar.component.d.ts +23 -0
  275. package/lib/components/database-manager/record-detail/record-detail.component.d.ts +35 -0
  276. package/lib/components/database-manager/registry/entity-registry.d.ts +16 -0
  277. package/lib/components/database-manager/results-grid/results-grid.component.d.ts +62 -0
  278. package/lib/components/database-manager/services/entity-schema.service.d.ts +37 -0
  279. package/lib/components/database-manager/services/query-executor.service.d.ts +57 -0
  280. package/lib/components/database-manager/table-data-viewer/table-data-viewer.component.d.ts +54 -0
  281. package/lib/components/database-manager/table-structure/table-structure.component.d.ts +16 -0
  282. package/lib/components/database-manager/types/database-manager.types.d.ts +71 -0
  283. package/lib/components/reporting/export-button/export-button.component.d.ts +50 -0
  284. package/lib/components/reporting/generated-report-list/generated-report-list.component.d.ts +93 -0
  285. package/lib/components/reporting/report-definition-form/report-definition-form.component.d.ts +65 -0
  286. package/lib/components/reporting/report-definition-list/report-definition-list.component.d.ts +90 -0
  287. package/lib/components/reporting/report-generate-dialog/report-generate-dialog.component.d.ts +46 -0
  288. package/lib/components/reporting/report-stats/report-stats.component.d.ts +47 -0
  289. package/lib/components/reporting/report-template-list/report-template-list.component.d.ts +39 -0
  290. package/lib/components/reporting/reporting.module.d.ts +14 -0
  291. package/lib/components/video-call/incoming-call/incoming-call.component.d.ts +20 -0
  292. package/lib/components/video-call/services/livekit-room.service.d.ts +28 -0
  293. package/lib/components/video-call/services/video-call-signaling.service.d.ts +21 -0
  294. package/lib/components/video-call/services/video-call-state.service.d.ts +25 -0
  295. package/lib/components/video-call/types/video-call.types.d.ts +49 -0
  296. package/lib/components/video-call/video-call.module.d.ts +11 -0
  297. package/lib/components/video-call/video-controls/video-controls.component.d.ts +13 -0
  298. package/lib/components/video-call/video-participant/video-participant.component.d.ts +17 -0
  299. package/lib/components/video-call/video-room/video-room.component.d.ts +30 -0
  300. package/lib/core/auth-interceptor.d.ts +13 -0
  301. package/lib/core/client-interceptor.d.ts +14 -0
  302. package/lib/core/error-handler.d.ts +13 -0
  303. package/lib/core/http-client.service.d.ts +61 -0
  304. package/lib/core/websocket.service.d.ts +37 -0
  305. package/lib/models/admin/audit.models.d.ts +73 -0
  306. package/lib/models/admin/backup.models.d.ts +101 -0
  307. package/lib/models/admin/client.models.d.ts +99 -0
  308. package/lib/models/admin/email-provider.models.d.ts +56 -0
  309. package/lib/models/admin/erp.models.d.ts +188 -0
  310. package/lib/models/admin/identity-provider.models.d.ts +1 -0
  311. package/lib/models/admin/index.d.ts +13 -0
  312. package/lib/models/admin/messaging-provider.models.d.ts +49 -0
  313. package/lib/models/admin/platform-admin.models.d.ts +33 -0
  314. package/lib/models/admin/queue.models.d.ts +54 -0
  315. package/lib/models/admin/role.models.d.ts +50 -0
  316. package/lib/models/admin/sandbox.models.d.ts +54 -0
  317. package/lib/models/admin/ticket.models.d.ts +48 -0
  318. package/lib/models/admin/webhook.models.d.ts +65 -0
  319. package/lib/models/api/ai.models.d.ts +75 -0
  320. package/lib/models/api/aip.models.d.ts +545 -0
  321. package/lib/models/api/cat.models.d.ts +260 -0
  322. package/lib/models/api/company.models.d.ts +125 -0
  323. package/lib/models/api/compliance.models.d.ts +74 -0
  324. package/lib/models/api/component.models.d.ts +294 -0
  325. package/lib/models/api/cortex-edge.models.d.ts +14 -0
  326. package/lib/models/api/cortex-event.models.d.ts +12 -0
  327. package/lib/models/api/cortex-insight.models.d.ts +25 -0
  328. package/lib/models/api/cortex-node.models.d.ts +10 -0
  329. package/lib/models/api/custom-field.models.d.ts +37 -0
  330. package/lib/models/api/deferral.models.d.ts +81 -0
  331. package/lib/models/api/diagnostic-report.models.d.ts +29 -0
  332. package/lib/models/api/document.models.d.ts +95 -0
  333. package/lib/models/api/energy.models.d.ts +210 -0
  334. package/lib/models/api/failure.models.d.ts +171 -0
  335. package/lib/models/api/fleet.models.d.ts +193 -0
  336. package/lib/models/api/inspection.models.d.ts +110 -0
  337. package/lib/models/api/intervention.models.d.ts +254 -0
  338. package/lib/models/api/iot.models.d.ts +15 -0
  339. package/lib/models/api/knowledge.models.d.ts +340 -0
  340. package/lib/models/api/loto.models.d.ts +51 -0
  341. package/lib/models/api/maintenance-record.models.d.ts +100 -0
  342. package/lib/models/api/maintenance.models.d.ts +188 -0
  343. package/lib/models/api/material.models.d.ts +261 -0
  344. package/lib/models/api/media.models.d.ts +106 -0
  345. package/lib/models/api/misc.models.d.ts +929 -0
  346. package/lib/models/api/project.models.d.ts +118 -0
  347. package/lib/models/api/quality.models.d.ts +153 -0
  348. package/lib/models/api/reporting.models.d.ts +76 -0
  349. package/lib/models/api/reservoir-websocket.models.d.ts +48 -0
  350. package/lib/models/api/reservoir.models.d.ts +274 -0
  351. package/lib/models/api/search.models.d.ts +30 -0
  352. package/lib/models/api/sensor.models.d.ts +117 -0
  353. package/lib/models/api/unit.models.d.ts +82 -0
  354. package/lib/models/api/user.models.d.ts +253 -0
  355. package/lib/models/api/warranty.models.d.ts +51 -0
  356. package/lib/models/api/work-permit.models.d.ts +70 -0
  357. package/lib/models/api/workflow.models.d.ts +52 -0
  358. package/lib/models/auth/index.d.ts +3 -0
  359. package/lib/models/auth/login.models.d.ts +134 -0
  360. package/lib/models/auth/sso.models.d.ts +136 -0
  361. package/lib/models/auth/totp.models.d.ts +19 -0
  362. package/lib/models/base.models.d.ts +90 -0
  363. package/lib/models/chat/chat.models.d.ts +171 -0
  364. package/lib/models/enums/cat.enums.d.ts +114 -0
  365. package/lib/models/enums/energy.enums.d.ts +50 -0
  366. package/lib/models/enums/erp.enums.d.ts +49 -0
  367. package/lib/models/enums/index.d.ts +14 -0
  368. package/lib/models/enums/inspection.enums.d.ts +61 -0
  369. package/lib/models/enums/loto.enums.d.ts +41 -0
  370. package/lib/models/enums/misc.enums.d.ts +151 -0
  371. package/lib/models/enums/quality.enums.d.ts +25 -0
  372. package/lib/models/enums/reservoir.enums.d.ts +80 -0
  373. package/lib/models/enums/sso.enums.d.ts +15 -0
  374. package/lib/models/enums/status.enums.d.ts +296 -0
  375. package/lib/models/enums/time.enums.d.ts +51 -0
  376. package/lib/models/enums/type.enums.d.ts +324 -0
  377. package/lib/models/enums/user.enums.d.ts +31 -0
  378. package/lib/models/enums/work-permit.enums.d.ts +56 -0
  379. package/lib/models/index.d.ts +41 -0
  380. package/lib/models/realtime/realtime-event.models.d.ts +95 -0
  381. package/lib/models/video/video-call.models.d.ts +65 -0
  382. package/lib/services/admin/activity-log.service.d.ts +13 -0
  383. package/lib/services/admin/announcement.service.d.ts +17 -0
  384. package/lib/services/admin/article-admin.service.d.ts +17 -0
  385. package/lib/services/admin/audit-log.service.d.ts +22 -0
  386. package/lib/services/admin/backup.service.d.ts +15 -0
  387. package/lib/services/admin/cache-admin.service.d.ts +26 -0
  388. package/lib/services/admin/client-admin.service.d.ts +38 -0
  389. package/lib/services/admin/client-api-key.service.d.ts +15 -0
  390. package/lib/services/admin/client-ocr.service.d.ts +14 -0
  391. package/lib/services/admin/client-usage.service.d.ts +15 -0
  392. package/lib/services/admin/data-export.service.d.ts +10 -0
  393. package/lib/services/admin/document-admin.service.d.ts +18 -0
  394. package/lib/services/admin/email-admin.service.d.ts +14 -0
  395. package/lib/services/admin/email-provider.service.d.ts +25 -0
  396. package/lib/services/admin/erp-admin.service.d.ts +41 -0
  397. package/lib/services/admin/identity-provider.service.d.ts +21 -0
  398. package/lib/services/admin/impersonation.service.d.ts +11 -0
  399. package/lib/services/admin/index.d.ts +30 -0
  400. package/lib/services/admin/messaging-provider.service.d.ts +24 -0
  401. package/lib/services/admin/notification.service.d.ts +15 -0
  402. package/lib/services/admin/platform-admin.service.d.ts +17 -0
  403. package/lib/services/admin/platform-webhook.service.d.ts +16 -0
  404. package/lib/services/admin/queue-admin.service.d.ts +24 -0
  405. package/lib/services/admin/role-admin.service.d.ts +37 -0
  406. package/lib/services/admin/sandbox-admin.service.d.ts +17 -0
  407. package/lib/services/admin/scheduler-admin.service.d.ts +61 -0
  408. package/lib/services/admin/subscription.service.d.ts +15 -0
  409. package/lib/services/admin/system-health.service.d.ts +11 -0
  410. package/lib/services/admin/user-admin.service.d.ts +27 -0
  411. package/lib/services/admin/user-permission.service.d.ts +18 -0
  412. package/lib/services/admin/webhook-admin.service.d.ts +26 -0
  413. package/lib/services/api/agent.service.d.ts +16 -0
  414. package/lib/services/api/ai-feedback.service.d.ts +9 -0
  415. package/lib/services/api/ai.service.d.ts +36 -0
  416. package/lib/services/api/aip-analysis.service.d.ts +13 -0
  417. package/lib/services/api/aip-financial.service.d.ts +16 -0
  418. package/lib/services/api/aip-geographic.service.d.ts +16 -0
  419. package/lib/services/api/aip-network.service.d.ts +16 -0
  420. package/lib/services/api/aip-performance.service.d.ts +16 -0
  421. package/lib/services/api/aip-resource.service.d.ts +14 -0
  422. package/lib/services/api/aip-workflow.service.d.ts +24 -0
  423. package/lib/services/api/aip.service.d.ts +73 -0
  424. package/lib/services/api/alert.service.d.ts +15 -0
  425. package/lib/services/api/anomaly-detection.service.d.ts +26 -0
  426. package/lib/services/api/asset-lifecycle.service.d.ts +29 -0
  427. package/lib/services/api/audit-entry.service.d.ts +13 -0
  428. package/lib/services/api/base-crud.service.d.ts +18 -0
  429. package/lib/services/api/bid.service.d.ts +10 -0
  430. package/lib/services/api/budget.service.d.ts +10 -0
  431. package/lib/services/api/bulk-operation.service.d.ts +26 -0
  432. package/lib/services/api/capex-project.service.d.ts +10 -0
  433. package/lib/services/api/cat.service.d.ts +40 -0
  434. package/lib/services/api/client-article.service.d.ts +14 -0
  435. package/lib/services/api/community.service.d.ts +21 -0
  436. package/lib/services/api/company-material-type.service.d.ts +10 -0
  437. package/lib/services/api/company-material.service.d.ts +9 -0
  438. package/lib/services/api/company.service.d.ts +15 -0
  439. package/lib/services/api/compliance.service.d.ts +35 -0
  440. package/lib/services/api/component-info.service.d.ts +10 -0
  441. package/lib/services/api/component-location.service.d.ts +10 -0
  442. package/lib/services/api/component.service.d.ts +32 -0
  443. package/lib/services/api/cortex-event.service.d.ts +10 -0
  444. package/lib/services/api/cortex-insight.service.d.ts +14 -0
  445. package/lib/services/api/cortex-node.service.d.ts +10 -0
  446. package/lib/services/api/cortex.service.d.ts +15 -0
  447. package/lib/services/api/custom-field.service.d.ts +33 -0
  448. package/lib/services/api/custom.service.d.ts +23 -0
  449. package/lib/services/api/dashboard.service.d.ts +18 -0
  450. package/lib/services/api/deferral.service.d.ts +29 -0
  451. package/lib/services/api/department.service.d.ts +9 -0
  452. package/lib/services/api/device-gateway.service.d.ts +16 -0
  453. package/lib/services/api/diagnostic-report.service.d.ts +14 -0
  454. package/lib/services/api/digital-twin.service.d.ts +29 -0
  455. package/lib/services/api/document.service.d.ts +28 -0
  456. package/lib/services/api/dynamic-crud.service.d.ts +41 -0
  457. package/lib/services/api/energy-analytics.service.d.ts +16 -0
  458. package/lib/services/api/energy-production.service.d.ts +10 -0
  459. package/lib/services/api/energy.service.d.ts +46 -0
  460. package/lib/services/api/entity-comment.service.d.ts +16 -0
  461. package/lib/services/api/event.service.d.ts +10 -0
  462. package/lib/services/api/export.service.d.ts +48 -0
  463. package/lib/services/api/extension.service.d.ts +24 -0
  464. package/lib/services/api/failure.service.d.ts +28 -0
  465. package/lib/services/api/fleet.service.d.ts +71 -0
  466. package/lib/services/api/inactive-component.service.d.ts +10 -0
  467. package/lib/services/api/index.d.ts +101 -0
  468. package/lib/services/api/inspection.service.d.ts +16 -0
  469. package/lib/services/api/intervention-request.service.d.ts +10 -0
  470. package/lib/services/api/intervention.service.d.ts +10 -0
  471. package/lib/services/api/knowledge.service.d.ts +106 -0
  472. package/lib/services/api/license.service.d.ts +14 -0
  473. package/lib/services/api/location.service.d.ts +9 -0
  474. package/lib/services/api/log.service.d.ts +9 -0
  475. package/lib/services/api/login-history.service.d.ts +10 -0
  476. package/lib/services/api/maintenance-plan.service.d.ts +10 -0
  477. package/lib/services/api/maintenance-record.service.d.ts +10 -0
  478. package/lib/services/api/material-consumable.service.d.ts +22 -0
  479. package/lib/services/api/material-instrument.service.d.ts +16 -0
  480. package/lib/services/api/material-item.service.d.ts +28 -0
  481. package/lib/services/api/material-tooling.service.d.ts +22 -0
  482. package/lib/services/api/measurement-unit.service.d.ts +10 -0
  483. package/lib/services/api/misc-crud.service.d.ts +167 -0
  484. package/lib/services/api/note.service.d.ts +14 -0
  485. package/lib/services/api/outage-resource.service.d.ts +15 -0
  486. package/lib/services/api/plant-data.service.d.ts +14 -0
  487. package/lib/services/api/procurement.service.d.ts +27 -0
  488. package/lib/services/api/project.service.d.ts +10 -0
  489. package/lib/services/api/property-template.service.d.ts +10 -0
  490. package/lib/services/api/quality.service.d.ts +16 -0
  491. package/lib/services/api/recurring-event.service.d.ts +10 -0
  492. package/lib/services/api/reporting.service.d.ts +38 -0
  493. package/lib/services/api/reservoir-data.service.d.ts +10 -0
  494. package/lib/services/api/reservoir.service.d.ts +109 -0
  495. package/lib/services/api/room.service.d.ts +10 -0
  496. package/lib/services/api/sandbox.service.d.ts +26 -0
  497. package/lib/services/api/scheduled-report.service.d.ts +10 -0
  498. package/lib/services/api/search.service.d.ts +54 -0
  499. package/lib/services/api/sensor.service.d.ts +17 -0
  500. package/lib/services/api/sla-policy.service.d.ts +10 -0
  501. package/lib/services/api/sla.service.d.ts +10 -0
  502. package/lib/services/api/threshold-alert-rule.service.d.ts +10 -0
  503. package/lib/services/api/ticket.service.d.ts +60 -0
  504. package/lib/services/api/time-entry.service.d.ts +10 -0
  505. package/lib/services/api/todo.service.d.ts +10 -0
  506. package/lib/services/api/unit.service.d.ts +10 -0
  507. package/lib/services/api/upload.service.d.ts +50 -0
  508. package/lib/services/api/user.service.d.ts +59 -0
  509. package/lib/services/api/warehouse.service.d.ts +15 -0
  510. package/lib/services/api/warranty.service.d.ts +16 -0
  511. package/lib/services/api/work-order.service.d.ts +17 -0
  512. package/lib/services/api/work-permit.service.d.ts +10 -0
  513. package/lib/services/api/workflow.service.d.ts +33 -0
  514. package/lib/services/auth/auth.service.d.ts +33 -0
  515. package/lib/services/auth/index.d.ts +4 -0
  516. package/lib/services/auth/platform-auth.service.d.ts +16 -0
  517. package/lib/services/auth/sso-auth.service.d.ts +21 -0
  518. package/lib/services/auth/totp.service.d.ts +18 -0
  519. package/lib/services/chat/chat-rest.service.d.ts +40 -0
  520. package/lib/services/chat/chat-websocket.service.d.ts +34 -0
  521. package/lib/services/chat/index.d.ts +2 -0
  522. package/lib/services/index.d.ts +7 -0
  523. package/lib/services/realtime/index.d.ts +1 -0
  524. package/lib/services/realtime/realtime-event.service.d.ts +137 -0
  525. package/lib/services/reservoir/index.d.ts +1 -0
  526. package/lib/services/reservoir/reservoir-websocket.service.d.ts +47 -0
  527. package/lib/services/video/index.d.ts +2 -0
  528. package/lib/services/video/video-call-rest.service.d.ts +19 -0
  529. package/lib/services/video/video-call-websocket.service.d.ts +31 -0
  530. package/lib/tgm-sdk.config.d.ts +36 -0
  531. package/lib/tgm-sdk.module.d.ts +13 -0
  532. package/package.json +40 -0
  533. package/public-api.d.ts +42 -0
@@ -0,0 +1,33 @@
1
+ import { Injectable, Inject } from '@angular/core';
2
+ import { TGM_SDK_CONFIG, InMemoryTokenStorage } from '../tgm-sdk.config';
3
+ import * as i0 from "@angular/core";
4
+ export class AuthInterceptor {
5
+ config;
6
+ tokenStorage;
7
+ constructor(config) {
8
+ this.config = config;
9
+ this.tokenStorage = config.tokenStorage ?? new InMemoryTokenStorage();
10
+ }
11
+ intercept(req, next) {
12
+ const token = this.tokenStorage.getToken();
13
+ if (token && this.shouldAddToken(req)) {
14
+ req = req.clone({
15
+ setHeaders: { Authorization: `Bearer ${token}` },
16
+ });
17
+ }
18
+ return next.handle(req);
19
+ }
20
+ shouldAddToken(req) {
21
+ const baseUrl = this.config.baseUrl.replace(/\/+$/, '');
22
+ return req.url.startsWith(baseUrl);
23
+ }
24
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthInterceptor, deps: [{ token: TGM_SDK_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
25
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthInterceptor });
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthInterceptor, decorators: [{
28
+ type: Injectable
29
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
30
+ type: Inject,
31
+ args: [TGM_SDK_CONFIG]
32
+ }] }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9hdXRoLWludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSxjQUFjLEVBQWdCLG9CQUFvQixFQUF3QixNQUFNLG1CQUFtQixDQUFDOztBQUc3RyxNQUFNLE9BQU8sZUFBZTtJQUdrQjtJQUZwQyxZQUFZLENBQXVCO0lBRTNDLFlBQTRDLE1BQW9CO1FBQXBCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDOUQsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksb0JBQW9CLEVBQUUsQ0FBQztJQUN4RSxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQXFCLEVBQUUsSUFBaUI7UUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ2QsVUFBVSxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsS0FBSyxFQUFFLEVBQUU7YUFDakQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQXFCO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEQsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyQyxDQUFDO3dHQXBCVSxlQUFlLGtCQUdOLGNBQWM7NEdBSHZCLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVU7OzBCQUlJLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCwgSHR0cEhhbmRsZXIsIEh0dHBFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRHTV9TREtfQ09ORklHLCBUZ21TZGtDb25maWcsIEluTWVtb3J5VG9rZW5TdG9yYWdlLCBUb2tlblN0b3JhZ2VTdHJhdGVneSB9IGZyb20gJy4uL3RnbS1zZGsuY29uZmlnJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG4gIHByaXZhdGUgdG9rZW5TdG9yYWdlOiBUb2tlblN0b3JhZ2VTdHJhdGVneTtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFRHTV9TREtfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVGdtU2RrQ29uZmlnKSB7XG4gICAgdGhpcy50b2tlblN0b3JhZ2UgPSBjb25maWcudG9rZW5TdG9yYWdlID8/IG5ldyBJbk1lbW9yeVRva2VuU3RvcmFnZSgpO1xuICB9XG5cbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnRva2VuU3RvcmFnZS5nZXRUb2tlbigpO1xuICAgIGlmICh0b2tlbiAmJiB0aGlzLnNob3VsZEFkZFRva2VuKHJlcSkpIHtcbiAgICAgIHJlcSA9IHJlcS5jbG9uZSh7XG4gICAgICAgIHNldEhlYWRlcnM6IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkQWRkVG9rZW4ocmVxOiBIdHRwUmVxdWVzdDxhbnk+KTogYm9vbGVhbiB7XG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuY29uZmlnLmJhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gICAgcmV0dXJuIHJlcS51cmwuc3RhcnRzV2l0aChiYXNlVXJsKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,34 @@
1
+ import { Injectable, Inject } from '@angular/core';
2
+ import { TGM_SDK_CONFIG } from '../tgm-sdk.config';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "./http-client.service";
5
+ export class ClientInterceptor {
6
+ config;
7
+ httpClient;
8
+ constructor(config, httpClient) {
9
+ this.config = config;
10
+ this.httpClient = httpClient;
11
+ }
12
+ intercept(req, next) {
13
+ const clientId = this.httpClient.getClientId();
14
+ if (clientId && this.shouldAddClientId(req)) {
15
+ req = req.clone({
16
+ setHeaders: { 'X-Client-ID': clientId },
17
+ });
18
+ }
19
+ return next.handle(req);
20
+ }
21
+ shouldAddClientId(req) {
22
+ const baseUrl = this.config.baseUrl.replace(/\/+$/, '');
23
+ return req.url.startsWith(baseUrl);
24
+ }
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ClientInterceptor, deps: [{ token: TGM_SDK_CONFIG }, { token: i1.TgmHttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
26
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ClientInterceptor });
27
+ }
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ClientInterceptor, decorators: [{
29
+ type: Injectable
30
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
31
+ type: Inject,
32
+ args: [TGM_SDK_CONFIG]
33
+ }] }, { type: i1.TgmHttpClient }] });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LWludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL2NsaWVudC1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLG1CQUFtQixDQUFDOzs7QUFJakUsTUFBTSxPQUFPLGlCQUFpQjtJQUVNO0lBQ3hCO0lBRlYsWUFDa0MsTUFBb0IsRUFDNUMsVUFBeUI7UUFERCxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQzVDLGVBQVUsR0FBVixVQUFVLENBQWU7SUFDaEMsQ0FBQztJQUVKLFNBQVMsQ0FBQyxHQUFxQixFQUFFLElBQWlCO1FBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ2QsVUFBVSxFQUFFLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRTthQUN4QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxHQUFxQjtRQUM3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQzt3R0FuQlUsaUJBQWlCLGtCQUVsQixjQUFjOzRHQUZiLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTs7MEJBR04sTUFBTTsyQkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwSGFuZGxlciwgSHR0cEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVEdNX1NES19DT05GSUcsIFRnbVNka0NvbmZpZyB9IGZyb20gJy4uL3RnbS1zZGsuY29uZmlnJztcbmltcG9ydCB7IFRnbUh0dHBDbGllbnQgfSBmcm9tICcuL2h0dHAtY2xpZW50LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2xpZW50SW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFRHTV9TREtfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogVGdtU2RrQ29uZmlnLFxuICAgIHByaXZhdGUgaHR0cENsaWVudDogVGdtSHR0cENsaWVudFxuICApIHt9XG5cbiAgaW50ZXJjZXB0KHJlcTogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XG4gICAgY29uc3QgY2xpZW50SWQgPSB0aGlzLmh0dHBDbGllbnQuZ2V0Q2xpZW50SWQoKTtcbiAgICBpZiAoY2xpZW50SWQgJiYgdGhpcy5zaG91bGRBZGRDbGllbnRJZChyZXEpKSB7XG4gICAgICByZXEgPSByZXEuY2xvbmUoe1xuICAgICAgICBzZXRIZWFkZXJzOiB7ICdYLUNsaWVudC1JRCc6IGNsaWVudElkIH0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcSk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZEFkZENsaWVudElkKHJlcTogSHR0cFJlcXVlc3Q8YW55Pik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZy5iYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICAgIHJldHVybiByZXEudXJsLnN0YXJ0c1dpdGgoYmFzZVVybCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,32 @@
1
+ export class TgmApiError extends Error {
2
+ status;
3
+ error;
4
+ originalError;
5
+ constructor(status, message, error, originalError) {
6
+ super(message);
7
+ this.status = status;
8
+ this.error = error;
9
+ this.originalError = originalError;
10
+ this.name = 'TgmApiError';
11
+ }
12
+ get isUnauthorized() {
13
+ return this.status === 401;
14
+ }
15
+ get isForbidden() {
16
+ return this.status === 403;
17
+ }
18
+ get isNotFound() {
19
+ return this.status === 404;
20
+ }
21
+ get isValidationError() {
22
+ return this.status === 400 || this.status === 422;
23
+ }
24
+ get isServerError() {
25
+ return this.status >= 500;
26
+ }
27
+ }
28
+ export function mapHttpError(error) {
29
+ const message = error.error?.message ?? error.message ?? 'An unknown error occurred';
30
+ return new TgmApiError(error.status, message, error.error, error);
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9lcnJvci1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxXQUFZLFNBQVEsS0FBSztJQUVsQjtJQUVBO0lBQ0E7SUFKbEIsWUFDa0IsTUFBYyxFQUM5QixPQUFlLEVBQ0MsS0FBVyxFQUNYLGFBQWlDO1FBRWpELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUxDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFFZCxVQUFLLEdBQUwsS0FBSyxDQUFNO1FBQ1gsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBR2pELElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQXdCO0lBQ25ELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksMkJBQTJCLENBQUM7SUFDckYsT0FBTyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuZXhwb3J0IGNsYXNzIFRnbUFwaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXIsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBlcnJvcj86IGFueSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3JpZ2luYWxFcnJvcj86IEh0dHBFcnJvclJlc3BvbnNlXG4gICkge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdUZ21BcGlFcnJvcic7XG4gIH1cblxuICBnZXQgaXNVbmF1dGhvcml6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSA0MDE7XG4gIH1cblxuICBnZXQgaXNGb3JiaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSA0MDM7XG4gIH1cblxuICBnZXQgaXNOb3RGb3VuZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IDQwNDtcbiAgfVxuXG4gIGdldCBpc1ZhbGlkYXRpb25FcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IDQwMCB8fCB0aGlzLnN0YXR1cyA9PT0gNDIyO1xuICB9XG5cbiAgZ2V0IGlzU2VydmVyRXJyb3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID49IDUwMDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwSHR0cEVycm9yKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSk6IFRnbUFwaUVycm9yIHtcbiAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmVycm9yPy5tZXNzYWdlID8/IGVycm9yLm1lc3NhZ2UgPz8gJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnO1xuICByZXR1cm4gbmV3IFRnbUFwaUVycm9yKGVycm9yLnN0YXR1cywgbWVzc2FnZSwgZXJyb3IuZXJyb3IsIGVycm9yKTtcbn1cbiJdfQ==
@@ -0,0 +1,254 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { throwError, BehaviorSubject, Subject, take, switchMap, catchError } from 'rxjs';
3
+ import { InMemoryTokenStorage } from '../tgm-sdk.config';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common/http";
6
+ /**
7
+ * Core HTTP client for the TGM SDK.
8
+ * NOT providedIn root — must be provided by the consuming application
9
+ * via useFactory to avoid cross-bundle token mismatch in production builds.
10
+ */
11
+ export class TgmHttpClient {
12
+ http;
13
+ baseUrl = '';
14
+ tokenStorage = new InMemoryTokenStorage();
15
+ clientId$ = new BehaviorSubject(undefined);
16
+ isRefreshing = false;
17
+ refreshTokenSubject = new Subject();
18
+ config;
19
+ constructor(http, config) {
20
+ this.http = http;
21
+ this.config = config ?? { baseUrl: '', tokenStorage: new InMemoryTokenStorage(), autoRefresh: false };
22
+ if (config) {
23
+ this.baseUrl = (config.baseUrl || '').replace(/\/+$/, '');
24
+ this.tokenStorage = config.tokenStorage ?? new InMemoryTokenStorage();
25
+ if (config.clientId) {
26
+ this.clientId$.next(config.clientId);
27
+ }
28
+ }
29
+ }
30
+ // --- Token management ---
31
+ getToken() {
32
+ return this.tokenStorage.getToken();
33
+ }
34
+ setToken(token) {
35
+ this.tokenStorage.setToken(token);
36
+ }
37
+ removeToken() {
38
+ this.tokenStorage.removeToken();
39
+ }
40
+ getRefreshToken() {
41
+ return this.tokenStorage.getRefreshToken();
42
+ }
43
+ setRefreshToken(token) {
44
+ this.tokenStorage.setRefreshToken(token);
45
+ }
46
+ removeRefreshToken() {
47
+ this.tokenStorage.removeRefreshToken();
48
+ }
49
+ clearTokens() {
50
+ this.tokenStorage.removeToken();
51
+ this.tokenStorage.removeRefreshToken();
52
+ }
53
+ // --- Client ID management ---
54
+ setClientId(clientId) {
55
+ this.clientId$.next(clientId);
56
+ }
57
+ getClientId() {
58
+ return this.clientId$.value;
59
+ }
60
+ // --- HTTP Methods ---
61
+ get(path, options) {
62
+ return this.request('GET', path, undefined, options);
63
+ }
64
+ post(path, body, options) {
65
+ return this.request('POST', path, body, options);
66
+ }
67
+ put(path, body, options) {
68
+ return this.request('PUT', path, body, options);
69
+ }
70
+ patch(path, body, options) {
71
+ return this.request('PATCH', path, body, options);
72
+ }
73
+ delete(path, options) {
74
+ return this.request('DELETE', path, undefined, options);
75
+ }
76
+ upload(path, formData, options) {
77
+ return this.request('POST', path, formData, { ...options, headers: { ...(options?.headers || {}) } });
78
+ }
79
+ download(path, options) {
80
+ return this.request('GET', path, undefined, { ...options, responseType: 'blob' });
81
+ }
82
+ // --- Internal ---
83
+ request(method, path, body, options) {
84
+ const url = `${this.baseUrl}${path}`;
85
+ // Use plain objects for headers and params to avoid cross-bundle class mismatch
86
+ // (SDK's HttpHeaders/HttpParams class !== app's HttpHeaders/HttpParams class in prod builds)
87
+ const headerMap = {};
88
+ // Auth header
89
+ if (!options?.skipAuth) {
90
+ const token = this.tokenStorage.getToken();
91
+ if (token) {
92
+ headerMap['Authorization'] = `Bearer ${token}`;
93
+ }
94
+ }
95
+ // Client ID header
96
+ if (!options?.skipClientId) {
97
+ const clientId = this.clientId$.value;
98
+ if (clientId) {
99
+ headerMap['X-Client-ID'] = clientId;
100
+ }
101
+ }
102
+ // Custom headers
103
+ if (options?.headers) {
104
+ for (const [key, value] of Object.entries(options.headers)) {
105
+ headerMap[key] = value;
106
+ }
107
+ }
108
+ // Query params — flatten nested objects/arrays for backend compatibility
109
+ const paramMap = {};
110
+ if (options?.params) {
111
+ const flatParams = this.flattenParams(options.params);
112
+ for (const [key, value] of Object.entries(flatParams)) {
113
+ if (value !== undefined && value !== null) {
114
+ paramMap[key] = String(value);
115
+ }
116
+ }
117
+ }
118
+ const responseType = (options?.responseType ?? 'json');
119
+ const httpOptions = { headers: headerMap, params: paramMap, body, responseType };
120
+ return this.http.request(method, url, httpOptions).pipe(catchError((error) => {
121
+ if (error.status === 401 && !options?.skipAuth && this.config.autoRefresh !== false) {
122
+ return this.handle401(method, path, body, options);
123
+ }
124
+ return throwError(() => this.mapError(error));
125
+ }));
126
+ }
127
+ handle401(method, path, body, options) {
128
+ if (this.isRefreshing) {
129
+ return this.refreshTokenSubject.pipe(take(1), switchMap(() => this.request(method, path, body, { ...options, skipAuth: false })));
130
+ }
131
+ this.isRefreshing = true;
132
+ const refreshToken = this.tokenStorage.getRefreshToken();
133
+ if (!refreshToken) {
134
+ this.isRefreshing = false;
135
+ return throwError(() => ({ status: 401, message: 'No refresh token available' }));
136
+ }
137
+ return this.http.post(`${this.baseUrl}/auth/refresh-token`, null, {
138
+ params: { refreshToken }
139
+ }).pipe(switchMap((response) => {
140
+ this.isRefreshing = false;
141
+ const tokenKey = this.config.tokenKey ?? 'jwt';
142
+ const refreshKey = this.config.refreshTokenKey ?? 'refreshToken';
143
+ const newToken = response[tokenKey] ?? response.data?.[tokenKey];
144
+ const newRefresh = response[refreshKey] ?? response.data?.[refreshKey];
145
+ if (newToken) {
146
+ this.tokenStorage.setToken(newToken);
147
+ }
148
+ if (newRefresh) {
149
+ this.tokenStorage.setRefreshToken(newRefresh);
150
+ }
151
+ this.refreshTokenSubject.next(newToken);
152
+ return this.request(method, path, body, options);
153
+ }), catchError((err) => {
154
+ this.isRefreshing = false;
155
+ this.clearTokens();
156
+ return throwError(() => this.mapError(err));
157
+ }));
158
+ }
159
+ /**
160
+ * Flattens nested param objects into flat key-value pairs.
161
+ * - `{ filters: { status: 'active' } }` → `{ status: 'active' }`
162
+ * - `{ populate: ['a', 'b'] }` → `{ populate: 'a,b' }`
163
+ * - `{ pagination: { page: 1, pageSize: 25 } }` → `{ page: 1, pageSize: 25 }`
164
+ */
165
+ flattenParams(params) {
166
+ // Map Strapi pagination params to backend params
167
+ // Note: 'start' (offset) is converted to page number using limit as page size
168
+ const paramKeyMap = {
169
+ 'limit': 'pageSize',
170
+ 'page': 'page', 'pageSize': 'pageSize',
171
+ };
172
+ const result = {};
173
+ for (const [key, value] of Object.entries(params)) {
174
+ if (value === undefined || value === null)
175
+ continue;
176
+ if (Array.isArray(value)) {
177
+ result[key] = value.join(',');
178
+ }
179
+ else if (typeof value === 'object' && !(value instanceof Date)) {
180
+ // Flatten nested objects: merge their keys directly
181
+ for (const [nestedKey, nestedValue] of Object.entries(value)) {
182
+ if (nestedValue !== undefined && nestedValue !== null) {
183
+ if (typeof nestedValue === 'object' && !Array.isArray(nestedValue)) {
184
+ // Two levels deep: map Strapi operators to backend suffix operators
185
+ // e.g., { unit: { $eq: 5 } } → unit=5, { unit: { $notNull: true } } → unit_isnull=false
186
+ const strapiToBackend = {
187
+ '$eq': '', '$ne': '_ne', '$contains': '_contains',
188
+ '$startsWith': '_startsWith', '$endsWith': '_endsWith',
189
+ '$gt': '_gt', '$gte': '_gte', '$lt': '_lt', '$lte': '_lte',
190
+ '$in': '_in', '$notIn': '_notIn', '$null': '_isnull',
191
+ '$notNull': '_isnull', '$eqOrNull': '_eqOrNull',
192
+ };
193
+ for (const [deepKey, deepValue] of Object.entries(nestedValue)) {
194
+ if (deepValue !== undefined && deepValue !== null) {
195
+ if (deepKey.startsWith('$')) {
196
+ // Strapi operator: { $eq: 5 } → field=5, { $contains: 'x' } → field_contains=x
197
+ const suffix = strapiToBackend[deepKey] ?? '_' + deepKey.slice(1);
198
+ const finalValue = deepKey === '$notNull' ? !deepValue : deepValue;
199
+ result[`${nestedKey}${suffix}`] = finalValue;
200
+ }
201
+ else {
202
+ // Relation field: { id: 5 } → field.id=5
203
+ result[`${nestedKey}.${deepKey}`] = deepValue;
204
+ }
205
+ }
206
+ }
207
+ }
208
+ else {
209
+ const mappedKey = paramKeyMap[nestedKey] || nestedKey;
210
+ result[mappedKey] = Array.isArray(nestedValue) ? nestedValue.join(',') : nestedValue;
211
+ }
212
+ }
213
+ }
214
+ }
215
+ else {
216
+ const mappedKey = paramKeyMap[key] || key;
217
+ result[mappedKey] = value;
218
+ }
219
+ }
220
+ // Convert Strapi offset-based 'start' to page number
221
+ // Only convert if 'start' is a pure number (Strapi offset), NOT an ISO date string
222
+ if ('start' in result) {
223
+ const startVal = result['start'];
224
+ const isNumericOffset = typeof startVal === 'number' || /^\d+$/.test(String(startVal));
225
+ if (isNumericOffset) {
226
+ const start = Number(startVal) || 0;
227
+ if ('pageSize' in result) {
228
+ const pageSize = Number(result['pageSize']) || 25;
229
+ result['page'] = Math.floor(start / pageSize);
230
+ }
231
+ else {
232
+ result['page'] = start;
233
+ }
234
+ delete result['start'];
235
+ }
236
+ // If start is an ISO date string (e.g. "2026-01-01T00:00:00"), preserve it as-is
237
+ }
238
+ return result;
239
+ }
240
+ mapError(error) {
241
+ return {
242
+ status: error.status,
243
+ message: error.error?.message ?? error.message ?? 'Unknown error',
244
+ error: error.error,
245
+ originalError: error,
246
+ };
247
+ }
248
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TgmHttpClient, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
249
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TgmHttpClient });
250
+ }
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TgmHttpClient, decorators: [{
252
+ type: Injectable
253
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: undefined }] });
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9odHRwLWNsaWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLFVBQVUsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFVLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdHLE9BQU8sRUFBZ0Isb0JBQW9CLEVBQXdCLE1BQU0sbUJBQW1CLENBQUM7OztBQVc3Rjs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGFBQWE7SUFRSjtJQVBaLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixZQUFZLEdBQXlCLElBQUksb0JBQW9CLEVBQUUsQ0FBQztJQUNoRSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQy9ELFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckIsbUJBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQUM1QyxNQUFNLENBQWU7SUFFN0IsWUFBb0IsSUFBZ0IsRUFBRSxNQUE0QjtRQUE5QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN0RyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1lBQ3RFLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsMkJBQTJCO0lBRTNCLFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsK0JBQStCO0lBRS9CLFdBQVcsQ0FBQyxRQUFnQjtRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELHVCQUF1QjtJQUV2QixHQUFHLENBQUksSUFBWSxFQUFFLE9BQXdCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxDQUFJLElBQVksRUFBRSxJQUFjLEVBQUUsT0FBd0I7UUFDNUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxHQUFHLENBQUksSUFBWSxFQUFFLElBQWMsRUFBRSxPQUF3QjtRQUMzRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUksS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBSSxJQUFZLEVBQUUsSUFBYyxFQUFFLE9BQXdCO1FBQzdELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBSSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsTUFBTSxDQUFJLElBQVksRUFBRSxPQUF3QjtRQUM5QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUksUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELE1BQU0sQ0FBSSxJQUFZLEVBQUUsUUFBa0IsRUFBRSxPQUF3QjtRQUNsRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUksTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVksRUFBRSxPQUF3QjtRQUM3QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQU8sS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsbUJBQW1CO0lBRVgsT0FBTyxDQUFJLE1BQWMsRUFBRSxJQUFZLEVBQUUsSUFBYyxFQUFFLE9BQXdCO1FBQ3ZGLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUVyQyxnRkFBZ0Y7UUFDaEYsNkZBQTZGO1FBQzdGLE1BQU0sU0FBUyxHQUEyQixFQUFFLENBQUM7UUFFN0MsY0FBYztRQUNkLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQyxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxVQUFVLEtBQUssRUFBRSxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDO1FBRUQsbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDdEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixTQUFTLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDO1FBRUQsaUJBQWlCO1FBQ2pCLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQseUVBQXlFO1FBQ3pFLE1BQU0sUUFBUSxHQUEyQixFQUFFLENBQUM7UUFDNUMsSUFBSSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDMUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxJQUFJLE1BQU0sQ0FBVyxDQUFDO1FBRWpFLE1BQU0sV0FBVyxHQUE0QixFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7UUFFMUcsT0FBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBbUIsQ0FBQyxJQUFJLENBQ3hFLFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUN0QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDcEYsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxTQUFTLENBQUksTUFBYyxFQUFFLElBQVksRUFBRSxJQUFjLEVBQUUsT0FBd0I7UUFDekYsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUksTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUN0RixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFekQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLElBQUksQ0FBQyxPQUFPLHFCQUFxQixFQUFFLElBQUksRUFBRTtZQUNyRSxNQUFNLEVBQUUsRUFBRSxZQUFZLEVBQUU7U0FDekIsQ0FBQyxDQUFDLElBQUksQ0FDTCxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7WUFDL0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksY0FBYyxDQUFDO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUV2RSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBSSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSyxhQUFhLENBQUMsTUFBMkI7UUFDL0MsaURBQWlEO1FBQ2pELDhFQUE4RTtRQUM5RSxNQUFNLFdBQVcsR0FBMkI7WUFDMUMsT0FBTyxFQUFFLFVBQVU7WUFDbkIsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVTtTQUN2QyxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2xELElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSTtnQkFBRSxTQUFTO1lBQ3BELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxDQUFDO2lCQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDakUsb0RBQW9EO2dCQUNwRCxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUM3RCxJQUFJLFdBQVcsS0FBSyxTQUFTLElBQUksV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUN0RCxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQzs0QkFDbkUsb0VBQW9FOzRCQUNwRSx3RkFBd0Y7NEJBQ3hGLE1BQU0sZUFBZSxHQUEyQjtnQ0FDOUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXO2dDQUNqRCxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXO2dDQUN0RCxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTTtnQ0FDMUQsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTO2dDQUNwRCxVQUFVLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXOzZCQUNoRCxDQUFDOzRCQUNGLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQWtCLENBQUMsRUFBRSxDQUFDO2dDQUN0RSxJQUFJLFNBQVMsS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDO29DQUNsRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3Q0FDNUIsK0VBQStFO3dDQUMvRSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7d0NBQ2xFLE1BQU0sVUFBVSxHQUFHLE9BQU8sS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7d0NBQ25FLE1BQU0sQ0FBQyxHQUFHLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztvQ0FDL0MsQ0FBQzt5Q0FBTSxDQUFDO3dDQUNOLHlDQUF5Qzt3Q0FDekMsTUFBTSxDQUFDLEdBQUcsU0FBUyxJQUFJLE9BQU8sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO29DQUNoRCxDQUFDO2dDQUNILENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDOzZCQUFNLENBQUM7NEJBQ04sTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQzs0QkFDdEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzt3QkFDdkYsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztnQkFDMUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUNELHFEQUFxRDtRQUNyRCxtRkFBbUY7UUFDbkYsSUFBSSxPQUFPLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sZUFBZSxHQUFHLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLElBQUksVUFBVSxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUN6QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNsRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUM7Z0JBQ2hELENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixDQUFDO2dCQUNELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3pCLENBQUM7WUFDRCxpRkFBaUY7UUFDbkYsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxRQUFRLENBQUMsS0FBd0I7UUFDdkMsT0FBTztZQUNMLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlO1lBQ2pFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixhQUFhLEVBQUUsS0FBSztTQUNyQixDQUFDO0lBQ0osQ0FBQzt3R0FsUlUsYUFBYTs0R0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIGZpbHRlciwgdGFrZSwgc3dpdGNoTWFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUZ21TZGtDb25maWcsIEluTWVtb3J5VG9rZW5TdG9yYWdlLCBUb2tlblN0b3JhZ2VTdHJhdGVneSB9IGZyb20gJy4uL3RnbS1zZGsuY29uZmlnJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgcmVzcG9uc2VUeXBlPzogJ2pzb24nIHwgJ2Jsb2InIHwgJ3RleHQnIHwgJ2FycmF5YnVmZmVyJztcbiAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICBza2lwQXV0aD86IGJvb2xlYW47XG4gIHNraXBDbGllbnRJZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29yZSBIVFRQIGNsaWVudCBmb3IgdGhlIFRHTSBTREsuXG4gKiBOT1QgcHJvdmlkZWRJbiByb290IOKAlCBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjb25zdW1pbmcgYXBwbGljYXRpb25cbiAqIHZpYSB1c2VGYWN0b3J5IHRvIGF2b2lkIGNyb3NzLWJ1bmRsZSB0b2tlbiBtaXNtYXRjaCBpbiBwcm9kdWN0aW9uIGJ1aWxkcy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRnbUh0dHBDbGllbnQge1xuICBwcml2YXRlIGJhc2VVcmwgPSAnJztcbiAgcHJpdmF0ZSB0b2tlblN0b3JhZ2U6IFRva2VuU3RvcmFnZVN0cmF0ZWd5ID0gbmV3IEluTWVtb3J5VG9rZW5TdG9yYWdlKCk7XG4gIHByaXZhdGUgY2xpZW50SWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgcmVmcmVzaFRva2VuU3ViamVjdCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSBjb25maWc6IFRnbVNka0NvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIGNvbmZpZz86IFRnbVNka0NvbmZpZyB8IG51bGwpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZyA/PyB7IGJhc2VVcmw6ICcnLCB0b2tlblN0b3JhZ2U6IG5ldyBJbk1lbW9yeVRva2VuU3RvcmFnZSgpLCBhdXRvUmVmcmVzaDogZmFsc2UgfTtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICB0aGlzLmJhc2VVcmwgPSAoY29uZmlnLmJhc2VVcmwgfHwgJycpLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICAgICAgdGhpcy50b2tlblN0b3JhZ2UgPSBjb25maWcudG9rZW5TdG9yYWdlID8/IG5ldyBJbk1lbW9yeVRva2VuU3RvcmFnZSgpO1xuICAgICAgaWYgKGNvbmZpZy5jbGllbnRJZCkge1xuICAgICAgICB0aGlzLmNsaWVudElkJC5uZXh0KGNvbmZpZy5jbGllbnRJZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFRva2VuIG1hbmFnZW1lbnQgLS0tXG5cbiAgZ2V0VG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5TdG9yYWdlLmdldFRva2VuKCk7XG4gIH1cblxuICBzZXRUb2tlbih0b2tlbjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblN0b3JhZ2Uuc2V0VG9rZW4odG9rZW4pO1xuICB9XG5cbiAgcmVtb3ZlVG9rZW4oKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblN0b3JhZ2UucmVtb3ZlVG9rZW4oKTtcbiAgfVxuXG4gIGdldFJlZnJlc2hUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50b2tlblN0b3JhZ2UuZ2V0UmVmcmVzaFRva2VuKCk7XG4gIH1cblxuICBzZXRSZWZyZXNoVG9rZW4odG9rZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5TdG9yYWdlLnNldFJlZnJlc2hUb2tlbih0b2tlbik7XG4gIH1cblxuICByZW1vdmVSZWZyZXNoVG9rZW4oKTogdm9pZCB7XG4gICAgdGhpcy50b2tlblN0b3JhZ2UucmVtb3ZlUmVmcmVzaFRva2VuKCk7XG4gIH1cblxuICBjbGVhclRva2VucygpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuU3RvcmFnZS5yZW1vdmVUb2tlbigpO1xuICAgIHRoaXMudG9rZW5TdG9yYWdlLnJlbW92ZVJlZnJlc2hUb2tlbigpO1xuICB9XG5cbiAgLy8gLS0tIENsaWVudCBJRCBtYW5hZ2VtZW50IC0tLVxuXG4gIHNldENsaWVudElkKGNsaWVudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWVudElkJC5uZXh0KGNsaWVudElkKTtcbiAgfVxuXG4gIGdldENsaWVudElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50SWQkLnZhbHVlO1xuICB9XG5cbiAgLy8gLS0tIEhUVFAgTWV0aG9kcyAtLS1cblxuICBnZXQ8VD4ocGF0aDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KCdHRVQnLCBwYXRoLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcG9zdDxUPihwYXRoOiBzdHJpbmcsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KCdQT1NUJywgcGF0aCwgYm9keSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdXQ8VD4ocGF0aDogc3RyaW5nLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPignUFVUJywgcGF0aCwgYm9keSwgb3B0aW9ucyk7XG4gIH1cblxuICBwYXRjaDxUPihwYXRoOiBzdHJpbmcsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KCdQQVRDSCcsIHBhdGgsIGJvZHksIG9wdGlvbnMpO1xuICB9XG5cbiAgZGVsZXRlPFQ+KHBhdGg6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPignREVMRVRFJywgcGF0aCwgdW5kZWZpbmVkLCBvcHRpb25zKTtcbiAgfVxuXG4gIHVwbG9hZDxUPihwYXRoOiBzdHJpbmcsIGZvcm1EYXRhOiBGb3JtRGF0YSwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdDxUPignUE9TVCcsIHBhdGgsIGZvcm1EYXRhLCB7IC4uLm9wdGlvbnMsIGhlYWRlcnM6IHsgLi4uKG9wdGlvbnM/LmhlYWRlcnMgfHwge30pIH0gfSk7XG4gIH1cblxuICBkb3dubG9hZChwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IE9ic2VydmFibGU8QmxvYj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3Q8QmxvYj4oJ0dFVCcsIHBhdGgsIHVuZGVmaW5lZCwgeyAuLi5vcHRpb25zLCByZXNwb25zZVR5cGU6ICdibG9iJyB9KTtcbiAgfVxuXG4gIC8vIC0tLSBJbnRlcm5hbCAtLS1cblxuICBwcml2YXRlIHJlcXVlc3Q8VD4obWV0aG9kOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgYm9keT86IHVua25vd24sIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0ke3BhdGh9YDtcblxuICAgIC8vIFVzZSBwbGFpbiBvYmplY3RzIGZvciBoZWFkZXJzIGFuZCBwYXJhbXMgdG8gYXZvaWQgY3Jvc3MtYnVuZGxlIGNsYXNzIG1pc21hdGNoXG4gICAgLy8gKFNESydzIEh0dHBIZWFkZXJzL0h0dHBQYXJhbXMgY2xhc3MgIT09IGFwcCdzIEh0dHBIZWFkZXJzL0h0dHBQYXJhbXMgY2xhc3MgaW4gcHJvZCBidWlsZHMpXG4gICAgY29uc3QgaGVhZGVyTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAvLyBBdXRoIGhlYWRlclxuICAgIGlmICghb3B0aW9ucz8uc2tpcEF1dGgpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gdGhpcy50b2tlblN0b3JhZ2UuZ2V0VG9rZW4oKTtcbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICBoZWFkZXJNYXBbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsaWVudCBJRCBoZWFkZXJcbiAgICBpZiAoIW9wdGlvbnM/LnNraXBDbGllbnRJZCkge1xuICAgICAgY29uc3QgY2xpZW50SWQgPSB0aGlzLmNsaWVudElkJC52YWx1ZTtcbiAgICAgIGlmIChjbGllbnRJZCkge1xuICAgICAgICBoZWFkZXJNYXBbJ1gtQ2xpZW50LUlEJ10gPSBjbGllbnRJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDdXN0b20gaGVhZGVyc1xuICAgIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zLmhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlck1hcFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUXVlcnkgcGFyYW1zIOKAlCBmbGF0dGVuIG5lc3RlZCBvYmplY3RzL2FycmF5cyBmb3IgYmFja2VuZCBjb21wYXRpYmlsaXR5XG4gICAgY29uc3QgcGFyYW1NYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBpZiAob3B0aW9ucz8ucGFyYW1zKSB7XG4gICAgICBjb25zdCBmbGF0UGFyYW1zID0gdGhpcy5mbGF0dGVuUGFyYW1zKG9wdGlvbnMucGFyYW1zKTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZsYXRQYXJhbXMpKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgcGFyYW1NYXBba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZVR5cGUgPSAob3B0aW9ucz8ucmVzcG9uc2VUeXBlID8/ICdqc29uJykgYXMgJ2pzb24nO1xuXG4gICAgY29uc3QgaHR0cE9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBoZWFkZXJzOiBoZWFkZXJNYXAsIHBhcmFtczogcGFyYW1NYXAsIGJvZHksIHJlc3BvbnNlVHlwZSB9O1xuXG4gICAgcmV0dXJuICh0aGlzLmh0dHAucmVxdWVzdChtZXRob2QsIHVybCwgaHR0cE9wdGlvbnMpIGFzIE9ic2VydmFibGU8VD4pLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNDAxICYmICFvcHRpb25zPy5za2lwQXV0aCAmJiB0aGlzLmNvbmZpZy5hdXRvUmVmcmVzaCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGU0MDE8VD4obWV0aG9kLCBwYXRoLCBib2R5LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiB0aGlzLm1hcEVycm9yKGVycm9yKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZTQwMTxUPihtZXRob2Q6IHN0cmluZywgcGF0aDogc3RyaW5nLCBib2R5PzogdW5rbm93biwgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgaWYgKHRoaXMuaXNSZWZyZXNoaW5nKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0LnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnJlcXVlc3Q8VD4obWV0aG9kLCBwYXRoLCBib2R5LCB7IC4uLm9wdGlvbnMsIHNraXBBdXRoOiBmYWxzZSB9KSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMudG9rZW5TdG9yYWdlLmdldFJlZnJlc2hUb2tlbigpO1xuXG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiAoeyBzdGF0dXM6IDQwMSwgbWVzc2FnZTogJ05vIHJlZnJlc2ggdG9rZW4gYXZhaWxhYmxlJyB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5iYXNlVXJsfS9hdXRoL3JlZnJlc2gtdG9rZW5gLCBudWxsLCB7XG4gICAgICBwYXJhbXM6IHsgcmVmcmVzaFRva2VuIH1cbiAgICB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHRva2VuS2V5ID0gdGhpcy5jb25maWcudG9rZW5LZXkgPz8gJ2p3dCc7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hLZXkgPSB0aGlzLmNvbmZpZy5yZWZyZXNoVG9rZW5LZXkgPz8gJ3JlZnJlc2hUb2tlbic7XG4gICAgICAgIGNvbnN0IG5ld1Rva2VuID0gcmVzcG9uc2VbdG9rZW5LZXldID8/IHJlc3BvbnNlLmRhdGE/Llt0b2tlbktleV07XG4gICAgICAgIGNvbnN0IG5ld1JlZnJlc2ggPSByZXNwb25zZVtyZWZyZXNoS2V5XSA/PyByZXNwb25zZS5kYXRhPy5bcmVmcmVzaEtleV07XG5cbiAgICAgICAgaWYgKG5ld1Rva2VuKSB7XG4gICAgICAgICAgdGhpcy50b2tlblN0b3JhZ2Uuc2V0VG9rZW4obmV3VG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdSZWZyZXNoKSB7XG4gICAgICAgICAgdGhpcy50b2tlblN0b3JhZ2Uuc2V0UmVmcmVzaFRva2VuKG5ld1JlZnJlc2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW5TdWJqZWN0Lm5leHQobmV3VG9rZW4pO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0PFQ+KG1ldGhvZCwgcGF0aCwgYm9keSwgb3B0aW9ucyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICB0aGlzLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNsZWFyVG9rZW5zKCk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMubWFwRXJyb3IoZXJyKSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRmxhdHRlbnMgbmVzdGVkIHBhcmFtIG9iamVjdHMgaW50byBmbGF0IGtleS12YWx1ZSBwYWlycy5cbiAgICogLSBgeyBmaWx0ZXJzOiB7IHN0YXR1czogJ2FjdGl2ZScgfSB9YCDihpIgYHsgc3RhdHVzOiAnYWN0aXZlJyB9YFxuICAgKiAtIGB7IHBvcHVsYXRlOiBbJ2EnLCAnYiddIH1gIOKGkiBgeyBwb3B1bGF0ZTogJ2EsYicgfWBcbiAgICogLSBgeyBwYWdpbmF0aW9uOiB7IHBhZ2U6IDEsIHBhZ2VTaXplOiAyNSB9IH1gIOKGkiBgeyBwYWdlOiAxLCBwYWdlU2l6ZTogMjUgfWBcbiAgICovXG4gIHByaXZhdGUgZmxhdHRlblBhcmFtcyhwYXJhbXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiB7XG4gICAgLy8gTWFwIFN0cmFwaSBwYWdpbmF0aW9uIHBhcmFtcyB0byBiYWNrZW5kIHBhcmFtc1xuICAgIC8vIE5vdGU6ICdzdGFydCcgKG9mZnNldCkgaXMgY29udmVydGVkIHRvIHBhZ2UgbnVtYmVyIHVzaW5nIGxpbWl0IGFzIHBhZ2Ugc2l6ZVxuICAgIGNvbnN0IHBhcmFtS2V5TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ2xpbWl0JzogJ3BhZ2VTaXplJyxcbiAgICAgICdwYWdlJzogJ3BhZ2UnLCAncGFnZVNpemUnOiAncGFnZVNpemUnLFxuICAgIH07XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGFyYW1zKSkge1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWUuam9pbignLCcpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAvLyBGbGF0dGVuIG5lc3RlZCBvYmplY3RzOiBtZXJnZSB0aGVpciBrZXlzIGRpcmVjdGx5XG4gICAgICAgIGZvciAoY29uc3QgW25lc3RlZEtleSwgbmVzdGVkVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICAgIGlmIChuZXN0ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG5lc3RlZFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG5lc3RlZFZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShuZXN0ZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gVHdvIGxldmVscyBkZWVwOiBtYXAgU3RyYXBpIG9wZXJhdG9ycyB0byBiYWNrZW5kIHN1ZmZpeCBvcGVyYXRvcnNcbiAgICAgICAgICAgICAgLy8gZS5nLiwgeyB1bml0OiB7ICRlcTogNSB9IH0g4oaSIHVuaXQ9NSwgeyB1bml0OiB7ICRub3ROdWxsOiB0cnVlIH0gfSDihpIgdW5pdF9pc251bGw9ZmFsc2VcbiAgICAgICAgICAgICAgY29uc3Qgc3RyYXBpVG9CYWNrZW5kOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAgICAgICAgICckZXEnOiAnJywgJyRuZSc6ICdfbmUnLCAnJGNvbnRhaW5zJzogJ19jb250YWlucycsXG4gICAgICAgICAgICAgICAgJyRzdGFydHNXaXRoJzogJ19zdGFydHNXaXRoJywgJyRlbmRzV2l0aCc6ICdfZW5kc1dpdGgnLFxuICAgICAgICAgICAgICAgICckZ3QnOiAnX2d0JywgJyRndGUnOiAnX2d0ZScsICckbHQnOiAnX2x0JywgJyRsdGUnOiAnX2x0ZScsXG4gICAgICAgICAgICAgICAgJyRpbic6ICdfaW4nLCAnJG5vdEluJzogJ19ub3RJbicsICckbnVsbCc6ICdfaXNudWxsJyxcbiAgICAgICAgICAgICAgICAnJG5vdE51bGwnOiAnX2lzbnVsbCcsICckZXFPck51bGwnOiAnX2VxT3JOdWxsJyxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBbZGVlcEtleSwgZGVlcFZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhuZXN0ZWRWYWx1ZSBhcyBhbnkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZXBWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZXBWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgaWYgKGRlZXBLZXkuc3RhcnRzV2l0aCgnJCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0cmFwaSBvcGVyYXRvcjogeyAkZXE6IDUgfSDihpIgZmllbGQ9NSwgeyAkY29udGFpbnM6ICd4JyB9IOKGkiBmaWVsZF9jb250YWlucz14XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IHN0cmFwaVRvQmFja2VuZFtkZWVwS2V5XSA/PyAnXycgKyBkZWVwS2V5LnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbFZhbHVlID0gZGVlcEtleSA9PT0gJyRub3ROdWxsJyA/ICFkZWVwVmFsdWUgOiBkZWVwVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtgJHtuZXN0ZWRLZXl9JHtzdWZmaXh9YF0gPSBmaW5hbFZhbHVlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVsYXRpb24gZmllbGQ6IHsgaWQ6IDUgfSDihpIgZmllbGQuaWQ9NVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRbYCR7bmVzdGVkS2V5fS4ke2RlZXBLZXl9YF0gPSBkZWVwVmFsdWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBtYXBwZWRLZXkgPSBwYXJhbUtleU1hcFtuZXN0ZWRLZXldIHx8IG5lc3RlZEtleTtcbiAgICAgICAgICAgICAgcmVzdWx0W21hcHBlZEtleV0gPSBBcnJheS5pc0FycmF5KG5lc3RlZFZhbHVlKSA/IG5lc3RlZFZhbHVlLmpvaW4oJywnKSA6IG5lc3RlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbWFwcGVkS2V5ID0gcGFyYW1LZXlNYXBba2V5XSB8fCBrZXk7XG4gICAgICAgIHJlc3VsdFttYXBwZWRLZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIENvbnZlcnQgU3RyYXBpIG9mZnNldC1iYXNlZCAnc3RhcnQnIHRvIHBhZ2UgbnVtYmVyXG4gICAgLy8gT25seSBjb252ZXJ0IGlmICdzdGFydCcgaXMgYSBwdXJlIG51bWJlciAoU3RyYXBpIG9mZnNldCksIE5PVCBhbiBJU08gZGF0ZSBzdHJpbmdcbiAgICBpZiAoJ3N0YXJ0JyBpbiByZXN1bHQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0VmFsID0gcmVzdWx0WydzdGFydCddO1xuICAgICAgY29uc3QgaXNOdW1lcmljT2Zmc2V0ID0gdHlwZW9mIHN0YXJ0VmFsID09PSAnbnVtYmVyJyB8fCAvXlxcZCskLy50ZXN0KFN0cmluZyhzdGFydFZhbCkpO1xuICAgICAgaWYgKGlzTnVtZXJpY09mZnNldCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IE51bWJlcihzdGFydFZhbCkgfHwgMDtcbiAgICAgICAgaWYgKCdwYWdlU2l6ZScgaW4gcmVzdWx0KSB7XG4gICAgICAgICAgY29uc3QgcGFnZVNpemUgPSBOdW1iZXIocmVzdWx0WydwYWdlU2l6ZSddKSB8fCAyNTtcbiAgICAgICAgICByZXN1bHRbJ3BhZ2UnXSA9IE1hdGguZmxvb3Ioc3RhcnQgLyBwYWdlU2l6ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0WydwYWdlJ10gPSBzdGFydDtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUgcmVzdWx0WydzdGFydCddO1xuICAgICAgfVxuICAgICAgLy8gSWYgc3RhcnQgaXMgYW4gSVNPIGRhdGUgc3RyaW5nIChlLmcuIFwiMjAyNi0wMS0wMVQwMDowMDowMFwiKSwgcHJlc2VydmUgaXQgYXMtaXNcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgbWFwRXJyb3IoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKTogVGdtU2RrRXJyb3Ige1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IGVycm9yLmVycm9yPy5tZXNzYWdlID8/IGVycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLFxuICAgICAgZXJyb3I6IGVycm9yLmVycm9yLFxuICAgICAgb3JpZ2luYWxFcnJvcjogZXJyb3IsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRnbVNka0Vycm9yIHtcbiAgc3RhdHVzOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgZXJyb3I/OiBhbnk7XG4gIG9yaWdpbmFsRXJyb3I/OiBIdHRwRXJyb3JSZXNwb25zZTtcbn1cbiJdfQ==
@@ -0,0 +1,185 @@
1
+ import { Injectable, Inject } from '@angular/core';
2
+ import { Subject, BehaviorSubject, share, takeUntil } from 'rxjs';
3
+ import { Client } from '@stomp/stompjs';
4
+ import * as SockJSModule from 'sockjs-client';
5
+ import { TGM_SDK_CONFIG } from '../tgm-sdk.config';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "./http-client.service";
8
+ const SockJS = SockJSModule.default || SockJSModule;
9
+ export class WebSocketService {
10
+ config;
11
+ httpClient;
12
+ client = null;
13
+ subscriptions = new Map();
14
+ messageSubjects = new Map();
15
+ destroy$ = new Subject();
16
+ reconnectAttempts = 0;
17
+ maxReconnectAttempts = 10;
18
+ baseReconnectDelay = 1000;
19
+ connectionState$ = new BehaviorSubject('DISCONNECTED');
20
+ constructor(config, httpClient) {
21
+ this.config = config;
22
+ this.httpClient = httpClient;
23
+ }
24
+ connect(endpoint) {
25
+ if (this.client?.connected)
26
+ return;
27
+ const wsEndpoint = endpoint ?? this.config.wsEndpoint ?? '/ws';
28
+ const baseUrl = this.config.baseUrl.replace(/\/+$/, '');
29
+ const url = `${baseUrl}${wsEndpoint}`;
30
+ this.connectionState$.next('CONNECTING');
31
+ this.client = new Client({
32
+ webSocketFactory: () => new SockJS(url),
33
+ connectHeaders: this.getConnectHeaders(),
34
+ reconnectDelay: 0, // We handle reconnect manually
35
+ heartbeatIncoming: 10000,
36
+ heartbeatOutgoing: 10000,
37
+ onConnect: () => {
38
+ this.connectionState$.next('CONNECTED');
39
+ this.reconnectAttempts = 0;
40
+ this.resubscribeAll();
41
+ },
42
+ onStompError: (frame) => {
43
+ this.connectionState$.next('ERROR');
44
+ console.error('STOMP error:', frame.headers['message']);
45
+ this.scheduleReconnect(endpoint);
46
+ },
47
+ onWebSocketClose: () => {
48
+ if (this.connectionState$.value !== 'DISCONNECTED') {
49
+ this.connectionState$.next('ERROR');
50
+ this.scheduleReconnect(endpoint);
51
+ }
52
+ },
53
+ });
54
+ this.client.activate();
55
+ }
56
+ disconnect() {
57
+ this.connectionState$.next('DISCONNECTED');
58
+ this.subscriptions.forEach((sub) => {
59
+ try {
60
+ sub.unsubscribe();
61
+ }
62
+ catch (_) { }
63
+ });
64
+ this.subscriptions.clear();
65
+ if (this.client) {
66
+ this.client.deactivate();
67
+ this.client = null;
68
+ }
69
+ }
70
+ subscribe(destination) {
71
+ const prefixed = this.getTenantPrefixedDestination(destination);
72
+ if (!this.messageSubjects.has(prefixed)) {
73
+ this.messageSubjects.set(prefixed, new Subject());
74
+ }
75
+ // Subscribe when connected
76
+ if (this.client?.connected && !this.subscriptions.has(prefixed)) {
77
+ this.doSubscribe(prefixed);
78
+ }
79
+ return this.messageSubjects.get(prefixed).asObservable().pipe(takeUntil(this.destroy$), share());
80
+ }
81
+ unsubscribe(destination) {
82
+ const prefixed = this.getTenantPrefixedDestination(destination);
83
+ const sub = this.subscriptions.get(prefixed);
84
+ if (sub) {
85
+ try {
86
+ sub.unsubscribe();
87
+ }
88
+ catch (_) { }
89
+ this.subscriptions.delete(prefixed);
90
+ }
91
+ this.messageSubjects.get(prefixed)?.complete();
92
+ this.messageSubjects.delete(prefixed);
93
+ }
94
+ send(destination, body, headers) {
95
+ if (!this.client?.connected) {
96
+ console.warn('WebSocket not connected, cannot send to', destination);
97
+ return;
98
+ }
99
+ this.client.publish({
100
+ destination,
101
+ body: typeof body === 'string' ? body : JSON.stringify(body),
102
+ headers,
103
+ });
104
+ }
105
+ ngOnDestroy() {
106
+ this.destroy$.next();
107
+ this.destroy$.complete();
108
+ this.disconnect();
109
+ }
110
+ /**
111
+ * Prefix /topic/ destinations with the client ID for tenant isolation.
112
+ * Matches server-side WebSocketService.getTenantPrefixedDestination().
113
+ * /user/queue/ destinations are user-scoped and not prefixed.
114
+ */
115
+ getTenantPrefixedDestination(destination) {
116
+ const clientId = this.httpClient.getClientId();
117
+ if (clientId) {
118
+ if (destination.startsWith('/topic/')) {
119
+ return `/topic/${clientId}${destination.substring(6)}`;
120
+ }
121
+ }
122
+ return destination;
123
+ }
124
+ getConnectHeaders() {
125
+ const headers = {};
126
+ const token = this.httpClient.getToken();
127
+ if (token) {
128
+ headers['Authorization'] = `Bearer ${token}`;
129
+ headers['token'] = token;
130
+ }
131
+ const clientId = this.httpClient.getClientId();
132
+ if (clientId) {
133
+ headers['X-Client-ID'] = clientId;
134
+ }
135
+ return headers;
136
+ }
137
+ doSubscribe(destination) {
138
+ if (!this.client?.connected)
139
+ return;
140
+ const sub = this.client.subscribe(destination, (message) => {
141
+ const subject = this.messageSubjects.get(destination);
142
+ if (subject) {
143
+ try {
144
+ subject.next(JSON.parse(message.body));
145
+ }
146
+ catch {
147
+ subject.next(message.body);
148
+ }
149
+ }
150
+ });
151
+ this.subscriptions.set(destination, sub);
152
+ }
153
+ resubscribeAll() {
154
+ const destinations = Array.from(this.messageSubjects.keys());
155
+ this.subscriptions.clear();
156
+ for (const dest of destinations) {
157
+ this.doSubscribe(dest);
158
+ }
159
+ }
160
+ scheduleReconnect(endpoint) {
161
+ if (this.connectionState$.value === 'DISCONNECTED')
162
+ return;
163
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
164
+ console.error('Max WebSocket reconnect attempts reached');
165
+ return;
166
+ }
167
+ const delay = Math.min(this.baseReconnectDelay * Math.pow(2, this.reconnectAttempts), 30000);
168
+ this.reconnectAttempts++;
169
+ setTimeout(() => {
170
+ if (this.connectionState$.value !== 'DISCONNECTED') {
171
+ this.connect(endpoint);
172
+ }
173
+ }, delay);
174
+ }
175
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, deps: [{ token: TGM_SDK_CONFIG }, { token: i1.TgmHttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
176
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, providedIn: 'root' });
177
+ }
178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WebSocketService, decorators: [{
179
+ type: Injectable,
180
+ args: [{ providedIn: 'root' }]
181
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
182
+ type: Inject,
183
+ args: [TGM_SDK_CONFIG]
184
+ }] }, { type: i1.TgmHttpClient }] });
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvd2Vic29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFjLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RixPQUFPLEVBQUUsTUFBTSxFQUErQixNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sS0FBSyxZQUFZLE1BQU0sZUFBZSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxjQUFjLEVBQWdCLE1BQU0sbUJBQW1CLENBQUM7OztBQURqRSxNQUFNLE1BQU0sR0FBSSxZQUFvQixDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUM7QUFPN0QsTUFBTSxPQUFPLGdCQUFnQjtJQVlPO0lBQ3hCO0lBWkYsTUFBTSxHQUFrQixJQUFJLENBQUM7SUFDN0IsYUFBYSxHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO0lBQ3JELGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUNsRCxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUMvQixpQkFBaUIsR0FBRyxDQUFDLENBQUM7SUFDdEIsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0lBQzFCLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUVsQyxnQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBa0IsY0FBYyxDQUFDLENBQUM7SUFFeEUsWUFDa0MsTUFBb0IsRUFDNUMsVUFBeUI7UUFERCxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQzVDLGVBQVUsR0FBVixVQUFVLENBQWU7SUFDaEMsQ0FBQztJQUVKLE9BQU8sQ0FBQyxRQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUztZQUFFLE9B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Q0FBQyxLQUFLLEtBQUssY0FBYztZQUFFLE9BQU87UUFDM0QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDeEQsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQzFELE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUM3RCxLQUFLLENBQ04sQ0FBQztRQUNGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssY0FBYyxFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNaLENBQUM7d0dBbExVLGdCQUFnQixrQkFZakIsY0FBYzs0R0FaYixnQkFBZ0IsY0FESCxNQUFNOzs0RkFDbkIsZ0JBQWdCO2tCQUQ1QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBYTdCLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIHNoYXJlLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2xpZW50LCBJTWVzc2FnZSwgU3RvbXBTdWJzY3JpcHRpb24gfSBmcm9tICdAc3RvbXAvc3RvbXBqcyc7XG5pbXBvcnQgKiBhcyBTb2NrSlNNb2R1bGUgZnJvbSAnc29ja2pzLWNsaWVudCc7XG5jb25zdCBTb2NrSlMgPSAoU29ja0pTTW9kdWxlIGFzIGFueSkuZGVmYXVsdCB8fCBTb2NrSlNNb2R1bGU7XG5pbXBvcnQgeyBUR01fU0RLX0NPTkZJRywgVGdtU2RrQ29uZmlnIH0gZnJvbSAnLi4vdGdtLXNkay5jb25maWcnO1xuaW1wb3J0IHsgVGdtSHR0cENsaWVudCB9IGZyb20gJy4vaHR0cC1jbGllbnQuc2VydmljZSc7XG5cbmV4cG9ydCB0eXBlIENvbm5lY3Rpb25TdGF0ZSA9ICdESVNDT05ORUNURUQnIHwgJ0NPTk5FQ1RJTkcnIHwgJ0NPTk5FQ1RFRCcgfCAnRVJST1InO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFdlYlNvY2tldFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGNsaWVudDogQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBTdG9tcFN1YnNjcmlwdGlvbj4oKTtcbiAgcHJpdmF0ZSBtZXNzYWdlU3ViamVjdHMgPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDxhbnk+PigpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIHByaXZhdGUgbWF4UmVjb25uZWN0QXR0ZW1wdHMgPSAxMDtcbiAgcHJpdmF0ZSBiYXNlUmVjb25uZWN0RGVsYXkgPSAxMDAwO1xuXG4gIGNvbm5lY3Rpb25TdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbm5lY3Rpb25TdGF0ZT4oJ0RJU0NPTk5FQ1RFRCcpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVEdNX1NES19DT05GSUcpIHByaXZhdGUgY29uZmlnOiBUZ21TZGtDb25maWcsXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBUZ21IdHRwQ2xpZW50XG4gICkge31cblxuICBjb25uZWN0KGVuZHBvaW50Pzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xpZW50Py5jb25uZWN0ZWQpIHJldHVybjtcblxuICAgIGNvbnN0IHdzRW5kcG9pbnQgPSBlbmRwb2ludCA/PyB0aGlzLmNvbmZpZy53c0VuZHBvaW50ID8/ICcvd3MnO1xuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmNvbmZpZy5iYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9JHt3c0VuZHBvaW50fWA7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZSQubmV4dCgnQ09OTkVDVElORycpO1xuXG4gICAgdGhpcy5jbGllbnQgPSBuZXcgQ2xpZW50KHtcbiAgICAgIHdlYlNvY2tldEZhY3Rvcnk6ICgpID0+IG5ldyBTb2NrSlModXJsKSBhcyBhbnksXG4gICAgICBjb25uZWN0SGVhZGVyczogdGhpcy5nZXRDb25uZWN0SGVhZGVycygpLFxuICAgICAgcmVjb25uZWN0RGVsYXk6IDAsIC8vIFdlIGhhbmRsZSByZWNvbm5lY3QgbWFudWFsbHlcbiAgICAgIGhlYXJ0YmVhdEluY29taW5nOiAxMDAwMCxcbiAgICAgIGhlYXJ0YmVhdE91dGdvaW5nOiAxMDAwMCxcbiAgICAgIG9uQ29ubmVjdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZSQubmV4dCgnQ09OTkVDVEVEJyk7XG4gICAgICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuICAgICAgICB0aGlzLnJlc3Vic2NyaWJlQWxsKCk7XG4gICAgICB9LFxuICAgICAgb25TdG9tcEVycm9yOiAoZnJhbWUpID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdGUkLm5leHQoJ0VSUk9SJyk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NUT01QIGVycm9yOicsIGZyYW1lLmhlYWRlcnNbJ21lc3NhZ2UnXSk7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVSZWNvbm5lY3QoZW5kcG9pbnQpO1xuICAgICAgfSxcbiAgICAgIG9uV2ViU29ja2V0Q2xvc2U6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlJC52YWx1ZSAhPT0gJ0RJU0NPTk5FQ1RFRCcpIHtcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZSQubmV4dCgnRVJST1InKTtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlUmVjb25uZWN0KGVuZHBvaW50KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuY2xpZW50LmFjdGl2YXRlKCk7XG4gIH1cblxuICBkaXNjb25uZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuY29ubmVjdGlvblN0YXRlJC5uZXh0KCdESVNDT05ORUNURUQnKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiB7XG4gICAgICB0cnkgeyBzdWIudW5zdWJzY3JpYmUoKTsgfSBjYXRjaCAoXykge31cbiAgICB9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5jbGllbnQpIHtcbiAgICAgIHRoaXMuY2xpZW50LmRlYWN0aXZhdGUoKTtcbiAgICAgIHRoaXMuY2xpZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmU8VCA9IGFueT4oZGVzdGluYXRpb246IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHByZWZpeGVkID0gdGhpcy5nZXRUZW5hbnRQcmVmaXhlZERlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKTtcbiAgICBpZiAoIXRoaXMubWVzc2FnZVN1YmplY3RzLmhhcyhwcmVmaXhlZCkpIHtcbiAgICAgIHRoaXMubWVzc2FnZVN1YmplY3RzLnNldChwcmVmaXhlZCwgbmV3IFN1YmplY3Q8VD4oKSk7XG4gICAgfVxuXG4gICAgLy8gU3Vic2NyaWJlIHdoZW4gY29ubmVjdGVkXG4gICAgaWYgKHRoaXMuY2xpZW50Py5jb25uZWN0ZWQgJiYgIXRoaXMuc3Vic2NyaXB0aW9ucy5oYXMocHJlZml4ZWQpKSB7XG4gICAgICB0aGlzLmRvU3Vic2NyaWJlKHByZWZpeGVkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3ViamVjdHMuZ2V0KHByZWZpeGVkKSEuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIHNoYXJlKClcbiAgICApO1xuICB9XG5cbiAgdW5zdWJzY3JpYmUoZGVzdGluYXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHByZWZpeGVkID0gdGhpcy5nZXRUZW5hbnRQcmVmaXhlZERlc3RpbmF0aW9uKGRlc3RpbmF0aW9uKTtcbiAgICBjb25zdCBzdWIgPSB0aGlzLnN1YnNjcmlwdGlvbnMuZ2V0KHByZWZpeGVkKTtcbiAgICBpZiAoc3ViKSB7XG4gICAgICB0cnkgeyBzdWIudW5zdWJzY3JpYmUoKTsgfSBjYXRjaCAoXykge31cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kZWxldGUocHJlZml4ZWQpO1xuICAgIH1cbiAgICB0aGlzLm1lc3NhZ2VTdWJqZWN0cy5nZXQocHJlZml4ZWQpPy5jb21wbGV0ZSgpO1xuICAgIHRoaXMubWVzc2FnZVN1YmplY3RzLmRlbGV0ZShwcmVmaXhlZCk7XG4gIH1cblxuICBzZW5kKGRlc3RpbmF0aW9uOiBzdHJpbmcsIGJvZHk6IGFueSwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2xpZW50Py5jb25uZWN0ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignV2ViU29ja2V0IG5vdCBjb25uZWN0ZWQsIGNhbm5vdCBzZW5kIHRvJywgZGVzdGluYXRpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsaWVudC5wdWJsaXNoKHtcbiAgICAgIGRlc3RpbmF0aW9uLFxuICAgICAgYm9keTogdHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnID8gYm9keSA6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgICAgaGVhZGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVmaXggL3RvcGljLyBkZXN0aW5hdGlvbnMgd2l0aCB0aGUgY2xpZW50IElEIGZvciB0ZW5hbnQgaXNvbGF0aW9uLlxuICAgKiBNYXRjaGVzIHNlcnZlci1zaWRlIFdlYlNvY2tldFNlcnZpY2UuZ2V0VGVuYW50UHJlZml4ZWREZXN0aW5hdGlvbigpLlxuICAgKiAvdXNlci9xdWV1ZS8gZGVzdGluYXRpb25zIGFyZSB1c2VyLXNjb3BlZCBhbmQgbm90IHByZWZpeGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRUZW5hbnRQcmVmaXhlZERlc3RpbmF0aW9uKGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNsaWVudElkID0gdGhpcy5odHRwQ2xpZW50LmdldENsaWVudElkKCk7XG4gICAgaWYgKGNsaWVudElkKSB7XG4gICAgICBpZiAoZGVzdGluYXRpb24uc3RhcnRzV2l0aCgnL3RvcGljLycpKSB7XG4gICAgICAgIHJldHVybiBgL3RvcGljLyR7Y2xpZW50SWR9JHtkZXN0aW5hdGlvbi5zdWJzdHJpbmcoNil9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb25uZWN0SGVhZGVycygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmh0dHBDbGllbnQuZ2V0VG9rZW4oKTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICAgICAgaGVhZGVyc1sndG9rZW4nXSA9IHRva2VuO1xuICAgIH1cbiAgICBjb25zdCBjbGllbnRJZCA9IHRoaXMuaHR0cENsaWVudC5nZXRDbGllbnRJZCgpO1xuICAgIGlmIChjbGllbnRJZCkge1xuICAgICAgaGVhZGVyc1snWC1DbGllbnQtSUQnXSA9IGNsaWVudElkO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIHByaXZhdGUgZG9TdWJzY3JpYmUoZGVzdGluYXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jbGllbnQ/LmNvbm5lY3RlZCkgcmV0dXJuO1xuICAgIGNvbnN0IHN1YiA9IHRoaXMuY2xpZW50LnN1YnNjcmliZShkZXN0aW5hdGlvbiwgKG1lc3NhZ2U6IElNZXNzYWdlKSA9PiB7XG4gICAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5tZXNzYWdlU3ViamVjdHMuZ2V0KGRlc3RpbmF0aW9uKTtcbiAgICAgIGlmIChzdWJqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3ViamVjdC5uZXh0KEpTT04ucGFyc2UobWVzc2FnZS5ib2R5KSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHN1YmplY3QubmV4dChtZXNzYWdlLmJvZHkgYXMgYW55KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5zZXQoZGVzdGluYXRpb24sIHN1Yik7XG4gIH1cblxuICBwcml2YXRlIHJlc3Vic2NyaWJlQWxsKCk6IHZvaWQge1xuICAgIGNvbnN0IGRlc3RpbmF0aW9ucyA9IEFycmF5LmZyb20odGhpcy5tZXNzYWdlU3ViamVjdHMua2V5cygpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICBmb3IgKGNvbnN0IGRlc3Qgb2YgZGVzdGluYXRpb25zKSB7XG4gICAgICB0aGlzLmRvU3Vic2NyaWJlKGRlc3QpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2NoZWR1bGVSZWNvbm5lY3QoZW5kcG9pbnQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGUkLnZhbHVlID09PSAnRElTQ09OTkVDVEVEJykgcmV0dXJuO1xuICAgIGlmICh0aGlzLnJlY29ubmVjdEF0dGVtcHRzID49IHRoaXMubWF4UmVjb25uZWN0QXR0ZW1wdHMpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ01heCBXZWJTb2NrZXQgcmVjb25uZWN0IGF0dGVtcHRzIHJlYWNoZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVsYXkgPSBNYXRoLm1pbihcbiAgICAgIHRoaXMuYmFzZVJlY29ubmVjdERlbGF5ICogTWF0aC5wb3coMiwgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cyksXG4gICAgICAzMDAwMFxuICAgICk7XG4gICAgdGhpcy5yZWNvbm5lY3RBdHRlbXB0cysrO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlJC52YWx1ZSAhPT0gJ0RJU0NPTk5FQ1RFRCcpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0KGVuZHBvaW50KTtcbiAgICAgIH1cbiAgICB9LCBkZWxheSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvYWRtaW4vYXVkaXQubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nUmVzcG9uc2Uge1xuICBpZDogbnVtYmVyO1xuICBhY3Rpb246IHN0cmluZztcbiAgZW50aXR5VHlwZTogc3RyaW5nO1xuICBlbnRpdHlJZD86IG51bWJlcjtcbiAgZW50aXR5TmFtZT86IHN0cmluZztcbiAgdXNlcklkPzogbnVtYmVyO1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgdXNlckVtYWlsPzogc3RyaW5nO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbiAgb2xkVmFsdWVzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgbmV3VmFsdWVzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgZHVyYXRpb25Ncz86IG51bWJlcjtcbiAgY3JlYXRlZEF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nRmlsdGVyUGFyYW1zIHtcbiAgYWN0aW9uPzogc3RyaW5nO1xuICBlbnRpdHlUeXBlPzogc3RyaW5nO1xuICBlbnRpdHlJZD86IG51bWJlcjtcbiAgdXNlcklkPzogbnVtYmVyO1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHN0YXJ0RGF0ZT86IHN0cmluZztcbiAgZW5kRGF0ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ1N0YXRzUmVzcG9uc2Uge1xuICB0b3RhbExvZ3M6IG51bWJlcjtcbiAgdG90YWxBY3Rpb25zOiBudW1iZXI7XG4gIHRvcEFjdGlvbnM/OiB7IGFjdGlvbjogc3RyaW5nOyBjb3VudDogbnVtYmVyIH1bXTtcbiAgdG9wVXNlcnM/OiB7IHVzZXJJZDogbnVtYmVyOyB1c2VybmFtZTogc3RyaW5nOyBjb3VudDogbnVtYmVyIH1bXTtcbiAgdG9wRW50aXR5VHlwZXM/OiB7IGVudGl0eVR5cGU6IHN0cmluZzsgY291bnQ6IG51bWJlciB9W107XG4gIGxvZ3NCeURheT86IHsgZGF0ZTogc3RyaW5nOyBjb3VudDogbnVtYmVyIH1bXTtcbiAgZmFpbGVkQWN0aW9ucz86IG51bWJlcjtcbiAgc3VjY2Vzc2Z1bEFjdGlvbnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dFeHBvcnRSZXF1ZXN0IHtcbiAgZm9ybWF0PzogJ0NTVicgfCAnSlNPTicgfCAnUERGJztcbiAgZmlsdGVycz86IEF1ZGl0TG9nRmlsdGVyUGFyYW1zO1xuICBpbmNsdWRlRGV0YWlscz86IGJvb2xlYW47XG4gIGRhdGVSYW5nZT86IHtcbiAgICBzdGFydERhdGU6IHN0cmluZztcbiAgICBlbmREYXRlOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dFeHBvcnRSZXNwb25zZSB7XG4gIGlkOiBudW1iZXI7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGZvcm1hdDogc3RyaW5nO1xuICBmaWxlU2l6ZT86IG51bWJlcjtcbiAgZmlsZVNpemVGb3JtYXR0ZWQ/OiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBkb3dubG9hZFVybD86IHN0cmluZztcbiAgZXhwaXJlc0F0Pzogc3RyaW5nO1xuICBjcmVhdGVkQXQ/OiBzdHJpbmc7XG59XG4iXX0=