dt-common-device 13.0.3 → 13.0.8

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 (265) hide show
  1. package/dist/admin/Admin.repository.d.ts +7 -0
  2. package/dist/admin/Admin.repository.js +182 -0
  3. package/dist/admin/Admin.service.d.ts +5 -0
  4. package/dist/admin/Admin.service.js +17 -0
  5. package/dist/admin/index.d.ts +1 -0
  6. package/dist/admin/index.js +17 -0
  7. package/dist/alerts/AlertBuilder.example.d.ts +11 -0
  8. package/dist/alerts/AlertBuilder.example.js +117 -0
  9. package/dist/alerts/AlertService.example.d.ts +55 -0
  10. package/dist/alerts/AlertService.example.js +150 -0
  11. package/dist/audit/AuditProperties.d.ts +16 -0
  12. package/dist/audit/AuditProperties.js +2 -0
  13. package/dist/chronicle/Cronicle.service.d.ts +9 -0
  14. package/dist/chronicle/Cronicle.service.js +76 -0
  15. package/dist/chronicle/IChronicle.interface.d.ts +14 -0
  16. package/dist/chronicle/IChronicle.interface.js +2 -0
  17. package/dist/chronicle/ICronicle.interface.d.ts +15 -0
  18. package/dist/chronicle/ICronicle.interface.js +2 -0
  19. package/dist/chronicle/chronicle.service.d.ts +4 -0
  20. package/dist/chronicle/chronicle.service.js +44 -0
  21. package/dist/chronicle/index.d.ts +2 -0
  22. package/dist/chronicle/index.js +5 -0
  23. package/dist/connection/Connection.repository.d.ts +8 -0
  24. package/dist/connection/Connection.repository.js +92 -0
  25. package/dist/connection/Connection.service.d.ts +8 -0
  26. package/dist/connection/Connection.service.js +32 -0
  27. package/dist/connection/IConnection.d.ts +28 -0
  28. package/dist/connection/IConnection.js +16 -0
  29. package/dist/connection/index.d.ts +2 -0
  30. package/dist/connection/index.js +18 -0
  31. package/dist/copilotQueue/examples/CopilotQueue.example.d.ts +37 -0
  32. package/dist/copilotQueue/examples/CopilotQueue.example.js +140 -0
  33. package/dist/copilotQueue/examples/index.d.ts +1 -0
  34. package/dist/copilotQueue/examples/index.js +17 -0
  35. package/dist/device/cloud/entities/CloudConnection.d.ts +6 -0
  36. package/dist/device/cloud/entities/CloudConnection.js +6 -0
  37. package/dist/device/cloud/entities/CloudDevice.d.ts +16 -0
  38. package/dist/device/cloud/entities/CloudDevice.js +26 -0
  39. package/dist/device/cloud/entities/CloudDeviceService.d.ts +5 -0
  40. package/dist/device/cloud/entities/CloudDeviceService.js +9 -0
  41. package/dist/device/cloud/entities/DeviceFactory.d.ts +7 -0
  42. package/dist/device/cloud/entities/DeviceFactory.js +80 -0
  43. package/dist/device/cloud/entities/index.d.ts +3 -0
  44. package/dist/device/cloud/entities/index.js +19 -0
  45. package/dist/device/cloud/interface.d.ts +101 -0
  46. package/dist/device/cloud/interface.js +3 -0
  47. package/dist/device/cloud/interfaces/ICloudConnection.d.ts +5 -0
  48. package/dist/device/cloud/interfaces/ICloudConnection.js +2 -0
  49. package/dist/device/cloud/interfaces/ICloudDevice.d.ts +9 -0
  50. package/dist/device/cloud/interfaces/ICloudDevice.js +2 -0
  51. package/dist/device/cloud/interfaces/ICloudDeviceService.d.ts +4 -0
  52. package/dist/device/cloud/interfaces/ICloudDeviceService.js +2 -0
  53. package/dist/device/cloud/interfaces/IConnectionService.d.ts +7 -0
  54. package/dist/device/cloud/interfaces/IConnectionService.js +2 -0
  55. package/dist/device/cloud/interfaces/IDeviceConnectionService.d.ts +7 -0
  56. package/dist/device/cloud/interfaces/IDeviceConnectionService.js +3 -0
  57. package/dist/device/cloud/interfaces/IDeviceFactory.d.ts +4 -0
  58. package/dist/device/cloud/interfaces/IDeviceFactory.js +2 -0
  59. package/dist/device/cloud/interfaces/IDeviceService.d.ts +8 -0
  60. package/dist/device/cloud/interfaces/IDeviceService.js +2 -0
  61. package/dist/device/cloud/interfaces/IDevicesService.d.ts +9 -0
  62. package/dist/device/cloud/interfaces/IDevicesService.js +2 -0
  63. package/dist/device/cloud/interfaces/IHubService.d.ts +5 -0
  64. package/dist/device/cloud/interfaces/IHubService.js +2 -0
  65. package/dist/device/cloud/interfaces/IRawDataTransformer.d.ts +4 -0
  66. package/dist/device/cloud/interfaces/IRawDataTransformer.js +2 -0
  67. package/dist/device/cloud/interfaces/IRawDevice.d.ts +17 -0
  68. package/dist/device/cloud/interfaces/IRawDevice.js +11 -0
  69. package/dist/device/cloud/interfaces/index.d.ts +5 -0
  70. package/dist/device/cloud/interfaces/index.js +21 -0
  71. package/dist/device/cloud/services/CloudDevice.service.d.ts +5 -0
  72. package/dist/device/cloud/services/CloudDevice.service.js +9 -0
  73. package/dist/device/cloud/services/Connection.service.d.ts +8 -0
  74. package/dist/device/cloud/services/Connection.service.js +6 -0
  75. package/dist/device/cloud/services/Device.service.d.ts +39 -0
  76. package/dist/device/cloud/services/Device.service.js +9 -0
  77. package/dist/device/cloud/services/DeviceCloudService.d.ts +42 -0
  78. package/dist/device/cloud/services/DeviceCloudService.js +59 -0
  79. package/dist/device/cloud/services/DeviceHub.service.d.ts +3 -0
  80. package/dist/device/cloud/services/DeviceHub.service.js +6 -0
  81. package/dist/device/cloud/services/Hub.service.d.ts +25 -0
  82. package/dist/device/cloud/services/Hub.service.js +9 -0
  83. package/dist/device/cloud/services/SmartThingsDeviceService.d.ts +38 -0
  84. package/dist/device/cloud/services/SmartThingsDeviceService.js +52 -0
  85. package/dist/device/cloud/services/index.d.ts +2 -0
  86. package/dist/device/cloud/services/index.js +18 -0
  87. package/dist/device/cloud/types.d.ts +52 -0
  88. package/dist/device/cloud/types.js +15 -0
  89. package/dist/device/index.d.ts +4 -0
  90. package/dist/device/index.js +20 -0
  91. package/dist/device/local/entities/AlertBuilder.d.ts +87 -0
  92. package/dist/device/local/entities/AlertBuilder.example.d.ts +11 -0
  93. package/dist/device/local/entities/AlertBuilder.example.js +117 -0
  94. package/dist/device/local/entities/AlertBuilder.js +179 -0
  95. package/dist/device/local/entities/IssueBuilder.d.ts +109 -0
  96. package/dist/device/local/entities/IssueBuilder.example.d.ts +16 -0
  97. package/dist/device/local/entities/IssueBuilder.example.js +196 -0
  98. package/dist/device/local/entities/IssueBuilder.js +237 -0
  99. package/dist/device/local/entities/index.d.ts +2 -0
  100. package/dist/device/local/entities/index.js +7 -0
  101. package/dist/device/local/events/EventHandler.d.ts +11 -0
  102. package/dist/device/local/events/EventHandler.js +86 -0
  103. package/dist/device/local/events/Events.d.ts +54 -0
  104. package/dist/device/local/events/Events.js +57 -0
  105. package/dist/device/local/events/index.d.ts +2 -0
  106. package/dist/device/local/events/index.js +7 -0
  107. package/dist/device/local/handler/EventHandler.d.ts +7 -0
  108. package/dist/device/local/handler/EventHandler.js +44 -0
  109. package/dist/device/local/interface.d.ts +0 -0
  110. package/dist/device/local/interface.js +1 -0
  111. package/dist/device/local/interfaces/IConnection.d.ts +26 -0
  112. package/dist/device/local/interfaces/IConnection.js +14 -0
  113. package/dist/device/local/interfaces/IDevice.d.ts +68 -0
  114. package/dist/device/local/interfaces/IDevice.js +10 -0
  115. package/dist/device/local/interfaces/IDtDevice.d.ts +16 -0
  116. package/dist/device/local/interfaces/IDtDevice.js +2 -0
  117. package/dist/device/local/interfaces/IHub.d.ts +46 -0
  118. package/dist/device/local/interfaces/IHub.js +2 -0
  119. package/dist/device/local/interfaces/IProperty.d.ts +29 -0
  120. package/dist/device/local/interfaces/IProperty.js +2 -0
  121. package/dist/device/local/interfaces/ISchedule.d.ts +25 -0
  122. package/dist/device/local/interfaces/ISchedule.js +2 -0
  123. package/dist/device/local/interfaces/index.d.ts +3 -0
  124. package/dist/device/local/interfaces/index.js +19 -0
  125. package/dist/device/local/models/Alert.model.d.ts +28 -0
  126. package/dist/device/local/models/Alert.model.js +222 -0
  127. package/dist/device/local/models/Issue.model.d.ts +28 -0
  128. package/dist/device/local/models/Issue.model.js +260 -0
  129. package/dist/device/local/repository/Alert.repository.d.ts +106 -0
  130. package/dist/device/local/repository/Alert.repository.js +374 -0
  131. package/dist/device/local/repository/Connection.repository.d.ts +8 -0
  132. package/dist/device/local/repository/Connection.repository.js +92 -0
  133. package/dist/device/local/repository/Device.repository.d.ts +30 -0
  134. package/dist/device/local/repository/Device.repository.js +325 -0
  135. package/dist/device/local/repository/Hub.repository.d.ts +13 -0
  136. package/dist/device/local/repository/Hub.repository.js +139 -0
  137. package/dist/device/local/repository/Issue.repository.d.ts +113 -0
  138. package/dist/device/local/repository/Issue.repository.js +401 -0
  139. package/dist/device/local/repository/Property.repository.d.ts +8 -0
  140. package/dist/device/local/repository/Property.repository.js +95 -0
  141. package/dist/device/local/repository/Schedule.repository.d.ts +9 -0
  142. package/dist/device/local/repository/Schedule.repository.js +109 -0
  143. package/dist/device/local/services/Alert.service.d.ts +137 -0
  144. package/dist/device/local/services/Alert.service.js +475 -0
  145. package/dist/device/local/services/AlertService.example.d.ts +55 -0
  146. package/dist/device/local/services/AlertService.example.js +148 -0
  147. package/dist/device/local/services/Connection.service.d.ts +8 -0
  148. package/dist/device/local/services/Connection.service.js +32 -0
  149. package/dist/device/local/services/Device.service.d.ts +40 -0
  150. package/dist/device/local/services/Device.service.js +391 -0
  151. package/dist/device/local/services/DeviceHub.service.d.ts +11 -0
  152. package/dist/device/local/services/DeviceHub.service.js +40 -0
  153. package/dist/device/local/services/Hub.service.d.ts +12 -0
  154. package/dist/device/local/services/Hub.service.js +107 -0
  155. package/dist/device/local/services/Issue.service.d.ts +168 -0
  156. package/dist/device/local/services/Issue.service.js +642 -0
  157. package/dist/device/local/services/IssueService.example.d.ts +68 -0
  158. package/dist/device/local/services/IssueService.example.js +177 -0
  159. package/dist/device/local/services/Property.service.d.ts +8 -0
  160. package/dist/device/local/services/Property.service.js +36 -0
  161. package/dist/device/local/services/Schedule.service.d.ts +9 -0
  162. package/dist/device/local/services/Schedule.service.js +26 -0
  163. package/dist/device/local/services/index.d.ts +3 -0
  164. package/dist/device/local/services/index.js +19 -0
  165. package/dist/entities/accessGroup/AccessGroup.repository.d.ts +5 -0
  166. package/dist/entities/accessGroup/AccessGroup.repository.js +72 -0
  167. package/dist/entities/accessGroup/AccessGroup.service.d.ts +5 -0
  168. package/dist/entities/accessGroup/AccessGroup.service.js +105 -0
  169. package/dist/entities/accessGroup/IAccessGroup.d.ts +14 -0
  170. package/dist/entities/accessGroup/IAccessGroup.js +2 -0
  171. package/dist/entities/accessGroup/index.d.ts +2 -0
  172. package/dist/entities/accessGroup/index.js +18 -0
  173. package/dist/entities/admin/Admin.repository.d.ts +1 -1
  174. package/dist/entities/admin/Admin.repository.js +9 -4
  175. package/dist/entities/admin/Admin.service.d.ts +2 -2
  176. package/dist/entities/admin/Admin.service.js +4 -3
  177. package/dist/entities/device/local/repository/DeviceProfile.repository.d.ts +5 -0
  178. package/dist/entities/device/local/repository/DeviceProfile.repository.js +75 -0
  179. package/dist/entities/guest/Guest.repository.d.ts +6 -0
  180. package/dist/entities/guest/Guest.repository.js +74 -0
  181. package/dist/entities/guest/Guest.service.d.ts +6 -0
  182. package/dist/entities/guest/Guest.service.js +104 -0
  183. package/dist/entities/guest/IGuest.d.ts +12 -0
  184. package/dist/entities/guest/IGuest.js +2 -0
  185. package/dist/entities/guest/index.d.ts +2 -0
  186. package/dist/entities/guest/index.js +18 -0
  187. package/dist/entities/schedules/ISchedule.d.ts +14 -0
  188. package/dist/entities/schedules/ISchedule.js +2 -0
  189. package/dist/entities/schedules/Schedule.repository.d.ts +6 -0
  190. package/dist/entities/schedules/Schedule.repository.js +74 -0
  191. package/dist/entities/schedules/Schedule.service.d.ts +6 -0
  192. package/dist/entities/schedules/Schedule.service.js +104 -0
  193. package/dist/entities/schedules/index.d.ts +2 -0
  194. package/dist/entities/schedules/index.js +18 -0
  195. package/dist/entities/user/IUser.d.ts +15 -0
  196. package/dist/entities/user/IUser.js +2 -0
  197. package/dist/entities/user/User.repository.d.ts +5 -0
  198. package/dist/entities/user/User.repository.js +68 -0
  199. package/dist/entities/user/User.service.d.ts +6 -0
  200. package/dist/entities/user/User.service.js +103 -0
  201. package/dist/entities/zone/IZone.d.ts +10 -0
  202. package/dist/entities/zone/IZone.js +2 -0
  203. package/dist/entities/zone/Zone.repository.d.ts +6 -0
  204. package/dist/entities/zone/Zone.repository.js +77 -0
  205. package/dist/entities/zone/Zone.service.d.ts +6 -0
  206. package/dist/entities/zone/Zone.service.js +104 -0
  207. package/dist/entities/zone/index.d.ts +2 -0
  208. package/dist/entities/zone/index.js +18 -0
  209. package/dist/issues/IssueBuilder.example.d.ts +16 -0
  210. package/dist/issues/IssueBuilder.example.js +196 -0
  211. package/dist/issues/IssueService.example.d.ts +68 -0
  212. package/dist/issues/IssueService.example.js +292 -0
  213. package/dist/pms/IPms.d.ts +6 -0
  214. package/dist/pms/IPms.js +10 -0
  215. package/dist/pms/index.d.ts +1 -0
  216. package/dist/pms/index.js +18 -0
  217. package/dist/pms/webhookQueue/examples/index.d.ts +2 -0
  218. package/dist/pms/webhookQueue/examples/index.js +18 -0
  219. package/dist/pms/webhookQueue/examples/pms-integration.d.ts +65 -0
  220. package/dist/pms/webhookQueue/examples/pms-integration.js +254 -0
  221. package/dist/pms/webhookQueue/examples/usage.d.ts +7 -0
  222. package/dist/pms/webhookQueue/examples/usage.js +175 -0
  223. package/dist/pms/webhookQueue/index.d.ts +3 -0
  224. package/dist/pms/webhookQueue/index.js +20 -0
  225. package/dist/pms/webhookQueue/interfaces/IWebhookQueue.d.ts +33 -0
  226. package/dist/pms/webhookQueue/interfaces/IWebhookQueue.js +2 -0
  227. package/dist/pms/webhookQueue/interfaces/IWebhookWorker.d.ts +38 -0
  228. package/dist/pms/webhookQueue/interfaces/IWebhookWorker.js +2 -0
  229. package/dist/pms/webhookQueue/interfaces/index.d.ts +1 -0
  230. package/dist/pms/webhookQueue/interfaces/index.js +17 -0
  231. package/dist/pms/webhookQueue/services/WebhookQueueFactory.d.ts +38 -0
  232. package/dist/pms/webhookQueue/services/WebhookQueueFactory.js +131 -0
  233. package/dist/pms/webhookQueue/services/WebhookQueueIntegration.d.ts +70 -0
  234. package/dist/pms/webhookQueue/services/WebhookQueueIntegration.js +207 -0
  235. package/dist/pms/webhookQueue/services/WebhookQueueService.d.ts +45 -0
  236. package/dist/pms/webhookQueue/services/WebhookQueueService.js +270 -0
  237. package/dist/pms/webhookQueue/services/WebhookWorker.d.ts +37 -0
  238. package/dist/pms/webhookQueue/services/WebhookWorker.js +201 -0
  239. package/dist/pms/webhookQueue/services/index.d.ts +1 -0
  240. package/dist/pms/webhookQueue/services/index.js +17 -0
  241. package/dist/pms/webhookQueue/types/index.d.ts +1 -0
  242. package/dist/pms/webhookQueue/types/index.js +17 -0
  243. package/dist/pms/webhookQueue/types/webhook.types.d.ts +39 -0
  244. package/dist/pms/webhookQueue/types/webhook.types.js +2 -0
  245. package/dist/property/IProperty.d.ts +29 -0
  246. package/dist/property/IProperty.js +2 -0
  247. package/dist/property/Property.repository.d.ts +8 -0
  248. package/dist/property/Property.repository.js +109 -0
  249. package/dist/property/Property.service.d.ts +8 -0
  250. package/dist/property/Property.service.js +124 -0
  251. package/dist/property/index.d.ts +2 -0
  252. package/dist/property/index.js +18 -0
  253. package/dist/queue/interfaces/IHttpRequestJob.d.ts +9 -0
  254. package/dist/queue/interfaces/IHttpRequestJob.js +2 -0
  255. package/dist/types/alert.types.d.ts +57 -0
  256. package/dist/types/alert.types.js +22 -0
  257. package/dist/types/config.types.d.ts +19 -0
  258. package/dist/types/config.types.js +2 -0
  259. package/dist/types/index.d.ts +3 -0
  260. package/dist/types/index.js +19 -0
  261. package/dist/types/issue.types.d.ts +90 -0
  262. package/dist/types/issue.types.js +40 -0
  263. package/dist/utils/http-utils.d.ts +13 -0
  264. package/dist/utils/http-utils.js +117 -0
  265. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ export declare class AdminRepository {
2
+ private readonly axiosInstance;
3
+ private readonly deviceRepository;
4
+ private readonly postgres;
5
+ constructor();
6
+ getZonesByAccessGroupIds(accessGroupIds: string[]): Promise<any[]>;
7
+ }
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
19
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
20
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
21
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
22
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
23
+ var _, done = false;
24
+ for (var i = decorators.length - 1; i >= 0; i--) {
25
+ var context = {};
26
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
27
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
28
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
29
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
30
+ if (kind === "accessor") {
31
+ if (result === void 0) continue;
32
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
33
+ if (_ = accept(result.get)) descriptor.get = _;
34
+ if (_ = accept(result.set)) descriptor.set = _;
35
+ if (_ = accept(result.init)) initializers.unshift(_);
36
+ }
37
+ else if (_ = accept(result)) {
38
+ if (kind === "field") initializers.unshift(_);
39
+ else descriptor[key] = _;
40
+ }
41
+ }
42
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
43
+ done = true;
44
+ };
45
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
46
+ var useValue = arguments.length > 2;
47
+ for (var i = 0; i < initializers.length; i++) {
48
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
49
+ }
50
+ return useValue ? value : void 0;
51
+ };
52
+ var __importStar = (this && this.__importStar) || (function () {
53
+ var ownKeys = function(o) {
54
+ ownKeys = Object.getOwnPropertyNames || function (o) {
55
+ var ar = [];
56
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
57
+ return ar;
58
+ };
59
+ return ownKeys(o);
60
+ };
61
+ return function (mod) {
62
+ if (mod && mod.__esModule) return mod;
63
+ var result = {};
64
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
65
+ __setModuleDefault(result, mod);
66
+ return result;
67
+ };
68
+ })();
69
+ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
70
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
71
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
72
+ };
73
+ Object.defineProperty(exports, "__esModule", { value: true });
74
+ exports.AdminRepository = void 0;
75
+ const typedi_1 = __importStar(require("typedi"));
76
+ const utils_1 = require("../utils");
77
+ const Device_repository_1 = require("../device/local/repository/Device.repository");
78
+ const db_1 = require("../db/db");
79
+ const interfaces_1 = require("../device/cloud/interfaces");
80
+ let AdminRepository = (() => {
81
+ let _classDecorators = [(0, typedi_1.Service)()];
82
+ let _classDescriptor;
83
+ let _classExtraInitializers = [];
84
+ let _classThis;
85
+ var AdminRepository = _classThis = class {
86
+ constructor() {
87
+ this.axiosInstance = (0, utils_1.getCloudServiceAxiosInstance)();
88
+ this.deviceRepository = typedi_1.default.get(Device_repository_1.DeviceRepository);
89
+ this.postgres = (0, db_1.getPostgresClient)();
90
+ }
91
+ async getZonesByAccessGroupIds(accessGroupIds) {
92
+ const result = await this.postgres.query(`SELECT "zc".*, "z"."id", "z"."name"
93
+ FROM "dt_zones_collection_map" "zc"
94
+ INNER JOIN "dt_zones" "z" ON "zc"."zoneId" = "z"."id"
95
+ WHERE "zc"."collectionId" = ANY($1)`, [accessGroupIds]);
96
+ const response = result.rows;
97
+ const _zones = (nestedZones, allzones = []) => {
98
+ nestedZones.forEach((z) => {
99
+ const onlyZone = { ...z };
100
+ delete onlyZone.childZones;
101
+ allzones.push(onlyZone);
102
+ if (!Array.isArray(z.childZones)) {
103
+ if (z.childZones.id)
104
+ z.childZones = [z.childZones];
105
+ }
106
+ if (z.childZones.length) {
107
+ _zones(z.childZones, allzones);
108
+ }
109
+ });
110
+ return allzones.map((e) => e.id);
111
+ };
112
+ // const zones = _zones(response);
113
+ const zoneIds = response.map((el) => el.id);
114
+ const collectionZone = [];
115
+ for (let i = 0; i < response.length; i++) {
116
+ let zoneIds = [];
117
+ const zones = await this.axiosInstance.get(`/zones/child?zoneId=${response[i].zoneId}`);
118
+ zoneIds.push(response[i].zoneId);
119
+ if (zones.childZones?.length > 0) {
120
+ const nestedZoneIds = new Set(_zones(zones.childZones));
121
+ zoneIds = [...zoneIds, ...nestedZoneIds];
122
+ }
123
+ if (collectionZone.length == 0) {
124
+ const obj = {
125
+ collectionId: response[i].collectionId,
126
+ zoneIds,
127
+ };
128
+ collectionZone.push(obj);
129
+ }
130
+ else {
131
+ const obj = collectionZone.find((e) => e.collectionId == response[i].collectionId);
132
+ if (obj) {
133
+ obj.zoneIds = [...obj.zoneIds, ...zoneIds];
134
+ }
135
+ else {
136
+ collectionZone.push({
137
+ collectionId: response[i].collectionId,
138
+ zoneIds,
139
+ });
140
+ }
141
+ }
142
+ }
143
+ let _zoneIds = collectionZone.flatMap((e) => {
144
+ return e.zoneIds.map((z) => z);
145
+ });
146
+ if (_zoneIds.length === 0)
147
+ return [];
148
+ const deviecDetail = await this.deviceRepository.queryDevices({
149
+ zoneIds: _zoneIds,
150
+ excludeDeviceType: interfaces_1.DeviceType.HUB
151
+ });
152
+ const _collectionZone = collectionZone.map((e) => {
153
+ const zones = e.zoneIds;
154
+ let devices = [];
155
+ zones.forEach((element) => {
156
+ const device = deviecDetail.filter((d) => d.zoneId == element);
157
+ // Add collectionId to each device
158
+ device.forEach((dev) => {
159
+ dev.collectionId = e.collectionId;
160
+ });
161
+ const _devices = devices.concat(device);
162
+ devices = _devices;
163
+ });
164
+ e.devices = devices;
165
+ e.parentZone = response;
166
+ return e;
167
+ });
168
+ const collectionZoneDevices = Array.from(new Set(_collectionZone));
169
+ return collectionZoneDevices;
170
+ }
171
+ };
172
+ __setFunctionName(_classThis, "AdminRepository");
173
+ (() => {
174
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
175
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
176
+ AdminRepository = _classThis = _classDescriptor.value;
177
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
178
+ __runInitializers(_classThis, _classExtraInitializers);
179
+ })();
180
+ return AdminRepository = _classThis;
181
+ })();
182
+ exports.AdminRepository = AdminRepository;
@@ -0,0 +1,5 @@
1
+ export declare class AdminService {
2
+ private readonly adminRepository;
3
+ constructor();
4
+ getZonesByAccessGroupIds(accessGroupIds: string[]): Promise<any[]>;
5
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AdminService = void 0;
7
+ const typedi_1 = __importDefault(require("typedi"));
8
+ const Admin_repository_1 = require("./Admin.repository");
9
+ class AdminService {
10
+ constructor() {
11
+ this.adminRepository = typedi_1.default.get(Admin_repository_1.AdminRepository);
12
+ }
13
+ async getZonesByAccessGroupIds(accessGroupIds) {
14
+ return await this.adminRepository.getZonesByAccessGroupIds(accessGroupIds);
15
+ }
16
+ }
17
+ exports.AdminService = AdminService;
@@ -0,0 +1 @@
1
+ export * from "./Admin.service";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./Admin.service"), exports);
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Example usage of AlertBuilder
3
+ * This file demonstrates various ways to use the AlertBuilder pattern
4
+ */
5
+ export declare function createBasicAlert(): import("./alert.types").CreateAlertData;
6
+ export declare function createDeviceAlert(): import("./alert.types").CreateAlertData;
7
+ export declare function createSecurityAlert(): import("./alert.types").CreateAlertData;
8
+ export declare function createEnergyAlert(): import("./alert.types").CreateAlertData;
9
+ export declare function createHubAlert(): import("./alert.types").CreateAlertData;
10
+ export declare function createSnoozedAlert(): import("./alert.types").CreateAlertData;
11
+ export declare function createMultipleAlerts(): import("./alert.types").CreateAlertData[];
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBasicAlert = createBasicAlert;
4
+ exports.createDeviceAlert = createDeviceAlert;
5
+ exports.createSecurityAlert = createSecurityAlert;
6
+ exports.createEnergyAlert = createEnergyAlert;
7
+ exports.createHubAlert = createHubAlert;
8
+ exports.createSnoozedAlert = createSnoozedAlert;
9
+ exports.createMultipleAlerts = createMultipleAlerts;
10
+ const AlertBuilder_1 = require("./AlertBuilder");
11
+ const alert_types_1 = require("./alert.types");
12
+ /**
13
+ * Example usage of AlertBuilder
14
+ * This file demonstrates various ways to use the AlertBuilder pattern
15
+ */
16
+ // Example 1: Basic alert creation
17
+ function createBasicAlert() {
18
+ const alertData = new AlertBuilder_1.AlertBuilder()
19
+ .setCategory(alert_types_1.AlertCategory.OPERATIONS)
20
+ .setPropertyId("prop123")
21
+ .setTitle("Device Offline")
22
+ .setDescription("Device has been offline for more than 5 minutes")
23
+ .setEntityId("device456")
24
+ .setEntityType(alert_types_1.EntityType.DEVICE)
25
+ .setSeverity(alert_types_1.AlertSeverity.HIGH)
26
+ .setCreatedBy("user789")
27
+ .build();
28
+ return alertData;
29
+ }
30
+ // Example 2: Using static factory methods
31
+ function createDeviceAlert() {
32
+ const alertData = AlertBuilder_1.AlertBuilder.createDeviceAlert("device123", "prop456")
33
+ .setCategory(alert_types_1.AlertCategory.READINESS)
34
+ .setTitle("Device Maintenance Required")
35
+ .setDescription("Device firmware update is available")
36
+ .setSeverity(alert_types_1.AlertSeverity.MEDIUM)
37
+ .setCreatedBy("system")
38
+ .build();
39
+ return alertData;
40
+ }
41
+ // Example 3: Using predefined alert types
42
+ function createSecurityAlert() {
43
+ const alertData = AlertBuilder_1.AlertBuilder.createSecurityAlert()
44
+ .setPropertyId("prop789")
45
+ .setTitle("Unauthorized Access Attempt")
46
+ .setDescription("Multiple failed login attempts detected")
47
+ .setEntityId("user123")
48
+ .setEntityType(alert_types_1.EntityType.USER)
49
+ .setCreatedBy("security-system")
50
+ .build();
51
+ return alertData;
52
+ }
53
+ // Example 4: Creating energy alert
54
+ function createEnergyAlert() {
55
+ const alertData = AlertBuilder_1.AlertBuilder.createEnergyAlert()
56
+ .setPropertyId("prop101")
57
+ .setTitle("High Energy Consumption")
58
+ .setDescription("Energy usage is 20% above normal levels")
59
+ .setEntityId("zone456")
60
+ .setEntityType(alert_types_1.EntityType.COLLECTION)
61
+ .setCreatedBy("energy-monitor")
62
+ .build();
63
+ return alertData;
64
+ }
65
+ // Example 5: Creating hub alert
66
+ function createHubAlert() {
67
+ const alertData = AlertBuilder_1.AlertBuilder.createHubAlert("hub789", "prop202")
68
+ .setCategory(alert_types_1.AlertCategory.OPERATIONS)
69
+ .setTitle("Hub Connection Lost")
70
+ .setDescription("Hub has lost connection to the network")
71
+ .setSeverity(alert_types_1.AlertSeverity.CRITICAL)
72
+ .setCreatedBy("network-monitor")
73
+ .build();
74
+ return alertData;
75
+ }
76
+ // Example 6: Alert with snooze
77
+ function createSnoozedAlert() {
78
+ const snoozeUntil = new Date();
79
+ snoozeUntil.setHours(snoozeUntil.getHours() + 2); // Snooze for 2 hours
80
+ const alertData = new AlertBuilder_1.AlertBuilder()
81
+ .setCategory(alert_types_1.AlertCategory.OTHER)
82
+ .setPropertyId("prop303")
83
+ .setTitle("Scheduled Maintenance")
84
+ .setDescription("System maintenance scheduled for tonight")
85
+ .setEntityType(alert_types_1.EntityType.PROPERTY)
86
+ .setSeverity(alert_types_1.AlertSeverity.INFO)
87
+ .setCreatedBy("admin")
88
+ .setSnoozeUntil(snoozeUntil)
89
+ .build();
90
+ return alertData;
91
+ }
92
+ // Example 7: Reusing builder instance
93
+ function createMultipleAlerts() {
94
+ const builder = new AlertBuilder_1.AlertBuilder()
95
+ .setPropertyId("prop404")
96
+ .setCreatedBy("system");
97
+ const alert1 = builder
98
+ .setCategory(alert_types_1.AlertCategory.OPERATIONS)
99
+ .setTitle("Device Temperature High")
100
+ .setDescription("Device temperature exceeds normal operating range")
101
+ .setEntityId("device789")
102
+ .setEntityType(alert_types_1.EntityType.DEVICE)
103
+ .setSeverity(alert_types_1.AlertSeverity.HIGH)
104
+ .build();
105
+ const alert2 = builder
106
+ .reset()
107
+ .setPropertyId("prop404")
108
+ .setCategory(alert_types_1.AlertCategory.ENERGY)
109
+ .setTitle("Low Battery Warning")
110
+ .setDescription("Device battery level is below 20%")
111
+ .setEntityId("device789")
112
+ .setEntityType(alert_types_1.EntityType.DEVICE)
113
+ .setSeverity(alert_types_1.AlertSeverity.MEDIUM)
114
+ .setCreatedBy("system")
115
+ .build();
116
+ return [alert1, alert2];
117
+ }
@@ -0,0 +1,55 @@
1
+ import { AlertService } from "./Alert.service";
2
+ /**
3
+ * Example usage of the updated AlertService with AlertBuilder integration
4
+ * This file demonstrates various ways to use the AlertService with the new AlertBuilder
5
+ */
6
+ export declare class AlertServiceExample {
7
+ private readonly alertService;
8
+ constructor(alertService: AlertService);
9
+ /**
10
+ * Example 1: Using the updated createAlert method with AlertBuilder
11
+ */
12
+ createAlertWithBuilder(): Promise<import("./alert.types").AlertDocument>;
13
+ /**
14
+ * Example 2: Using convenience methods for specific alert types
15
+ */
16
+ createSpecificAlerts(): Promise<{
17
+ readinessAlert: import("./alert.types").AlertDocument;
18
+ operationsAlert: import("./alert.types").AlertDocument;
19
+ securityAlert: import("./alert.types").AlertDocument;
20
+ energyAlert: import("./alert.types").AlertDocument;
21
+ }>;
22
+ /**
23
+ * Example 3: Using device-specific alert methods
24
+ */
25
+ createDeviceAlerts(): Promise<{
26
+ deviceAlert1: import("./alert.types").AlertDocument;
27
+ deviceAlert2: import("./alert.types").AlertDocument;
28
+ }>;
29
+ /**
30
+ * Example 4: Using hub-specific alert methods
31
+ */
32
+ createHubAlerts(): Promise<{
33
+ hubAlert1: import("./alert.types").AlertDocument;
34
+ hubAlert2: import("./alert.types").AlertDocument;
35
+ }>;
36
+ /**
37
+ * Example 5: Using static factory methods with AlertBuilder
38
+ */
39
+ createAlertsWithStaticMethods(): Promise<{
40
+ alert1: import("./alert.types").AlertDocument;
41
+ alert2: import("./alert.types").AlertDocument;
42
+ }>;
43
+ /**
44
+ * Example 6: Creating multiple alerts efficiently
45
+ */
46
+ createMultipleAlerts(): Promise<import("./alert.types").AlertDocument[]>;
47
+ /**
48
+ * Example 7: Creating alerts with snooze functionality
49
+ */
50
+ createSnoozedAlert(): Promise<import("./alert.types").AlertDocument>;
51
+ /**
52
+ * Example 8: Backward compatibility - still works with CreateAlertData
53
+ */
54
+ createAlertWithLegacyData(): Promise<import("./alert.types").AlertDocument>;
55
+ }
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlertServiceExample = void 0;
4
+ const Service_1 = require("../constants/Service");
5
+ const AlertBuilder_1 = require("./AlertBuilder");
6
+ const alert_types_1 = require("./alert.types");
7
+ /**
8
+ * Example usage of the updated AlertService with AlertBuilder integration
9
+ * This file demonstrates various ways to use the AlertService with the new AlertBuilder
10
+ */
11
+ class AlertServiceExample {
12
+ constructor(alertService) {
13
+ this.alertService = alertService;
14
+ }
15
+ /**
16
+ * Example 1: Using the updated createAlert method with AlertBuilder
17
+ */
18
+ async createAlertWithBuilder() {
19
+ const alertBuilder = new AlertBuilder_1.AlertBuilder()
20
+ .setCategory(alert_types_1.AlertCategory.OPERATIONS)
21
+ .setPropertyId("prop123")
22
+ .setTitle("Device Offline")
23
+ .setDescription("Device has been offline for more than 5 minutes")
24
+ .setEntityId("device456")
25
+ .setEntityType(alert_types_1.EntityType.DEVICE)
26
+ .setSeverity(alert_types_1.AlertSeverity.HIGH)
27
+ .setCreatedBy("user789");
28
+ // Pass the AlertBuilder directly to createAlert
29
+ const alert = await this.alertService.createAlert(alertBuilder);
30
+ return alert;
31
+ }
32
+ /**
33
+ * Example 2: Using convenience methods for specific alert types
34
+ */
35
+ async createSpecificAlerts() {
36
+ // Create a readiness alert
37
+ const readinessAlert = await this.alertService.raiseReadinessAlert("prop123", "System Maintenance Required", "System maintenance is scheduled for tonight", "system456", alert_types_1.EntityType.PROPERTY, "admin");
38
+ // Create an operations alert
39
+ const operationsAlert = await this.alertService.raiseOperationsAlert("prop123", "Device Temperature High", "Device temperature exceeds normal operating range", "device789", alert_types_1.EntityType.DEVICE, "monitor");
40
+ // Create a security alert
41
+ const securityAlert = await this.alertService.raiseSecurityAlert("prop123", "Unauthorized Access Attempt", "Multiple failed login attempts detected", "user123", alert_types_1.EntityType.USER, "security-system");
42
+ // Create an energy alert
43
+ const energyAlert = await this.alertService.raiseEnergyAlert("prop123", "High Energy Consumption", "Energy usage is 20% above normal levels", "zone456", alert_types_1.EntityType.COLLECTION, "energy-monitor");
44
+ return { readinessAlert, operationsAlert, securityAlert, energyAlert };
45
+ }
46
+ /**
47
+ * Example 3: Using device-specific alert methods
48
+ */
49
+ async createDeviceAlerts() {
50
+ // Create a device alert with default category and severity
51
+ const deviceAlert1 = await this.alertService.raiseDeviceAlert("device123", "prop456", "Device Battery Low", "Device battery level is below 20%", undefined, // Use default category
52
+ undefined, // Use default severity
53
+ Service_1.Source.CLOUD_EVENT);
54
+ // Create a device alert with custom category and severity
55
+ const deviceAlert2 = await this.alertService.raiseDeviceAlert("device789", "prop456", "Device Firmware Update Available", "New firmware version is available for installation", alert_types_1.AlertCategory.READINESS, alert_types_1.AlertSeverity.MEDIUM, Service_1.Source.CLOUD_EVENT);
56
+ return { deviceAlert1, deviceAlert2 };
57
+ }
58
+ /**
59
+ * Example 4: Using hub-specific alert methods
60
+ */
61
+ async createHubAlerts() {
62
+ // Create a hub alert with default settings
63
+ const hubAlert1 = await this.alertService.raiseHubAlert("hub123", "prop456", "Hub Connection Lost", "Hub has lost connection to the network", undefined, // Use default category
64
+ undefined, // Use default severity
65
+ "network-monitor");
66
+ // Create a hub alert with custom settings
67
+ const hubAlert2 = await this.alertService.raiseHubAlert("hub789", "prop456", "Hub Maintenance Required", "Hub requires scheduled maintenance", alert_types_1.AlertCategory.READINESS, alert_types_1.AlertSeverity.LOW, "maintenance-system");
68
+ return { hubAlert1, hubAlert2 };
69
+ }
70
+ /**
71
+ * Example 5: Using static factory methods with AlertBuilder
72
+ */
73
+ async createAlertsWithStaticMethods() {
74
+ // Create a device alert using static factory method
75
+ const deviceAlert = AlertBuilder_1.AlertBuilder.createDeviceAlert("device123", "prop456")
76
+ .setCategory(alert_types_1.AlertCategory.OPERATIONS)
77
+ .setTitle("Device Offline")
78
+ .setDescription("Device has been offline for more than 5 minutes")
79
+ .setSeverity(alert_types_1.AlertSeverity.HIGH)
80
+ .setCreatedBy("monitor");
81
+ const alert1 = await this.alertService.createAlert(deviceAlert);
82
+ // Create a hub alert using static factory method
83
+ const hubAlert = AlertBuilder_1.AlertBuilder.createHubAlert("hub789", "prop202")
84
+ .setCategory(alert_types_1.AlertCategory.SECURITY)
85
+ .setTitle("Hub Security Breach")
86
+ .setDescription("Unauthorized access attempt detected on hub")
87
+ .setSeverity(alert_types_1.AlertSeverity.CRITICAL)
88
+ .setCreatedBy("security-system");
89
+ const alert2 = await this.alertService.createAlert(hubAlert);
90
+ return { alert1, alert2 };
91
+ }
92
+ /**
93
+ * Example 6: Creating multiple alerts efficiently
94
+ */
95
+ async createMultipleAlerts() {
96
+ const alerts = [];
97
+ // Create multiple device alerts efficiently
98
+ const deviceIds = ["device1", "device2", "device3"];
99
+ const propertyId = "prop123";
100
+ for (const deviceId of deviceIds) {
101
+ const alertBuilder = AlertBuilder_1.AlertBuilder.createDeviceAlert(deviceId, propertyId)
102
+ .setCategory(alert_types_1.AlertCategory.OPERATIONS)
103
+ .setTitle(`Device ${deviceId} Status`)
104
+ .setDescription(`Status check for device ${deviceId}`)
105
+ .setSeverity(alert_types_1.AlertSeverity.MEDIUM)
106
+ .setCreatedBy("batch-processor");
107
+ const alert = await this.alertService.createAlert(alertBuilder);
108
+ alerts.push(alert);
109
+ }
110
+ return alerts;
111
+ }
112
+ /**
113
+ * Example 7: Creating alerts with snooze functionality
114
+ */
115
+ async createSnoozedAlert() {
116
+ const snoozeUntil = new Date();
117
+ snoozeUntil.setHours(snoozeUntil.getHours() + 2); // Snooze for 2 hours
118
+ const alertBuilder = new AlertBuilder_1.AlertBuilder()
119
+ .setCategory(alert_types_1.AlertCategory.OTHER)
120
+ .setPropertyId("prop303")
121
+ .setTitle("Scheduled Maintenance")
122
+ .setDescription("System maintenance scheduled for tonight")
123
+ .setEntityType(alert_types_1.EntityType.PROPERTY)
124
+ .setSeverity(alert_types_1.AlertSeverity.INFO)
125
+ .setCreatedBy("admin")
126
+ .setSnoozeUntil(snoozeUntil);
127
+ const alert = await this.alertService.createAlert(alertBuilder);
128
+ return alert;
129
+ }
130
+ /**
131
+ * Example 8: Backward compatibility - still works with CreateAlertData
132
+ */
133
+ async createAlertWithLegacyData() {
134
+ const alertData = {
135
+ category: alert_types_1.AlertCategory.OPERATIONS,
136
+ propertyId: "prop123",
137
+ title: "Legacy Alert",
138
+ description: "This alert was created using the old CreateAlertData format",
139
+ entityId: "device456",
140
+ entityType: alert_types_1.EntityType.DEVICE,
141
+ severity: alert_types_1.AlertSeverity.MEDIUM,
142
+ createdBy: "legacy-system",
143
+ source: Service_1.Source.CLOUD_EVENT,
144
+ };
145
+ // This still works with the updated createAlert method
146
+ const alert = await this.alertService.createAlert(alertData);
147
+ return alert;
148
+ }
149
+ }
150
+ exports.AlertServiceExample = AlertServiceExample;
@@ -0,0 +1,16 @@
1
+ export interface AuditProperties {
2
+ resource: string;
3
+ propertyId: string;
4
+ propertyName?: string;
5
+ userId?: string;
6
+ userName?: string;
7
+ deviceId?: string;
8
+ deviceName?: string;
9
+ zoneId?: string;
10
+ zoneName?: string;
11
+ accessGroupId?: string;
12
+ accessGroupName?: string;
13
+ scheduleId?: string;
14
+ scheduleName?: string;
15
+ [key: string]: any;
16
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { ICronicle } from "./ICronicle.interface";
2
+ export declare class CronicleService {
3
+ private cronicleEndpoint;
4
+ private cronicleApiKey;
5
+ constructor();
6
+ registerJob(payload: ICronicle): Promise<void>;
7
+ getJob(jobId: string): Promise<any>;
8
+ deleteJob(jobId: string): Promise<void>;
9
+ }