@kohost/api-client 3.0.0-beta.5 → 3.0.0-beta.50

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 (210) hide show
  1. package/README.md +71 -0
  2. package/dist/cjs/AMQPClient/index.js +290 -0
  3. package/dist/cjs/{Client.js → Client/index.js} +1938 -986
  4. package/dist/cjs/Commands/CheckInReservationCommand.js +19 -0
  5. package/dist/cjs/Commands/Command.js +34 -0
  6. package/dist/cjs/Commands/CreateImageUploadEndpointCommand.js +17 -0
  7. package/dist/cjs/Commands/CreateShortLinkCommand.js +20 -0
  8. package/dist/cjs/Commands/DiscoverReservationRoomTypeUpsellOptionsCommand.js +20 -0
  9. package/dist/cjs/Commands/DiscoverReservationsCommand.js +20 -0
  10. package/dist/cjs/Commands/DiscoverRoomTypesCommand.js +19 -0
  11. package/dist/cjs/Commands/DiscoverRoomsCommand.js +35 -0
  12. package/dist/cjs/Commands/DiscoverUsersCommand.js +19 -0
  13. package/dist/cjs/Commands/GetMobileKeyCommand.js +24 -0
  14. package/dist/cjs/Commands/GetProductsCommand.js +17 -0
  15. package/dist/cjs/Commands/OCRDocumentCommand.js +15 -0
  16. package/dist/cjs/Commands/SellProductsCommand.js +17 -0
  17. package/dist/cjs/Commands/SendEmailCommand.js +24 -0
  18. package/dist/cjs/Commands/SendSMSCommand.js +21 -0
  19. package/dist/cjs/Commands/SetAlarmCommand.js +17 -0
  20. package/dist/cjs/Commands/SetCourtesyCommand.js +17 -0
  21. package/dist/cjs/Commands/SetDimmerCommand.js +17 -0
  22. package/dist/cjs/Commands/SetLockCommand.js +17 -0
  23. package/dist/cjs/Commands/SetMediaCommand.js +17 -0
  24. package/dist/cjs/Commands/SetSceneCommand.js +17 -0
  25. package/dist/cjs/Commands/SetSwitchCommand.js +17 -0
  26. package/dist/cjs/Commands/SetThermostatCommand.js +17 -0
  27. package/dist/cjs/Commands/SetWindowCoveringCommand.js +17 -0
  28. package/dist/cjs/Commands/UpdateReservationCommand.js +19 -0
  29. package/dist/cjs/Commands/UpdateUserCommand.js +41 -0
  30. package/dist/cjs/Commands/UploadImageCommand.js +17 -0
  31. package/dist/cjs/Commands/index.js +55 -0
  32. package/dist/cjs/Errors/AppError.js +8 -0
  33. package/dist/cjs/Errors/AuthenticationError.js +9 -0
  34. package/dist/cjs/Errors/AuthorizationError.js +9 -0
  35. package/dist/cjs/Errors/DeviceCommError.js +9 -0
  36. package/dist/cjs/Errors/LoginError.js +9 -0
  37. package/dist/cjs/Errors/NotFoundError.js +9 -0
  38. package/dist/cjs/Errors/RequestError.js +9 -0
  39. package/dist/cjs/Errors/SystemCommError.js +9 -0
  40. package/dist/cjs/Errors/TokenExpiredError.js +9 -0
  41. package/dist/cjs/Errors/UnprocessableRequestError.js +9 -0
  42. package/dist/cjs/Errors/ValidationError.js +9 -0
  43. package/dist/cjs/Errors/index.js +15 -0
  44. package/dist/cjs/Events/ApplicationInUseEvent.js +17 -0
  45. package/dist/cjs/Events/ApplicationOutOfUseEvent.js +17 -0
  46. package/dist/cjs/Events/EmailEvent.js +18 -0
  47. package/dist/cjs/Events/Event.js +55 -0
  48. package/dist/cjs/Events/SMSEvent.js +18 -0
  49. package/dist/cjs/Events/SMSSentEvent.js +17 -0
  50. package/dist/cjs/Events/ShortLinkCreatedEvent.js +17 -0
  51. package/dist/cjs/Events/SystemCameraUpdatedEvent.js +17 -0
  52. package/dist/cjs/Events/SystemCourtesyUpdatedEvent.js +17 -0
  53. package/dist/cjs/Events/SystemDimmerUpdatedEvent.js +17 -0
  54. package/dist/cjs/Events/SystemGatewayUpdatedEvent.js +17 -0
  55. package/dist/cjs/Events/SystemLockUpdatedEvent.js +17 -0
  56. package/dist/cjs/Events/SystemMediaSourceUpdatedEvent.js +17 -0
  57. package/dist/cjs/Events/SystemMotionSensorUpdatedEvent.js +17 -0
  58. package/dist/cjs/Events/SystemProductUpdatedEvent.js +17 -0
  59. package/dist/cjs/Events/SystemReservationUpdatedEvent.js +17 -0
  60. package/dist/cjs/Events/SystemSceneControllerUpdatedEvent.js +17 -0
  61. package/dist/cjs/Events/SystemSpaceTypeUpdatedEvent.js +17 -0
  62. package/dist/cjs/Events/SystemSpaceUpdatedEvent.js +17 -0
  63. package/dist/cjs/Events/SystemSwitchUpdatedEvent.js +17 -0
  64. package/dist/cjs/Events/SystemThermostatUpdatedEvent.js +17 -0
  65. package/dist/cjs/Events/SystemUserUpdatedEvent.js +17 -0
  66. package/dist/cjs/Events/SystemWindowCoveringUpdatedEvent.js +17 -0
  67. package/dist/cjs/Events/index.js +50 -0
  68. package/dist/cjs/Models/Alarm.js +29 -0
  69. package/dist/cjs/Models/Camera.js +29 -0
  70. package/dist/cjs/Models/Courtesy.js +33 -0
  71. package/dist/cjs/Models/Credential.js +29 -0
  72. package/dist/cjs/Models/Dimmer.js +61 -0
  73. package/dist/cjs/Models/DiscoveredDevice.js +30 -0
  74. package/dist/cjs/Models/EmailMessage.js +29 -0
  75. package/dist/cjs/Models/EnergyReport.js +29 -0
  76. package/dist/cjs/Models/EnergyReportShard.js +29 -0
  77. package/dist/cjs/Models/Gateway.js +29 -0
  78. package/dist/cjs/Models/Identification.js +32 -0
  79. package/dist/cjs/Models/Kohost.js +96 -0
  80. package/dist/cjs/Models/Lock.js +33 -0
  81. package/dist/cjs/Models/MediaFile.js +41 -0
  82. package/dist/cjs/Models/MediaSource.js +29 -0
  83. package/dist/cjs/Models/MotionSensor.js +29 -0
  84. package/dist/cjs/Models/Organization.js +28 -0
  85. package/dist/cjs/Models/Product.js +29 -0
  86. package/dist/cjs/Models/Property.js +28 -0
  87. package/dist/cjs/Models/Reservation.js +98 -0
  88. package/dist/cjs/Models/Room.js +212 -0
  89. package/dist/cjs/Models/Scene.js +183 -0
  90. package/dist/cjs/Models/ShortLink.js +29 -0
  91. package/dist/cjs/Models/SmsMessage.js +29 -0
  92. package/dist/cjs/Models/Space.js +97 -0
  93. package/dist/cjs/Models/SpaceType.js +30 -0
  94. package/dist/cjs/Models/Switch.js +33 -0
  95. package/dist/cjs/Models/SystemUser.js +48 -0
  96. package/dist/cjs/Models/Thermostat.js +80 -0
  97. package/dist/cjs/Models/Ticket.js +105 -0
  98. package/dist/cjs/Models/User.js +73 -0
  99. package/dist/cjs/Models/WindowCovering.js +49 -0
  100. package/dist/cjs/Models/index.js +68 -0
  101. package/dist/cjs/SocketIoClient/index.js +74 -0
  102. package/dist/cjs/defs/deviceTypes.js +15 -0
  103. package/dist/cjs/defs/formalDeviceTypes.js +6 -0
  104. package/dist/cjs/defs/index.js +11 -0
  105. package/dist/cjs/{index.cjs.js → index.js} +7 -1
  106. package/dist/cjs/schemas/alarm.json +103 -0
  107. package/dist/cjs/schemas/camera.json +50 -0
  108. package/dist/cjs/schemas/courtesy.json +46 -0
  109. package/dist/cjs/schemas/credential.json +31 -0
  110. package/dist/cjs/schemas/definitions.json +191 -0
  111. package/dist/cjs/schemas/dimmer.json +43 -0
  112. package/dist/cjs/schemas/discoveredDevice.json +31 -0
  113. package/dist/cjs/schemas/emailMessage.json +71 -0
  114. package/dist/cjs/schemas/energyReport.json +86 -0
  115. package/dist/cjs/schemas/energyReportShard.json +75 -0
  116. package/dist/cjs/schemas/gateway.json +35 -0
  117. package/dist/cjs/schemas/identification.json +61 -0
  118. package/dist/cjs/schemas/lock.json +45 -0
  119. package/dist/cjs/schemas/mediaFile.json +67 -0
  120. package/dist/cjs/schemas/mediaSource.json +184 -0
  121. package/dist/cjs/schemas/motionSensor.json +32 -0
  122. package/dist/cjs/schemas/organization.json +36 -0
  123. package/dist/cjs/schemas/payment.json +47 -0
  124. package/dist/cjs/schemas/product.json +40 -0
  125. package/dist/cjs/schemas/property.json +246 -0
  126. package/dist/cjs/schemas/reservation.json +118 -0
  127. package/dist/cjs/schemas/room.json +98 -0
  128. package/dist/cjs/schemas/scene.json +121 -0
  129. package/dist/cjs/schemas/shortLink.json +30 -0
  130. package/dist/cjs/schemas/smsMessage.json +61 -0
  131. package/dist/cjs/schemas/space.json +120 -0
  132. package/dist/cjs/schemas/spaceType.json +30 -0
  133. package/dist/cjs/schemas/switch.json +42 -0
  134. package/dist/cjs/schemas/systemUser.json +95 -0
  135. package/dist/cjs/schemas/thermostat.json +153 -0
  136. package/dist/cjs/schemas/ticket.json +96 -0
  137. package/dist/cjs/schemas/user.json +152 -0
  138. package/dist/cjs/schemas/windowCovering.json +43 -0
  139. package/dist/cjs/utils/errorFactory.js +8 -0
  140. package/dist/cjs/utils/eventFactory.js +10 -0
  141. package/dist/cjs/utils/getDeviceTypes.js +7 -0
  142. package/dist/cjs/utils/getFormalDeviceType.js +5 -0
  143. package/dist/cjs/utils/index.js +11 -0
  144. package/dist/cjs/utils/schema.js +25 -0
  145. package/dist/esm/Client.js +2293 -1205
  146. package/dist/esm/Client.js.map +4 -4
  147. package/dist/esm/Commands.js +478 -73
  148. package/dist/esm/Commands.js.map +3 -3
  149. package/dist/esm/Errors.js +35 -0
  150. package/dist/esm/Errors.js.map +1 -1
  151. package/dist/esm/Events.js +266 -63
  152. package/dist/esm/Events.js.map +3 -3
  153. package/dist/esm/Models.js +2853 -833
  154. package/dist/esm/Models.js.map +4 -4
  155. package/dist/esm/SocketIoClient.js +4748 -0
  156. package/dist/esm/SocketIoClient.js.map +7 -0
  157. package/dist/esm/defs.js +407 -279
  158. package/dist/esm/defs.js.map +4 -4
  159. package/dist/esm/index.js +17 -10
  160. package/dist/esm/utils.js +742 -85
  161. package/dist/esm/utils.js.map +3 -3
  162. package/dist/useCases/{AdminUpdateProperty.js → AdminUpdateCustomer.js} +2 -2
  163. package/dist/useCases/AssignSpaceToReservation.js +32 -0
  164. package/dist/useCases/BatchNotifyCheckIn.js +32 -0
  165. package/dist/useCases/CreateImageUploadEndpoint.js +32 -0
  166. package/dist/useCases/{CreateSource.js → CreateMediaSource.js} +2 -2
  167. package/dist/useCases/{AdminListCustomers.js → CreateOrganization.js} +3 -3
  168. package/dist/useCases/{LoginGateway.js → CreateProperty.js} +2 -2
  169. package/dist/useCases/{AdminCreateProperty.js → CreateSpaceType.js} +2 -2
  170. package/dist/useCases/DeleteMediaFile.js +32 -0
  171. package/dist/useCases/{DeleteSource.js → DeleteMediaSource.js} +2 -2
  172. package/dist/useCases/DeleteSpaceType.js +32 -0
  173. package/dist/useCases/DescribeLockCredential.js +32 -0
  174. package/dist/useCases/{DescribeIntegration.js → DescribeMediaSource.js} +3 -3
  175. package/dist/useCases/DescribeMyAccessCredentials.js +32 -0
  176. package/dist/useCases/{AdminDescribeProperty.js → DescribeOrganization.js} +2 -2
  177. package/dist/useCases/DescribeProduct.js +32 -0
  178. package/dist/useCases/{ListIntegrations.js → DescribeProperty.js} +3 -3
  179. package/dist/useCases/DescribeReservationEarlyCheckInProducts.js +32 -0
  180. package/dist/useCases/DescribeReservationRoomUpgrades.js +32 -0
  181. package/dist/useCases/{DeleteIntegration.js → DescribeSpaceType.js} +2 -2
  182. package/dist/useCases/ListMediaSources.js +32 -0
  183. package/dist/useCases/{AdminListProperties.js → ListMyTickets.js} +2 -2
  184. package/dist/useCases/{UpdateIntegration.js → ListOrganizations.js} +4 -4
  185. package/dist/useCases/ListProperties.js +32 -0
  186. package/dist/useCases/ListScenes.js +32 -0
  187. package/dist/useCases/ListSpaceTypes.js +32 -0
  188. package/dist/useCases/ListTeam.js +32 -0
  189. package/dist/useCases/ListUserSpaces.js +32 -0
  190. package/dist/useCases/LogoutUser.js +32 -0
  191. package/dist/useCases/PurchaseReservationEarlyCheckInProducts.js +32 -0
  192. package/dist/useCases/{CreateIntegrationDeviceMapEntry.js → PurchaseReservationRoomUpgrades.js} +2 -2
  193. package/dist/useCases/RequestLoginLink.js +1 -1
  194. package/dist/useCases/{CreateIntegration.js → RequestMyKeyToken.js} +2 -2
  195. package/dist/useCases/SendCheckInSMS.js +32 -0
  196. package/dist/useCases/{SetSource.js → SetDimmer.js} +2 -2
  197. package/dist/useCases/{DescribeSource.js → SetMediaSource.js} +3 -3
  198. package/dist/useCases/{UpdateSource.js → SetRoomScene.js} +3 -3
  199. package/dist/useCases/SetSpaceScene.js +32 -0
  200. package/dist/useCases/UpdateMediaSource.js +32 -0
  201. package/dist/useCases/UpdateProperty.js +32 -0
  202. package/dist/useCases/UpdateSpaceType.js +32 -0
  203. package/dist/useCases/{ListSources.js → UploadImage.js} +4 -4
  204. package/package.json +25 -10
  205. package/dist/cjs/Commands.js +0 -568
  206. package/dist/cjs/Errors.js +0 -174
  207. package/dist/cjs/Events.js +0 -375
  208. package/dist/cjs/Models.js +0 -3582
  209. package/dist/cjs/defs.js +0 -175
  210. package/dist/cjs/utils.js +0 -246
@@ -0,0 +1,33 @@
1
+ // create the Courtesy Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/courtesy.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class Courtesy extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+ }
14
+
15
+ Object.defineProperty(Courtesy.prototype, "schema", {
16
+ value: schema,
17
+ });
18
+
19
+ Object.defineProperty(Courtesy.prototype, "validator", {
20
+ get: function () {
21
+ return validator;
22
+ },
23
+ });
24
+
25
+ Object.defineProperty(Courtesy, "validProperties", {
26
+ value: Object.keys(schema.properties),
27
+ });
28
+
29
+ Object.defineProperty(Courtesy, "actionProperties", {
30
+ value: ["state"],
31
+ });
32
+
33
+ module.exports = Courtesy;
@@ -0,0 +1,29 @@
1
+ // create the Credential Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/credential.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class Credential extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+ }
14
+
15
+ Object.defineProperty(Credential.prototype, "schema", {
16
+ value: schema,
17
+ });
18
+
19
+ Object.defineProperty(Credential.prototype, "validator", {
20
+ get: function () {
21
+ return validator;
22
+ },
23
+ });
24
+
25
+ Object.defineProperty(Credential, "validProperties", {
26
+ value: Object.keys(schema.properties),
27
+ });
28
+
29
+ module.exports = Credential;
@@ -0,0 +1,61 @@
1
+ // Create the Dimmer Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/dimmer.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ /**
10
+ * Represents a Dimmer device.
11
+ * @class
12
+ * @extends Kohost
13
+ */
14
+
15
+ class Dimmer extends Kohost {
16
+ /**
17
+ * @typedef {import("../schemas/DimmerSchema").Dimmer} DimmerType
18
+ * Create a Dimmer instance.
19
+ * @constructor
20
+ * @param {DimmerType} dimmer - The dimmer object of type Dimmer.
21
+ */
22
+ constructor(dimmer) {
23
+ super(dimmer);
24
+ }
25
+
26
+ static getActionDelta(old, _new) {
27
+ const delta = {};
28
+ for (const action in _new) {
29
+ if (this.actionProperties?.includes(action)) {
30
+ if (action === "level") {
31
+ const oldLevel = old[action];
32
+ const newLevel = _new[action];
33
+ delta[action] = newLevel - oldLevel / 100;
34
+ } else {
35
+ delta[action] = 1;
36
+ }
37
+ }
38
+ }
39
+ return delta;
40
+ }
41
+ }
42
+
43
+ Object.defineProperty(Dimmer.prototype, "schema", {
44
+ value: schema,
45
+ });
46
+
47
+ Object.defineProperty(Dimmer.prototype, "validator", {
48
+ get: function () {
49
+ return validator;
50
+ },
51
+ });
52
+
53
+ Object.defineProperty(Dimmer, "validProperties", {
54
+ value: Object.keys(schema.properties),
55
+ });
56
+
57
+ Object.defineProperty(Dimmer, "actionProperties", {
58
+ value: ["level"],
59
+ });
60
+
61
+ module.exports = Dimmer;
@@ -0,0 +1,30 @@
1
+ // Create the Discovered Device Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/discoveredDevice.json");
4
+
5
+ const Kohost = require("./Kohost");
6
+
7
+ schemas.add(schema);
8
+ const validator = schemas.compile(schema);
9
+
10
+ class DiscoveredDevice extends Kohost {
11
+ constructor(data) {
12
+ super(data);
13
+ }
14
+ }
15
+
16
+ Object.defineProperty(DiscoveredDevice.prototype, "schema", {
17
+ value: schema,
18
+ });
19
+
20
+ Object.defineProperty(DiscoveredDevice.prototype, "validator", {
21
+ get: function () {
22
+ return validator;
23
+ },
24
+ });
25
+
26
+ Object.defineProperty(DiscoveredDevice, "validProperties", {
27
+ value: Object.keys(schema.properties),
28
+ });
29
+
30
+ module.exports = DiscoveredDevice;
@@ -0,0 +1,29 @@
1
+ // Create the SMS Message Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/emailMessage.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class EmailMessage extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+ }
14
+
15
+ Object.defineProperty(EmailMessage.prototype, "schema", {
16
+ value: schema,
17
+ });
18
+
19
+ Object.defineProperty(EmailMessage.prototype, "validator", {
20
+ get: function () {
21
+ return validator;
22
+ },
23
+ });
24
+
25
+ Object.defineProperty(EmailMessage, "validProperties", {
26
+ value: Object.keys(schema.properties),
27
+ });
28
+
29
+ module.exports = EmailMessage;
@@ -0,0 +1,29 @@
1
+ // create the energyReportDaily Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/energyReport.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class EnergyReport extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+ }
14
+
15
+ Object.defineProperty(EnergyReport.prototype, "schema", {
16
+ value: schema,
17
+ });
18
+
19
+ Object.defineProperty(EnergyReport.prototype, "validator", {
20
+ get: function () {
21
+ return validator;
22
+ },
23
+ });
24
+
25
+ Object.defineProperty(EnergyReport, "validProperties", {
26
+ value: Object.keys(schema.properties),
27
+ });
28
+
29
+ module.exports = EnergyReport;
@@ -0,0 +1,29 @@
1
+ // create the energyReportShard Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/energyReportShard.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class EnergyReportShard extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+ }
14
+
15
+ Object.defineProperty(EnergyReportShard.prototype, "schema", {
16
+ value: schema,
17
+ });
18
+
19
+ Object.defineProperty(EnergyReportShard.prototype, "validator", {
20
+ get: function () {
21
+ return validator;
22
+ },
23
+ });
24
+
25
+ Object.defineProperty(EnergyReportShard, "validProperties", {
26
+ value: Object.keys(schema.properties),
27
+ });
28
+
29
+ module.exports = EnergyReportShard;
@@ -0,0 +1,29 @@
1
+ // Create the Gateway Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/gateway.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class Gateway extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+ }
14
+
15
+ Object.defineProperty(Gateway.prototype, "schema", {
16
+ value: schema,
17
+ });
18
+
19
+ Object.defineProperty(Gateway.prototype, "validator", {
20
+ get: function () {
21
+ return validator;
22
+ },
23
+ });
24
+
25
+ Object.defineProperty(Gateway, "validProperties", {
26
+ value: Object.keys(schema.properties),
27
+ });
28
+
29
+ module.exports = Gateway;
@@ -0,0 +1,32 @@
1
+ const schemas = require("../utils/schema");
2
+ const schema = require("../schemas/identification.json");
3
+ const Kohost = require("./Kohost");
4
+
5
+ schemas.add(schema);
6
+ const validator = schemas.compile(schema);
7
+
8
+ class Identification extends Kohost {
9
+ constructor(data) {
10
+ super(data);
11
+ }
12
+
13
+ get isExpired() {
14
+ return new Date(this.expirationDate) < new Date();
15
+ }
16
+ }
17
+
18
+ Object.defineProperty(Identification.prototype, "schema", {
19
+ value: schema,
20
+ });
21
+
22
+ Object.defineProperty(Identification.prototype, "validator", {
23
+ get: function () {
24
+ return validator;
25
+ },
26
+ });
27
+
28
+ Object.defineProperty(Identification, "validProperties", {
29
+ value: Object.keys(schema.properties),
30
+ });
31
+
32
+ module.exports = Identification;
@@ -0,0 +1,96 @@
1
+ const { ValidationError } = require("../Errors");
2
+ const { customAlphabet: generate } = require("nanoid");
3
+
4
+ class Kohost {
5
+ constructor(data) {
6
+ if (!this.schema) {
7
+ throw new Error("Schema is not defined");
8
+ }
9
+
10
+ if (!this.validator) {
11
+ throw new Error("Validator is not defined");
12
+ }
13
+
14
+ const isNew = data?.id ? false : true;
15
+
16
+ this.#_setId(data);
17
+ this.#_validate(data);
18
+ this.#_setProperties(data);
19
+ this.#_setTimestamps(isNew);
20
+ }
21
+
22
+ static get validProperties() {
23
+ throw new Error("validProperties is not defined");
24
+ }
25
+
26
+ get schemaProperties() {
27
+ return Object.keys(this.validator.schema.properties);
28
+ }
29
+
30
+ #_setId(data) {
31
+ if (data._id) data.id = data._id;
32
+ if (!data.id) {
33
+ data.id = this.constructor.generateId();
34
+ }
35
+ delete data._id;
36
+ }
37
+
38
+ #_setProperties(data) {
39
+ this.schemaProperties.forEach((key) => {
40
+ if (data[key] !== undefined) this[key] = data[key];
41
+ });
42
+ }
43
+
44
+ #_setTimestamps(isNew) {
45
+ const now = new Date();
46
+ if (
47
+ isNew &&
48
+ this.schemaProperties.includes("createdAt") &&
49
+ !this.createdAt
50
+ ) {
51
+ this.createdAt = now;
52
+ }
53
+ }
54
+
55
+ #_validate(data) {
56
+ const valid = this.validator(data);
57
+ if (!valid) {
58
+ throw new ValidationError(`Invalid ${this.constructor.name}`, {
59
+ cause: this.validator.errors,
60
+ });
61
+ }
62
+ }
63
+
64
+ static generateId() {
65
+ const length = 8;
66
+ const characters =
67
+ "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
68
+ const id = generate(characters, length)();
69
+ return id;
70
+ }
71
+
72
+ static getActionDelta(old, _new) {
73
+ const delta = {};
74
+ for (const action in _new) {
75
+ if (this.actionProperties?.includes(action)) {
76
+ if (old[action] !== _new[action]) {
77
+ delta[action] = 1;
78
+ }
79
+ }
80
+ }
81
+ return delta;
82
+ }
83
+
84
+ toObject() {
85
+ const obj = { ...this };
86
+ // delete keys if they are not valid properties
87
+ Object.keys(obj).forEach((key) => {
88
+ if (!this.constructor.validProperties.includes(key)) {
89
+ delete obj[key];
90
+ }
91
+ });
92
+ return obj;
93
+ }
94
+ }
95
+
96
+ module.exports = Kohost;
@@ -0,0 +1,33 @@
1
+ // Create the Lock Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/lock.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class Lock extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+ }
14
+
15
+ Object.defineProperty(Lock.prototype, "schema", {
16
+ value: schema,
17
+ });
18
+
19
+ Object.defineProperty(Lock.prototype, "validator", {
20
+ get: function () {
21
+ return validator;
22
+ },
23
+ });
24
+
25
+ Object.defineProperty(Lock, "validProperties", {
26
+ value: Object.keys(schema.properties),
27
+ });
28
+
29
+ Object.defineProperty(Lock, "actionProperties", {
30
+ value: ["state"],
31
+ });
32
+
33
+ module.exports = Lock;
@@ -0,0 +1,41 @@
1
+ const schemas = require("../utils/schema");
2
+ const schema = require("../schemas/mediaFile.json");
3
+ const Kohost = require("./Kohost");
4
+ const { RequestError } = require("../Errors");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class MediaFile extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+
14
+ createImageVariant(params) {
15
+ if (this.mimeType != "image/*")
16
+ throw new RequestError("Only dynamic images can have variants");
17
+ // convert params to "key=value" pairs
18
+ const query = Object.keys(params)
19
+ .map((key) => `${key}=${params[key]}`)
20
+ .join(",");
21
+
22
+ // replace the final /public with the query above
23
+ return this.url.replace(/\/public$/, `/${query}`);
24
+ }
25
+ }
26
+
27
+ Object.defineProperty(MediaFile.prototype, "schema", {
28
+ value: schema,
29
+ });
30
+
31
+ Object.defineProperty(MediaFile.prototype, "validator", {
32
+ get: function () {
33
+ return validator;
34
+ },
35
+ });
36
+
37
+ Object.defineProperty(MediaFile, "validProperties", {
38
+ value: Object.keys(schema.properties),
39
+ });
40
+
41
+ module.exports = MediaFile;
@@ -0,0 +1,29 @@
1
+ // create the Media Source Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/mediaSource.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class MediaSource extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+ }
14
+
15
+ Object.defineProperty(MediaSource.prototype, "schema", {
16
+ value: schema,
17
+ });
18
+
19
+ Object.defineProperty(MediaSource.prototype, "validator", {
20
+ get: function () {
21
+ return validator;
22
+ },
23
+ });
24
+
25
+ Object.defineProperty(MediaSource, "validProperties", {
26
+ value: Object.keys(schema.properties),
27
+ });
28
+
29
+ module.exports = MediaSource;
@@ -0,0 +1,29 @@
1
+ // create the Motion Sensor Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/motionSensor.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class MotionSensor extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+ }
14
+
15
+ Object.defineProperty(MotionSensor.prototype, "schema", {
16
+ value: schema,
17
+ });
18
+
19
+ Object.defineProperty(MotionSensor.prototype, "validator", {
20
+ get: function () {
21
+ return validator;
22
+ },
23
+ });
24
+
25
+ Object.defineProperty(MotionSensor, "validProperties", {
26
+ value: Object.keys(schema.properties),
27
+ });
28
+
29
+ module.exports = MotionSensor;
@@ -0,0 +1,28 @@
1
+ const schemas = require("../utils/schema");
2
+ const schema = require("../schemas/organization.json");
3
+ const Kohost = require("./Kohost");
4
+
5
+ schemas.add(schema);
6
+ const validator = schemas.compile(schema);
7
+
8
+ class Organization extends Kohost {
9
+ constructor(data) {
10
+ super(data);
11
+ }
12
+ }
13
+
14
+ Object.defineProperty(Organization.prototype, "schema", {
15
+ value: schema,
16
+ });
17
+
18
+ Object.defineProperty(Organization.prototype, "validator", {
19
+ get: function () {
20
+ return validator;
21
+ },
22
+ });
23
+
24
+ Object.defineProperty(Organization, "validProperties", {
25
+ value: Object.keys(schema.properties),
26
+ });
27
+
28
+ module.exports = Organization;
@@ -0,0 +1,29 @@
1
+ // Create the Product Model
2
+ const schemas = require("../utils/schema");
3
+ const schema = require("../schemas/product.json");
4
+ const Kohost = require("./Kohost");
5
+
6
+ schemas.add(schema);
7
+ const validator = schemas.compile(schema);
8
+
9
+ class Product extends Kohost {
10
+ constructor(data) {
11
+ super(data);
12
+ }
13
+ }
14
+
15
+ Object.defineProperty(Product.prototype, "schema", {
16
+ value: schema,
17
+ });
18
+
19
+ Object.defineProperty(Product.prototype, "validator", {
20
+ get: function () {
21
+ return validator;
22
+ },
23
+ });
24
+
25
+ Object.defineProperty(Product, "validProperties", {
26
+ value: Object.keys(schema.properties),
27
+ });
28
+
29
+ module.exports = Product;
@@ -0,0 +1,28 @@
1
+ const schemas = require("../utils/schema");
2
+ const schema = require("../schemas/property.json");
3
+ const Kohost = require("./Kohost");
4
+
5
+ schemas.add(schema);
6
+ const validator = schemas.compile(schema);
7
+
8
+ class Property extends Kohost {
9
+ constructor(data) {
10
+ super(data);
11
+ }
12
+ }
13
+
14
+ Object.defineProperty(Property.prototype, "schema", {
15
+ value: schema,
16
+ });
17
+
18
+ Object.defineProperty(Property.prototype, "validator", {
19
+ get: function () {
20
+ return validator;
21
+ },
22
+ });
23
+
24
+ Object.defineProperty(Property, "validProperties", {
25
+ value: Object.keys(schema.properties),
26
+ });
27
+
28
+ module.exports = Property;