@alwaysai/device-agent-schemas 3.3.0 → 3.3.1

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 (91) hide show
  1. package/.eslintignore +4 -0
  2. package/.eslintrc +14 -0
  3. package/.gitattributes +2 -0
  4. package/.nvmrc +1 -0
  5. package/bitbucket-pipelines.yml +54 -0
  6. package/development.md +53 -0
  7. package/jest.config.js +3 -0
  8. package/lib/app-action-schema.d.ts +7 -1
  9. package/lib/app-action-schema.d.ts.map +1 -0
  10. package/lib/app-action-schema.js.map +1 -0
  11. package/lib/app-logs-schema.d.ts.map +1 -0
  12. package/lib/app-logs-schema.js.map +1 -0
  13. package/lib/app-state-schema.d.ts.map +1 -0
  14. package/lib/app-state-schema.js.map +1 -0
  15. package/lib/common.d.ts.map +1 -0
  16. package/lib/common.js.map +1 -0
  17. package/lib/constants.d.ts +2 -1
  18. package/lib/constants.d.ts.map +1 -0
  19. package/lib/constants.js +2 -1
  20. package/lib/constants.js.map +1 -0
  21. package/lib/device-action-schema.d.ts.map +1 -0
  22. package/lib/device-action-schema.js.map +1 -0
  23. package/lib/device-agent-action-schema.d.ts.map +1 -0
  24. package/lib/device-agent-action-schema.js.map +1 -0
  25. package/lib/device-stats-schema.d.ts.map +1 -0
  26. package/lib/device-stats-schema.js.map +1 -0
  27. package/lib/index.d.ts +2 -2
  28. package/lib/index.d.ts.map +1 -0
  29. package/lib/index.js.map +1 -0
  30. package/lib/message-builders.d.ts +2 -2
  31. package/lib/message-builders.d.ts.map +1 -0
  32. package/lib/message-builders.js.map +1 -0
  33. package/lib/schemas/app-update-config-schema.json +22 -0
  34. package/lib/schemas/app-version-control-schema.json +3 -0
  35. package/lib/shadow-schema.d.ts.map +1 -0
  36. package/lib/shadow-schema.js.map +1 -0
  37. package/lib/signed-urls-request-schema.d.ts.map +1 -0
  38. package/lib/signed-urls-request-schema.js.map +1 -0
  39. package/lib/status-response-schema.d.ts.map +1 -0
  40. package/lib/status-response-schema.js.map +1 -0
  41. package/lib/types.d.ts +2 -2
  42. package/lib/types.d.ts.map +1 -0
  43. package/lib/types.js +2 -0
  44. package/lib/types.js.map +1 -0
  45. package/lib/utils.d.ts.map +1 -0
  46. package/lib/utils.js.map +1 -0
  47. package/package.json +1 -6
  48. package/src/app-action-schema.ts +83 -0
  49. package/src/app-logs-schema.ts +13 -0
  50. package/src/app-state-schema.ts +27 -0
  51. package/src/common.ts +19 -0
  52. package/src/constants.ts +141 -0
  53. package/src/device-action-schema.ts +11 -0
  54. package/src/device-agent-action-schema.ts +17 -0
  55. package/src/device-stats-schema.ts +33 -0
  56. package/src/index.ts +192 -0
  57. package/src/message-builders.ts +269 -0
  58. package/src/schemas/app-install-response-schema.json +38 -0
  59. package/src/schemas/app-install-schema.json +25 -0
  60. package/src/schemas/app-logs-schema.json +15 -0
  61. package/src/schemas/app-state-control-schema.json +16 -0
  62. package/src/schemas/app-state-schema.json +45 -0
  63. package/src/schemas/app-uninstall-schema.json +16 -0
  64. package/src/schemas/app-update-config-schema.json +22 -0
  65. package/src/schemas/app-version-control-schema.json +17 -0
  66. package/src/schemas/common-schema.json +27 -0
  67. package/src/schemas/device-action-schema.json +13 -0
  68. package/src/schemas/device-agent-status-schema.json +33 -0
  69. package/src/schemas/device-stats-schema.json +57 -0
  70. package/src/schemas/env-var-schema.json +18 -0
  71. package/src/schemas/live-updates-toggle-schema.json +27 -0
  72. package/src/schemas/models-install-payload-schema.json +21 -0
  73. package/src/schemas/models-install-response-schema.json +21 -0
  74. package/src/schemas/secure-tunnel-schema.json +31 -0
  75. package/src/schemas/shadow-project-update-legacy-schema.json +30 -0
  76. package/src/schemas/shadow-project-update-schema.json +16 -0
  77. package/src/schemas/shadow-projects-update-all-schema.json +20 -0
  78. package/src/schemas/signed-urls-request-schema.json +39 -0
  79. package/src/schemas/status-response-schema.json +15 -0
  80. package/src/schemas/system-information-schema.json +149 -0
  81. package/src/schemas/to-client-message-schema.json +92 -0
  82. package/src/schemas/to-cloud-message-schema.json +53 -0
  83. package/src/schemas/to-device-agent-message-schema.json +127 -0
  84. package/src/shadow-schema.ts +258 -0
  85. package/src/signed-urls-request-schema.ts +22 -0
  86. package/src/status-response-schema.ts +19 -0
  87. package/src/types.ts +160 -0
  88. package/src/utils.ts +21 -0
  89. package/tsconfig.build.json +4 -0
  90. package/tsconfig.eslint.json +5 -0
  91. package/tsconfig.json +88 -0
package/src/common.ts ADDED
@@ -0,0 +1,19 @@
1
+ export interface BaseToCloudMessage {
2
+ deviceId: string;
3
+ timestamp: string;
4
+ topic?: string;
5
+ txId: string;
6
+ }
7
+
8
+ export interface BaseToClientMessage {
9
+ deviceId: string;
10
+ timestamp: string;
11
+ topic?: string;
12
+ txId: string;
13
+ }
14
+
15
+ export interface BaseToDeviceAgentMessage {
16
+ timestamp: string;
17
+ topic?: string;
18
+ txId: string;
19
+ }
@@ -0,0 +1,141 @@
1
+ import { keyMirror } from './utils';
2
+
3
+ export const PROJECT_ID_PATTERN =
4
+ '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$';
5
+ export const DEVICE_ID_PATTERN =
6
+ '[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$';
7
+ export const APP_RELEASE_ID_PATTERN = '[0-9a-z]{64}';
8
+ export const MODEL_ID_PATTERN = '[A-Za-z0-9_]+/[A-Za-z0-9_]*';
9
+
10
+ export const CLIENT_TOPIC_PREFIX = 'to-client';
11
+ export const CLOUD_TOPIC_PREFIX = 'to-cloud';
12
+ export const DEVICE_TOPIC_PREFIX = 'to-device';
13
+ export const DEVICE_TYPE = 'aai-device';
14
+
15
+ const toCloudMessageTypeEnum = keyMirror({
16
+ signed_urls_request: null
17
+ });
18
+
19
+ const toClientMessageTypeEnum = keyMirror({
20
+ app_logs: null,
21
+ app_state: null,
22
+ device_stats: null,
23
+ status_response: null
24
+ });
25
+
26
+ const toDeviceAgentMessageTypeEnum = keyMirror({
27
+ app_state_control: null,
28
+ app_version_control: null,
29
+ app_install_response: null,
30
+ models_install_response: null,
31
+ live_state_updates: null,
32
+ status_response: null,
33
+ device_action: null
34
+ });
35
+
36
+ const appStateEnum = keyMirror({
37
+ up: null,
38
+ stopped: null,
39
+ restarting: null
40
+ });
41
+
42
+ const appStateControlEnum = keyMirror({
43
+ start: null,
44
+ stop: null,
45
+ restart: null
46
+ });
47
+
48
+ const appVersionControlEnum = keyMirror({
49
+ install: null,
50
+ uninstall: null,
51
+ update_config: null
52
+ });
53
+
54
+ const liveUpdatesEnum = keyMirror({
55
+ live_updates: null
56
+ });
57
+
58
+ const statusEnum = keyMirror({
59
+ requested: null,
60
+ in_progress: null,
61
+ failure: null,
62
+ success: null,
63
+ connection_lost: null
64
+ });
65
+
66
+ const deviceActionEnum = keyMirror({
67
+ system_restart: null
68
+ });
69
+
70
+ export const keyMirrors = {
71
+ toDeviceAgentMessageType: toDeviceAgentMessageTypeEnum,
72
+ toClientMessageType: toClientMessageTypeEnum,
73
+ toCloudMessageType: toCloudMessageTypeEnum,
74
+ appState: appStateEnum,
75
+ appStateControl: appStateControlEnum,
76
+ appVersionControl: appVersionControlEnum,
77
+ liveUpdates: liveUpdatesEnum,
78
+ statusResponse: statusEnum,
79
+ deviceAction: deviceActionEnum
80
+ };
81
+
82
+ export const toCloudMessageTypeValues = Object.values(
83
+ keyMirrors.toCloudMessageType
84
+ );
85
+ export type ToCloudMessageTypeValue =
86
+ keyof typeof keyMirrors.toCloudMessageType;
87
+
88
+ export const toClientMessageTypeValues = Object.values(
89
+ keyMirrors.toClientMessageType
90
+ );
91
+ export type ToClientMessageTypeValue =
92
+ keyof typeof keyMirrors.toClientMessageType;
93
+
94
+ export type AppLogsMessageType = typeof toClientMessageTypeEnum.app_logs;
95
+ export type AppStateMessageType = typeof toClientMessageTypeEnum.app_state;
96
+ export type DeviceStatsMessageType =
97
+ typeof toClientMessageTypeEnum.device_stats;
98
+ export type StatusResponseMessageType =
99
+ typeof toClientMessageTypeEnum.status_response;
100
+ export type SignedUrlsRequestMessageType =
101
+ typeof toCloudMessageTypeEnum.signed_urls_request;
102
+
103
+ export const toDeviceAgentMessageTypeValues = Object.values(
104
+ keyMirrors.toDeviceAgentMessageType
105
+ );
106
+ export type ToDeviceAgentMessageTypeValue =
107
+ keyof typeof keyMirrors.toDeviceAgentMessageType;
108
+
109
+ export type AppStateControlMessageType =
110
+ typeof toDeviceAgentMessageTypeEnum.app_state_control;
111
+
112
+ export type AppVersionControlMessageType =
113
+ typeof toDeviceAgentMessageTypeEnum.app_version_control;
114
+ export type AppInstallResponseMessageType =
115
+ typeof toDeviceAgentMessageTypeEnum.app_install_response;
116
+ export type ModelsInstallResponseMessageType =
117
+ typeof toDeviceAgentMessageTypeEnum.models_install_response;
118
+ export type LiveStateUpdatesTogglesMessageType =
119
+ typeof toDeviceAgentMessageTypeEnum.live_state_updates;
120
+ export type DeviceActionMessageType =
121
+ typeof toDeviceAgentMessageTypeEnum.device_action;
122
+
123
+ export const appStateValues = Object.values(keyMirrors.appState);
124
+ export type AppStateValue = keyof typeof keyMirrors.appState;
125
+
126
+ export const appStateControlValues = Object.values(keyMirrors.appStateControl);
127
+ export type AppStateControlValue = keyof typeof keyMirrors.appStateControl;
128
+
129
+ export const appVersionControlValues = Object.values(
130
+ keyMirrors.appVersionControl
131
+ );
132
+ export type AppVersionControlValue = keyof typeof keyMirrors.appVersionControl;
133
+
134
+ export const liveUpdatesValues = Object.values(keyMirrors.liveUpdates);
135
+ export type LiveUpdatesValue = keyof typeof keyMirrors.liveUpdates;
136
+
137
+ export const statusResponseValues = Object.values(keyMirrors.statusResponse);
138
+ export type StatusResponseValue = keyof typeof keyMirrors.statusResponse;
139
+
140
+ export const deviceActionValues = Object.values(keyMirrors.deviceAction);
141
+ export type DeviceActionValue = keyof typeof keyMirrors.deviceAction;
@@ -0,0 +1,11 @@
1
+ import { DeviceActionMessageType, DeviceActionValue } from './constants';
2
+ import { BaseToDeviceAgentMessage } from './common';
3
+
4
+ export interface DeviceActionPayload {
5
+ action: DeviceActionValue;
6
+ }
7
+
8
+ export interface DeviceActionMessage extends BaseToDeviceAgentMessage {
9
+ messageType: DeviceActionMessageType;
10
+ payload: DeviceActionPayload;
11
+ }
@@ -0,0 +1,17 @@
1
+ import { LiveStateUpdatesTogglesMessageType } from './constants';
2
+ import { BaseToDeviceAgentMessage } from './common';
3
+
4
+ export interface LiveStateUpdatesTogglePayload {
5
+ deviceStats?: boolean;
6
+ appState?: boolean;
7
+ appLogs?: {
8
+ projectId: string;
9
+ toggle: boolean;
10
+ };
11
+ }
12
+
13
+ export interface LiveStateUpdatesToggleMessage
14
+ extends BaseToDeviceAgentMessage {
15
+ messageType: LiveStateUpdatesTogglesMessageType;
16
+ payload: LiveStateUpdatesTogglePayload;
17
+ }
@@ -0,0 +1,33 @@
1
+ // To Device Status Structures
2
+
3
+ import { DeviceStatsMessageType } from './constants';
4
+ import { BaseToClientMessage } from './common';
5
+
6
+ interface CpuDetails {
7
+ usedPerc?: number;
8
+ temperature?: number;
9
+ }
10
+
11
+ interface DiskDetails {
12
+ usedGb?: number;
13
+ freeGb?: number;
14
+ }
15
+
16
+ interface MemDetails {
17
+ usedMb?: number;
18
+ freeMb?: number;
19
+ }
20
+
21
+ export interface DeviceStatsPayload {
22
+ cpuUsage?: number;
23
+ diskUtil?: number;
24
+ usedMemoryPercentage?: number;
25
+ cpuDetails?: CpuDetails;
26
+ diskDetails?: DiskDetails;
27
+ memDetails?: MemDetails;
28
+ }
29
+
30
+ export interface DeviceStatsMessage extends BaseToClientMessage {
31
+ messageType: DeviceStatsMessageType;
32
+ payload: DeviceStatsPayload;
33
+ }
package/src/index.ts ADDED
@@ -0,0 +1,192 @@
1
+ // export types here
2
+ import {
3
+ validateToDeviceAgentMessage,
4
+ validateToClientMessage,
5
+ ToDeviceAgentMessage,
6
+ ToDeviceAgentMessagePayload,
7
+ ToClientMessage,
8
+ ToClientMessagePayload,
9
+ ToCloudMessage,
10
+ ToCloudMessagePayload,
11
+ getToClientTopic,
12
+ getToCloudTopic,
13
+ getToDeviceTopic,
14
+ validateToCloudMessage
15
+ } from './types';
16
+ import { generateTxId } from './utils';
17
+ import {
18
+ AppDetails,
19
+ AppState,
20
+ ServiceStatus,
21
+ AppStatePayload,
22
+ AppStateMessage
23
+ } from './app-state-schema';
24
+ import { AppLogsPayload, AppLogsMessage } from './app-logs-schema';
25
+ import {
26
+ AppInstallResponsePayload,
27
+ ModelsInstallResponsePayload,
28
+ AppStateControlMessage,
29
+ AppStateControlPayload,
30
+ AppVersionControlInstallPayload,
31
+ AppVersionControlUninstallPayload,
32
+ AppVersionControlUpdateConfigPayload,
33
+ AppVersionControlMessage,
34
+ ModelInstallPayload
35
+ } from './app-action-schema';
36
+ import {
37
+ ToClientMessageTypeValue,
38
+ ToDeviceAgentMessageTypeValue,
39
+ AppStateControlValue,
40
+ AppStateValue,
41
+ keyMirrors,
42
+ AppStateControlMessageType,
43
+ AppLogsMessageType,
44
+ DeviceStatsMessageType,
45
+ AppStateMessageType,
46
+ SignedUrlsRequestMessageType,
47
+ StatusResponseMessageType,
48
+ StatusResponseValue,
49
+ ToCloudMessageTypeValue
50
+ } from './constants';
51
+ import {
52
+ LiveStateUpdatesTogglePayload,
53
+ LiveStateUpdatesToggleMessage
54
+ } from './device-agent-action-schema';
55
+ import { DeviceStatsPayload, DeviceStatsMessage } from './device-stats-schema';
56
+ import {
57
+ StatusResponsePayload,
58
+ ToClientStatusResponseMessage,
59
+ ToDeviceStatusResponseMessage
60
+ } from './status-response-schema';
61
+ import {
62
+ SignedUrlsRequestPayload,
63
+ SignedUrlsRequestMessage
64
+ } from './signed-urls-request-schema';
65
+ import { DeviceActionPayload } from './device-action-schema';
66
+ import {
67
+ buildAppLogsMessage,
68
+ buildAppStateMessage,
69
+ buildAppVersionControlMessage,
70
+ buildLiveStateUpdatesToggleMessage,
71
+ buildAppStateControlMessage,
72
+ buildDeviceActionMessage,
73
+ buildDeviceStatsMessage,
74
+ buildSignedUrlsRequestMessage,
75
+ buildToClientStatusResponseMessage,
76
+ buildToDeviceStatusResponseMessage
77
+ } from './message-builders';
78
+ import {
79
+ ProjectShadowUpdate,
80
+ ShadowProjectsUpdateAll,
81
+ validateProjectShadowUpdate,
82
+ validateShadowProjectsUpdateAll,
83
+ SystemInformationShadowUpdate,
84
+ SecureTunnelPortInfo,
85
+ SecureTunnelShadowUpdate,
86
+ validateSecureTunnelShadowUpdate,
87
+ validateSystemInformationShadowUpdate,
88
+ buildBaseShadowMessage,
89
+ buildUpdateShadowMessage,
90
+ ShadowTopics,
91
+ ShadowNames,
92
+ getShadowTopic,
93
+ getDesiredFromMessage,
94
+ getReportedFromMessage,
95
+ getUpdateDeltaStateFromMessage,
96
+ ShadowUpdateTypes,
97
+ EnvVars,
98
+ validateEnvVarSchemaShadowUpdate
99
+ } from './shadow-schema';
100
+
101
+ export {
102
+ // getters
103
+ getToClientTopic,
104
+ getToCloudTopic,
105
+ getToDeviceTopic,
106
+ getShadowTopic,
107
+ getDesiredFromMessage,
108
+ getReportedFromMessage,
109
+ getUpdateDeltaStateFromMessage,
110
+ // types
111
+ AppDetails,
112
+ ServiceStatus,
113
+ AppState,
114
+ AppStateControlValue,
115
+ AppStateValue,
116
+ ProjectShadowUpdate,
117
+ ShadowProjectsUpdateAll,
118
+ SystemInformationShadowUpdate,
119
+ SecureTunnelPortInfo,
120
+ SecureTunnelShadowUpdate,
121
+ EnvVars,
122
+ // messageTypes
123
+ ToCloudMessageTypeValue,
124
+ AppStateControlMessageType,
125
+ AppLogsMessageType,
126
+ DeviceStatsMessageType,
127
+ AppStateMessageType,
128
+ SignedUrlsRequestMessageType,
129
+ StatusResponseMessageType,
130
+ ShadowUpdateTypes,
131
+ // messages and payloads
132
+ ModelInstallPayload,
133
+ ToClientStatusResponseMessage,
134
+ ToDeviceStatusResponseMessage,
135
+ StatusResponseValue,
136
+ AppStateControlMessage,
137
+ LiveStateUpdatesTogglePayload,
138
+ LiveStateUpdatesToggleMessage,
139
+ DeviceStatsPayload,
140
+ DeviceStatsMessage,
141
+ AppStatePayload,
142
+ AppStateMessage,
143
+ AppLogsPayload,
144
+ AppLogsMessage,
145
+ StatusResponsePayload,
146
+ AppStateControlPayload,
147
+ AppVersionControlInstallPayload,
148
+ AppVersionControlUninstallPayload,
149
+ AppVersionControlUpdateConfigPayload,
150
+ AppVersionControlMessage,
151
+ AppInstallResponsePayload,
152
+ ModelsInstallResponsePayload,
153
+ SignedUrlsRequestPayload,
154
+ SignedUrlsRequestMessage,
155
+ ToDeviceAgentMessage,
156
+ ToDeviceAgentMessagePayload,
157
+ ToDeviceAgentMessageTypeValue,
158
+ ToClientMessage,
159
+ ToClientMessagePayload,
160
+ ToClientMessageTypeValue,
161
+ ToCloudMessage,
162
+ ToCloudMessagePayload,
163
+ DeviceActionPayload,
164
+ // message validators
165
+ validateToDeviceAgentMessage,
166
+ validateToClientMessage,
167
+ validateToCloudMessage,
168
+ validateShadowProjectsUpdateAll,
169
+ validateProjectShadowUpdate,
170
+ validateSystemInformationShadowUpdate,
171
+ validateSecureTunnelShadowUpdate,
172
+ validateEnvVarSchemaShadowUpdate,
173
+ // message builders
174
+ buildAppLogsMessage,
175
+ buildAppStateMessage,
176
+ buildDeviceStatsMessage,
177
+ buildSignedUrlsRequestMessage,
178
+ buildToClientStatusResponseMessage,
179
+ buildToDeviceStatusResponseMessage,
180
+ buildAppVersionControlMessage,
181
+ buildLiveStateUpdatesToggleMessage,
182
+ buildAppStateControlMessage,
183
+ buildDeviceActionMessage,
184
+ buildBaseShadowMessage,
185
+ buildUpdateShadowMessage,
186
+ // key mirrors
187
+ keyMirrors,
188
+ ShadowTopics,
189
+ ShadowNames,
190
+ // utilities
191
+ generateTxId
192
+ };
@@ -0,0 +1,269 @@
1
+ import {
2
+ AppStateControlMessage,
3
+ AppStateControlPayload,
4
+ AppVersionControlInstallPayload,
5
+ AppVersionControlMessage,
6
+ AppVersionControlUninstallPayload,
7
+ AppVersionControlUpdateConfigPayload
8
+ } from './app-action-schema';
9
+ import { AppLogsMessage, AppLogsPayload } from './app-logs-schema';
10
+ import { AppStateMessage, AppStatePayload } from './app-state-schema';
11
+ import {
12
+ BaseToClientMessage,
13
+ BaseToCloudMessage,
14
+ BaseToDeviceAgentMessage
15
+ } from './common';
16
+ import {
17
+ AppLogsMessageType,
18
+ AppStateMessageType,
19
+ DeviceStatsMessageType,
20
+ SignedUrlsRequestMessageType,
21
+ StatusResponseMessageType,
22
+ keyMirrors
23
+ } from './constants';
24
+ import {
25
+ DeviceActionMessage,
26
+ DeviceActionPayload
27
+ } from './device-action-schema';
28
+ import {
29
+ LiveStateUpdatesToggleMessage,
30
+ LiveStateUpdatesTogglePayload
31
+ } from './device-agent-action-schema';
32
+ import { DeviceStatsMessage, DeviceStatsPayload } from './device-stats-schema';
33
+ import { SignedUrlsRequestMessage } from './signed-urls-request-schema';
34
+ import {
35
+ StatusResponsePayload,
36
+ ToClientStatusResponseMessage,
37
+ ToDeviceStatusResponseMessage
38
+ } from './status-response-schema';
39
+ import {
40
+ ToCloudMessagePayload,
41
+ getToClientTopic,
42
+ getToCloudTopic,
43
+ getToDeviceTopic
44
+ } from './types';
45
+
46
+ function buildBaseToClientMessage(
47
+ clientId: string,
48
+ txId: string
49
+ ): BaseToClientMessage {
50
+ const baseClientMessage = {
51
+ timestamp: new Date().toUTCString(),
52
+ deviceId: clientId,
53
+ topic: getToClientTopic(clientId),
54
+ txId
55
+ };
56
+ return baseClientMessage;
57
+ }
58
+
59
+ function buildBaseToDeviceMessage(
60
+ deviceId: string,
61
+ txId: string
62
+ ): BaseToDeviceAgentMessage {
63
+ const baseToDeviceMessage = {
64
+ timestamp: new Date().toUTCString(),
65
+ topic: getToDeviceTopic(deviceId),
66
+ txId
67
+ };
68
+ return baseToDeviceMessage;
69
+ }
70
+
71
+ function buildBaseToCloudMessage(
72
+ deviceId: string,
73
+ txId: string
74
+ ): BaseToCloudMessage {
75
+ const baseToCloudMessage = {
76
+ deviceId,
77
+ timestamp: new Date().toUTCString(),
78
+ topic: getToCloudTopic(deviceId),
79
+ txId
80
+ };
81
+ return baseToCloudMessage;
82
+ }
83
+
84
+ // toClient Message Builders
85
+
86
+ // app logs
87
+ function buildAppLogsMessage(
88
+ clientId: string,
89
+ payload: AppLogsPayload,
90
+ txId: string
91
+ ): AppLogsMessage {
92
+ const baseMessage = buildBaseToClientMessage(clientId, txId);
93
+ const messageType: AppLogsMessageType =
94
+ keyMirrors.toClientMessageType.app_logs;
95
+ const message = {
96
+ ...baseMessage,
97
+ messageType,
98
+ payload
99
+ };
100
+ return message;
101
+ }
102
+
103
+ // app state
104
+ function buildAppStateMessage(
105
+ clientId: string,
106
+ payload: AppStatePayload,
107
+ txId: string
108
+ ): AppStateMessage {
109
+ const baseMessage = buildBaseToClientMessage(clientId, txId);
110
+ const messageType: AppStateMessageType =
111
+ keyMirrors.toClientMessageType.app_state;
112
+ const message = {
113
+ ...baseMessage,
114
+ messageType,
115
+ payload
116
+ };
117
+ return message;
118
+ }
119
+
120
+ // status response
121
+ function buildToClientStatusResponseMessage(
122
+ clientId: string,
123
+ payload: StatusResponsePayload,
124
+ txId: string
125
+ ): ToClientStatusResponseMessage {
126
+ const baseMessage = buildBaseToClientMessage(clientId, txId);
127
+ const messageType: StatusResponseMessageType =
128
+ keyMirrors.toClientMessageType.status_response;
129
+ const message = {
130
+ ...baseMessage,
131
+ messageType,
132
+ payload
133
+ };
134
+ return message;
135
+ }
136
+
137
+ // device stats
138
+ function buildDeviceStatsMessage(
139
+ clientId: string,
140
+ payload: DeviceStatsPayload,
141
+ txId: string
142
+ ): DeviceStatsMessage {
143
+ const messageType: DeviceStatsMessageType =
144
+ keyMirrors.toClientMessageType.device_stats;
145
+ const baseMessage = buildBaseToClientMessage(clientId, txId);
146
+ const message = {
147
+ ...baseMessage,
148
+ messageType,
149
+ payload
150
+ };
151
+ return message;
152
+ }
153
+
154
+ // toDevice Message Builders
155
+
156
+ // status response
157
+ function buildToDeviceStatusResponseMessage(
158
+ clientId: string,
159
+ payload: StatusResponsePayload,
160
+ txId: string
161
+ ): ToDeviceStatusResponseMessage {
162
+ const baseMessage = buildBaseToDeviceMessage(clientId, txId);
163
+ const messageType: StatusResponseMessageType =
164
+ keyMirrors.toClientMessageType.status_response;
165
+ const message = {
166
+ ...baseMessage,
167
+ messageType,
168
+ payload
169
+ };
170
+ return message;
171
+ }
172
+
173
+ // app version control
174
+ function buildAppVersionControlMessage(
175
+ deviceId: string,
176
+ payload:
177
+ | AppVersionControlInstallPayload
178
+ | AppVersionControlUninstallPayload
179
+ | AppVersionControlUpdateConfigPayload,
180
+ txId: string
181
+ ): AppVersionControlMessage {
182
+ const messageType = keyMirrors.toDeviceAgentMessageType.app_version_control;
183
+ const baseMessage = buildBaseToDeviceMessage(deviceId, txId);
184
+ const message = {
185
+ ...baseMessage,
186
+ messageType,
187
+ payload
188
+ };
189
+ return message;
190
+ }
191
+
192
+ // live state updates toggle
193
+ function buildLiveStateUpdatesToggleMessage(
194
+ deviceId: string,
195
+ payload: LiveStateUpdatesTogglePayload,
196
+ txId: string
197
+ ): LiveStateUpdatesToggleMessage {
198
+ const messageType = keyMirrors.toDeviceAgentMessageType.live_state_updates;
199
+ const baseMessage = buildBaseToDeviceMessage(deviceId, txId);
200
+ const message = {
201
+ ...baseMessage,
202
+ messageType,
203
+ payload
204
+ };
205
+ return message;
206
+ }
207
+
208
+ // app state control
209
+ function buildAppStateControlMessage(
210
+ deviceId: string,
211
+ payload: AppStateControlPayload,
212
+ txId: string
213
+ ): AppStateControlMessage {
214
+ const messageType = keyMirrors.toDeviceAgentMessageType.app_state_control;
215
+ const baseMessage = buildBaseToDeviceMessage(deviceId, txId);
216
+ const message = {
217
+ ...baseMessage,
218
+ messageType,
219
+ payload
220
+ };
221
+ return message;
222
+ }
223
+
224
+ function buildDeviceActionMessage(
225
+ deviceId: string,
226
+ payload: DeviceActionPayload,
227
+ txId: string
228
+ ): DeviceActionMessage {
229
+ const messageType = keyMirrors.toDeviceAgentMessageType.device_action;
230
+ const baseMessage = buildBaseToDeviceMessage(deviceId, txId);
231
+ const message = {
232
+ ...baseMessage,
233
+ messageType,
234
+ payload
235
+ };
236
+ return message;
237
+ }
238
+
239
+ // toCloud Message Builders
240
+
241
+ // signed URLs
242
+ function buildSignedUrlsRequestMessage(
243
+ clientId: string,
244
+ payload: ToCloudMessagePayload,
245
+ txId: string
246
+ ): SignedUrlsRequestMessage {
247
+ const baseMessage = buildBaseToCloudMessage(clientId, txId);
248
+ const messageType: SignedUrlsRequestMessageType =
249
+ keyMirrors.toCloudMessageType.signed_urls_request;
250
+ const message = {
251
+ ...baseMessage,
252
+ messageType,
253
+ payload
254
+ };
255
+ return message;
256
+ }
257
+
258
+ export {
259
+ buildAppLogsMessage,
260
+ buildAppStateMessage,
261
+ buildSignedUrlsRequestMessage,
262
+ buildToClientStatusResponseMessage,
263
+ buildToDeviceStatusResponseMessage,
264
+ buildDeviceStatsMessage,
265
+ buildAppVersionControlMessage,
266
+ buildLiveStateUpdatesToggleMessage,
267
+ buildAppStateControlMessage,
268
+ buildDeviceActionMessage
269
+ };