@kohost/api-client 3.0.0-beta.9 → 3.0.0-beta.91

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 (277) hide show
  1. package/README.md +71 -0
  2. package/dist/cjs/AMQPClient/index.js +296 -0
  3. package/dist/cjs/{Client.js → Client/index.js} +1907 -598
  4. package/dist/cjs/Commands/CheckInReservationCommand.js +19 -0
  5. package/dist/cjs/Commands/CheckOutReservationCommand.js +20 -0
  6. package/dist/cjs/Commands/Command.js +34 -0
  7. package/dist/cjs/Commands/CreateImageUploadEndpointCommand.js +17 -0
  8. package/dist/cjs/Commands/CreateShortLinkCommand.js +20 -0
  9. package/dist/cjs/Commands/DiscoverCategoriesCommand.js +20 -0
  10. package/dist/cjs/Commands/DiscoverReservationSpaceCategoryAvailabilitiesCommand.js +20 -0
  11. package/dist/cjs/Commands/DiscoverReservationsCommand.js +20 -0
  12. package/dist/cjs/Commands/DiscoverRoomsCommand.js +37 -0
  13. package/dist/cjs/Commands/DiscoverUsersCommand.js +19 -0
  14. package/dist/cjs/Commands/GetMobileKeyCommand.js +24 -0
  15. package/dist/cjs/Commands/GetProductsCommand.js +17 -0
  16. package/dist/cjs/Commands/OCRDocumentCommand.js +15 -0
  17. package/dist/cjs/Commands/SellProductsCommand.js +17 -0
  18. package/dist/cjs/Commands/SendEmailCommand.js +24 -0
  19. package/dist/cjs/Commands/SendSMSCommand.js +21 -0
  20. package/dist/cjs/Commands/SetAlarmCommand.js +17 -0
  21. package/dist/cjs/Commands/SetCourtesyCommand.js +17 -0
  22. package/dist/cjs/Commands/SetDimmerCommand.js +17 -0
  23. package/dist/cjs/Commands/SetLockCommand.js +17 -0
  24. package/dist/cjs/Commands/SetMediaCommand.js +17 -0
  25. package/dist/cjs/Commands/SetSceneCommand.js +17 -0
  26. package/dist/cjs/Commands/SetSwitchCommand.js +17 -0
  27. package/dist/cjs/Commands/SetThermostatCommand.js +17 -0
  28. package/dist/cjs/Commands/SetWindowCoveringCommand.js +17 -0
  29. package/dist/cjs/Commands/UpdateReservationCommand.js +19 -0
  30. package/dist/cjs/Commands/UpdateUserCommand.js +41 -0
  31. package/dist/cjs/Commands/UploadImageCommand.js +17 -0
  32. package/dist/cjs/Commands/index.js +57 -0
  33. package/dist/cjs/Errors/AppError.js +8 -0
  34. package/dist/cjs/Errors/AuthenticationError.js +9 -0
  35. package/dist/cjs/Errors/AuthorizationError.js +9 -0
  36. package/dist/cjs/Errors/ConflictError.js +9 -0
  37. package/dist/cjs/Errors/DeviceCommError.js +9 -0
  38. package/dist/cjs/Errors/LoginError.js +9 -0
  39. package/dist/cjs/Errors/NotFoundError.js +9 -0
  40. package/dist/cjs/Errors/RequestError.js +9 -0
  41. package/dist/cjs/Errors/SystemCommError.js +9 -0
  42. package/dist/cjs/Errors/TokenExpiredError.js +9 -0
  43. package/dist/cjs/Errors/UnprocessableRequestError.js +9 -0
  44. package/dist/cjs/Errors/ValidationError.js +9 -0
  45. package/dist/cjs/Errors/index.js +16 -0
  46. package/dist/cjs/Events/ApplicationInUseEvent.js +21 -0
  47. package/dist/cjs/Events/ApplicationOutOfUseEvent.js +21 -0
  48. package/dist/cjs/Events/EmailEvent.js +18 -0
  49. package/dist/cjs/Events/Event.js +55 -0
  50. package/dist/cjs/Events/SMSEvent.js +18 -0
  51. package/dist/cjs/Events/SMSSentEvent.js +17 -0
  52. package/dist/cjs/Events/SceneSetEvent.js +17 -0
  53. package/dist/cjs/Events/ShortLinkCreatedEvent.js +17 -0
  54. package/dist/cjs/Events/SystemAlarmUpdatedEvent.js +17 -0
  55. package/dist/cjs/Events/SystemCameraUpdatedEvent.js +17 -0
  56. package/dist/cjs/Events/SystemCategoryUpdatedEvent.js +17 -0
  57. package/dist/cjs/Events/SystemCourtesyUpdatedEvent.js +17 -0
  58. package/dist/cjs/Events/SystemCredentialUpdatedEvent.js +17 -0
  59. package/dist/cjs/Events/SystemDimmerUpdatedEvent.js +17 -0
  60. package/dist/cjs/Events/SystemEntityDeletedEvent.js +17 -0
  61. package/dist/cjs/Events/SystemGatewayUpdatedEvent.js +17 -0
  62. package/dist/cjs/Events/SystemLockUpdatedEvent.js +17 -0
  63. package/dist/cjs/Events/SystemMediaSourceUpdatedEvent.js +17 -0
  64. package/dist/cjs/Events/SystemMotionSensorUpdatedEvent.js +17 -0
  65. package/dist/cjs/Events/SystemOrganizationUpdatedEvent.js +17 -0
  66. package/dist/cjs/Events/SystemProductUpdatedEvent.js +17 -0
  67. package/dist/cjs/Events/SystemPropertyUpdatedEvent.js +17 -0
  68. package/dist/cjs/Events/SystemReservationUpdatedEvent.js +17 -0
  69. package/dist/cjs/Events/SystemSceneControllerUpdatedEvent.js +17 -0
  70. package/dist/cjs/Events/SystemSpaceUpdatedEvent.js +17 -0
  71. package/dist/cjs/Events/SystemSwitchUpdatedEvent.js +17 -0
  72. package/dist/cjs/Events/SystemThermostatUpdatedEvent.js +17 -0
  73. package/dist/cjs/Events/SystemUserUpdatedEvent.js +17 -0
  74. package/dist/cjs/Events/SystemWindowCoveringUpdatedEvent.js +17 -0
  75. package/dist/cjs/Events/index.js +65 -0
  76. package/dist/cjs/Models/Alarm.js +35 -0
  77. package/dist/cjs/Models/Announcement.js +34 -0
  78. package/dist/cjs/Models/Camera.js +35 -0
  79. package/dist/cjs/Models/Category.js +36 -0
  80. package/dist/cjs/Models/Courtesy.js +39 -0
  81. package/dist/cjs/Models/Credential.js +35 -0
  82. package/dist/cjs/Models/Dimmer.js +61 -0
  83. package/dist/cjs/Models/DiscoveredDevice.js +36 -0
  84. package/dist/cjs/Models/EmailMessage.js +35 -0
  85. package/dist/cjs/Models/EnergyReport.js +35 -0
  86. package/dist/cjs/Models/EnergyReportShard.js +35 -0
  87. package/dist/cjs/Models/Gateway.js +35 -0
  88. package/dist/cjs/Models/Identification.js +38 -0
  89. package/dist/cjs/Models/Kohost.js +96 -0
  90. package/dist/cjs/Models/Lock.js +39 -0
  91. package/dist/cjs/Models/MediaFile.js +48 -0
  92. package/dist/cjs/Models/MediaSource.js +35 -0
  93. package/dist/cjs/Models/MotionSensor.js +35 -0
  94. package/dist/cjs/Models/Order.js +97 -0
  95. package/dist/cjs/Models/Organization.js +34 -0
  96. package/dist/cjs/Models/Product.js +35 -0
  97. package/dist/cjs/Models/Property.js +34 -0
  98. package/dist/cjs/Models/Reservation.js +114 -0
  99. package/dist/cjs/Models/Room.js +217 -0
  100. package/dist/cjs/Models/Scene.js +169 -0
  101. package/dist/cjs/Models/ShortLink.js +35 -0
  102. package/dist/cjs/Models/SmsMessage.js +35 -0
  103. package/dist/cjs/Models/Space.js +97 -0
  104. package/dist/cjs/Models/Switch.js +39 -0
  105. package/dist/cjs/Models/SystemUser.js +55 -0
  106. package/dist/cjs/Models/Thermostat.js +86 -0
  107. package/dist/cjs/Models/Ticket.js +55 -0
  108. package/dist/cjs/Models/User.js +115 -0
  109. package/dist/cjs/Models/WindowCovering.js +55 -0
  110. package/dist/cjs/Models/index.js +72 -0
  111. package/dist/cjs/SocketIoClient/index.js +74 -0
  112. package/dist/cjs/defs/deviceTypes.js +15 -0
  113. package/dist/cjs/defs/formalDeviceTypes.js +6 -0
  114. package/dist/cjs/defs/index.js +11 -0
  115. package/dist/cjs/{index.cjs.js → index.js} +7 -1
  116. package/dist/cjs/schemas/AlarmSchema.d.ts +158 -0
  117. package/dist/cjs/schemas/AnnouncementSchema.d.ts +60 -0
  118. package/dist/cjs/schemas/CameraSchema.d.ts +149 -0
  119. package/dist/cjs/schemas/CategorySchema.d.ts +82 -0
  120. package/dist/cjs/schemas/CourtesySchema.d.ts +148 -0
  121. package/dist/cjs/schemas/CredentialSchema.d.ts +53 -0
  122. package/dist/cjs/schemas/DefinitionsSchema.d.ts +10 -0
  123. package/dist/cjs/schemas/DimmerSchema.d.ts +147 -0
  124. package/dist/cjs/schemas/DiscoveredDeviceSchema.d.ts +39 -0
  125. package/dist/cjs/schemas/EmailMessageSchema.d.ts +49 -0
  126. package/dist/cjs/schemas/EnergyReportSchema.d.ts +57 -0
  127. package/dist/cjs/schemas/EnergyReportShardSchema.d.ts +61 -0
  128. package/dist/cjs/schemas/GatewaySchema.d.ts +145 -0
  129. package/dist/cjs/schemas/IdentificationSchema.d.ts +45 -0
  130. package/dist/cjs/schemas/LockSchema.d.ts +152 -0
  131. package/dist/cjs/schemas/MediaFileSchema.d.ts +43 -0
  132. package/dist/cjs/schemas/MediaSourceSchema.d.ts +244 -0
  133. package/dist/cjs/schemas/MotionSensorSchema.d.ts +143 -0
  134. package/dist/cjs/schemas/OrderSchema.d.ts +91 -0
  135. package/dist/cjs/schemas/OrganizationSchema.d.ts +34 -0
  136. package/dist/cjs/schemas/PaymentSchema.d.ts +33 -0
  137. package/dist/cjs/schemas/ProductSchema.d.ts +66 -0
  138. package/dist/cjs/schemas/PropertySchema.d.ts +144 -0
  139. package/dist/cjs/schemas/ReservationSchema.d.ts +119 -0
  140. package/dist/cjs/schemas/RoomSchema.d.ts +1103 -0
  141. package/dist/cjs/schemas/SceneSchema.d.ts +57 -0
  142. package/dist/cjs/schemas/ShortLinkSchema.d.ts +20 -0
  143. package/dist/cjs/schemas/SmsMessageSchema.d.ts +40 -0
  144. package/dist/cjs/schemas/SpaceSchema.d.ts +73 -0
  145. package/dist/cjs/schemas/SwitchSchema.d.ts +148 -0
  146. package/dist/cjs/schemas/SystemUserSchema.d.ts +194 -0
  147. package/dist/cjs/schemas/ThermostatSchema.d.ts +178 -0
  148. package/dist/cjs/schemas/TicketSchema.d.ts +90 -0
  149. package/dist/cjs/schemas/UserSchema.d.ts +287 -0
  150. package/dist/cjs/schemas/WindowCoveringSchema.d.ts +147 -0
  151. package/dist/cjs/schemas/alarm.json +81 -0
  152. package/dist/cjs/schemas/announcement.json +41 -0
  153. package/dist/cjs/schemas/camera.json +50 -0
  154. package/dist/cjs/schemas/category.json +42 -0
  155. package/dist/cjs/schemas/courtesy.json +48 -0
  156. package/dist/cjs/schemas/credential.json +44 -0
  157. package/dist/cjs/schemas/definitions.json +223 -0
  158. package/dist/cjs/schemas/dimmer.json +42 -0
  159. package/dist/cjs/schemas/discoveredDevice.json +31 -0
  160. package/dist/cjs/schemas/emailMessage.json +71 -0
  161. package/dist/cjs/schemas/energyReport.json +86 -0
  162. package/dist/cjs/schemas/energyReportShard.json +75 -0
  163. package/dist/cjs/schemas/gateway.json +34 -0
  164. package/dist/cjs/schemas/identification.json +61 -0
  165. package/dist/cjs/schemas/lock.json +50 -0
  166. package/dist/cjs/schemas/mediaFile.json +70 -0
  167. package/dist/cjs/schemas/mediaSource.json +187 -0
  168. package/dist/cjs/schemas/motionSensor.json +32 -0
  169. package/dist/cjs/schemas/order.json +182 -0
  170. package/dist/cjs/schemas/organization.json +40 -0
  171. package/dist/cjs/schemas/payment.json +47 -0
  172. package/dist/cjs/schemas/product.json +41 -0
  173. package/dist/cjs/schemas/property.json +347 -0
  174. package/dist/cjs/schemas/reservation.json +137 -0
  175. package/dist/cjs/schemas/room.json +98 -0
  176. package/dist/cjs/schemas/scene.json +121 -0
  177. package/dist/cjs/schemas/shortLink.json +30 -0
  178. package/dist/cjs/schemas/smsMessage.json +61 -0
  179. package/dist/cjs/schemas/space.json +129 -0
  180. package/dist/cjs/schemas/switch.json +44 -0
  181. package/dist/cjs/schemas/systemUser.json +98 -0
  182. package/dist/cjs/schemas/thermostat.json +150 -0
  183. package/dist/cjs/schemas/ticket.json +181 -0
  184. package/dist/cjs/schemas/user.json +170 -0
  185. package/dist/cjs/schemas/windowCovering.json +42 -0
  186. package/dist/cjs/utils/errorFactory.js +8 -0
  187. package/dist/cjs/utils/eventFactory.js +10 -0
  188. package/dist/cjs/utils/getDeviceTypes.js +7 -0
  189. package/dist/cjs/utils/getFormalDeviceType.js +5 -0
  190. package/dist/cjs/utils/index.js +11 -0
  191. package/dist/cjs/utils/schema.js +25 -0
  192. package/dist/esm/Client.js +2013 -637
  193. package/dist/esm/Client.js.map +4 -4
  194. package/dist/esm/Commands.js +499 -120
  195. package/dist/esm/Commands.js.map +3 -3
  196. package/dist/esm/Errors.js +73 -22
  197. package/dist/esm/Errors.js.map +3 -3
  198. package/dist/esm/Events.js +414 -73
  199. package/dist/esm/Events.js.map +3 -3
  200. package/dist/esm/Models.js +3313 -3921
  201. package/dist/esm/Models.js.map +4 -4
  202. package/dist/esm/SocketIoClient.js +4846 -0
  203. package/dist/esm/SocketIoClient.js.map +7 -0
  204. package/dist/esm/defs.js +168 -112
  205. package/dist/esm/defs.js.map +4 -4
  206. package/dist/esm/index.js +17 -10
  207. package/dist/esm/utils.js +451 -73
  208. package/dist/esm/utils.js.map +3 -3
  209. package/dist/useCases/AdminUpdateCustomer.js +1 -1
  210. package/dist/useCases/AssignSpaceToReservation.js +32 -0
  211. package/dist/useCases/{AdminCreateProperty.js → BatchNotifyCheckIn.js} +2 -2
  212. package/dist/useCases/{AdminCreateCustomer.js → BatchNotifyCheckOut.js} +2 -2
  213. package/dist/useCases/BatchNotifyMissedCheckOut.js +32 -0
  214. package/dist/useCases/{AdminUpdateProperty.js → CheckOutReservation.js} +3 -3
  215. package/dist/useCases/{AdminListCustomers.js → CreateAnnouncement.js} +3 -3
  216. package/dist/useCases/CreateCateory.js +32 -0
  217. package/dist/useCases/CreateImageUploadEndpoint.js +32 -0
  218. package/dist/useCases/CreateMediaSource.js +32 -0
  219. package/dist/useCases/CreateOrganization.js +32 -0
  220. package/dist/useCases/{AdminLoginUser.js → CreateProperty.js} +2 -2
  221. package/dist/useCases/DeleteAnnouncement.js +32 -0
  222. package/dist/useCases/DeleteCategory.js +32 -0
  223. package/dist/useCases/DeleteMediaFile.js +32 -0
  224. package/dist/useCases/DeleteMediaSource.js +32 -0
  225. package/dist/useCases/{AdminCreateAdminUser.js → DescribeAnnouncement.js} +4 -4
  226. package/dist/useCases/{ListIntegrations.js → DescribeCategory.js} +3 -3
  227. package/dist/useCases/{DeleteSource.js → DescribeLockCredential.js} +3 -3
  228. package/dist/useCases/{AdminListAdminUsers.js → DescribeMediaSource.js} +3 -3
  229. package/dist/useCases/DescribeMyAccessCredentials.js +32 -0
  230. package/dist/useCases/{AdminDescribeCustomer.js → DescribeOrganization.js} +2 -2
  231. package/dist/useCases/{DescribeIntegration.js → DescribeProduct.js} +2 -2
  232. package/dist/useCases/DescribeProperty.js +32 -0
  233. package/dist/useCases/DescribeReservationEarlyCheckInProducts.js +32 -0
  234. package/dist/useCases/DescribeReservationLateCheckOutProducts.js +32 -0
  235. package/dist/useCases/{AdminDescribeProperty.js → DescribeReservationRoomUpgrades.js} +2 -2
  236. package/dist/useCases/{AdminRefreshToken.js → ListAnnouncements.js} +3 -3
  237. package/dist/useCases/ListCategories.js +32 -0
  238. package/dist/useCases/ListMediaSources.js +32 -0
  239. package/dist/useCases/{CreateSource.js → ListMyOrders.js} +4 -4
  240. package/dist/useCases/{AdminListProperties.js → ListMyTickets.js} +2 -2
  241. package/dist/useCases/ListOrders.js +32 -0
  242. package/dist/useCases/{DeleteIntegration.js → ListOrganizations.js} +3 -3
  243. package/dist/useCases/ListProperties.js +32 -0
  244. package/dist/useCases/ListScenes.js +32 -0
  245. package/dist/useCases/ListTeam.js +32 -0
  246. package/dist/useCases/ListUserOrders.js +32 -0
  247. package/dist/useCases/ListUserSpaces.js +32 -0
  248. package/dist/useCases/LogoutUser.js +32 -0
  249. package/dist/useCases/PurchaseReservationEarlyCheckInProducts.js +32 -0
  250. package/dist/useCases/PurchaseReservationLateCheckOutProducts.js +32 -0
  251. package/dist/useCases/{CreateIntegrationDeviceMapEntry.js → PurchaseReservationRoomUpgrades.js} +2 -2
  252. package/dist/useCases/RequestLoginLink.js +1 -1
  253. package/dist/useCases/{CreateIntegration.js → RequestMyKeyToken.js} +2 -2
  254. package/dist/useCases/RequestPWAToken.js +32 -0
  255. package/dist/useCases/SendCheckInSMS.js +32 -0
  256. package/dist/useCases/SendCheckOutSMS.js +32 -0
  257. package/dist/useCases/SendRoomControlSMS.js +32 -0
  258. package/dist/useCases/{SetSource.js → SetDimmer.js} +2 -2
  259. package/dist/useCases/{DescribeSource.js → SetMediaSource.js} +3 -3
  260. package/dist/useCases/{UpdateSource.js → SetRoomScene.js} +3 -3
  261. package/dist/useCases/SetSpaceScene.js +32 -0
  262. package/dist/useCases/TipUser.js +32 -0
  263. package/dist/useCases/UpdateAnnouncement.js +32 -0
  264. package/dist/useCases/UpdateCategory.js +32 -0
  265. package/dist/useCases/{UpdateIntegration.js → UpdateMediaSource.js} +3 -3
  266. package/dist/useCases/UpdateProperty.js +32 -0
  267. package/dist/useCases/UpdateReservationExpectedArrivalTime.js +32 -0
  268. package/dist/useCases/{ListSources.js → UploadImage.js} +4 -4
  269. package/package.json +37 -14
  270. package/dist/cjs/Commands.js +0 -643
  271. package/dist/cjs/Errors.js +0 -176
  272. package/dist/cjs/Events.js +0 -387
  273. package/dist/cjs/Models.js +0 -3612
  274. package/dist/cjs/defs.js +0 -178
  275. package/dist/cjs/utils.js +0 -250
  276. package/dist/useCases/AdminRequestLoginLink.js +0 -32
  277. package/dist/useCases/DescribeReservationCheckinStatus.js +0 -32
@@ -0,0 +1,86 @@
1
+ const schemas = require("../utils/schema");
2
+ const schema = require("../schemas/thermostat.json");
3
+ const Kohost = require("./Kohost");
4
+
5
+ schemas.add(schema);
6
+ const validator = schemas.compile(schema);
7
+
8
+ class Thermostat extends Kohost {
9
+ /**
10
+ * @typedef {import("../schemas/ThermostatSchema").Thermostat} ThermostatType
11
+ * Create a Thermostat instance.
12
+ * @constructor
13
+ * @param {ThermostatType} thermostat - The thermostat object of type Thermostat.
14
+ */
15
+ constructor(thermostat) {
16
+ super(thermostat);
17
+ }
18
+
19
+ toCelsius() {
20
+ if (this.temperatureScale === "fahrenheit")
21
+ this.currentTemperature = ((this.currentTemperature - 32) * 5) / 9;
22
+ this.temperatureScale = "celsius";
23
+ return this.currentTemperature;
24
+ }
25
+
26
+ toFahrenheit() {
27
+ if (this.temperatureScale === "celsius")
28
+ this.currentTemperature = (this.currentTemperature * 9) / 5 + 32;
29
+ this.temperatureScale = "fahrenheit";
30
+ return this.currentTemperature;
31
+ }
32
+
33
+ static getActionDelta(old, _new) {
34
+ const delta = {};
35
+ for (const action in _new) {
36
+ if (this.actionProperties.includes(action)) {
37
+ switch (action) {
38
+ case "hvacMode":
39
+ case "fanMode": {
40
+ if (old[action] !== _new[action]) delta[action] = 1;
41
+ break;
42
+ }
43
+ case "setpoints": {
44
+ const setpoints = _new[action];
45
+ for (const setpoint in setpoints) {
46
+ if (old[action][setpoint].value !== setpoints[setpoint].value) {
47
+ const min =
48
+ setpoints[setpoint].min || old[action][setpoint].min;
49
+ const max =
50
+ setpoints[setpoint].max || old[action][setpoint].max;
51
+ const oldValue = old[action][setpoint].value;
52
+ const value = setpoints[setpoint].value;
53
+ // get percentage change relative to min and max
54
+ const percentChange = (value - oldValue) / (max - min);
55
+ // get the delta
56
+ delta[`setpoints.${setpoint}`] = percentChange;
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
62
+ }
63
+
64
+ return delta;
65
+ }
66
+ }
67
+
68
+ Object.defineProperty(Thermostat.prototype, "schema", {
69
+ value: schema,
70
+ });
71
+
72
+ Object.defineProperty(Thermostat.prototype, "validator", {
73
+ get: function () {
74
+ return validator;
75
+ },
76
+ });
77
+
78
+ Object.defineProperty(Thermostat, "validProperties", {
79
+ value: Object.keys(schema.properties),
80
+ });
81
+
82
+ Object.defineProperty(Thermostat, "actionProperties", {
83
+ value: ["hvacMode", "fanMode", "setpoints"],
84
+ });
85
+
86
+ module.exports = Thermostat;
@@ -0,0 +1,55 @@
1
+ // Create the User Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/ticket.json");
4
+ const Kohost = require("./Kohost");
5
+ const MediaFile = require("./MediaFile");
6
+
7
+ const { nanoid } = require("nanoid");
8
+
9
+ schemas.add(schema);
10
+ const validator = schemas.compile(schema);
11
+
12
+ class Ticket extends Kohost {
13
+ /**
14
+ * @typedef {import("../schemas/TicketSchema").Ticket} TicketType
15
+ * Create a Ticket instance.
16
+ * @constructor
17
+ * @param {TicketType} ticket - The ticket object of type Ticket.
18
+ */
19
+ constructor(ticket) {
20
+ const ticketData = mapConversationData(ticket);
21
+ super(ticketData);
22
+ }
23
+
24
+ static generateMessageId(len = 16) {
25
+ return nanoid(len);
26
+ }
27
+ }
28
+
29
+ Object.defineProperty(Ticket.prototype, "schema", {
30
+ value: schema,
31
+ });
32
+
33
+ Object.defineProperty(Ticket.prototype, "validator", {
34
+ get: function () {
35
+ return validator;
36
+ },
37
+ });
38
+
39
+ Object.defineProperty(Ticket, "validProperties", {
40
+ value: Object.keys(schema.properties),
41
+ });
42
+
43
+ function mapConversationData(data) {
44
+ const ticketData = structuredClone(data);
45
+ if (!ticketData.conversation) ticketData.conversation = [];
46
+ ticketData.conversation = ticketData.conversation.map((msg) => {
47
+ if (msg.media) {
48
+ msg.media = new MediaFile(msg.media);
49
+ }
50
+ return msg;
51
+ });
52
+ return ticketData;
53
+ }
54
+
55
+ module.exports = Ticket;
@@ -0,0 +1,115 @@
1
+ // Create the User Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/user.json");
4
+ const paymentSchema = require("../schemas/payment.json");
5
+ const Kohost = require("./Kohost");
6
+ const MediaFile = require("./MediaFile");
7
+ const Reservation = require("./Reservation");
8
+ const Identification = require("./Identification");
9
+
10
+ const { nanoid } = require("nanoid/async");
11
+
12
+ schemas.add(paymentSchema);
13
+ schemas.add(schema);
14
+
15
+ const validator = schemas.compile(schema);
16
+
17
+ class User extends Kohost {
18
+ /**
19
+ * @typedef {import("../schemas/UserSchema").User} UserType
20
+ * Create a User instance.
21
+ * @constructor
22
+ * @param {UserType} user - The user object of type User.
23
+ */
24
+ constructor(user) {
25
+ if (user.photo) user.photo = new MediaFile(user.photo);
26
+ if (user.reservations)
27
+ user.reservations = user.reservations.map((res) => new Reservation(res));
28
+ if (user.identifications)
29
+ user.identifications = user.identifications.map(
30
+ (id) => new Identification(id)
31
+ );
32
+
33
+ super(user);
34
+ }
35
+
36
+ static validatePhone(phoneNumber) {
37
+ const regex = /^\+?[1-9]\d{1,14}$/;
38
+ return regex.test(phoneNumber);
39
+ }
40
+
41
+ static validateEmail(email) {
42
+ //eslint-disable-next-line no-useless-escape
43
+ const regex =
44
+ /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
45
+ return regex.test(email);
46
+ }
47
+
48
+ static async generatePassword(len = 16) {
49
+ return await nanoid(len);
50
+ }
51
+ }
52
+
53
+ Object.defineProperty(User.prototype, "schema", {
54
+ value: schema,
55
+ });
56
+
57
+ Object.defineProperty(User.prototype, "validator", {
58
+ get: function () {
59
+ return validator;
60
+ },
61
+ });
62
+
63
+ Object.defineProperty(User, "validProperties", {
64
+ value: Object.keys(schema.properties),
65
+ });
66
+
67
+ Object.defineProperty(User.prototype, "fullName", {
68
+ get: function () {
69
+ return `${this.firstName} ${this.lastName}`;
70
+ },
71
+ });
72
+
73
+ Object.defineProperty(User.prototype, "roles", {
74
+ get: function () {
75
+ const roles = new Set();
76
+ if (this.permissions) {
77
+ for (const permission of this.permissions) {
78
+ roles.add(permission.role);
79
+ }
80
+ }
81
+ return Array.from(roles);
82
+ },
83
+ });
84
+
85
+ Object.defineProperty(User.prototype, "isSuperAdmin", {
86
+ get: function () {
87
+ return this.roles.includes("SuperAdmin");
88
+ },
89
+ });
90
+
91
+ Object.defineProperty(User.prototype, "isAdmin", {
92
+ get: function () {
93
+ return this.roles.includes("Admin") || this.roles.includes("Administrator");
94
+ },
95
+ });
96
+
97
+ Object.defineProperty(User.prototype, "isManager", {
98
+ get: function () {
99
+ return this.roles.includes("Manager");
100
+ },
101
+ });
102
+
103
+ Object.defineProperty(User.prototype, "isUser", {
104
+ get: function () {
105
+ return this.roles.includes("User");
106
+ },
107
+ });
108
+
109
+ Object.defineProperty(User.prototype, "isGuest", {
110
+ get: function () {
111
+ return this.roles.includes("Guest");
112
+ },
113
+ });
114
+
115
+ module.exports = User;
@@ -0,0 +1,55 @@
1
+ // Create the WindowCovering Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/windowCovering.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class WindowCovering extends Kohost {
10
+ /**
11
+ * @typedef {import("../schemas/WindowCoveringSchema").WindowCovering} WindowCoveringType
12
+ * Create a WindowCovering instance.
13
+ * @constructor
14
+ * @param {WindowCoveringType} windowCovering - The windowCovering object of type WindowCovering.
15
+ */
16
+ constructor(windowCovering) {
17
+ super(windowCovering);
18
+ }
19
+
20
+ static getActionDelta(old, _new) {
21
+ const delta = {};
22
+ for (const action in _new) {
23
+ if (this.actionProperties?.includes(action)) {
24
+ if (action === "position") {
25
+ const oldPos = old[action];
26
+ const newPos = _new[action];
27
+ delta[action] = newPos - oldPos / 100;
28
+ } else if (old[action] !== _new[action]) {
29
+ delta[action] = 1;
30
+ }
31
+ }
32
+ }
33
+ return delta;
34
+ }
35
+ }
36
+
37
+ Object.defineProperty(WindowCovering.prototype, "schema", {
38
+ value: schema,
39
+ });
40
+
41
+ Object.defineProperty(WindowCovering.prototype, "validator", {
42
+ get: function () {
43
+ return validator;
44
+ },
45
+ });
46
+
47
+ Object.defineProperty(WindowCovering, "validProperties", {
48
+ value: Object.keys(schema.properties),
49
+ });
50
+
51
+ Object.defineProperty(WindowCovering, "actionProperties", {
52
+ value: ["position"],
53
+ });
54
+
55
+ module.exports = WindowCovering;
@@ -0,0 +1,72 @@
1
+ const Reservation = require("./Reservation");
2
+ const MediaFile = require("./MediaFile");
3
+ const Switch = require("./Switch");
4
+ const Alarm = require("./Alarm");
5
+ const Dimmer = require("./Dimmer");
6
+ const Lock = require("./Lock");
7
+ const Thermostat = require("./Thermostat");
8
+ const WindowCovering = require("./WindowCovering");
9
+ const Identification = require("./Identification");
10
+ const User = require("./User");
11
+ const SystemUser = require("./SystemUser");
12
+ const Courtesy = require("./Courtesy");
13
+ const Camera = require("./Camera");
14
+ const MotionSensor = require("./MotionSensor");
15
+ const MediaSource = require("./MediaSource");
16
+ const Room = require("./Room");
17
+
18
+ const Space = require("./Space");
19
+ const Category = require("./Category");
20
+
21
+ const Ticket = require("./Ticket");
22
+ const Scene = require("./Scene");
23
+ const Gateway = require("./Gateway");
24
+ const Product = require("./Product");
25
+ const Order = require("./Order");
26
+ const DiscoveredDevice = require("./DiscoveredDevice");
27
+ const Credential = require("./Credential");
28
+ const ShortLink = require("./ShortLink");
29
+ const EnergyReportShard = require("./EnergyReportShard");
30
+ const EnergyReport = require("./EnergyReport");
31
+ const SMSMessage = require("./SmsMessage");
32
+ const EmailMessage = require("./EmailMessage");
33
+ const Announcement = require("./Announcement");
34
+
35
+ const Property = require("./Property");
36
+ const Organization = require("./Organization");
37
+
38
+ module.exports = {
39
+ Organization,
40
+ Property,
41
+ MediaFile,
42
+ Gateway,
43
+ Switch,
44
+ Alarm,
45
+ Dimmer,
46
+ Lock,
47
+ Courtesy,
48
+ Camera,
49
+ MotionSensor,
50
+ Thermostat,
51
+ WindowCovering,
52
+ MediaSource,
53
+ Identification,
54
+ Product,
55
+ User,
56
+ SystemUser,
57
+ Room,
58
+ Space,
59
+ Category,
60
+ Ticket,
61
+ Scene,
62
+ DiscoveredDevice,
63
+ Reservation,
64
+ Credential,
65
+ ShortLink,
66
+ EnergyReportShard,
67
+ EnergyReport,
68
+ SMSMessage,
69
+ EmailMessage,
70
+ Order,
71
+ Announcement,
72
+ };
@@ -0,0 +1,74 @@
1
+ const io = require("socket.io-client");
2
+ const { EventEmitter } = require("events");
3
+
4
+ module.exports = class SocketIoClient extends EventEmitter {
5
+ constructor(config = { url: null, propertyId: null, options: {} }) {
6
+ super();
7
+ if (!config.url) throw new Error("Websocket URL / endpoint not provided");
8
+ if (!config.propertyId) throw new Error("Property ID not provided");
9
+ this.url = config.url;
10
+ this.propertyId = config.propertyId;
11
+ this.options = {
12
+ autoConnect: false,
13
+ forceNew: false,
14
+ reconnection: true,
15
+ reconnectionAttempts: Infinity,
16
+ reconnectionDelay: 1000,
17
+ withCredentials: true,
18
+ transports: ["websocket", "polling"],
19
+ upgrade: true,
20
+ ...config.options,
21
+ };
22
+
23
+ this.socket = io(this.url, this.options);
24
+
25
+ this.socket.on("connect", () => {
26
+ this.emit("connect", this.socket);
27
+ });
28
+
29
+ this.socket.on("disconnect", (reason) => {
30
+ this.emit("disconnect", reason);
31
+ });
32
+
33
+ this.socket.on("reconnect_attempt", (data) => {
34
+ this.emit("reconnect_attempt", data);
35
+ });
36
+
37
+ this.socket.on("connect_error", (error) => {
38
+ this.emit("connect_error", error);
39
+ });
40
+ }
41
+
42
+ get connected() {
43
+ return this.socket?.connected || false;
44
+ }
45
+
46
+ get disconnected() {
47
+ return this.socket?.disconnected || false;
48
+ }
49
+
50
+ connect() {
51
+ this.socket.connect();
52
+ }
53
+
54
+ disconnect() {
55
+ this.socket.disconnect();
56
+ }
57
+
58
+ reconnect() {
59
+ this.disconnect();
60
+ this.connect();
61
+ }
62
+
63
+ subscribe(event, callback) {
64
+ this.socket.on(event, callback);
65
+ }
66
+
67
+ unsubscribe(event, callback) {
68
+ this.socket.off(event, callback);
69
+ }
70
+
71
+ send(event, { data = {}, query = {}, ...rest }) {
72
+ this.socket.emit(event, { data, query, ...rest });
73
+ }
74
+ };
@@ -0,0 +1,15 @@
1
+ const types = [
2
+ "dimmer",
3
+ "switch",
4
+ "thermostat",
5
+ "lock",
6
+ "windowCovering",
7
+ "courtesy",
8
+ "alarm",
9
+ "camera",
10
+ "mediaSource",
11
+ "motionSensor",
12
+ "gateway",
13
+ ];
14
+
15
+ module.exports = types;
@@ -0,0 +1,6 @@
1
+ const deviceTypes = require("./deviceTypes");
2
+ const formalDeviceTypes = deviceTypes.map(
3
+ (type) => type.charAt(0).toUpperCase() + type.slice(1)
4
+ );
5
+
6
+ module.exports = formalDeviceTypes;
@@ -0,0 +1,11 @@
1
+ const deviceTypes = require("./deviceTypes");
2
+ const formalDeviceTypes = require("./formalDeviceTypes");
3
+ const { defs: httpDefs } = require("../Client");
4
+
5
+ const defs = {
6
+ http: httpDefs,
7
+ deviceTypes,
8
+ formalDeviceTypes,
9
+ };
10
+
11
+ module.exports = defs;
@@ -5,13 +5,19 @@ const Events = require("./Events");
5
5
  const defs = require("./defs");
6
6
  const utils = require("./utils");
7
7
  const Client = require("./Client");
8
+ const SocketIoClient = require("./SocketIoClient");
9
+ const AMQPClient = require("./AMQPClient");
10
+
8
11
  const Kohost = {
9
12
  Models,
10
13
  Errors,
11
14
  Commands,
12
15
  Events,
13
16
  Client,
17
+ SocketIoClient,
18
+ AMQPClient,
14
19
  defs,
15
- utils
20
+ utils: utils,
16
21
  };
22
+
17
23
  module.exports = Kohost;
@@ -0,0 +1,158 @@
1
+ /* eslint-disable */
2
+ /**
3
+ * This file was automatically generated by json-schema-to-typescript.
4
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
5
+ * and run json-schema-to-typescript to regenerate this file.
6
+ */
7
+
8
+ export type SupportedNotifications = (
9
+ | "button 1"
10
+ | "button 2"
11
+ | "button 3"
12
+ | "button 4"
13
+ | "button 5"
14
+ | "idle"
15
+ | "powerHasBeedApplied"
16
+ | "acMainsDisconnected"
17
+ | "acMainsReconnected"
18
+ | "replaceBatterySoon"
19
+ | "replaceBatteryNow"
20
+ | "hardwareFailure"
21
+ | "softwareFailure"
22
+ | "hardwareFailureWithCode"
23
+ | "softwareFailureWithCode"
24
+ | "motionDetection"
25
+ | "airFilterNeedsCleaned"
26
+ | "airFilterNeedsReplaced"
27
+ | "smokeDetected"
28
+ | "outsideSafeTemperatureRange"
29
+ | "outsideSafeHumidityRange"
30
+ | "scheduleMaintenance"
31
+ )[];
32
+ export type Notification = {
33
+ name?:
34
+ | "button 1"
35
+ | "button 2"
36
+ | "button 3"
37
+ | "button 4"
38
+ | "button 5"
39
+ | "idle"
40
+ | "powerHasBeedApplied"
41
+ | "acMainsDisconnected"
42
+ | "acMainsReconnected"
43
+ | "replaceBatterySoon"
44
+ | "replaceBatteryNow"
45
+ | "hardwareFailure"
46
+ | "softwareFailure"
47
+ | "hardwareFailureWithCode"
48
+ | "softwareFailureWithCode"
49
+ | "motionDetection"
50
+ | "airFilterNeedsCleaned"
51
+ | "airFilterNeedsReplaced"
52
+ | "smokeDetected"
53
+ | "outsideSafeTemperatureRange"
54
+ | "outsideSafeHumidityRange"
55
+ | "scheduleMaintenance";
56
+ timestamp?: number;
57
+ description?: string;
58
+ [k: string]: unknown;
59
+ } & ({
60
+ name?:
61
+ | "button 1"
62
+ | "button 2"
63
+ | "button 3"
64
+ | "button 4"
65
+ | "button 5"
66
+ | "idle"
67
+ | "powerHasBeedApplied"
68
+ | "acMainsDisconnected"
69
+ | "acMainsReconnected"
70
+ | "replaceBatterySoon"
71
+ | "replaceBatteryNow"
72
+ | "hardwareFailure"
73
+ | "softwareFailure"
74
+ | "hardwareFailureWithCode"
75
+ | "softwareFailureWithCode"
76
+ | "motionDetection"
77
+ | "airFilterNeedsCleaned"
78
+ | "airFilterNeedsReplaced"
79
+ | "smokeDetected"
80
+ | "outsideSafeTemperatureRange"
81
+ | "outsideSafeHumidityRange"
82
+ | "scheduleMaintenance";
83
+ timestamp?: number;
84
+ description?: string;
85
+ [k: string]: unknown;
86
+ } | null);
87
+
88
+ /**
89
+ * Any smart alarm system
90
+ */
91
+ export interface Alarm {
92
+ id: string;
93
+ name?: string;
94
+ offline?: boolean;
95
+ type:
96
+ | "alarm"
97
+ | "dimmer"
98
+ | "switch"
99
+ | "motionSensor"
100
+ | "windowCovering"
101
+ | "camera"
102
+ | "mediaSource"
103
+ | "thermostat"
104
+ | "lock"
105
+ | "courtesy"
106
+ | "gateway"
107
+ | "tv"
108
+ | "dvr"
109
+ | "appleTv"
110
+ | "discPlayer"
111
+ | "mediaPlayer"
112
+ | "uncontrolledDevice";
113
+ systemId?: string;
114
+ supportedNotifications?: SupportedNotifications;
115
+ notification?: Notification;
116
+ driver:
117
+ | "aws-kinesis"
118
+ | "butler"
119
+ | "crestron"
120
+ | "dmp"
121
+ | "dormakaba"
122
+ | "dsc"
123
+ | "ecobee"
124
+ | "igor"
125
+ | "inncom"
126
+ | "kohost-k7"
127
+ | "kohost-pms"
128
+ | "lg"
129
+ | "lirc"
130
+ | "mews"
131
+ | "mht"
132
+ | "paxton"
133
+ | "pelican-wireless"
134
+ | "rebrandly"
135
+ | "salto"
136
+ | "salto-irn"
137
+ | "se"
138
+ | "sendgrid"
139
+ | "stay-n-touch"
140
+ | "twilio"
141
+ | "cloudflare-images"
142
+ | "cloudflare-stream"
143
+ | "insperia-privacy";
144
+ areas: {
145
+ number?: number;
146
+ name?: string;
147
+ securityMode?: "arming" | "disarming" | "armed" | "disarmed" | "alarm" | null;
148
+ readyToArm?: boolean | null;
149
+ }[];
150
+ zones: {
151
+ number?: number;
152
+ name?: string;
153
+ secure?: boolean;
154
+ bypassed?: boolean | null;
155
+ }[];
156
+ watts?: number;
157
+ [k: string]: unknown;
158
+ }