@awarevue/api-types 2.0.22 → 2.0.23
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.
- package/dist/_legacy/index.d.ts +2 -0
- package/dist/_legacy/index.js +2 -0
- package/dist/_legacy/milestone.js +1 -0
- package/dist/_legacy/orchid.js +1 -0
- package/dist/alarm-automation.d.ts +3 -3
- package/dist/alarm-automation.js +26 -37
- package/dist/api/agent-protocol/index.d.ts +1 -0
- package/dist/api/agent-protocol/index.js +1 -0
- package/dist/{agent-communication → api/agent-protocol}/protocol.d.ts +407 -598
- package/dist/api/agent-protocol/protocol.js +382 -0
- package/dist/api/commands/alarm.js +59 -0
- package/dist/{commands → api/commands}/all.d.ts +83 -83
- package/dist/{commands → api/commands}/all.js +22 -25
- package/dist/api/commands/camera-lift.js +14 -0
- package/dist/api/commands/camera.js +93 -0
- package/dist/api/commands/display.js +34 -0
- package/dist/api/commands/door.js +24 -0
- package/dist/api/commands/index.js +12 -0
- package/dist/api/commands/intercom-terminal.js +2 -0
- package/dist/api/commands/io-board.js +12 -0
- package/dist/api/commands/nvr-exporter.js +23 -0
- package/dist/api/commands/pbx.js +14 -0
- package/dist/api/commands/presence-tracker.js +30 -0
- package/dist/api/commands/server.js +24 -0
- package/dist/api/error.js +181 -0
- package/dist/api/events/alarm.js +52 -0
- package/dist/{events → api/events}/all.d.ts +8 -8
- package/dist/api/events/all.js +124 -0
- package/dist/api/events/camera.js +84 -0
- package/dist/api/events/display.js +6 -0
- package/dist/api/events/door.js +59 -0
- package/dist/api/events/index.js +12 -0
- package/dist/api/events/intercom-terminal.js +16 -0
- package/dist/api/events/io-board.js +10 -0
- package/dist/api/events/nvr-exporter.js +18 -0
- package/dist/api/events/panic-button.js +8 -0
- package/dist/api/events/presence-tracker.js +30 -0
- package/dist/api/events/reader.js +10 -0
- package/dist/{events → api/events}/server.d.ts +5 -5
- package/dist/api/events/server.js +12 -0
- package/dist/api/index.d.ts +9 -4
- package/dist/api/index.js +9 -20
- package/dist/api/mqtt/index.d.ts +1 -0
- package/dist/api/mqtt/index.js +1 -0
- package/dist/api/mqtt/payloads.js +18 -0
- package/dist/api/queries/all.js +25 -0
- package/dist/api/queries/camera.js +24 -0
- package/dist/api/queries/index.js +5 -0
- package/dist/api/queries/nvr-analytics-server.js +73 -0
- package/dist/api/queries/nvr-exporter.js +33 -0
- package/dist/api/queries/nvr-recorder.js +39 -0
- package/dist/api/rest/access-rule.d.ts +117 -0
- package/dist/api/rest/access-rule.js +10 -0
- package/dist/{access-control → api/rest}/agreement.d.ts +0 -20
- package/dist/api/rest/agreement.js +7 -0
- package/dist/api/rest/alarm.js +1 -0
- package/dist/{api-keys.d.ts → api/rest/api-keys.d.ts} +0 -20
- package/dist/api/rest/api-keys.js +11 -0
- package/dist/api/rest/app.js +9 -0
- package/dist/api/rest/auth.js +16 -0
- package/dist/{automation.d.ts → api/rest/automation.d.ts} +0 -217
- package/dist/api/rest/automation.js +14 -0
- package/dist/api/rest/aware-config.js +1 -0
- package/dist/{bookmarks.d.ts → api/rest/bookmarks.d.ts} +0 -49
- package/dist/api/rest/bookmarks.js +18 -0
- package/dist/api/rest/cast.js +7 -0
- package/dist/{custom-field.d.ts → api/rest/custom-field.d.ts} +1 -19
- package/dist/api/rest/custom-field.js +3 -0
- package/dist/{device-event.d.ts → api/rest/device-event.d.ts} +1 -1
- package/dist/api/rest/device-event.js +1 -0
- package/dist/{device-group.d.ts → api/rest/device-group.d.ts} +0 -23
- package/dist/api/rest/device-group.js +17 -0
- package/dist/api/rest/file.js +1 -0
- package/dist/api/rest/index.d.ts +34 -0
- package/dist/api/rest/index.js +34 -0
- package/dist/{device-factory.d.ts → api/rest/io-device.d.ts} +1 -1
- package/dist/api/rest/io-device.js +19 -0
- package/dist/{layout.d.ts → api/rest/layout.d.ts} +6 -107
- package/dist/api/rest/layout.js +19 -0
- package/dist/{macros.d.ts → api/rest/macros.d.ts} +0 -82
- package/dist/api/rest/macros.js +8 -0
- package/dist/api/rest/media.js +65 -0
- package/dist/api/rest/module-config.d.ts +19 -0
- package/dist/api/rest/module-config.js +1 -0
- package/dist/api/rest/notifications.d.ts +21 -0
- package/dist/api/rest/notifications.js +9 -0
- package/dist/api/rest/person-agreement.d.ts +15 -0
- package/dist/api/rest/person-agreement.js +6 -0
- package/dist/api/rest/person-presence.d.ts +72 -0
- package/dist/api/rest/person-presence.js +29 -0
- package/dist/{access-control → api/rest}/person-type.d.ts +1 -33
- package/dist/api/rest/person-type.js +8 -0
- package/dist/api/rest/person.d.ts +128 -0
- package/dist/api/rest/person.js +8 -0
- package/dist/api/{query.js → rest/query.js} +8 -13
- package/dist/api/rest/schedule.d.ts +249 -0
- package/dist/api/rest/schedule.js +9 -0
- package/dist/{security-level.d.ts → api/rest/security-level.d.ts} +0 -29
- package/dist/api/rest/security-level.js +5 -0
- package/dist/{template.d.ts → api/rest/template.d.ts} +1 -18
- package/dist/api/rest/template.js +12 -0
- package/dist/{token-conversion.d.ts → api/rest/token-conversion.d.ts} +0 -22
- package/dist/api/rest/token-conversion.js +5 -0
- package/dist/{user.d.ts → api/rest/user.d.ts} +10 -60
- package/dist/api/rest/user.js +32 -0
- package/dist/api/rest/view.d.ts +397 -0
- package/dist/api/rest/view.js +16 -0
- package/dist/api/rest/webrtc-playback.js +8 -0
- package/dist/{access-control → api/rest}/zone.d.ts +0 -29
- package/dist/api/rest/zone.js +10 -0
- package/dist/api/state/index.d.ts +10 -0
- package/dist/api/state/index.js +1 -0
- package/dist/api/ws/device-communication.js +55 -0
- package/dist/api/ws/index.js +5 -0
- package/dist/api/ws/notifications.js +20 -0
- package/dist/api/ws/progress.js +44 -0
- package/dist/api/ws/web-rtc-signaling.js +92 -0
- package/dist/api/ws/web-socket.js +2 -0
- package/dist/index.d.ts +1 -36
- package/dist/index.js +6 -57
- package/dist/{access-control → objects}/access-rule.d.ts +9 -78
- package/dist/objects/access-rule.js +36 -0
- package/dist/objects/agent-metadata.d.ts +192 -0
- package/dist/objects/agent-metadata.js +49 -0
- package/dist/objects/agreement.d.ts +21 -0
- package/dist/objects/agreement.js +8 -0
- package/dist/{objects.d.ts → objects/all.d.ts} +18 -11
- package/dist/{objects.js → objects/all.js} +4 -7
- package/dist/objects/api-key.d.ts +21 -0
- package/dist/objects/api-key.js +8 -0
- package/dist/objects/automation-rule.d.ts +218 -0
- package/dist/objects/automation-rule.js +51 -0
- package/dist/objects/bookmark.d.ts +50 -0
- package/dist/objects/bookmark.js +13 -0
- package/dist/objects/credential.js +11 -0
- package/dist/objects/custom-field.d.ts +20 -0
- package/dist/objects/custom-field.js +14 -0
- package/dist/{device → objects/device}/alarm.js +3 -6
- package/dist/{device → objects/device}/any-device.d.ts +510 -510
- package/dist/objects/device/any-device.js +239 -0
- package/dist/objects/device/camera-lift.js +4 -0
- package/dist/objects/device/camera.js +32 -0
- package/dist/objects/device/device-gateway.js +2 -0
- package/dist/{device-import.d.ts → objects/device/device-import.d.ts} +44 -44
- package/dist/objects/device/device-import.js +30 -0
- package/dist/{device-relation.js → objects/device/device-relation.js} +13 -16
- package/dist/objects/device/display.js +4 -0
- package/dist/objects/device/door.js +9 -0
- package/dist/{device → objects/device}/index.d.ts +2 -0
- package/dist/objects/device/index.js +22 -0
- package/dist/objects/device/intercom-operator.js +1 -0
- package/dist/objects/device/intercom-terminal.js +23 -0
- package/dist/objects/device/io-board.js +7 -0
- package/dist/objects/device/motion-sensor.js +4 -0
- package/dist/objects/device/nvr-analytics-server.js +6 -0
- package/dist/objects/device/nvr-exporter.js +7 -0
- package/dist/objects/device/nvr-recorder.js +6 -0
- package/dist/objects/device/panic-button.js +4 -0
- package/dist/objects/device/pbx.js +6 -0
- package/dist/objects/device/presence-tracker.js +1 -0
- package/dist/objects/device/reader.js +1 -0
- package/dist/{device → objects/device}/server.d.ts +1 -1
- package/dist/objects/device/server.js +1 -0
- package/dist/objects/device/system.js +6 -0
- package/dist/objects/device-group.d.ts +24 -0
- package/dist/objects/device-group.js +9 -0
- package/dist/objects/index.d.ts +27 -0
- package/dist/objects/index.js +27 -0
- package/dist/objects/layout.d.ts +102 -0
- package/dist/objects/layout.js +22 -0
- package/dist/objects/macro.d.ts +83 -0
- package/dist/objects/macro.js +22 -0
- package/dist/{module-config.d.ts → objects/module-config.d.ts} +1 -18
- package/dist/objects/module-config.js +1 -0
- package/dist/{notifications.d.ts → objects/notification.d.ts} +0 -20
- package/dist/objects/notification.js +13 -0
- package/dist/{access-control → objects}/person-agreement.d.ts +1 -15
- package/dist/objects/person-agreement.js +8 -0
- package/dist/{access-control → objects}/person-presence.d.ts +2 -73
- package/dist/objects/person-presence.js +35 -0
- package/dist/objects/person-type.d.ts +33 -0
- package/dist/objects/person-type.js +16 -0
- package/dist/{access-control → objects}/person.d.ts +74 -140
- package/dist/objects/person.js +42 -0
- package/dist/objects/role.d.ts +21 -0
- package/dist/objects/role.js +15 -0
- package/dist/{access-control → objects}/schedule.d.ts +4 -129
- package/dist/objects/schedule.js +53 -0
- package/dist/objects/security-level.d.ts +30 -0
- package/dist/objects/security-level.js +11 -0
- package/dist/objects/template.d.ts +20 -0
- package/dist/objects/template.js +8 -0
- package/dist/objects/token-conversion.d.ts +23 -0
- package/dist/objects/token-conversion.js +8 -0
- package/dist/objects/user.d.ts +31 -0
- package/dist/objects/user.js +12 -0
- package/dist/{view.d.ts → objects/view.d.ts} +3 -399
- package/dist/objects/view.js +64 -0
- package/dist/{world-objects.js → objects/world-object.js} +5 -8
- package/dist/objects/zone.d.ts +41 -0
- package/dist/objects/zone.js +15 -0
- package/dist/package.json +1 -1
- package/dist/permissions.js +146 -149
- package/dist/primitives.d.ts +30 -30
- package/dist/primitives.js +27 -30
- package/package.json +1 -1
- package/dist/access-control/access-rule.js +0 -49
- package/dist/access-control/agreement.js +0 -20
- package/dist/access-control/credential.js +0 -17
- package/dist/access-control/index.d.ts +0 -9
- package/dist/access-control/index.js +0 -25
- package/dist/access-control/person-agreement.js +0 -19
- package/dist/access-control/person-presence.js +0 -66
- package/dist/access-control/person-type.js +0 -29
- package/dist/access-control/person.js +0 -53
- package/dist/access-control/schedule.js +0 -65
- package/dist/access-control/zone.js +0 -28
- package/dist/agent-communication/index.d.ts +0 -2
- package/dist/agent-communication/index.js +0 -18
- package/dist/agent-communication/mqtt-payloads.js +0 -21
- package/dist/agent-communication/protocol.js +0 -436
- package/dist/api/alarm.js +0 -2
- package/dist/api/auth.js +0 -19
- package/dist/api/media.js +0 -68
- package/dist/api-keys.js +0 -21
- package/dist/app.js +0 -12
- package/dist/automation.js +0 -66
- package/dist/aware-config.js +0 -2
- package/dist/bookmarks.js +0 -32
- package/dist/cast.js +0 -13
- package/dist/commands/alarm.js +0 -62
- package/dist/commands/camera-lift.js +0 -17
- package/dist/commands/camera.js +0 -97
- package/dist/commands/display.js +0 -37
- package/dist/commands/door.js +0 -27
- package/dist/commands/index.js +0 -28
- package/dist/commands/intercom-terminal.js +0 -3
- package/dist/commands/io-board.js +0 -15
- package/dist/commands/nvr-exporter.js +0 -26
- package/dist/commands/pbx.js +0 -17
- package/dist/commands/presence-tracker.js +0 -33
- package/dist/commands/server.js +0 -27
- package/dist/custom-field.js +0 -19
- package/dist/device/any-device.js +0 -242
- package/dist/device/camera-lift.js +0 -7
- package/dist/device/camera.js +0 -35
- package/dist/device/device-gateway.js +0 -5
- package/dist/device/display.js +0 -7
- package/dist/device/door.js +0 -12
- package/dist/device/index.js +0 -36
- package/dist/device/intercom-operator.js +0 -4
- package/dist/device/intercom-terminal.js +0 -26
- package/dist/device/io-board.js +0 -10
- package/dist/device/motion-sensor.js +0 -7
- package/dist/device/nvr-analytics-server.js +0 -9
- package/dist/device/nvr-exporter.js +0 -10
- package/dist/device/nvr-recorder.js +0 -9
- package/dist/device/panic-button.js +0 -7
- package/dist/device/pbx.js +0 -9
- package/dist/device/presence-tracker.js +0 -4
- package/dist/device/reader.js +0 -4
- package/dist/device/server.js +0 -4
- package/dist/device/system.js +0 -9
- package/dist/device-event.js +0 -2
- package/dist/device-factory.js +0 -26
- package/dist/device-group.js +0 -31
- package/dist/device-import.js +0 -33
- package/dist/device-state.d.ts +0 -10
- package/dist/device-state.js +0 -2
- package/dist/error.js +0 -185
- package/dist/events/alarm.js +0 -55
- package/dist/events/all.js +0 -128
- package/dist/events/camera.js +0 -87
- package/dist/events/display.js +0 -9
- package/dist/events/door.js +0 -62
- package/dist/events/index.js +0 -28
- package/dist/events/intercom-terminal.js +0 -19
- package/dist/events/io-board.js +0 -13
- package/dist/events/nvr-exporter.js +0 -21
- package/dist/events/panic-button.js +0 -11
- package/dist/events/presence-tracker.js +0 -33
- package/dist/events/reader.js +0 -13
- package/dist/events/server.js +0 -15
- package/dist/file.js +0 -2
- package/dist/layout.js +0 -45
- package/dist/macros.js +0 -32
- package/dist/messages/device-communication.js +0 -63
- package/dist/messages/index.js +0 -21
- package/dist/messages/notifications.js +0 -27
- package/dist/messages/progress.js +0 -51
- package/dist/messages/web-rtc-signaling.js +0 -99
- package/dist/messages/web-socket.js +0 -5
- package/dist/milestone.js +0 -2
- package/dist/module-config.js +0 -2
- package/dist/notifications.js +0 -23
- package/dist/orchid.js +0 -2
- package/dist/queries/all.js +0 -28
- package/dist/queries/camera.js +0 -27
- package/dist/queries/index.js +0 -21
- package/dist/queries/nvr-analytics-server.js +0 -76
- package/dist/queries/nvr-exporter.js +0 -36
- package/dist/queries/nvr-recorder.js +0 -42
- package/dist/security-level.js +0 -18
- package/dist/template.js +0 -21
- package/dist/token-conversion.js +0 -15
- package/dist/user.js +0 -57
- package/dist/view.js +0 -84
- package/dist/webrtc-playback.js +0 -14
- package/dist/{milestone.d.ts → _legacy/milestone.d.ts} +0 -0
- package/dist/{orchid.d.ts → _legacy/orchid.d.ts} +0 -0
- package/dist/{commands → api/commands}/alarm.d.ts +0 -0
- package/dist/{commands → api/commands}/camera-lift.d.ts +0 -0
- package/dist/{commands → api/commands}/camera.d.ts +0 -0
- package/dist/{commands → api/commands}/display.d.ts +0 -0
- package/dist/{commands → api/commands}/door.d.ts +0 -0
- package/dist/{commands → api/commands}/index.d.ts +0 -0
- package/dist/{commands → api/commands}/intercom-terminal.d.ts +0 -0
- package/dist/{commands → api/commands}/io-board.d.ts +0 -0
- package/dist/{commands → api/commands}/nvr-exporter.d.ts +86 -86
- package/dist/{commands → api/commands}/pbx.d.ts +0 -0
- package/dist/{commands → api/commands}/presence-tracker.d.ts +0 -0
- package/dist/{commands → api/commands}/server.d.ts +78 -78
- package/dist/{error.d.ts → api/error.d.ts} +0 -0
- package/dist/{events → api/events}/alarm.d.ts +0 -0
- package/dist/{events → api/events}/camera.d.ts +0 -0
- package/dist/{events → api/events}/display.d.ts +0 -0
- package/dist/{events → api/events}/door.d.ts +0 -0
- package/dist/{events → api/events}/index.d.ts +0 -0
- package/dist/{events → api/events}/intercom-terminal.d.ts +0 -0
- package/dist/{events → api/events}/io-board.d.ts +0 -0
- package/dist/{events → api/events}/nvr-exporter.d.ts +4 -4
- package/dist/{events → api/events}/panic-button.d.ts +0 -0
- package/dist/{events → api/events}/presence-tracker.d.ts +8 -8
- package/dist/{events → api/events}/reader.d.ts +0 -0
- package/dist/{agent-communication/mqtt-payloads.d.ts → api/mqtt/payloads.d.ts} +0 -0
- package/dist/{queries → api/queries}/all.d.ts +83 -83
- package/dist/{queries → api/queries}/camera.d.ts +0 -0
- package/dist/{queries → api/queries}/index.d.ts +0 -0
- package/dist/{queries → api/queries}/nvr-analytics-server.d.ts +4 -4
- package/dist/{queries → api/queries}/nvr-exporter.d.ts +0 -0
- package/dist/{queries → api/queries}/nvr-recorder.d.ts +162 -162
- package/dist/api/{alarm.d.ts → rest/alarm.d.ts} +0 -0
- package/dist/{app.d.ts → api/rest/app.d.ts} +0 -0
- package/dist/api/{auth.d.ts → rest/auth.d.ts} +0 -0
- package/dist/{aware-config.d.ts → api/rest/aware-config.d.ts} +0 -0
- package/dist/{cast.d.ts → api/rest/cast.d.ts} +0 -0
- package/dist/{file.d.ts → api/rest/file.d.ts} +0 -0
- package/dist/api/{media.d.ts → rest/media.d.ts} +2 -2
- /package/dist/api/{query.d.ts → rest/query.d.ts} +0 -0
- /package/dist/{webrtc-playback.d.ts → api/rest/webrtc-playback.d.ts} +0 -0
- /package/dist/{messages → api/ws}/device-communication.d.ts +0 -0
- /package/dist/{messages → api/ws}/index.d.ts +0 -0
- /package/dist/{messages → api/ws}/notifications.d.ts +0 -0
- /package/dist/{messages → api/ws}/progress.d.ts +0 -0
- /package/dist/{messages → api/ws}/web-rtc-signaling.d.ts +0 -0
- /package/dist/{messages → api/ws}/web-socket.d.ts +0 -0
- /package/dist/{access-control → objects}/credential.d.ts +0 -0
- /package/dist/{device → objects/device}/alarm.d.ts +0 -0
- /package/dist/{device → objects/device}/camera-lift.d.ts +0 -0
- /package/dist/{device → objects/device}/camera.d.ts +0 -0
- /package/dist/{device → objects/device}/device-gateway.d.ts +0 -0
- /package/dist/{device-relation.d.ts → objects/device/device-relation.d.ts} +0 -0
- /package/dist/{device → objects/device}/display.d.ts +0 -0
- /package/dist/{device → objects/device}/door.d.ts +0 -0
- /package/dist/{device → objects/device}/intercom-operator.d.ts +0 -0
- /package/dist/{device → objects/device}/intercom-terminal.d.ts +0 -0
- /package/dist/{device → objects/device}/io-board.d.ts +0 -0
- /package/dist/{device → objects/device}/motion-sensor.d.ts +0 -0
- /package/dist/{device → objects/device}/nvr-analytics-server.d.ts +0 -0
- /package/dist/{device → objects/device}/nvr-exporter.d.ts +0 -0
- /package/dist/{device → objects/device}/nvr-recorder.d.ts +0 -0
- /package/dist/{device → objects/device}/panic-button.d.ts +0 -0
- /package/dist/{device → objects/device}/pbx.d.ts +0 -0
- /package/dist/{device → objects/device}/presence-tracker.d.ts +0 -0
- /package/dist/{device → objects/device}/reader.d.ts +0 -0
- /package/dist/{device → objects/device}/system.d.ts +0 -0
- /package/dist/{world-objects.d.ts → objects/world-object.d.ts} +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { sPersonId, sZoneId } from '../../primitives';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
// COMMANDS
|
|
4
|
+
export const sCheckInPersonCommand = z.object({
|
|
5
|
+
command: z.literal('presence-tracker.check-in'),
|
|
6
|
+
params: z.object({
|
|
7
|
+
personId: sPersonId,
|
|
8
|
+
zoneId: sZoneId.nullable(),
|
|
9
|
+
}),
|
|
10
|
+
});
|
|
11
|
+
export const sCheckOutPersonCommand = z.object({
|
|
12
|
+
command: z.literal('presence-tracker.check-out'),
|
|
13
|
+
params: z.object({
|
|
14
|
+
personId: sPersonId,
|
|
15
|
+
zoneId: sZoneId.nullable(),
|
|
16
|
+
leave: z.boolean(),
|
|
17
|
+
}),
|
|
18
|
+
});
|
|
19
|
+
export const sTogglePresenceCommand = z.object({
|
|
20
|
+
command: z.literal('presence-tracker.toggle-presence'),
|
|
21
|
+
params: z.object({
|
|
22
|
+
personId: sPersonId,
|
|
23
|
+
zoneId: sZoneId.nullable(),
|
|
24
|
+
}),
|
|
25
|
+
});
|
|
26
|
+
export const presenceTrackerCommands = {
|
|
27
|
+
'presence-tracker.check-in': sCheckInPersonCommand,
|
|
28
|
+
'presence-tracker.check-out': sCheckOutPersonCommand,
|
|
29
|
+
'presence-tracker.toggle-presence': sTogglePresenceCommand,
|
|
30
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { sDeviceParam, sMacroId, sNotificationSeverity, } from '../../primitives';
|
|
3
|
+
// COMMANDS
|
|
4
|
+
export const sRunMacroCommand = z.object({
|
|
5
|
+
command: z.literal('server.run-macro'),
|
|
6
|
+
params: z.object({
|
|
7
|
+
macroId: sMacroId,
|
|
8
|
+
}),
|
|
9
|
+
});
|
|
10
|
+
export const sNotify = z.object({
|
|
11
|
+
command: z.literal('server.notify'),
|
|
12
|
+
params: z.object({
|
|
13
|
+
source: sDeviceParam,
|
|
14
|
+
message: z.string().nonempty(),
|
|
15
|
+
severity: sNotificationSeverity,
|
|
16
|
+
metadata: z.record(z.unknown()),
|
|
17
|
+
notificationRef: z.string().nonempty().nullable(),
|
|
18
|
+
recipientId: z.string().nonempty().nullable(),
|
|
19
|
+
}),
|
|
20
|
+
});
|
|
21
|
+
export const serverCommands = {
|
|
22
|
+
'server.run-macro': sRunMacroCommand,
|
|
23
|
+
'server.notify': sNotify,
|
|
24
|
+
};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { sCredentialType } from '../objects/credential';
|
|
3
|
+
// METADATA
|
|
4
|
+
export const sDuplicateMeta = z.object({
|
|
5
|
+
subject: z.string(),
|
|
6
|
+
field: z.string(),
|
|
7
|
+
value: z.string().optional(),
|
|
8
|
+
existingId: z.string().optional(), // UUID or whatever
|
|
9
|
+
});
|
|
10
|
+
export const sNotFoundMeta = z.object({
|
|
11
|
+
subject: z.string(),
|
|
12
|
+
field: z.string(),
|
|
13
|
+
value: z.string(),
|
|
14
|
+
});
|
|
15
|
+
export const sInvalidMeta = z.object({
|
|
16
|
+
subject: z.string(),
|
|
17
|
+
fieldErrors: z.record(z.string()), // key → human msg
|
|
18
|
+
});
|
|
19
|
+
export const sConflictMeta = z.object({
|
|
20
|
+
subject: z.string(),
|
|
21
|
+
blockingSubject: z.string().optional(),
|
|
22
|
+
blockingId: z.string().optional(),
|
|
23
|
+
value: z.string().optional(),
|
|
24
|
+
});
|
|
25
|
+
export const sVoidMeta = z.object({}).strict();
|
|
26
|
+
export const sAccessRuleConflictMeta = z.object({
|
|
27
|
+
deviceSchedules: z.record(z.string(), z.array(z.string())),
|
|
28
|
+
});
|
|
29
|
+
export const sZoneAccessRuleConflictMeta = z.object({
|
|
30
|
+
zoneId: z.string(),
|
|
31
|
+
accessRuleIds: z.array(z.string()),
|
|
32
|
+
});
|
|
33
|
+
export const sTokenInvalidFormatMeta = z.object({
|
|
34
|
+
token: z.string(),
|
|
35
|
+
expectedFormat: z.string(),
|
|
36
|
+
});
|
|
37
|
+
export const sTokenLimitExceededMeta = z.object({
|
|
38
|
+
limit: z.number(),
|
|
39
|
+
type: sCredentialType,
|
|
40
|
+
});
|
|
41
|
+
// ERROR CODES
|
|
42
|
+
export var AppErrorCode;
|
|
43
|
+
(function (AppErrorCode) {
|
|
44
|
+
// generic
|
|
45
|
+
AppErrorCode["RESOURCE_ALREADY_EXISTS"] = "RESOURCE_ALREADY_EXISTS";
|
|
46
|
+
AppErrorCode["RESOURCE_NOT_FOUND"] = "RESOURCE_NOT_FOUND";
|
|
47
|
+
AppErrorCode["RESOURCE_FORBIDDEN"] = "RESOURCE_FORBIDDEN";
|
|
48
|
+
AppErrorCode["RESOURCE_INVALID"] = "RESOURCE_INVALID";
|
|
49
|
+
AppErrorCode["RESOURCE_IN_USE"] = "RESOURCE_IN_USE";
|
|
50
|
+
AppErrorCode["RESOURCE_NOT_SUPPORTED"] = "RESOURCE_NOT_SUPPORTED";
|
|
51
|
+
AppErrorCode["BAD_REFERENCE"] = "BAD_REFERENCE";
|
|
52
|
+
AppErrorCode["UNKNOWN"] = "UNKNOWN";
|
|
53
|
+
AppErrorCode["SERVER_INTERNAL_ERROR"] = "SERVER_INTERNAL_ERROR";
|
|
54
|
+
AppErrorCode["UNAUTHORIZED"] = "UNAUTHORIZED";
|
|
55
|
+
AppErrorCode["BAD_REQUEST"] = "BAD_REQUEST";
|
|
56
|
+
// access
|
|
57
|
+
AppErrorCode["ACCESS_RULE_NOT_FOUND"] = "ACCESS_RULE_NOT_FOUND";
|
|
58
|
+
AppErrorCode["ACCESS_RULE_PERMISSION_CONFLICT"] = "ACCESS_RULE_PERMISSION_CONFLICT";
|
|
59
|
+
// alarm
|
|
60
|
+
AppErrorCode["ALARM_NOT_FOUND"] = "ALARM_NOT_FOUND";
|
|
61
|
+
// auth / user
|
|
62
|
+
AppErrorCode["AUTH_INVALID_CREDENTIALS"] = "AUTH_INVALID_CREDENTIALS";
|
|
63
|
+
AppErrorCode["AUTH_CITADEL_MODE_ENABLED"] = "AUTH_CITADEL_MODE_ENABLED";
|
|
64
|
+
AppErrorCode["USER_NOT_FOUND"] = "USER_NOT_FOUND";
|
|
65
|
+
AppErrorCode["USERNAME_ALREADY_EXISTS"] = "USERNAME_ALREADY_EXISTS";
|
|
66
|
+
AppErrorCode["EMAIL_ALREADY_EXISTS"] = "EMAIL_ALREADY_EXISTS";
|
|
67
|
+
AppErrorCode["CANNOT_DELETE_ROOT_USER"] = "CANNOT_DELETE_ROOT_USER";
|
|
68
|
+
// person / token
|
|
69
|
+
AppErrorCode["PERSON_NOT_FOUND"] = "PERSON_NOT_FOUND";
|
|
70
|
+
AppErrorCode["PERSON_INVALID_ID"] = "PERSON_INVALID_ID";
|
|
71
|
+
AppErrorCode["TOKEN_NOT_SUPPORTED"] = "TOKEN_NOT_SUPPORTED";
|
|
72
|
+
AppErrorCode["TOKEN_INVALID_FORMAT"] = "TOKEN_INVALID_FORMAT";
|
|
73
|
+
AppErrorCode["TOKEN_LIMIT_EXCEEDED"] = "TOKEN_LIMIT_EXCEEDED";
|
|
74
|
+
AppErrorCode["TOKEN_IN_USE"] = "TOKEN_IN_USE";
|
|
75
|
+
// device
|
|
76
|
+
AppErrorCode["DEVICE_NOT_FOUND"] = "DEVICE_NOT_FOUND";
|
|
77
|
+
AppErrorCode["DEVICE_ALREADY_EXISTS"] = "DEVICE_ALREADY_EXISTS";
|
|
78
|
+
AppErrorCode["DEVICE_INVALID_ID"] = "DEVICE_INVALID_ID";
|
|
79
|
+
AppErrorCode["DEVICE_INVALID_TYPE"] = "DEVICE_INVALID_TYPE";
|
|
80
|
+
AppErrorCode["DEVICE_INVALID_RELATION_TYPE"] = "DEVICE_INVALID_RELATION_TYPE";
|
|
81
|
+
AppErrorCode["DEVICE_INVALID_TEMPLATE"] = "DEVICE_INVALID_TEMPLATE";
|
|
82
|
+
AppErrorCode["DEVICE_INVALID_PROVIDER_METADATA"] = "DEVICE_INVALID_PROVIDER_METADATA";
|
|
83
|
+
AppErrorCode["DEVICE_PRESET_ALREADY_EXISTS"] = "DEVICE_PRESET_ALREADY_EXISTS";
|
|
84
|
+
AppErrorCode["DEVICE_NOT_SUPPORTED"] = "DEVICE_NOT_SUPPORTED";
|
|
85
|
+
// group / zone / schedule
|
|
86
|
+
AppErrorCode["GROUP_NOT_FOUND"] = "GROUP_NOT_FOUND";
|
|
87
|
+
AppErrorCode["GROUP_ALREADY_EXISTS"] = "GROUP_ALREADY_EXISTS";
|
|
88
|
+
AppErrorCode["ZONE_NOT_FOUND"] = "ZONE_NOT_FOUND";
|
|
89
|
+
AppErrorCode["ZONE_ALREADY_EXISTS"] = "ZONE_ALREADY_EXISTS";
|
|
90
|
+
AppErrorCode["ZONE_IN_USE"] = "ZONE_IN_USE";
|
|
91
|
+
AppErrorCode["ZONE_ACCESS_RULE_CONFLICT"] = "ZONE_ACCESS_RULE_CONFLICT";
|
|
92
|
+
AppErrorCode["SCHEDULE_NOT_FOUND"] = "SCHEDULE_NOT_FOUND";
|
|
93
|
+
AppErrorCode["SCHEDULE_ALREADY_EXISTS"] = "SCHEDULE_ALREADY_EXISTS";
|
|
94
|
+
AppErrorCode["SCHEDULE_IN_USE"] = "SCHEDULE_IN_USE";
|
|
95
|
+
// permission / role
|
|
96
|
+
AppErrorCode["PERMISSION_ALREADY_EXISTS"] = "PERMISSION_ALREADY_EXISTS";
|
|
97
|
+
AppErrorCode["ROLE_ALREADY_EXISTS"] = "ROLE_ALREADY_EXISTS";
|
|
98
|
+
AppErrorCode["ADMIN_ROLE_CANNOT_UPDATE"] = "ADMIN_ROLE_CANNOT_UPDATE";
|
|
99
|
+
AppErrorCode["ADMIN_ROLE_CANNOT_DELETE"] = "ADMIN_ROLE_CANNOT_DELETE";
|
|
100
|
+
// automation / rules
|
|
101
|
+
AppErrorCode["RULE_ALREADY_EXISTS"] = "RULE_ALREADY_EXISTS";
|
|
102
|
+
AppErrorCode["RULE_INVALID_BODY"] = "RULE_INVALID_BODY";
|
|
103
|
+
AppErrorCode["RULE_MISSING_CODE"] = "RULE_MISSING_CODE";
|
|
104
|
+
// layout / view
|
|
105
|
+
AppErrorCode["LAYOUT_ALREADY_EXISTS"] = "LAYOUT_ALREADY_EXISTS";
|
|
106
|
+
AppErrorCode["VIEW_ALREADY_EXISTS"] = "VIEW_ALREADY_EXISTS";
|
|
107
|
+
// config
|
|
108
|
+
AppErrorCode["CONFIG_INVALID"] = "CONFIG_INVALID";
|
|
109
|
+
})(AppErrorCode || (AppErrorCode = {}));
|
|
110
|
+
export const errorMetadataSchemas = {
|
|
111
|
+
[AppErrorCode.RESOURCE_ALREADY_EXISTS]: sDuplicateMeta,
|
|
112
|
+
[AppErrorCode.RESOURCE_NOT_FOUND]: sNotFoundMeta,
|
|
113
|
+
[AppErrorCode.RESOURCE_INVALID]: sInvalidMeta,
|
|
114
|
+
[AppErrorCode.RESOURCE_IN_USE]: sConflictMeta,
|
|
115
|
+
[AppErrorCode.RESOURCE_NOT_SUPPORTED]: sVoidMeta,
|
|
116
|
+
[AppErrorCode.RESOURCE_FORBIDDEN]: sVoidMeta,
|
|
117
|
+
[AppErrorCode.BAD_REFERENCE]: sVoidMeta,
|
|
118
|
+
// access
|
|
119
|
+
[AppErrorCode.ACCESS_RULE_NOT_FOUND]: sNotFoundMeta,
|
|
120
|
+
[AppErrorCode.ACCESS_RULE_PERMISSION_CONFLICT]: sAccessRuleConflictMeta,
|
|
121
|
+
// alarm
|
|
122
|
+
[AppErrorCode.ALARM_NOT_FOUND]: sNotFoundMeta,
|
|
123
|
+
// auth / user
|
|
124
|
+
[AppErrorCode.AUTH_INVALID_CREDENTIALS]: sVoidMeta,
|
|
125
|
+
[AppErrorCode.AUTH_CITADEL_MODE_ENABLED]: sVoidMeta,
|
|
126
|
+
[AppErrorCode.USER_NOT_FOUND]: sNotFoundMeta,
|
|
127
|
+
[AppErrorCode.USERNAME_ALREADY_EXISTS]: sDuplicateMeta,
|
|
128
|
+
[AppErrorCode.EMAIL_ALREADY_EXISTS]: sDuplicateMeta,
|
|
129
|
+
[AppErrorCode.CANNOT_DELETE_ROOT_USER]: sVoidMeta,
|
|
130
|
+
// person / token
|
|
131
|
+
[AppErrorCode.PERSON_NOT_FOUND]: sNotFoundMeta,
|
|
132
|
+
[AppErrorCode.PERSON_INVALID_ID]: sInvalidMeta,
|
|
133
|
+
[AppErrorCode.TOKEN_NOT_SUPPORTED]: sVoidMeta,
|
|
134
|
+
[AppErrorCode.TOKEN_INVALID_FORMAT]: sTokenInvalidFormatMeta,
|
|
135
|
+
[AppErrorCode.TOKEN_LIMIT_EXCEEDED]: sTokenLimitExceededMeta,
|
|
136
|
+
[AppErrorCode.TOKEN_IN_USE]: sConflictMeta,
|
|
137
|
+
// device
|
|
138
|
+
[AppErrorCode.DEVICE_NOT_FOUND]: sNotFoundMeta,
|
|
139
|
+
[AppErrorCode.DEVICE_ALREADY_EXISTS]: sDuplicateMeta,
|
|
140
|
+
[AppErrorCode.DEVICE_INVALID_ID]: sInvalidMeta,
|
|
141
|
+
[AppErrorCode.DEVICE_INVALID_TYPE]: sInvalidMeta,
|
|
142
|
+
[AppErrorCode.DEVICE_INVALID_RELATION_TYPE]: sInvalidMeta,
|
|
143
|
+
[AppErrorCode.DEVICE_INVALID_TEMPLATE]: sInvalidMeta,
|
|
144
|
+
[AppErrorCode.DEVICE_INVALID_PROVIDER_METADATA]: sInvalidMeta,
|
|
145
|
+
[AppErrorCode.DEVICE_PRESET_ALREADY_EXISTS]: sDuplicateMeta,
|
|
146
|
+
[AppErrorCode.DEVICE_NOT_SUPPORTED]: sVoidMeta,
|
|
147
|
+
// group / zone / schedule
|
|
148
|
+
[AppErrorCode.GROUP_NOT_FOUND]: sNotFoundMeta,
|
|
149
|
+
[AppErrorCode.GROUP_ALREADY_EXISTS]: sDuplicateMeta,
|
|
150
|
+
[AppErrorCode.ZONE_NOT_FOUND]: sNotFoundMeta,
|
|
151
|
+
[AppErrorCode.ZONE_ALREADY_EXISTS]: sDuplicateMeta,
|
|
152
|
+
[AppErrorCode.ZONE_IN_USE]: sConflictMeta,
|
|
153
|
+
[AppErrorCode.ZONE_ACCESS_RULE_CONFLICT]: sZoneAccessRuleConflictMeta,
|
|
154
|
+
[AppErrorCode.SCHEDULE_NOT_FOUND]: sNotFoundMeta,
|
|
155
|
+
[AppErrorCode.SCHEDULE_ALREADY_EXISTS]: sDuplicateMeta,
|
|
156
|
+
[AppErrorCode.SCHEDULE_IN_USE]: sConflictMeta,
|
|
157
|
+
// permission / role
|
|
158
|
+
[AppErrorCode.PERMISSION_ALREADY_EXISTS]: sDuplicateMeta,
|
|
159
|
+
[AppErrorCode.ROLE_ALREADY_EXISTS]: sDuplicateMeta,
|
|
160
|
+
[AppErrorCode.ADMIN_ROLE_CANNOT_UPDATE]: sVoidMeta,
|
|
161
|
+
[AppErrorCode.ADMIN_ROLE_CANNOT_DELETE]: sVoidMeta,
|
|
162
|
+
// automation / rules
|
|
163
|
+
[AppErrorCode.RULE_ALREADY_EXISTS]: sDuplicateMeta,
|
|
164
|
+
[AppErrorCode.RULE_INVALID_BODY]: sInvalidMeta,
|
|
165
|
+
[AppErrorCode.RULE_MISSING_CODE]: sVoidMeta,
|
|
166
|
+
// layout / view
|
|
167
|
+
[AppErrorCode.LAYOUT_ALREADY_EXISTS]: sDuplicateMeta,
|
|
168
|
+
[AppErrorCode.VIEW_ALREADY_EXISTS]: sDuplicateMeta,
|
|
169
|
+
// config
|
|
170
|
+
[AppErrorCode.CONFIG_INVALID]: sInvalidMeta,
|
|
171
|
+
[AppErrorCode.UNKNOWN]: sVoidMeta,
|
|
172
|
+
[AppErrorCode.SERVER_INTERNAL_ERROR]: sVoidMeta,
|
|
173
|
+
[AppErrorCode.UNAUTHORIZED]: sVoidMeta,
|
|
174
|
+
[AppErrorCode.BAD_REQUEST]: sVoidMeta,
|
|
175
|
+
};
|
|
176
|
+
export function isErrorResponse(err) {
|
|
177
|
+
return (!!err &&
|
|
178
|
+
typeof err === 'object' &&
|
|
179
|
+
'code' in err &&
|
|
180
|
+
Object.values(AppErrorCode).includes(err.code));
|
|
181
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
// EVENTS
|
|
3
|
+
export const sAlarmTriggeredEvent = z.object({
|
|
4
|
+
kind: z.literal('alarm-triggered'),
|
|
5
|
+
alarmId: z.string().nonempty(),
|
|
6
|
+
});
|
|
7
|
+
export const sAlarmAcknowledgedEvent = z.object({
|
|
8
|
+
kind: z.literal('alarm-acknowledged'),
|
|
9
|
+
alarmId: z.string().nonempty(),
|
|
10
|
+
userId: z.string().optional(),
|
|
11
|
+
personId: z.string().optional(),
|
|
12
|
+
});
|
|
13
|
+
export const sAlarmArmedAllEvent = z.object({
|
|
14
|
+
kind: z.literal('alarm-armed-all'),
|
|
15
|
+
userId: z.string().optional(),
|
|
16
|
+
personId: z.string().optional(),
|
|
17
|
+
});
|
|
18
|
+
export const sAlarmDisarmedAllEvent = z.object({
|
|
19
|
+
kind: z.literal('alarm-disarmed-all'),
|
|
20
|
+
userId: z.string().optional(),
|
|
21
|
+
personId: z.string().optional(),
|
|
22
|
+
});
|
|
23
|
+
export const sAlarmArmedEvent = z.object({
|
|
24
|
+
kind: z.literal('alarm-armed'),
|
|
25
|
+
subjects: z.array(z.string().nonempty()),
|
|
26
|
+
userId: z.string().optional(),
|
|
27
|
+
personId: z.string().optional(),
|
|
28
|
+
});
|
|
29
|
+
export const sAlarmDisarmedEvent = z.object({
|
|
30
|
+
kind: z.literal('alarm-disarmed'),
|
|
31
|
+
subjects: z.array(z.string().nonempty()),
|
|
32
|
+
userId: z.string().optional(),
|
|
33
|
+
personId: z.string().optional(),
|
|
34
|
+
});
|
|
35
|
+
export const sAlarmArmReleasedEvent = z.object({
|
|
36
|
+
kind: z.literal('alarm-arm-released'),
|
|
37
|
+
userId: z.string().optional(),
|
|
38
|
+
personId: z.string().optional(),
|
|
39
|
+
});
|
|
40
|
+
export const sAlarmRearmedEvent = z.object({
|
|
41
|
+
kind: z.literal('alarm-rearmed'),
|
|
42
|
+
});
|
|
43
|
+
export const alarmEventSchemasByKind = {
|
|
44
|
+
'alarm-triggered': sAlarmTriggeredEvent,
|
|
45
|
+
'alarm-acknowledged': sAlarmAcknowledgedEvent,
|
|
46
|
+
'alarm-armed-all': sAlarmArmedAllEvent,
|
|
47
|
+
'alarm-disarmed-all': sAlarmDisarmedAllEvent,
|
|
48
|
+
'alarm-armed': sAlarmArmedEvent,
|
|
49
|
+
'alarm-disarmed': sAlarmDisarmedEvent,
|
|
50
|
+
'alarm-arm-released': sAlarmArmReleasedEvent,
|
|
51
|
+
'alarm-rearmed': sAlarmRearmedEvent,
|
|
52
|
+
};
|
|
@@ -9,8 +9,8 @@ import { PresenceTrackerEvent } from './presence-tracker';
|
|
|
9
9
|
import { ReaderEvent } from './reader';
|
|
10
10
|
import { ServerEvent } from './server';
|
|
11
11
|
import { NvrExporterEvent } from './nvr-exporter';
|
|
12
|
-
import { DeviceType } from '
|
|
13
|
-
import { NotificationSeverity } from '
|
|
12
|
+
import { DeviceType } from '../../objects/device';
|
|
13
|
+
import { NotificationSeverity } from '../../primitives';
|
|
14
14
|
export declare const sDeviceCommandTriggered: z.ZodObject<{
|
|
15
15
|
kind: z.ZodLiteral<"device-command">;
|
|
16
16
|
userId: z.ZodOptional<z.ZodString>;
|
|
@@ -141,12 +141,12 @@ export declare const eventSchemaByKind: {
|
|
|
141
141
|
requestId: z.ZodString;
|
|
142
142
|
}, "strip", z.ZodTypeAny, {
|
|
143
143
|
kind: "nvr-export-started";
|
|
144
|
-
requestId: string;
|
|
145
144
|
exportId: string;
|
|
145
|
+
requestId: string;
|
|
146
146
|
}, {
|
|
147
147
|
kind: "nvr-export-started";
|
|
148
|
-
requestId: string;
|
|
149
148
|
exportId: string;
|
|
149
|
+
requestId: string;
|
|
150
150
|
}>;
|
|
151
151
|
'nvr-export-deleted': z.ZodObject<{
|
|
152
152
|
kind: z.ZodLiteral<"nvr-export-deleted">;
|
|
@@ -188,22 +188,22 @@ export declare const eventSchemaByKind: {
|
|
|
188
188
|
kind: "person-in";
|
|
189
189
|
personId: string;
|
|
190
190
|
securityChecked: boolean;
|
|
191
|
-
zoneId: string | null;
|
|
192
191
|
personType: string;
|
|
193
192
|
personFirstName: string;
|
|
194
193
|
personLastName: string;
|
|
195
194
|
personAvatarId: string | null;
|
|
196
195
|
personPosition: string | null;
|
|
196
|
+
zoneId: string | null;
|
|
197
197
|
}, {
|
|
198
198
|
kind: "person-in";
|
|
199
199
|
personId: string;
|
|
200
200
|
securityChecked: boolean;
|
|
201
|
-
zoneId: string | null;
|
|
202
201
|
personType: string;
|
|
203
202
|
personFirstName: string;
|
|
204
203
|
personLastName: string;
|
|
205
204
|
personAvatarId: string | null;
|
|
206
205
|
personPosition: string | null;
|
|
206
|
+
zoneId: string | null;
|
|
207
207
|
}>;
|
|
208
208
|
'person-out': z.ZodObject<{
|
|
209
209
|
kind: z.ZodLiteral<"person-out">;
|
|
@@ -221,23 +221,23 @@ export declare const eventSchemaByKind: {
|
|
|
221
221
|
personId: string;
|
|
222
222
|
securityChecked: boolean;
|
|
223
223
|
isLeave: boolean;
|
|
224
|
-
zoneId: string | null;
|
|
225
224
|
personType: string;
|
|
226
225
|
personFirstName: string;
|
|
227
226
|
personLastName: string;
|
|
228
227
|
personAvatarId: string | null;
|
|
229
228
|
personPosition: string | null;
|
|
229
|
+
zoneId: string | null;
|
|
230
230
|
}, {
|
|
231
231
|
kind: "person-out";
|
|
232
232
|
personId: string;
|
|
233
233
|
securityChecked: boolean;
|
|
234
234
|
isLeave: boolean;
|
|
235
|
-
zoneId: string | null;
|
|
236
235
|
personType: string;
|
|
237
236
|
personFirstName: string;
|
|
238
237
|
personLastName: string;
|
|
239
238
|
personAvatarId: string | null;
|
|
240
239
|
personPosition: string | null;
|
|
240
|
+
zoneId: string | null;
|
|
241
241
|
}>;
|
|
242
242
|
'panic-button-pressed': z.ZodObject<{
|
|
243
243
|
kind: z.ZodLiteral<"panic-button-pressed">;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { alarmEventSchemasByKind } from './alarm';
|
|
3
|
+
import { cameraEventSchemasByKind } from './camera';
|
|
4
|
+
import { doorEventSchemaByKind } from './door';
|
|
5
|
+
import { intercomTerminalEventSchemaByKind, } from './intercom-terminal';
|
|
6
|
+
import { ioBoardEventSchemaByKind } from './io-board';
|
|
7
|
+
import { panicButtonEventSchemaByKind } from './panic-button';
|
|
8
|
+
import { presenceTrackerEventSchemaByKind, } from './presence-tracker';
|
|
9
|
+
import { readerEventSchemaByKind } from './reader';
|
|
10
|
+
import { nvrExporterEventSchemasByKind, } from './nvr-exporter';
|
|
11
|
+
export const sDeviceCommandTriggered = z.object({
|
|
12
|
+
kind: z.literal('device-command'),
|
|
13
|
+
userId: z.string().nonempty().optional(),
|
|
14
|
+
command: z.string().nonempty(),
|
|
15
|
+
args: z.record(z.unknown()),
|
|
16
|
+
});
|
|
17
|
+
export const sMotionDetected = z.object({
|
|
18
|
+
kind: z.literal('motion-detected'),
|
|
19
|
+
});
|
|
20
|
+
export const sDeviceConnectedEvent = z.object({
|
|
21
|
+
kind: z.literal('device-connected'),
|
|
22
|
+
clientId: z.number().int().positive().optional(),
|
|
23
|
+
});
|
|
24
|
+
export const sDeviceDisconnectedEvent = z.object({
|
|
25
|
+
kind: z.literal('device-disconnected'),
|
|
26
|
+
clientId: z.number().int().positive().optional(),
|
|
27
|
+
});
|
|
28
|
+
export const sEventHeader = z.object({
|
|
29
|
+
id: z.string().nonempty(),
|
|
30
|
+
timestamp: z.number().int().positive(),
|
|
31
|
+
deviceId: z.string().nonempty(),
|
|
32
|
+
observedBy: z.string().optional(),
|
|
33
|
+
});
|
|
34
|
+
export const eventKindLabels = {
|
|
35
|
+
'door-access': 'Door Access',
|
|
36
|
+
'door-force': 'Force-Opened',
|
|
37
|
+
'door-tamper': 'Tampered',
|
|
38
|
+
'door-left-open': 'Left Open',
|
|
39
|
+
'alarm-triggered': 'Alarm Triggered',
|
|
40
|
+
'alarm-acknowledged': 'Alarm Acknowledged',
|
|
41
|
+
'door-relock': 'Relocked',
|
|
42
|
+
'door-mains-failed': 'Mains Failed',
|
|
43
|
+
'door-acu-not-responding': 'ACU Not Responding',
|
|
44
|
+
'door-acu-online': 'ACU Online',
|
|
45
|
+
'door-mains-restored': 'Mains Restored',
|
|
46
|
+
'door-tamper-restored': 'Tamper Restored',
|
|
47
|
+
'motion-detected': 'Motion Detected',
|
|
48
|
+
'device-command': 'Device Command',
|
|
49
|
+
'reader-auth': 'Reader Authorized',
|
|
50
|
+
'alarm-arm-released': 'Alarm Arm Released',
|
|
51
|
+
'alarm-rearmed': 'Alarm Rearmed',
|
|
52
|
+
'alarm-armed': 'Alarm Armed',
|
|
53
|
+
'alarm-disarmed': 'Alarm Disarmed',
|
|
54
|
+
'alarm-armed-all': 'Alarm Armed All',
|
|
55
|
+
'alarm-disarmed-all': 'Alarm Disarmed All',
|
|
56
|
+
'panic-button-pressed': 'Panic Button Pressed',
|
|
57
|
+
'device-connected': 'Device Connected',
|
|
58
|
+
'device-disconnected': 'Device Disconnected',
|
|
59
|
+
'call-state-changed': 'Call State Changed',
|
|
60
|
+
'object-created': 'Object Created',
|
|
61
|
+
'object-updated': 'Object Updated',
|
|
62
|
+
'object-deleted': 'Object Deleted',
|
|
63
|
+
'ptz-preset-saved': 'PTZ Preset Saved on Device',
|
|
64
|
+
'person-in': 'Person Checked In',
|
|
65
|
+
'person-out': 'Person Checked Out',
|
|
66
|
+
'object-detection-started': 'Object Detection Started',
|
|
67
|
+
'object-detection-updated': 'Object Detection Updated',
|
|
68
|
+
'object-detection-ended': 'Object Detection Ended',
|
|
69
|
+
'scene-created': 'Scene Created',
|
|
70
|
+
'scene-updated': 'Scene Updated',
|
|
71
|
+
'scene-ended': 'Scene Ended',
|
|
72
|
+
'io-board-input-changed': 'IO Board Input Changed',
|
|
73
|
+
'agent-started': 'Agent Started',
|
|
74
|
+
'agent-stopped': 'Agent Stopped',
|
|
75
|
+
'door-opened': 'Door Opened',
|
|
76
|
+
'door-closed': 'Door Closed',
|
|
77
|
+
'nvr-export-started': 'NVR Export Started',
|
|
78
|
+
'nvr-export-deleted': 'NVR Export Deleted',
|
|
79
|
+
'notification-created': 'Notification Created',
|
|
80
|
+
'notification-acknowledged': 'Notification Acknowledged',
|
|
81
|
+
};
|
|
82
|
+
export const eventSchemaByKind = {
|
|
83
|
+
...alarmEventSchemasByKind,
|
|
84
|
+
...cameraEventSchemasByKind,
|
|
85
|
+
...doorEventSchemaByKind,
|
|
86
|
+
...intercomTerminalEventSchemaByKind,
|
|
87
|
+
...ioBoardEventSchemaByKind,
|
|
88
|
+
...panicButtonEventSchemaByKind,
|
|
89
|
+
...presenceTrackerEventSchemaByKind,
|
|
90
|
+
...readerEventSchemaByKind,
|
|
91
|
+
...nvrExporterEventSchemasByKind,
|
|
92
|
+
'motion-detected': sMotionDetected,
|
|
93
|
+
'device-command': sDeviceCommandTriggered,
|
|
94
|
+
'device-connected': sDeviceConnectedEvent,
|
|
95
|
+
'device-disconnected': sDeviceDisconnectedEvent,
|
|
96
|
+
};
|
|
97
|
+
export const eventsByDeviceType = {
|
|
98
|
+
camera: [
|
|
99
|
+
...Object.keys(cameraEventSchemasByKind),
|
|
100
|
+
'motion-detected',
|
|
101
|
+
],
|
|
102
|
+
door: Object.keys(doorEventSchemaByKind),
|
|
103
|
+
'io-board': Object.keys(ioBoardEventSchemaByKind),
|
|
104
|
+
'panic-button': Object.keys(panicButtonEventSchemaByKind),
|
|
105
|
+
'presence-tracker': Object.keys(presenceTrackerEventSchemaByKind),
|
|
106
|
+
reader: Object.keys(readerEventSchemaByKind),
|
|
107
|
+
'motion-sensor': ['motion-detected'],
|
|
108
|
+
'nvr-exporter': Object.keys(nvrExporterEventSchemasByKind),
|
|
109
|
+
};
|
|
110
|
+
export const isDeviceEvent = (event) => {
|
|
111
|
+
if (typeof event !== 'object' || event === null)
|
|
112
|
+
return false;
|
|
113
|
+
if (!('kind' in event))
|
|
114
|
+
return false;
|
|
115
|
+
if (typeof event.kind !== 'string')
|
|
116
|
+
return false;
|
|
117
|
+
const schema = eventSchemaByKind[event.kind];
|
|
118
|
+
if (!schema)
|
|
119
|
+
return false;
|
|
120
|
+
const result = schema.safeParse(event);
|
|
121
|
+
if (!result.success)
|
|
122
|
+
return false;
|
|
123
|
+
return true;
|
|
124
|
+
};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { sCameraPresetInfo } from '../../primitives';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
// EVENTS
|
|
4
|
+
export const sCameraPtzPresetSaved = z.object({
|
|
5
|
+
kind: z.literal('ptz-preset-saved'),
|
|
6
|
+
presetId: z.string().nonempty(),
|
|
7
|
+
presetInfo: sCameraPresetInfo,
|
|
8
|
+
assignedRef: z.string().nullable(),
|
|
9
|
+
});
|
|
10
|
+
export const sBoxLocator = z.object({
|
|
11
|
+
locatorKind: z.literal('box'),
|
|
12
|
+
x1: z.number(),
|
|
13
|
+
y1: z.number(),
|
|
14
|
+
x2: z.number(),
|
|
15
|
+
y2: z.number(),
|
|
16
|
+
});
|
|
17
|
+
export const sObjectLocator = sBoxLocator;
|
|
18
|
+
export const sObjectDetectionData = z
|
|
19
|
+
.object({
|
|
20
|
+
objectKind: z.string().nullable(),
|
|
21
|
+
probability: z.number(),
|
|
22
|
+
identifiedObjectId: z.string().nullable(),
|
|
23
|
+
frameTime: z.number(),
|
|
24
|
+
startTime: z.number(),
|
|
25
|
+
endTime: z.number().nullable(),
|
|
26
|
+
})
|
|
27
|
+
.and(sObjectLocator);
|
|
28
|
+
export const sObjectDetectionStarted = z
|
|
29
|
+
.object({
|
|
30
|
+
kind: z.literal('object-detection-started'),
|
|
31
|
+
providerAssignedRef: z.string().nonempty(),
|
|
32
|
+
detectionProvider: z.string().nonempty(),
|
|
33
|
+
})
|
|
34
|
+
.and(sObjectDetectionData);
|
|
35
|
+
export const sObjectDetectionUpdated = z
|
|
36
|
+
.object({
|
|
37
|
+
kind: z.literal('object-detection-updated'),
|
|
38
|
+
providerAssignedRef: z.string().nonempty(),
|
|
39
|
+
detectionProvider: z.string().nonempty(),
|
|
40
|
+
})
|
|
41
|
+
.and(sObjectDetectionData);
|
|
42
|
+
export const sObjectDetectionEnded = z
|
|
43
|
+
.object({
|
|
44
|
+
kind: z.literal('object-detection-ended'),
|
|
45
|
+
providerAssignedRef: z.string().nonempty(),
|
|
46
|
+
detectionProvider: z.string().nonempty(),
|
|
47
|
+
})
|
|
48
|
+
.and(sObjectDetectionData);
|
|
49
|
+
export const sSceneData = z.object({
|
|
50
|
+
detections: z.array(z.string()),
|
|
51
|
+
clipUrl: z.string().optional(),
|
|
52
|
+
startTime: z.number(),
|
|
53
|
+
endTime: z.number().nullable(),
|
|
54
|
+
});
|
|
55
|
+
export const sSceneCreated = z
|
|
56
|
+
.object({
|
|
57
|
+
kind: z.literal('scene-created'),
|
|
58
|
+
providerAssignedRef: z.string().nonempty(),
|
|
59
|
+
detectionProvider: z.string().nonempty(),
|
|
60
|
+
})
|
|
61
|
+
.and(sSceneData);
|
|
62
|
+
export const sSceneUpdated = z
|
|
63
|
+
.object({
|
|
64
|
+
kind: z.literal('scene-updated'),
|
|
65
|
+
providerAssignedRef: z.string().nonempty(),
|
|
66
|
+
detectionProvider: z.string().nonempty(),
|
|
67
|
+
})
|
|
68
|
+
.and(sSceneData);
|
|
69
|
+
export const sSceneEnded = z
|
|
70
|
+
.object({
|
|
71
|
+
kind: z.literal('scene-ended'),
|
|
72
|
+
providerAssignedRef: z.string().nonempty(),
|
|
73
|
+
detectionProvider: z.string().nonempty(),
|
|
74
|
+
})
|
|
75
|
+
.and(sSceneData);
|
|
76
|
+
export const cameraEventSchemasByKind = {
|
|
77
|
+
'ptz-preset-saved': sCameraPtzPresetSaved,
|
|
78
|
+
'object-detection-started': sObjectDetectionStarted,
|
|
79
|
+
'object-detection-updated': sObjectDetectionUpdated,
|
|
80
|
+
'object-detection-ended': sObjectDetectionEnded,
|
|
81
|
+
'scene-created': sSceneCreated,
|
|
82
|
+
'scene-updated': sSceneUpdated,
|
|
83
|
+
'scene-ended': sSceneEnded,
|
|
84
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { sCredentialType } from '../../objects/credential';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
// EVENTS
|
|
4
|
+
export const sDoorAccessEvent = z.object({
|
|
5
|
+
kind: z.literal('door-access'),
|
|
6
|
+
personId: z.string().optional(),
|
|
7
|
+
token: z.string().nullable(),
|
|
8
|
+
tokenType: sCredentialType.nullable(),
|
|
9
|
+
allowed: z.boolean(),
|
|
10
|
+
doorExit: z.boolean(),
|
|
11
|
+
description: z.string(),
|
|
12
|
+
});
|
|
13
|
+
export const sDoorOpened = z.object({
|
|
14
|
+
kind: z.literal('door-opened'),
|
|
15
|
+
});
|
|
16
|
+
export const sDoorClosed = z.object({
|
|
17
|
+
kind: z.literal('door-closed'),
|
|
18
|
+
});
|
|
19
|
+
export const sDoorForceEvent = z.object({
|
|
20
|
+
kind: z.literal('door-force'),
|
|
21
|
+
});
|
|
22
|
+
export const sDoorTamperEvent = z.object({
|
|
23
|
+
kind: z.literal('door-tamper'),
|
|
24
|
+
});
|
|
25
|
+
export const sDoorLeftOpenEvent = z.object({
|
|
26
|
+
kind: z.literal('door-left-open'),
|
|
27
|
+
});
|
|
28
|
+
export const sDoorRelockEvent = z.object({
|
|
29
|
+
kind: z.literal('door-relock'),
|
|
30
|
+
});
|
|
31
|
+
export const sDoorMainsFailedEvent = z.object({
|
|
32
|
+
kind: z.literal('door-mains-failed'),
|
|
33
|
+
});
|
|
34
|
+
export const sDoorAcuNotRespondingEvent = z.object({
|
|
35
|
+
kind: z.literal('door-acu-not-responding'),
|
|
36
|
+
});
|
|
37
|
+
export const sDoorMainsRestoredEvent = z.object({
|
|
38
|
+
kind: z.literal('door-mains-restored'),
|
|
39
|
+
});
|
|
40
|
+
export const sDoorAcuOnlineEvent = z.object({
|
|
41
|
+
kind: z.literal('door-acu-online'),
|
|
42
|
+
});
|
|
43
|
+
export const sDoorTamperRestoredEvent = z.object({
|
|
44
|
+
kind: z.literal('door-tamper-restored'),
|
|
45
|
+
});
|
|
46
|
+
export const doorEventSchemaByKind = {
|
|
47
|
+
'door-access': sDoorAccessEvent,
|
|
48
|
+
'door-opened': sDoorOpened,
|
|
49
|
+
'door-closed': sDoorClosed,
|
|
50
|
+
'door-force': sDoorForceEvent,
|
|
51
|
+
'door-tamper': sDoorTamperEvent,
|
|
52
|
+
'door-left-open': sDoorLeftOpenEvent,
|
|
53
|
+
'door-relock': sDoorRelockEvent,
|
|
54
|
+
'door-mains-failed': sDoorMainsFailedEvent,
|
|
55
|
+
'door-acu-not-responding': sDoorAcuNotRespondingEvent,
|
|
56
|
+
'door-mains-restored': sDoorMainsRestoredEvent,
|
|
57
|
+
'door-acu-online': sDoorAcuOnlineEvent,
|
|
58
|
+
'door-tamper-restored': sDoorTamperRestoredEvent,
|
|
59
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './camera';
|
|
2
|
+
export * from './door';
|
|
3
|
+
export * from './io-board';
|
|
4
|
+
export * from './intercom-terminal';
|
|
5
|
+
export * from './panic-button';
|
|
6
|
+
export * from './server';
|
|
7
|
+
export * from './reader';
|
|
8
|
+
export * from './alarm';
|
|
9
|
+
export * from './presence-tracker';
|
|
10
|
+
export * from './display';
|
|
11
|
+
export * from './nvr-exporter';
|
|
12
|
+
export * from './all';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { sCallDirection, sCallState } from '../../primitives';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
// EVENTS
|
|
4
|
+
export const sCallStateChanged = z.object({
|
|
5
|
+
kind: z.literal('call-state-changed'),
|
|
6
|
+
userId: z.string().optional(),
|
|
7
|
+
callId: z.string().nonempty(),
|
|
8
|
+
state: sCallState,
|
|
9
|
+
peer: z.string().optional(),
|
|
10
|
+
sipAccount: z.string().optional(),
|
|
11
|
+
sipCallId: z.string().optional(),
|
|
12
|
+
direction: sCallDirection,
|
|
13
|
+
});
|
|
14
|
+
export const intercomTerminalEventSchemaByKind = {
|
|
15
|
+
'call-state-changed': sCallStateChanged,
|
|
16
|
+
};
|