@kohost/api-client 3.0.0-beta.98 → 3.0.0

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 (61) hide show
  1. package/dist/cjs/Client/index.js +374 -67
  2. package/dist/cjs/Commands/CreateShortLinkCommand.js +2 -2
  3. package/dist/cjs/Commands/OCRDocumentCommand.js +2 -2
  4. package/dist/cjs/Commands/SetAlarmCommand.js +2 -2
  5. package/dist/cjs/Commands/SetCourtesyCommand.js +2 -2
  6. package/dist/cjs/Commands/SetDimmerCommand.js +2 -2
  7. package/dist/cjs/Commands/SetLockCommand.js +2 -2
  8. package/dist/cjs/Commands/SetSwitchCommand.js +2 -2
  9. package/dist/cjs/Commands/SetThermostatCommand.js +2 -2
  10. package/dist/cjs/Commands/SetWindowCoveringCommand.js +2 -2
  11. package/dist/cjs/Events/ApplicationInUseEvent.js +3 -6
  12. package/dist/cjs/Events/ApplicationOutOfUseEvent.js +3 -6
  13. package/dist/cjs/Events/ReservationCheckInEvent.js +23 -0
  14. package/dist/cjs/Events/ReservationCheckOutEvent.js +23 -0
  15. package/dist/cjs/Events/index.js +6 -0
  16. package/dist/cjs/SocketIoClient/index.js +23 -4
  17. package/dist/cjs/schemas/AlarmSchema.d.ts +13 -2
  18. package/dist/cjs/schemas/CredentialSchema.d.ts +1 -1
  19. package/dist/cjs/schemas/DiscoveredDeviceSchema.d.ts +4 -0
  20. package/dist/cjs/schemas/MediaSourceSchema.d.ts +3 -1
  21. package/dist/cjs/schemas/OrganizationSchema.d.ts +30 -0
  22. package/dist/cjs/schemas/PropertySchema.d.ts +25 -34
  23. package/dist/cjs/schemas/ReservationSchema.d.ts +1 -0
  24. package/dist/cjs/schemas/RoomSchema.d.ts +18 -4
  25. package/dist/cjs/schemas/SceneSchema.d.ts +2 -1
  26. package/dist/cjs/schemas/UserSchema.d.ts +1 -0
  27. package/dist/cjs/schemas/WindowCoveringSchema.d.ts +2 -1
  28. package/dist/cjs/schemas/alarm.json +4 -4
  29. package/dist/cjs/schemas/credential.json +1 -0
  30. package/dist/cjs/schemas/discoveredDevice.json +4 -0
  31. package/dist/cjs/schemas/mediaSource.json +11 -1
  32. package/dist/cjs/schemas/organization.json +109 -0
  33. package/dist/cjs/schemas/property.json +38 -115
  34. package/dist/cjs/schemas/reservation.json +3 -0
  35. package/dist/cjs/schemas/scene.json +3 -0
  36. package/dist/cjs/schemas/windowCovering.json +8 -2
  37. package/dist/esm/Client.js +504 -193
  38. package/dist/esm/Client.js.map +4 -4
  39. package/dist/esm/Commands.js +18 -18
  40. package/dist/esm/Commands.js.map +2 -2
  41. package/dist/esm/Events.js +61 -17
  42. package/dist/esm/Events.js.map +3 -3
  43. package/dist/esm/Models.js +180 -121
  44. package/dist/esm/Models.js.map +2 -2
  45. package/dist/esm/SocketIoClient.js +26 -7
  46. package/dist/esm/SocketIoClient.js.map +2 -2
  47. package/dist/esm/defs.js +162 -131
  48. package/dist/esm/defs.js.map +4 -4
  49. package/dist/useCases/{LoginUser.js → CreateScene.js} +2 -2
  50. package/dist/useCases/DescribeAlarmConfig.js +32 -0
  51. package/dist/useCases/{DescribeMyProperty.js → DescribeMyOrganization.js} +2 -2
  52. package/dist/useCases/DescribeMyPasskeyRegistrations.js +32 -0
  53. package/dist/useCases/FinishRegisterPasskey.js +32 -0
  54. package/dist/useCases/{RequestLoginLink.js → ListMyProperties.js} +3 -3
  55. package/dist/useCases/{RequestPWAToken.js → LoginFinish.js} +3 -3
  56. package/dist/useCases/LoginStart.js +32 -0
  57. package/dist/useCases/{RequestMyKeyToken.js → RequestLoginToken.js} +3 -3
  58. package/dist/useCases/SetAlarm.js +32 -0
  59. package/dist/useCases/SetCustomScene.js +32 -0
  60. package/dist/useCases/StartRegisterPasskey.js +32 -0
  61. package/package.json +3 -4
@@ -2,10 +2,10 @@ const Command = require("./Command");
2
2
  const RequestError = require("../Errors/RequestError");
3
3
 
4
4
  class CreateShortLinkCommand extends Command {
5
- constructor({ title, destination }) {
5
+ constructor({ title, destination, ...rest }) {
6
6
  if (!title) throw new RequestError("title is required");
7
7
  if (!destination) throw new RequestError("destination to is required");
8
- super({ title, destination });
8
+ super({ title, destination, ...rest });
9
9
  }
10
10
 
11
11
  get name() {
@@ -2,9 +2,9 @@ const Command = require("./Command");
2
2
  const RequestError = require("../Errors/RequestError");
3
3
 
4
4
  class OCRDocumentCommand extends Command {
5
- constructor({ type, image }) {
5
+ constructor({ type, image, ...rest }) {
6
6
  if (!image) throw new RequestError("document image is required");
7
- super({ type, image });
7
+ super({ type, image, ...rest });
8
8
  }
9
9
 
10
10
  get name() {
@@ -1,8 +1,8 @@
1
1
  const Command = require("./Command");
2
2
 
3
3
  class SetAlarmCommand extends Command {
4
- constructor({ id, zones, areas }) {
5
- super({ id, zones, areas });
4
+ constructor({ id, zones, areas, code, ...rest }) {
5
+ super({ id, zones, areas, code, ...rest });
6
6
  }
7
7
 
8
8
  get name() {
@@ -1,8 +1,8 @@
1
1
  const Command = require("./Command");
2
2
 
3
3
  class SetCourtesyCommand extends Command {
4
- constructor({ id, state }) {
5
- super({ id, state });
4
+ constructor({ id, state, ...rest }) {
5
+ super({ id, state, ...rest });
6
6
  }
7
7
 
8
8
  get name() {
@@ -1,8 +1,8 @@
1
1
  const Command = require("./Command");
2
2
 
3
3
  class SetDimmerCommand extends Command {
4
- constructor({ id, level }) {
5
- super({ id, level });
4
+ constructor({ id, level, ...rest }) {
5
+ super({ id, level, ...rest });
6
6
  }
7
7
 
8
8
  get name() {
@@ -1,8 +1,8 @@
1
1
  const Command = require("./Command");
2
2
 
3
3
  class SetLockCommand extends Command {
4
- constructor({ id, state }) {
5
- super({ id, state });
4
+ constructor({ id, state, ...rest }) {
5
+ super({ id, state, ...rest });
6
6
  }
7
7
 
8
8
  get name() {
@@ -1,8 +1,8 @@
1
1
  const Command = require("./Command");
2
2
 
3
3
  class SetSwitchCommand extends Command {
4
- constructor({ id, state }) {
5
- super({ id, state });
4
+ constructor({ id, state, ...rest }) {
5
+ super({ id, state, ...rest });
6
6
  }
7
7
 
8
8
  get name() {
@@ -1,8 +1,8 @@
1
1
  const Command = require("./Command");
2
2
 
3
3
  class SetThermostatCommand extends Command {
4
- constructor({ id, setpoints, hvacMode, fanMode }) {
5
- super({ id, setpoints, hvacMode, fanMode });
4
+ constructor({ id, setpoints, hvacMode, fanMode, ...rest }) {
5
+ super({ id, setpoints, hvacMode, fanMode, ...rest });
6
6
  }
7
7
 
8
8
  get name() {
@@ -1,8 +1,8 @@
1
1
  const Command = require("./Command");
2
2
 
3
3
  class SetWindowCoveringCommand extends Command {
4
- constructor({ id, position }) {
5
- super({ id, position });
4
+ constructor({ id, position, ...rest }) {
5
+ super({ id, position, ...rest });
6
6
  }
7
7
 
8
8
  get name() {
@@ -2,10 +2,8 @@ const Event = require("./Event");
2
2
 
3
3
  class ApplicationInUseEvent extends Event {
4
4
  constructor({ propertyId, organizationId, ...rest }) {
5
- if (!propertyId && !organizationId)
6
- throw new Error(
7
- "propertyId or organizationId required for ApplicationInUseEvent"
8
- );
5
+ if (!propertyId)
6
+ throw new Error("propertyId is required for ApplicationInUseEvent");
9
7
  super({ propertyId, organizationId, ...rest });
10
8
  this._propertyId = propertyId;
11
9
  this._organizationId = organizationId;
@@ -20,8 +18,7 @@ class ApplicationInUseEvent extends Event {
20
18
  }
21
19
 
22
20
  get routingKey() {
23
- if (this._propertyId) return `app.${this._propertyId}.inUse`;
24
- else return `app.org.${this._organizationId}.inUse`;
21
+ return `app.${this._propertyId}.inUse`;
25
22
  }
26
23
  }
27
24
 
@@ -2,10 +2,8 @@ const Event = require("./Event");
2
2
 
3
3
  class ApplicationOutOfUseEvent extends Event {
4
4
  constructor({ propertyId, organizationId, ...rest }) {
5
- if (!propertyId && !organizationId)
6
- throw new Error(
7
- "propertyId or organizationId required for ApplicationOutOfUseEvent"
8
- );
5
+ if (!propertyId)
6
+ throw new Error("propertyId required for ApplicationOutOfUseEvent");
9
7
  super({ propertyId, organizationId, ...rest });
10
8
  this._propertyId = propertyId;
11
9
  this._organizationId = organizationId;
@@ -20,8 +18,7 @@ class ApplicationOutOfUseEvent extends Event {
20
18
  }
21
19
 
22
20
  get routingKey() {
23
- if (this._propertyId) return `app.${this._propertyId}.outOfUse`;
24
- else return `app.org.${this._organizationId}.outOfUse`;
21
+ return `app.${this._propertyId}.outOfUse`;
25
22
  }
26
23
  }
27
24
 
@@ -0,0 +1,23 @@
1
+ const Event = require("./Event");
2
+
3
+ class ReservationCheckInEvent extends Event {
4
+ constructor(reservation) {
5
+ super(reservation);
6
+ }
7
+
8
+ get name() {
9
+ return "ReservationCheckIn";
10
+ }
11
+
12
+ get routingKey() {
13
+ return `${this.data[0].organizationId || "#"}.${
14
+ this.data[0].propertyId || "#"
15
+ }.reservation.ReservationCheckIn`;
16
+ }
17
+
18
+ static get entity() {
19
+ return "reservation";
20
+ }
21
+ }
22
+
23
+ module.exports = ReservationCheckInEvent;
@@ -0,0 +1,23 @@
1
+ const Event = require("./Event");
2
+
3
+ class ReservationCheckOutEvent extends Event {
4
+ constructor(reservation) {
5
+ super(reservation);
6
+ }
7
+
8
+ get name() {
9
+ return "ReservationCheckIn";
10
+ }
11
+
12
+ get routingKey() {
13
+ return `${this.data[0].organizationId || "#"}.${
14
+ this.data[0].propertyId || "#"
15
+ }.reservation.ReservationCheckOut`;
16
+ }
17
+
18
+ static get entity() {
19
+ return "reservation";
20
+ }
21
+ }
22
+
23
+ module.exports = ReservationCheckOutEvent;
@@ -30,6 +30,10 @@ const ShortLinkCreatedEvent = require("./ShortLinkCreatedEvent");
30
30
  const ApplicationInUseEvent = require("./ApplicationInUseEvent");
31
31
  const ApplicationOutOfUseEvent = require("./ApplicationOutOfUseEvent");
32
32
 
33
+ const ReservationCheckInEvent = require("./ReservationCheckInEvent");
34
+ const ReservationCheckOutEvent = require("./ReservationCheckOutEvent");
35
+
36
+
33
37
  // Delete Events
34
38
  const SystemEntityDeletedEvent = require("./SystemEntityDeletedEvent");
35
39
 
@@ -62,4 +66,6 @@ module.exports = {
62
66
  ShortLinkCreatedEvent,
63
67
  ApplicationInUseEvent,
64
68
  ApplicationOutOfUseEvent,
69
+ ReservationCheckInEvent,
70
+ ReservationCheckOutEvent
65
71
  };
@@ -2,12 +2,15 @@ const io = require("socket.io-client");
2
2
  const { EventEmitter } = require("events");
3
3
 
4
4
  module.exports = class SocketIoClient extends EventEmitter {
5
- constructor(config = { url: null, propertyId: null, options: {} }) {
5
+ constructor(
6
+ config = {
7
+ url: null,
8
+ options: {},
9
+ }
10
+ ) {
6
11
  super();
7
- if (!config.url) throw new Error("Websocket URL / endpoint not provided");
8
- if (!config.propertyId) throw new Error("Property ID not provided");
12
+ if (!config.url) throw new Error("config.url is required");
9
13
  this.url = config.url;
10
- this.propertyId = config.propertyId;
11
14
  this.options = {
12
15
  autoConnect: false,
13
16
  forceNew: false,
@@ -39,6 +42,16 @@ module.exports = class SocketIoClient extends EventEmitter {
39
42
  });
40
43
  }
41
44
 
45
+ #url = null;
46
+
47
+ get url() {
48
+ return this.#url;
49
+ }
50
+
51
+ set url(url) {
52
+ this.#url = url;
53
+ }
54
+
42
55
  get connected() {
43
56
  return this.socket?.connected || false;
44
57
  }
@@ -71,4 +84,10 @@ module.exports = class SocketIoClient extends EventEmitter {
71
84
  send(event, { data = {}, query = {}, ...rest }) {
72
85
  this.socket.emit(event, { data, query, ...rest });
73
86
  }
87
+
88
+ destroy() {
89
+ this.disconnect();
90
+ this.socket.removeAllListeners();
91
+ this.socket = null;
92
+ }
74
93
  };
@@ -145,14 +145,25 @@ export interface Alarm {
145
145
  number?: number;
146
146
  name?: string;
147
147
  securityMode?: "arming" | "disarming" | "armed" | "disarmed" | "alarm" | null;
148
- readyToArm?: boolean | null;
149
148
  }[];
150
149
  zones: {
151
150
  number?: number;
152
151
  name?: string;
153
- secure?: boolean;
152
+ secure?: boolean | null;
154
153
  bypassed?: boolean | null;
155
154
  }[];
156
155
  watts?: number;
156
+ address?: Address;
157
+ [k: string]: unknown;
158
+ }
159
+ export interface Address {
160
+ id?: string;
161
+ line1?: string;
162
+ line2?: string;
163
+ line3?: string;
164
+ city?: string;
165
+ state?: string;
166
+ postalCode?: string;
167
+ countryCode?: string;
157
168
  [k: string]: unknown;
158
169
  }
@@ -36,7 +36,7 @@ export interface Credential {
36
36
  | "cloudflare-images"
37
37
  | "cloudflare-stream"
38
38
  | "insperia-privacy";
39
- discriminator?: "verificationCode" | "token" | "mobileKey" | "pin" | "publicKey" | "id";
39
+ discriminator?: "verificationCode" | "token" | "mobileKey" | "pin" | "publicKey" | "passkeyChallenge" | "id";
40
40
  credential: string;
41
41
  user?: string;
42
42
  organization?: string;
@@ -39,5 +39,9 @@ export interface DiscoveredDevice {
39
39
  * Reference (id) to the organization that owns this device
40
40
  */
41
41
  organization?: string | null;
42
+ /**
43
+ * Reference (id) to the property that this device belongs to
44
+ */
45
+ property?: string | null;
42
46
  [k: string]: unknown;
43
47
  }
@@ -90,7 +90,9 @@ export type Notification = {
90
90
  */
91
91
  export interface MediaSource {
92
92
  id: string;
93
- type: "tv" | "dvr" | "appleTv" | "discPlayer" | "mediaPlayer" | "uncontrolledDevice";
93
+ type: string;
94
+ discriminator: "tv" | "dvr" | "appleTv" | "discPlayer" | "mediaPlayer" | "uncontrolledDevice";
95
+ remote?: "MR22GA";
94
96
  name?: string;
95
97
  driver:
96
98
  | "aws-kinesis"
@@ -25,6 +25,36 @@ export interface Organization {
25
25
  accountNumber: number | null;
26
26
  name: string;
27
27
  properties?: string[];
28
+ hostname?: string | null;
29
+ appManifest?: {
30
+ name?: string;
31
+ short_name?: string;
32
+ scope?: string;
33
+ start_url?: string;
34
+ themeColor?: string;
35
+ backgroundColor?: string;
36
+ display?: "fullscreen" | "standalone" | "minimal-ui" | "browser";
37
+ orientation?: "portrait" | "landscape";
38
+ splash?: {
39
+ src?: string;
40
+ type?: string;
41
+ sizes?: string;
42
+ [k: string]: unknown;
43
+ };
44
+ icons?: {
45
+ src?: string;
46
+ sizes?: string;
47
+ type?: string;
48
+ [k: string]: unknown;
49
+ }[];
50
+ logo?: {
51
+ src?: string;
52
+ type?: string;
53
+ sizes?: string;
54
+ [k: string]: unknown;
55
+ };
56
+ [k: string]: unknown;
57
+ };
28
58
  credentials?: {
29
59
  [k: string]: unknown;
30
60
  };
@@ -13,6 +13,10 @@ export interface Property {
13
13
  name: string;
14
14
  type: string;
15
15
  discriminator?: "hospitality" | "education" | "commercial";
16
+ /**
17
+ * Reference (id) to the organization that owns this property
18
+ */
19
+ organization: string | null;
16
20
  testModeEnabled?: boolean;
17
21
  testMode?: {
18
22
  /**
@@ -23,51 +27,32 @@ export interface Property {
23
27
  };
24
28
  timezone?: string;
25
29
  smsNumber?: string;
26
- hostname: string | null;
27
- /**
28
- * Reference (id) to the organization that owns this property
29
- */
30
- organization: string | null;
31
30
  checkInTime?: string;
32
31
  checkOutTime?: string;
33
32
  address?: Address;
34
33
  latitude?: number;
35
34
  longitude?: number;
36
- appManifest?: {
37
- name?: string;
38
- short_name?: string;
39
- scope?: string;
40
- start_url?: string;
41
- themeColor?: string;
42
- backgroundColor?: string;
43
- display?: "fullscreen" | "standalone" | "minimal-ui" | "browser";
44
- orientation?: "portrait" | "landscape";
45
- splash?: {
46
- src?: string;
47
- type?: string;
48
- sizes?: string;
49
- [k: string]: unknown;
50
- };
51
- icons?: {
52
- src?: string;
53
- sizes?: string;
54
- type?: string;
55
- [k: string]: unknown;
56
- }[];
57
- logo?: {
58
- src?: string;
59
- type?: string;
60
- sizes?: string;
61
- [k: string]: unknown;
62
- };
63
- [k: string]: unknown;
64
- };
65
35
  appFeatures?: {
66
36
  RoomControl?: {
67
37
  commonAreas?: {
68
38
  spaces?: string[];
69
39
  [k: string]: unknown;
70
40
  };
41
+ alarmConfig?: {
42
+ /**
43
+ * This interface was referenced by `undefined`'s JSON-Schema definition
44
+ * via the `patternProperty` "^[a-zA-Z0-9]+$".
45
+ */
46
+ [k: string]: {
47
+ /**
48
+ * Maps zone numbers to lock ids
49
+ */
50
+ zoneLockMap?: {
51
+ [k: string]: string;
52
+ };
53
+ [k: string]: unknown;
54
+ };
55
+ };
71
56
  };
72
57
  CheckIn?: {
73
58
  payment?: unknown;
@@ -114,6 +99,12 @@ export interface Property {
114
99
  [k: string]: unknown;
115
100
  };
116
101
  Elevator?: unknown;
102
+ Experiences?: unknown;
103
+ Dining?: unknown;
104
+ Rentals?: unknown;
105
+ Shop?: unknown;
106
+ Spa?: unknown;
107
+ Valet?: unknown;
117
108
  };
118
109
  notifications?: {
119
110
  email?: {
@@ -103,6 +103,7 @@ export interface Reservation {
103
103
  id?: string;
104
104
  price?: number;
105
105
  unit?: "night" | "stay" | "hour";
106
+ isUpgrade?: boolean;
106
107
  [k: string]: unknown;
107
108
  }[];
108
109
  revenue?: Revenue;
@@ -496,6 +496,7 @@ export interface WindowCovering {
496
496
  | "discPlayer"
497
497
  | "mediaPlayer"
498
498
  | "uncontrolledDevice";
499
+ discriminator?: "basic" | "variable";
499
500
  supportedNotifications?: SupportedNotifications;
500
501
  notification?: {
501
502
  name?:
@@ -554,7 +555,7 @@ export interface WindowCovering {
554
555
  | "cloudflare-stream"
555
556
  | "insperia-privacy";
556
557
  offline?: boolean;
557
- position: number;
558
+ position: number | null;
558
559
  systemId?: string;
559
560
  watts?: number;
560
561
  [k: string]: unknown;
@@ -741,7 +742,9 @@ export interface Camera {
741
742
  */
742
743
  export interface MediaSource {
743
744
  id: string;
744
- type: "tv" | "dvr" | "appleTv" | "discPlayer" | "mediaPlayer" | "uncontrolledDevice";
745
+ type: string;
746
+ discriminator: "tv" | "dvr" | "appleTv" | "discPlayer" | "mediaPlayer" | "uncontrolledDevice";
747
+ remote?: "MR22GA";
745
748
  name?: string;
746
749
  driver:
747
750
  | "aws-kinesis"
@@ -1090,14 +1093,25 @@ export interface Alarm {
1090
1093
  number?: number;
1091
1094
  name?: string;
1092
1095
  securityMode?: "arming" | "disarming" | "armed" | "disarmed" | "alarm" | null;
1093
- readyToArm?: boolean | null;
1094
1096
  }[];
1095
1097
  zones: {
1096
1098
  number?: number;
1097
1099
  name?: string;
1098
- secure?: boolean;
1100
+ secure?: boolean | null;
1099
1101
  bypassed?: boolean | null;
1100
1102
  }[];
1101
1103
  watts?: number;
1104
+ address?: Address;
1105
+ [k: string]: unknown;
1106
+ }
1107
+ export interface Address {
1108
+ id?: string;
1109
+ line1?: string;
1110
+ line2?: string;
1111
+ line3?: string;
1112
+ city?: string;
1113
+ state?: string;
1114
+ postalCode?: string;
1115
+ countryCode?: string;
1102
1116
  [k: string]: unknown;
1103
1117
  }
@@ -11,6 +11,7 @@
11
11
  export interface Scene {
12
12
  id?: string;
13
13
  name?: string;
14
+ description?: string;
14
15
  devices?: {
15
16
  switches?: {
16
17
  id?: string;
@@ -24,7 +25,7 @@ export interface Scene {
24
25
  }[];
25
26
  windowCoverings?: {
26
27
  id?: string;
27
- position?: number;
28
+ position?: number | null;
28
29
  [k: string]: unknown;
29
30
  }[];
30
31
  thermostats?: {
@@ -271,6 +271,7 @@ export interface Reservation {
271
271
  id?: string;
272
272
  price?: number;
273
273
  unit?: "night" | "stay" | "hour";
274
+ isUpgrade?: boolean;
274
275
  [k: string]: unknown;
275
276
  }[];
276
277
  revenue?: Revenue;
@@ -109,6 +109,7 @@ export interface WindowCovering {
109
109
  | "discPlayer"
110
110
  | "mediaPlayer"
111
111
  | "uncontrolledDevice";
112
+ discriminator?: "basic" | "variable";
112
113
  supportedNotifications?: SupportedNotifications;
113
114
  notification?: Notification;
114
115
  driver:
@@ -140,7 +141,7 @@ export interface WindowCovering {
140
141
  | "cloudflare-stream"
141
142
  | "insperia-privacy";
142
143
  offline?: boolean;
143
- position: number;
144
+ position: number | null;
144
145
  systemId?: string;
145
146
  watts?: number;
146
147
  [k: string]: unknown;
@@ -43,9 +43,6 @@
43
43
  "securityMode": {
44
44
  "type": ["string", "null"],
45
45
  "enum": ["arming", "disarming", "armed", "disarmed", "alarm", null]
46
- },
47
- "readyToArm": {
48
- "type": ["boolean", "null"]
49
46
  }
50
47
  },
51
48
  "additionalProperties": false
@@ -64,7 +61,7 @@
64
61
  "type": "string"
65
62
  },
66
63
  "secure": {
67
- "type": "boolean"
64
+ "type": ["boolean", "null"]
68
65
  },
69
66
  "bypassed": {
70
67
  "type": ["boolean", "null"]
@@ -75,6 +72,9 @@
75
72
  },
76
73
  "watts": {
77
74
  "$ref": "definitions.json#/definitions/watts"
75
+ },
76
+ "address": {
77
+ "$ref": "definitions.json#/definitions/address"
78
78
  }
79
79
  },
80
80
  "required": ["id", "type", "areas", "zones", "driver"]
@@ -23,6 +23,7 @@
23
23
  "mobileKey",
24
24
  "pin",
25
25
  "publicKey",
26
+ "passkeyChallenge",
26
27
  "id"
27
28
  ]
28
29
  },
@@ -30,6 +30,10 @@
30
30
  "organization": {
31
31
  "type": ["string", "null"],
32
32
  "description": "Reference (id) to the organization that owns this device"
33
+ },
34
+ "property": {
35
+ "type": ["string", "null"],
36
+ "description": "Reference (id) to the property that this device belongs to"
33
37
  }
34
38
  }
35
39
  }
@@ -4,12 +4,16 @@
4
4
  "title": "Media Source",
5
5
  "description": "Any media source",
6
6
  "type": "object",
7
- "required": ["id", "type", "audio", "video", "driver"],
7
+ "required": ["id", "type", "discriminator", "audio", "video", "driver"],
8
8
  "properties": {
9
9
  "id": {
10
10
  "$ref": "definitions.json#/definitions/id"
11
11
  },
12
12
  "type": {
13
+ "type": "string",
14
+ "default": "mediaSource"
15
+ },
16
+ "discriminator": {
13
17
  "type": "string",
14
18
  "enum": [
15
19
  "tv",
@@ -20,6 +24,12 @@
20
24
  "uncontrolledDevice"
21
25
  ]
22
26
  },
27
+ "remote": {
28
+ "type": "string",
29
+ "enum": [
30
+ "MR22GA"
31
+ ]
32
+ },
23
33
  "name": {
24
34
  "$ref": "definitions.json#/definitions/name"
25
35
  },