@alwaysai/device-agent 0.1.0 → 0.1.2

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 (100) hide show
  1. package/lib/application-control/config.d.ts +0 -1
  2. package/lib/application-control/config.d.ts.map +1 -1
  3. package/lib/application-control/config.js +15 -29
  4. package/lib/application-control/config.js.map +1 -1
  5. package/lib/application-control/environment-variables.d.ts +7 -3
  6. package/lib/application-control/environment-variables.d.ts.map +1 -1
  7. package/lib/application-control/environment-variables.js +71 -35
  8. package/lib/application-control/environment-variables.js.map +1 -1
  9. package/lib/application-control/environment-variables.test.d.ts +2 -0
  10. package/lib/application-control/environment-variables.test.d.ts.map +1 -0
  11. package/lib/application-control/environment-variables.test.js +163 -0
  12. package/lib/application-control/environment-variables.test.js.map +1 -0
  13. package/lib/application-control/index.d.ts +3 -3
  14. package/lib/application-control/index.d.ts.map +1 -1
  15. package/lib/application-control/index.js +1 -3
  16. package/lib/application-control/index.js.map +1 -1
  17. package/lib/application-control/models.d.ts +0 -1
  18. package/lib/application-control/models.d.ts.map +1 -1
  19. package/lib/application-control/models.js +12 -26
  20. package/lib/application-control/models.js.map +1 -1
  21. package/lib/application-control/status.d.ts +3 -0
  22. package/lib/application-control/status.d.ts.map +1 -1
  23. package/lib/application-control/status.js +19 -1
  24. package/lib/application-control/status.js.map +1 -1
  25. package/lib/application-control/utils.d.ts.map +1 -1
  26. package/lib/application-control/utils.js +2 -2
  27. package/lib/application-control/utils.js.map +1 -1
  28. package/lib/cloud-connection/device-agent-cloud-connection.d.ts +6 -3
  29. package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
  30. package/lib/cloud-connection/device-agent-cloud-connection.js +205 -151
  31. package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
  32. package/lib/cloud-connection/live-updates-handler.d.ts +3 -0
  33. package/lib/cloud-connection/live-updates-handler.d.ts.map +1 -1
  34. package/lib/cloud-connection/live-updates-handler.js +23 -7
  35. package/lib/cloud-connection/live-updates-handler.js.map +1 -1
  36. package/lib/cloud-connection/live-updates-handler.test.d.ts +2 -0
  37. package/lib/cloud-connection/live-updates-handler.test.d.ts.map +1 -0
  38. package/lib/cloud-connection/live-updates-handler.test.js +57 -0
  39. package/lib/cloud-connection/live-updates-handler.test.js.map +1 -0
  40. package/lib/cloud-connection/passthrough-handler.d.ts.map +1 -1
  41. package/lib/cloud-connection/passthrough-handler.js +6 -3
  42. package/lib/cloud-connection/passthrough-handler.js.map +1 -1
  43. package/lib/cloud-connection/shadow-handler.d.ts +11 -3
  44. package/lib/cloud-connection/shadow-handler.d.ts.map +1 -1
  45. package/lib/cloud-connection/shadow-handler.js +22 -7
  46. package/lib/cloud-connection/shadow-handler.js.map +1 -1
  47. package/lib/cloud-connection/shadow-handler.test.js +313 -228
  48. package/lib/cloud-connection/shadow-handler.test.js.map +1 -1
  49. package/lib/cloud-connection/shadow.js +1 -1
  50. package/lib/cloud-connection/shadow.js.map +1 -1
  51. package/lib/environment.d.ts +1 -0
  52. package/lib/environment.d.ts.map +1 -1
  53. package/lib/environment.js +2 -1
  54. package/lib/environment.js.map +1 -1
  55. package/lib/infrastructure/agent-config.d.ts +3 -1
  56. package/lib/infrastructure/agent-config.d.ts.map +1 -1
  57. package/lib/subcommands/app/env-vars.d.ts +1 -1
  58. package/lib/subcommands/app/env-vars.d.ts.map +1 -1
  59. package/lib/subcommands/app/env-vars.js +32 -5
  60. package/lib/subcommands/app/env-vars.js.map +1 -1
  61. package/lib/subcommands/app/index.d.ts.map +1 -1
  62. package/lib/subcommands/app/index.js +4 -1
  63. package/lib/subcommands/app/index.js.map +1 -1
  64. package/lib/subcommands/app/models.d.ts.map +1 -1
  65. package/lib/subcommands/app/models.js +6 -1
  66. package/lib/subcommands/app/models.js.map +1 -1
  67. package/lib/subcommands/app/shadow.d.ts +7 -0
  68. package/lib/subcommands/app/shadow.d.ts.map +1 -0
  69. package/lib/subcommands/app/shadow.js +48 -0
  70. package/lib/subcommands/app/shadow.js.map +1 -0
  71. package/lib/subcommands/app/version.js +2 -2
  72. package/lib/subcommands/app/version.js.map +1 -1
  73. package/lib/util/cloud-mode-ready.d.ts +2 -0
  74. package/lib/util/cloud-mode-ready.d.ts.map +1 -0
  75. package/lib/util/cloud-mode-ready.js +22 -0
  76. package/lib/util/cloud-mode-ready.js.map +1 -0
  77. package/package.json +1 -1
  78. package/readme.md +2 -2
  79. package/src/application-control/config.ts +30 -31
  80. package/src/application-control/environment-variables.test.ts +171 -0
  81. package/src/application-control/environment-variables.ts +102 -43
  82. package/src/application-control/index.ts +3 -9
  83. package/src/application-control/models.ts +14 -29
  84. package/src/application-control/status.ts +20 -0
  85. package/src/application-control/utils.ts +4 -2
  86. package/src/cloud-connection/device-agent-cloud-connection.ts +222 -153
  87. package/src/cloud-connection/live-updates-handler.test.ts +68 -0
  88. package/src/cloud-connection/live-updates-handler.ts +30 -7
  89. package/src/cloud-connection/passthrough-handler.ts +10 -3
  90. package/src/cloud-connection/shadow-handler.test.ts +329 -239
  91. package/src/cloud-connection/shadow-handler.ts +38 -12
  92. package/src/cloud-connection/shadow.ts +1 -1
  93. package/src/environment.ts +2 -0
  94. package/src/infrastructure/agent-config.ts +1 -1
  95. package/src/subcommands/app/env-vars.ts +38 -8
  96. package/src/subcommands/app/index.ts +4 -1
  97. package/src/subcommands/app/models.ts +10 -1
  98. package/src/subcommands/app/shadow.ts +48 -0
  99. package/src/subcommands/app/version.ts +2 -2
  100. package/src/util/cloud-mode-ready.ts +23 -0
@@ -14,6 +14,11 @@ import {
14
14
  getDeviceStatsMessage
15
15
  } from './messages';
16
16
  import { AgentMessageTypeValue } from '@alwaysai/device-agent-schemas/lib/constants';
17
+ import { ALWAYSAI_LIVE_UPDATES_TIMEOUT_MS } from '../environment';
18
+
19
+ const LIVE_UPDATES_TIMEOUT = ALWAYSAI_LIVE_UPDATES_TIMEOUT_MS
20
+ ? parseInt(ALWAYSAI_LIVE_UPDATES_TIMEOUT_MS)
21
+ : 60000;
17
22
 
18
23
  export class LiveUpdatesHandler {
19
24
  private publisher: Publisher;
@@ -101,10 +106,10 @@ export class LiveUpdatesHandler {
101
106
  }
102
107
 
103
108
  private setLiveUpdates(toggles: LiveUpdatesToggles) {
104
- if (toggles.deviceStats) {
109
+ if (toggles.deviceStats !== undefined) {
105
110
  this.liveUpdatesAlive.device_stats = toggles.deviceStats;
106
111
  }
107
- if (toggles.appState) {
112
+ if (toggles.appState !== undefined) {
108
113
  this.liveUpdatesAlive.app_state = toggles.appState;
109
114
  }
110
115
  }
@@ -117,8 +122,7 @@ export class LiveUpdatesHandler {
117
122
  appState: false
118
123
  });
119
124
  this.appLogStreams.clear();
120
- // TODO: Make constant, not hard coded
121
- }, 600000); // 10 min
125
+ }, LIVE_UPDATES_TIMEOUT);
122
126
  }
123
127
 
124
128
  private async startPublishingLiveUpdates<T extends any[]>(
@@ -152,6 +156,21 @@ export class LiveUpdatesHandler {
152
156
 
153
157
  constructor(publisher: Publisher) {
154
158
  this.publisher = publisher;
159
+ logger.debug(
160
+ `Toggle live updates timeout set to ${LIVE_UPDATES_TIMEOUT} ms`
161
+ );
162
+ }
163
+
164
+ public getDeviceStatsLiveUpdates() {
165
+ return this.liveUpdatesAlive.device_stats;
166
+ }
167
+
168
+ public getAppStateLiveUpdates() {
169
+ return this.liveUpdatesAlive.app_state;
170
+ }
171
+
172
+ public getAppLogsLiveUpdates() {
173
+ return this.liveUpdatesAlive.app_logs;
155
174
  }
156
175
 
157
176
  public async enableAppInstallStatus(props: {
@@ -184,9 +203,11 @@ export class LiveUpdatesHandler {
184
203
  public async handleToggles(toggles: LiveUpdatesToggles) {
185
204
  const { deviceStats, appState, appLogs } = toggles;
186
205
  this.restartLiveUpdatesTimeout();
206
+
207
+ const currentDeviceStats = this.getDeviceStatsLiveUpdates();
187
208
  if (deviceStats !== undefined) {
188
209
  this.liveUpdatesAlive.device_stats = deviceStats;
189
- if (deviceStats) {
210
+ if (deviceStats && currentDeviceStats !== true) {
190
211
  // Don't wait for this call to finish since it loops until disabled
191
212
  void this.startPublishingLiveUpdates(
192
213
  keyMirrors.agentMessageType.device_stats,
@@ -196,9 +217,10 @@ export class LiveUpdatesHandler {
196
217
  }
197
218
  }
198
219
 
220
+ const currentAppState = this.getAppStateLiveUpdates();
199
221
  if (appState !== undefined) {
200
222
  this.liveUpdatesAlive.app_state = appState;
201
- if (appState) {
223
+ if (appState && currentAppState !== true) {
202
224
  // Don't wait for this call to finish since it loops until disabled
203
225
  void this.startPublishingLiveUpdates(
204
226
  keyMirrors.agentMessageType.app_state,
@@ -208,8 +230,9 @@ export class LiveUpdatesHandler {
208
230
  }
209
231
  }
210
232
 
233
+ const currentAppLogs = this.getAppLogsLiveUpdates();
211
234
  if (appLogs !== undefined) {
212
- if (appLogs.toggle) {
235
+ if (appLogs.toggle && currentAppLogs !== true) {
213
236
  // Don't wait for this call to finish since it loops until disabled
214
237
  void this.startAppLogStream(appLogs.projectId);
215
238
  } else {
@@ -7,6 +7,7 @@ import { Publisher } from './publisher';
7
7
 
8
8
  const messageQueue: any[] = [];
9
9
  const ackQueue: any[] = [];
10
+ const MAX_LOCAL_CONNECTION_ATTEMPTS = 10;
10
11
 
11
12
  export class PassthroughHandler {
12
13
  public publisher: Publisher;
@@ -22,16 +23,22 @@ export class PassthroughHandler {
22
23
  await setupRabbitMQContainer();
23
24
  let connectAttempts = 0;
24
25
  let connected = false;
25
- while (connectAttempts <= 10 && this.connection === undefined) {
26
+ while (
27
+ connectAttempts <= MAX_LOCAL_CONNECTION_ATTEMPTS &&
28
+ this.connection === undefined
29
+ ) {
26
30
  try {
27
31
  this.connection = await amqp.connect('amqp://localhost');
28
32
  this.channel = await this.connection.createChannel();
29
33
  connected = true;
30
34
  } catch (e) {
35
+ const timeTillNextAttemptMs = 1000 + 1000 * connectAttempts;
31
36
  logger.debug(
32
- `Attempting to connect to alwaysAI Local Connection ${connectAttempts}`
37
+ `Attempted to connect to alwaysAI Local Connection: attempt ${connectAttempts} of ${MAX_LOCAL_CONNECTION_ATTEMPTS}. ${
38
+ timeTillNextAttemptMs / 1000
39
+ } seconds until next attempt`
33
40
  );
34
- await sleep(1000 + 1000 * connectAttempts);
41
+ await sleep(timeTillNextAttemptMs);
35
42
  connectAttempts += 1;
36
43
  }
37
44
  }