@alwaysai/device-agent 1.3.0 → 1.3.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 (123) hide show
  1. package/lib/application-control/environment-variables.d.ts +1 -0
  2. package/lib/application-control/environment-variables.d.ts.map +1 -1
  3. package/lib/application-control/environment-variables.js +22 -20
  4. package/lib/application-control/environment-variables.js.map +1 -1
  5. package/lib/application-control/environment-variables.test.js +37 -2
  6. package/lib/application-control/environment-variables.test.js.map +1 -1
  7. package/lib/application-control/install.js +1 -1
  8. package/lib/application-control/install.js.map +1 -1
  9. package/lib/cloud-connection/device-agent-cloud-connection.d.ts +5 -5
  10. package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
  11. package/lib/cloud-connection/device-agent-cloud-connection.js +203 -178
  12. package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
  13. package/lib/cloud-connection/live-updates-handler.d.ts.map +1 -1
  14. package/lib/cloud-connection/live-updates-handler.js +30 -25
  15. package/lib/cloud-connection/live-updates-handler.js.map +1 -1
  16. package/lib/cloud-connection/live-updates-handler.test.js +15 -0
  17. package/lib/cloud-connection/live-updates-handler.test.js.map +1 -1
  18. package/lib/cloud-connection/messages.d.ts +1 -3
  19. package/lib/cloud-connection/messages.d.ts.map +1 -1
  20. package/lib/cloud-connection/messages.js +1 -9
  21. package/lib/cloud-connection/messages.js.map +1 -1
  22. package/lib/cloud-connection/publisher.d.ts +1 -0
  23. package/lib/cloud-connection/publisher.d.ts.map +1 -1
  24. package/lib/cloud-connection/publisher.js +3 -0
  25. package/lib/cloud-connection/publisher.js.map +1 -1
  26. package/lib/cloud-connection/shadow-handler.d.ts +10 -21
  27. package/lib/cloud-connection/shadow-handler.d.ts.map +1 -1
  28. package/lib/cloud-connection/shadow-handler.js +154 -100
  29. package/lib/cloud-connection/shadow-handler.js.map +1 -1
  30. package/lib/cloud-connection/shadow-handler.test.js +140 -72
  31. package/lib/cloud-connection/shadow-handler.test.js.map +1 -1
  32. package/lib/cloud-connection/transaction-manager.d.ts +26 -6
  33. package/lib/cloud-connection/transaction-manager.d.ts.map +1 -1
  34. package/lib/cloud-connection/transaction-manager.js +103 -22
  35. package/lib/cloud-connection/transaction-manager.js.map +1 -1
  36. package/lib/cloud-connection/transaction-manager.test.js +179 -13
  37. package/lib/cloud-connection/transaction-manager.test.js.map +1 -1
  38. package/lib/device-control/device-control.d.ts +2 -2
  39. package/lib/device-control/device-control.d.ts.map +1 -1
  40. package/lib/device-control/device-control.js.map +1 -1
  41. package/lib/secure-tunneling/secure-tunneling.d.ts +105 -0
  42. package/lib/secure-tunneling/secure-tunneling.d.ts.map +1 -0
  43. package/lib/secure-tunneling/secure-tunneling.js +435 -0
  44. package/lib/secure-tunneling/secure-tunneling.js.map +1 -0
  45. package/lib/secure-tunneling/secure-tunneling.test.d.ts +2 -0
  46. package/lib/secure-tunneling/secure-tunneling.test.d.ts.map +1 -0
  47. package/lib/secure-tunneling/secure-tunneling.test.js +1070 -0
  48. package/lib/secure-tunneling/secure-tunneling.test.js.map +1 -0
  49. package/lib/secure-tunneling/spawner-detached.d.ts +6 -0
  50. package/lib/secure-tunneling/spawner-detached.d.ts.map +1 -0
  51. package/lib/secure-tunneling/spawner-detached.js +107 -0
  52. package/lib/secure-tunneling/spawner-detached.js.map +1 -0
  53. package/lib/subcommands/app/analytics.d.ts +10 -0
  54. package/lib/subcommands/app/analytics.d.ts.map +1 -0
  55. package/lib/subcommands/app/analytics.js +79 -0
  56. package/lib/subcommands/app/analytics.js.map +1 -0
  57. package/lib/subcommands/app/env-vars.d.ts.map +1 -1
  58. package/lib/subcommands/app/env-vars.js +11 -16
  59. package/lib/subcommands/app/env-vars.js.map +1 -1
  60. package/lib/subcommands/app/index.d.ts.map +1 -1
  61. package/lib/subcommands/app/index.js +3 -1
  62. package/lib/subcommands/app/index.js.map +1 -1
  63. package/lib/subcommands/app/models.d.ts +0 -5
  64. package/lib/subcommands/app/models.d.ts.map +1 -1
  65. package/lib/subcommands/app/models.js +16 -56
  66. package/lib/subcommands/app/models.js.map +1 -1
  67. package/lib/subcommands/app/status.d.ts +1 -0
  68. package/lib/subcommands/app/status.d.ts.map +1 -1
  69. package/lib/subcommands/app/status.js +14 -3
  70. package/lib/subcommands/app/status.js.map +1 -1
  71. package/lib/subcommands/app/version.d.ts +2 -1
  72. package/lib/subcommands/app/version.d.ts.map +1 -1
  73. package/lib/subcommands/app/version.js +16 -3
  74. package/lib/subcommands/app/version.js.map +1 -1
  75. package/lib/util/cloud-mode-ready.d.ts +1 -0
  76. package/lib/util/cloud-mode-ready.d.ts.map +1 -1
  77. package/lib/util/cloud-mode-ready.js +36 -1
  78. package/lib/util/cloud-mode-ready.js.map +1 -1
  79. package/lib/util/parsing.d.ts +2 -0
  80. package/lib/util/parsing.d.ts.map +1 -0
  81. package/lib/util/parsing.js +17 -0
  82. package/lib/util/parsing.js.map +1 -0
  83. package/package.json +4 -6
  84. package/readme.md +146 -92
  85. package/src/application-control/environment-variables.test.ts +43 -3
  86. package/src/application-control/environment-variables.ts +29 -19
  87. package/src/application-control/install.ts +1 -1
  88. package/src/cloud-connection/device-agent-cloud-connection.ts +272 -247
  89. package/src/cloud-connection/live-updates-handler.test.ts +20 -0
  90. package/src/cloud-connection/live-updates-handler.ts +45 -52
  91. package/src/cloud-connection/messages.ts +1 -14
  92. package/src/cloud-connection/publisher.ts +4 -0
  93. package/src/cloud-connection/shadow-handler.test.ts +150 -73
  94. package/src/cloud-connection/shadow-handler.ts +247 -126
  95. package/src/cloud-connection/transaction-manager.test.ts +193 -18
  96. package/src/cloud-connection/transaction-manager.ts +174 -26
  97. package/src/device-control/device-control.ts +3 -3
  98. package/src/secure-tunneling/secure-tunneling.test.ts +1239 -0
  99. package/src/secure-tunneling/secure-tunneling.ts +606 -0
  100. package/src/secure-tunneling/spawner-detached.ts +123 -0
  101. package/src/subcommands/app/analytics.ts +102 -0
  102. package/src/subcommands/app/env-vars.ts +18 -16
  103. package/src/subcommands/app/index.ts +4 -3
  104. package/src/subcommands/app/models.ts +25 -57
  105. package/src/subcommands/app/status.ts +20 -3
  106. package/src/subcommands/app/version.ts +19 -4
  107. package/src/util/cloud-mode-ready.ts +36 -0
  108. package/src/util/parsing.ts +11 -0
  109. package/lib/cloud-connection/cmd-status.d.ts +0 -8
  110. package/lib/cloud-connection/cmd-status.d.ts.map +0 -1
  111. package/lib/cloud-connection/cmd-status.js +0 -62
  112. package/lib/cloud-connection/cmd-status.js.map +0 -1
  113. package/lib/cloud-connection/message-builder.d.ts +0 -7
  114. package/lib/cloud-connection/message-builder.d.ts.map +0 -1
  115. package/lib/cloud-connection/message-builder.js +0 -63
  116. package/lib/cloud-connection/message-builder.js.map +0 -1
  117. package/lib/secure-tunneling/index.d.ts +0 -5
  118. package/lib/secure-tunneling/index.d.ts.map +0 -1
  119. package/lib/secure-tunneling/index.js +0 -64
  120. package/lib/secure-tunneling/index.js.map +0 -1
  121. package/src/cloud-connection/cmd-status.ts +0 -71
  122. package/src/cloud-connection/message-builder.ts +0 -117
  123. package/src/secure-tunneling/index.ts +0 -74
@@ -3,6 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const application_control_1 = require("../application-control");
4
4
  const publisher_1 = require("./publisher");
5
5
  const shadow_handler_1 = require("./shadow-handler");
6
+ const logger_1 = require("../util/logger");
7
+ const device_agent_schemas_1 = require("@alwaysai/device-agent-schemas");
6
8
  jest.mock('../application-control');
7
9
  jest.mock('./publisher');
8
10
  const mockClient = jest.fn();
@@ -19,8 +21,8 @@ describe('Test Shadow Handler', () => {
19
21
  test.skip('reject buffer payload', async () => {
20
22
  //FIXME: Invalid input is silently ignored, need input validation
21
23
  expect(async () => {
22
- await shadowHandler.handleShadowTopic({
23
- topic: shadowHandler.shadowTopics.projects.updateDelta,
24
+ await shadowHandler.handleProjectShadow({
25
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
24
26
  payload: Buffer.from('test-payload'),
25
27
  clientToken: ''
26
28
  });
@@ -49,8 +51,8 @@ describe('Test Shadow Handler', () => {
49
51
  appConfig: JSON.stringify(appCfg1)
50
52
  }
51
53
  };
52
- const updates = await shadowHandler.handleShadowTopic({
53
- topic: shadowHandler.shadowTopics.projects.updateDelta,
54
+ const updates = await shadowHandler.handleProjectShadow({
55
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
54
56
  payload,
55
57
  clientToken: clientId
56
58
  });
@@ -58,10 +60,12 @@ describe('Test Shadow Handler', () => {
58
60
  });
59
61
  test('handle project shadow empty delta', async () => {
60
62
  const payload = {
61
- [projectId1]: {}
63
+ desired: {
64
+ [projectId1]: {}
65
+ }
62
66
  };
63
- const updates = await shadowHandler.handleShadowTopic({
64
- topic: shadowHandler.shadowTopics.projects.updateDelta,
67
+ const updates = await shadowHandler.handleProjectShadow({
68
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
65
69
  payload,
66
70
  clientToken: ''
67
71
  });
@@ -87,14 +91,16 @@ describe('Test Shadow Handler', () => {
87
91
  }
88
92
  };
89
93
  const payload = {
90
- delta: {
91
- [projectId1]: {
92
- appConfig: JSON.stringify(appCfg1)
94
+ state: {
95
+ desired: {
96
+ [projectId1]: {
97
+ appConfig: JSON.stringify(appCfg1)
98
+ }
93
99
  }
94
100
  }
95
101
  };
96
- const updates = await shadowHandler.handleShadowTopic({
97
- topic: shadowHandler.shadowTopics.projects.getAccepted,
102
+ const updates = await shadowHandler.handleProjectShadow({
103
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
98
104
  payload,
99
105
  clientToken: ''
100
106
  });
@@ -130,12 +136,16 @@ describe('Test Shadow Handler', () => {
130
136
  }
131
137
  };
132
138
  const payload = {
133
- [projectId1]: {
134
- appConfig: JSON.stringify(appCfg1)
139
+ state: {
140
+ desired: {
141
+ [projectId1]: {
142
+ appConfig: JSON.stringify(appCfg1)
143
+ }
144
+ }
135
145
  }
136
146
  };
137
- const updates = await shadowHandler.handleShadowTopic({
138
- topic: shadowHandler.shadowTopics.projects.updateDelta,
147
+ const updates = await shadowHandler.handleProjectShadow({
148
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
139
149
  payload,
140
150
  clientToken: ''
141
151
  });
@@ -190,15 +200,19 @@ describe('Test Shadow Handler', () => {
190
200
  }
191
201
  };
192
202
  const payload = {
193
- [projectId1]: {
194
- appConfig: JSON.stringify(appCfg1)
195
- },
196
- [projectId2]: {
197
- appConfig: JSON.stringify(appCfg2)
203
+ state: {
204
+ desired: {
205
+ [projectId1]: {
206
+ appConfig: JSON.stringify(appCfg1)
207
+ },
208
+ [projectId2]: {
209
+ appConfig: JSON.stringify(appCfg2)
210
+ }
211
+ }
198
212
  }
199
213
  };
200
- const updates = await shadowHandler.handleShadowTopic({
201
- topic: shadowHandler.shadowTopics.projects.updateDelta,
214
+ const updates = await shadowHandler.handleProjectShadow({
215
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
202
216
  payload,
203
217
  clientToken: ''
204
218
  });
@@ -243,12 +257,16 @@ describe('Test Shadow Handler', () => {
243
257
  }
244
258
  };
245
259
  const payload = {
246
- [projectId1]: {
247
- appConfig: JSON.stringify(appCfg1)
260
+ state: {
261
+ desired: {
262
+ [projectId1]: {
263
+ appConfig: JSON.stringify(appCfg1)
264
+ }
265
+ }
248
266
  }
249
267
  };
250
- const updates = await shadowHandler.handleShadowTopic({
251
- topic: shadowHandler.shadowTopics.projects.updateDelta,
268
+ const updates = await shadowHandler.handleProjectShadow({
269
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
252
270
  payload,
253
271
  clientToken: ''
254
272
  });
@@ -281,55 +299,98 @@ describe('Test Shadow Handler', () => {
281
299
  }
282
300
  };
283
301
  const payload = {
284
- [projectId1]: {
285
- appConfig: JSON.stringify(appCfg1)
302
+ state: {
303
+ desired: {
304
+ [projectId1]: {
305
+ appConfig: JSON.stringify(appCfg1)
306
+ }
307
+ }
286
308
  }
287
309
  };
288
- const updates = await shadowHandler.handleShadowTopic({
289
- topic: shadowHandler.shadowTopics.projects.updateDelta,
310
+ const updates = await shadowHandler.handleProjectShadow({
311
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
290
312
  payload,
291
313
  clientToken: ''
292
314
  });
293
315
  expect(updates.length).toBe(0);
294
316
  });
317
+ test('handles an unparsable object in a project shadow appCfg delta', async () => {
318
+ const ogAppCfg1 = {
319
+ scripts: {
320
+ start: 'python app.py'
321
+ },
322
+ models: {}
323
+ };
324
+ jest.mocked(application_control_1.readAppCfgFile).mockResolvedValue(ogAppCfg1);
325
+ // This appCfg is invalid on it's own (see values below)
326
+ const appCfg1 = {
327
+ scripts: {
328
+ start: 'python app.py'
329
+ },
330
+ models: {
331
+ 'alwaysai/mobilenet_ssd': '3',
332
+ 'alwaysai/yolo_v4': '5' // string instead of int
333
+ }
334
+ };
335
+ const payload = {
336
+ state: {
337
+ desired: {
338
+ [projectId1]: {
339
+ appConfig: appCfg1 // This is missing JSON.stringify() making this an unparsable object.
340
+ }
341
+ }
342
+ }
343
+ };
344
+ const loggerSpy = jest
345
+ .spyOn(logger_1.logger, 'error')
346
+ .mockReturnValue({});
347
+ const updates = await shadowHandler.handleProjectShadow({
348
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
349
+ payload,
350
+ clientToken: ''
351
+ });
352
+ expect(updates.length).toBe(0);
353
+ expect(loggerSpy).toHaveBeenCalledWith(expect.stringContaining('Error validating shadow update'));
354
+ });
295
355
  });
296
356
  describe('handle project shadow env vars', () => {
297
- test('handle project shadow env vars get response with delta', async () => {
357
+ test('handle a response from the getAccepted from the cloud', async () => {
298
358
  const envVars1 = {
299
359
  VAR0: 'value0'
300
360
  };
301
361
  const payload = {
302
- delta: {
303
- [projectId1]: {
304
- envVars: envVars1
362
+ state: {
363
+ reported: {
364
+ [projectId1]: {
365
+ envVars: { service: envVars1 }
366
+ }
305
367
  }
306
368
  }
307
369
  };
308
- const updates = await shadowHandler.handleShadowTopic({
309
- topic: shadowHandler.shadowTopics.projects.getAccepted,
370
+ const updates = await shadowHandler.handleProjectShadow({
371
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'get/accepted'),
310
372
  payload,
311
- clientToken: ''
312
- });
313
- expect(updates.length).toBe(1);
314
- expect(updates[0]).toEqual({
315
- projectId: projectId1,
316
- txId: expect.any(String),
317
- envVarUpdate: {
318
- envVars: envVars1
319
- }
373
+ clientToken: clientId
320
374
  });
375
+ expect(updates.length).toBe(0);
321
376
  });
322
377
  test('handle project shadow env vars update delta', async () => {
323
378
  const envVars1 = {
324
379
  VAR1: 'value1'
325
380
  };
326
381
  const payload = {
327
- [projectId1]: {
328
- envVars: envVars1
382
+ state: {
383
+ desired: {
384
+ [projectId1]: {
385
+ envVars: {
386
+ service: envVars1
387
+ }
388
+ }
389
+ }
329
390
  }
330
391
  };
331
- const updates = await shadowHandler.handleShadowTopic({
332
- topic: shadowHandler.shadowTopics.projects.updateDelta,
392
+ const updates = await shadowHandler.handleProjectShadow({
393
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
333
394
  payload,
334
395
  clientToken: ''
335
396
  });
@@ -338,27 +399,33 @@ describe('Test Shadow Handler', () => {
338
399
  projectId: projectId1,
339
400
  txId: expect.any(String),
340
401
  envVarUpdate: {
341
- envVars: envVars1
402
+ envVars: { service: envVars1 }
342
403
  }
343
404
  });
344
405
  });
345
406
  test('handle project shadow env vars update delta for two projects', async () => {
346
- const envVars1 = {
407
+ const service1 = {
347
408
  VAR1: 'value1'
348
409
  };
349
- const envVars2 = {
350
- VAR2: null
410
+ const service2 = {
411
+ VAR2: 'value2'
351
412
  };
352
413
  const payload = {
353
- [projectId1]: {
354
- envVars: envVars1
355
- },
356
- [projectId2]: {
357
- envVars: envVars2
414
+ state: {
415
+ desired: {
416
+ [projectId1]: {
417
+ envVars: {
418
+ service: service1
419
+ }
420
+ },
421
+ [projectId2]: {
422
+ envVars: { service: service2 }
423
+ }
424
+ }
358
425
  }
359
426
  };
360
- const updates = await shadowHandler.handleShadowTopic({
361
- topic: shadowHandler.shadowTopics.projects.updateDelta,
427
+ const updates = await shadowHandler.handleProjectShadow({
428
+ topic: (0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update/accepted'),
362
429
  payload,
363
430
  clientToken: ''
364
431
  });
@@ -367,32 +434,33 @@ describe('Test Shadow Handler', () => {
367
434
  projectId: projectId1,
368
435
  txId: expect.any(String),
369
436
  envVarUpdate: {
370
- envVars: envVars1
437
+ envVars: { service: service1 }
371
438
  }
372
439
  });
373
440
  expect(updates[1]).toEqual({
374
441
  projectId: projectId2,
375
442
  txId: expect.any(String),
376
443
  envVarUpdate: {
377
- envVars: envVars2
444
+ envVars: { service: service2 }
378
445
  }
379
446
  });
380
447
  });
381
448
  });
382
449
  test('clear project shadow', async () => {
383
- shadowHandler.clearAppConfig(projectId1);
450
+ await shadowHandler.clearProjectShadow(projectId1);
451
+ // The order of reported and desired in the packet does not matter for the device agent, but the test is checking literal equality of expected output, and therefore the order matters here with reported being first.
384
452
  const packet = {
453
+ clientToken: clientId,
385
454
  state: {
386
- desired: {
455
+ reported: {
387
456
  [projectId1]: null
388
457
  },
389
- reported: {
458
+ desired: {
390
459
  [projectId1]: null
391
460
  }
392
- },
393
- clientToken: clientId
461
+ }
394
462
  };
395
- expect(jest.mocked(publisher.publish)).toBeCalledWith(shadowHandler.shadowTopics.projects.update, JSON.stringify(packet));
463
+ expect(jest.mocked(publisher.publish)).toBeCalledWith((0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update'), JSON.stringify(packet));
396
464
  });
397
465
  test.skip('publish app config', async () => {
398
466
  // FIXME: For some reason publisher is not being called...
@@ -413,11 +481,11 @@ describe('Test Shadow Handler', () => {
413
481
  },
414
482
  clientToken: clientId
415
483
  };
416
- expect(jest.mocked(publisher.publish)).toBeCalledWith(shadowHandler.shadowTopics.projects.update, JSON.stringify(packet));
484
+ expect(jest.mocked(publisher.publish)).toBeCalledWith((0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'update'), JSON.stringify(packet));
417
485
  });
418
486
  test('get shadow updates', async () => {
419
- shadowHandler.getShadowUpdates();
420
- expect(jest.mocked(publisher.publish)).toBeCalledWith(shadowHandler.shadowTopics.projects.get, JSON.stringify({
487
+ shadowHandler.getProjectShadowUpdates();
488
+ expect(jest.mocked(publisher.publish)).toBeCalledWith((0, device_agent_schemas_1.getShadowTopic)(clientId, 'projects', 'get'), JSON.stringify({
421
489
  clientToken: clientId
422
490
  }));
423
491
  });
@@ -1 +1 @@
1
- {"version":3,"file":"shadow-handler.test.js","sourceRoot":"","sources":["../../src/cloud-connection/shadow-handler.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shadow-handler.test.js","sourceRoot":"","sources":["../../src/cloud-connection/shadow-handler.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,30 @@
1
+ import { LiveUpdatesHandler } from './live-updates-handler';
2
+ import { Publisher } from './publisher';
1
3
  export declare class TransactionManager {
2
- private txToProject;
3
- private projectToTx;
4
- constructor();
5
- addTransaction(txId: string, projectId: string): void;
6
- getTransactionFromProject(projectId: string): string;
7
- getProjectFromTransaction(txId: string): string;
4
+ private detailsByTx;
5
+ private detailsByProject;
6
+ private liveUpdatesHandler;
7
+ private publisher;
8
+ private startTransaction;
9
+ private updateTransaction;
10
+ constructor(publisher: Publisher, liveUpdatesHandler: LiveUpdatesHandler);
11
+ Errors: {
12
+ TRANSACTION_ONGOING: "TRANSACTION_ONGOING";
13
+ PROJECT_ONGOING: "PROJECT_ONGOING";
14
+ TRANSACTION_NOT_ONGOING: "TRANSACTION_NOT_ONGOING";
15
+ };
16
+ runTransactionStep(props: {
17
+ func: () => Promise<boolean>;
18
+ projectId: string;
19
+ txId: string;
20
+ start: boolean;
21
+ stepName?: string;
22
+ }): Promise<void>;
23
+ getTransactionFromProject(projectId: string): string | undefined;
24
+ isOngoingTransactionForProjectID(projectId: string): boolean;
25
+ isOngoingTransaction(txId: string): boolean;
26
+ isAnyOngoingTransaction(): boolean;
27
+ getProjectFromTransaction(txId: string): string | undefined;
8
28
  completeTransaction(txId: string): void;
9
29
  }
10
30
  //# sourceMappingURL=transaction-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-manager.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/transaction-manager.ts"],"names":[],"mappings":"AAAA,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,WAAW,CAA8B;;IAO1C,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAoB9C,yBAAyB,CAAC,SAAS,EAAE,MAAM;IAI3C,yBAAyB,CAAC,IAAI,EAAE,MAAM;IAItC,mBAAmB,CAAC,IAAI,EAAE,MAAM;CAKxC"}
1
+ {"version":3,"file":"transaction-manager.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/transaction-manager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAcxC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAA0C;IAC7D,OAAO,CAAC,gBAAgB,CAA0C;IAClE,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO,CAAC,gBAAgB;IA+CxB,OAAO,CAAC,iBAAiB;gBAab,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,kBAAkB;IAOjE,MAAM;;;;MAIV;IAEU,kBAAkB,CAAC,KAAK,EAAE;QACrC,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;IA4CM,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKhE,gCAAgC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5D,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C,uBAAuB,IAAI,OAAO;IAIlC,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK3D,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAmB/C"}
@@ -1,40 +1,121 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TransactionManager = void 0;
4
+ const device_agent_schemas_1 = require("@alwaysai/device-agent-schemas");
5
+ const logger_1 = require("../util/logger");
6
+ const util_1 = require("alwaysai/lib/util");
7
+ const coded_error_1 = require("@carnesen/coded-error");
4
8
  class TransactionManager {
5
- constructor() {
6
- this.txToProject = {};
7
- this.projectToTx = {};
8
- this.txToProject = {};
9
- this.projectToTx = {};
9
+ constructor(publisher, liveUpdatesHandler) {
10
+ this.detailsByTx = {};
11
+ this.detailsByProject = {};
12
+ this.Errors = (0, util_1.keyMirror)({
13
+ TRANSACTION_ONGOING: null,
14
+ PROJECT_ONGOING: null,
15
+ TRANSACTION_NOT_ONGOING: null
16
+ });
17
+ this.detailsByTx = {};
18
+ this.detailsByProject = {};
19
+ this.publisher = publisher;
20
+ this.liveUpdatesHandler = liveUpdatesHandler;
10
21
  }
11
- addTransaction(txId, projectId) {
12
- // Check if the Transaction already exists
13
- if (this.txToProject[txId]) {
14
- throw new Error(`Transaction ID ${txId} already exists for this projectId ${projectId}!`);
22
+ startTransaction(txId, projectId, stepName) {
23
+ // Check if the transaction already exists
24
+ if (this.detailsByTx[txId]) {
25
+ const txnDetails = this.detailsByTx[txId];
26
+ throw new coded_error_1.CodedError(`Transaction ${txId} already ongoing!\n${JSON.stringify(txnDetails, null, 2)}`, this.Errors.TRANSACTION_ONGOING);
27
+ }
28
+ // Check if there is any ongoing transactions for project
29
+ if (this.detailsByProject[projectId]) {
30
+ const txnDetails = this.detailsByProject[projectId];
31
+ throw new coded_error_1.CodedError(`Project ${projectId} already has an ongoing transaction!\n${JSON.stringify(txnDetails, null, 2)}`, this.Errors.PROJECT_ONGOING);
32
+ }
33
+ // Map the Transaction ID with Project ID
34
+ const txDetails = {
35
+ txId,
36
+ projectId,
37
+ stepName,
38
+ start: new Date().toLocaleString()
39
+ };
40
+ this.detailsByTx[txId] = txDetails;
41
+ this.detailsByProject[projectId] = txDetails;
42
+ logger_1.logger.info(`Started transaction:\n${JSON.stringify(txDetails, null, 2)}`);
43
+ // send live updates
44
+ void this.liveUpdatesHandler.enableTransactionStatus({
45
+ txId
46
+ });
47
+ }
48
+ updateTransaction(txId, stepName) {
49
+ const txDetails = this.detailsByTx[txId];
50
+ if (!txDetails) {
51
+ throw new coded_error_1.CodedError(`Cannot update transaction ${txId} since it doesn't exist!`, this.Errors.TRANSACTION_NOT_ONGOING);
52
+ }
53
+ txDetails.stepName = stepName;
54
+ txDetails.update = new Date().toLocaleString();
55
+ logger_1.logger.info(`Updated transaction:\n${JSON.stringify(txDetails, null, 2)}`);
56
+ }
57
+ async runTransactionStep(props) {
58
+ const { func, projectId, txId, start, stepName } = props;
59
+ if (start) {
60
+ this.startTransaction(txId, projectId, stepName);
15
61
  }
16
62
  else {
17
- // Check if there is any ongoing Transactions for Project ID
18
- if (this.projectToTx[projectId]) {
19
- throw new Error(`This Project ID ${projectId} already has an ongoing transaction!`);
20
- }
21
- else {
22
- // Map the Transaction ID with Project ID
23
- this.txToProject[txId] = projectId;
24
- this.projectToTx[projectId] = txId;
63
+ this.updateTransaction(txId, stepName);
64
+ }
65
+ try {
66
+ const completed = await func();
67
+ if (completed) {
68
+ this.completeTransaction(txId);
69
+ const successStatusResponsePayload = {
70
+ status: device_agent_schemas_1.keyMirrors.statusResponse.success
71
+ };
72
+ // Send final status message
73
+ const message = (0, device_agent_schemas_1.buildToClientStatusResponseMessage)(this.publisher.getClientId(), successStatusResponsePayload, txId);
74
+ this.publisher.publishToClient(message);
25
75
  }
26
76
  }
77
+ catch (e) {
78
+ const message = e.message;
79
+ logger_1.logger.error(`Failed to execute cmd for ${projectId}:\n${message}\n${e.stack}`);
80
+ this.completeTransaction(txId);
81
+ const failureStatusResponsePayload = {
82
+ status: device_agent_schemas_1.keyMirrors.statusResponse.failure,
83
+ message
84
+ };
85
+ // Send final status message
86
+ const failureStatusResponseMessage = (0, device_agent_schemas_1.buildToClientStatusResponseMessage)(this.publisher.getClientId(), failureStatusResponsePayload, txId);
87
+ this.publisher.publishToClient(failureStatusResponseMessage);
88
+ }
27
89
  }
28
90
  getTransactionFromProject(projectId) {
29
- return this.projectToTx[projectId];
91
+ const txnDetails = this.detailsByProject[projectId];
92
+ return txnDetails === null || txnDetails === void 0 ? void 0 : txnDetails.txId;
93
+ }
94
+ isOngoingTransactionForProjectID(projectId) {
95
+ return projectId in this.detailsByProject;
96
+ }
97
+ isOngoingTransaction(txId) {
98
+ return txId in this.detailsByTx;
99
+ }
100
+ isAnyOngoingTransaction() {
101
+ return Object.keys(this.detailsByTx).length > 0;
30
102
  }
31
103
  getProjectFromTransaction(txId) {
32
- return this.txToProject[txId];
104
+ const txnDetails = this.detailsByTx[txId];
105
+ return txnDetails === null || txnDetails === void 0 ? void 0 : txnDetails.projectId;
33
106
  }
34
107
  completeTransaction(txId) {
35
- const projectId = this.txToProject[txId];
36
- delete this.txToProject[txId];
37
- delete this.projectToTx[projectId];
108
+ const txDetails = this.detailsByTx[txId];
109
+ if (txDetails === undefined) {
110
+ throw new coded_error_1.CodedError(`Cannot complete transaction ${txId} since it doesn't exist!`, this.Errors.TRANSACTION_NOT_ONGOING);
111
+ }
112
+ txDetails.stop = new Date().toLocaleString();
113
+ logger_1.logger.info(`Completed transaction:\n${JSON.stringify(txDetails, null, 2)}`);
114
+ delete this.detailsByTx[txId];
115
+ delete this.detailsByProject[txDetails.projectId];
116
+ void this.liveUpdatesHandler.disableTransactionStatus({
117
+ txId
118
+ });
38
119
  }
39
120
  }
40
121
  exports.TransactionManager = TransactionManager;
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-manager.js","sourceRoot":"","sources":["../../src/cloud-connection/transaction-manager.ts"],"names":[],"mappings":";;;AAAA,MAAa,kBAAkB;IAI7B;QAHQ,gBAAW,GAA2B,EAAE,CAAC;QACzC,gBAAW,GAA2B,EAAE,CAAC;QAG/C,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAEM,cAAc,CAAC,IAAY,EAAE,SAAiB;QACnD,0CAA0C;QAC1C,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;YAC1B,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,sCAAsC,SAAS,GAAG,CACzE,CAAC;SACH;aAAM;YACL,4DAA4D;YAC5D,IAAI,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE;gBAC/B,MAAM,IAAI,KAAK,CACb,mBAAmB,SAAS,sCAAsC,CACnE,CAAC;aACH;iBAAM;gBACL,yCAAyC;gBACzC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;gBACnC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;aACpC;SACF;IACH,CAAC;IAEM,yBAAyB,CAAC,SAAiB;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAEM,yBAAyB,CAAC,IAAY;QAC3C,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAEM,mBAAmB,CAAC,IAAY;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;CACF;AA1CD,gDA0CC"}
1
+ {"version":3,"file":"transaction-manager.js","sourceRoot":"","sources":["../../src/cloud-connection/transaction-manager.ts"],"names":[],"mappings":"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"}