@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
@@ -0,0 +1,19 @@
1
+ import { BaseToDeviceAgentMessage } from './common';
2
+ import { StatusResponseMessageType, StatusResponseValue } from './constants';
3
+ import { BaseToClientMessage } from './common';
4
+
5
+ export interface StatusResponsePayload {
6
+ status: StatusResponseValue;
7
+ message?: string;
8
+ }
9
+
10
+ export interface ToClientStatusResponseMessage extends BaseToClientMessage {
11
+ messageType: StatusResponseMessageType;
12
+ payload: StatusResponsePayload;
13
+ }
14
+
15
+ export interface ToDeviceStatusResponseMessage
16
+ extends BaseToDeviceAgentMessage {
17
+ messageType: StatusResponseMessageType;
18
+ payload: StatusResponsePayload;
19
+ }
package/src/types.ts ADDED
@@ -0,0 +1,160 @@
1
+ import Ajv2019 from 'ajv/dist/2019';
2
+ import {
3
+ CLIENT_TOPIC_PREFIX,
4
+ CLOUD_TOPIC_PREFIX,
5
+ DEVICE_TOPIC_PREFIX,
6
+ DEVICE_TYPE
7
+ } from './constants';
8
+ import * as commonSchema from './schemas/common-schema.json';
9
+ import * as deviceStatsSchema from './schemas/device-stats-schema.json';
10
+ import * as appStateSchema from './schemas/app-state-schema.json';
11
+ import * as appLogsSchema from './schemas/app-logs-schema.json';
12
+ import * as statusResponseSchema from './schemas/status-response-schema.json';
13
+ import * as signedUrlsRequestSchema from './schemas/signed-urls-request-schema.json';
14
+ import * as toDeviceAgentMessageSchema from './schemas/to-device-agent-message-schema.json';
15
+ import * as modelsInstallPayloadSchema from './schemas/models-install-payload-schema.json';
16
+ import * as appInstallSchema from './schemas/app-install-schema.json';
17
+ import * as appUpdateConfigSchema from './schemas/app-update-config-schema.json';
18
+ import * as appUninstallSchema from './schemas/app-uninstall-schema.json';
19
+ import * as toClientMessageSchema from './schemas/to-client-message-schema.json';
20
+ import * as toCloudMessageSchema from './schemas/to-cloud-message-schema.json';
21
+ import * as appStateControlSchema from './schemas/app-state-control-schema.json';
22
+ import * as appVersionControlSchema from './schemas/app-version-control-schema.json';
23
+ import * as appInstallResponseSchema from './schemas/app-install-response-schema.json';
24
+ import * as modelsInstallResponseSchema from './schemas/models-install-response-schema.json';
25
+ import * as liveUpdatesTogglesSchema from './schemas/live-updates-toggle-schema.json';
26
+ import * as deviceActionSchema from './schemas/device-action-schema.json';
27
+ import { AppLogsMessage, AppLogsPayload } from './app-logs-schema';
28
+ import {
29
+ AppInstallResponseMessage,
30
+ AppInstallResponsePayload,
31
+ AppStateControlMessage,
32
+ AppStateControlPayload,
33
+ AppVersionControlInstallPayload,
34
+ AppVersionControlUpdateConfigPayload,
35
+ AppVersionControlMessage,
36
+ AppVersionControlUninstallPayload,
37
+ ModelsInstallResponseMessage,
38
+ ModelsInstallResponsePayload
39
+ } from './app-action-schema';
40
+ import {
41
+ LiveStateUpdatesToggleMessage,
42
+ LiveStateUpdatesTogglePayload
43
+ } from './device-agent-action-schema';
44
+ import {
45
+ StatusResponsePayload,
46
+ ToClientStatusResponseMessage,
47
+ ToDeviceStatusResponseMessage
48
+ } from './status-response-schema';
49
+ import { AppStateMessage, AppStatePayload } from './app-state-schema';
50
+ import {
51
+ SignedUrlsRequestMessage,
52
+ SignedUrlsRequestPayload
53
+ } from './signed-urls-request-schema';
54
+ import { DeviceStatsMessage, DeviceStatsPayload } from './device-stats-schema';
55
+ import {
56
+ DeviceActionMessage,
57
+ DeviceActionPayload
58
+ } from './device-action-schema';
59
+
60
+ // Note: the other schemas do not need to be added, because they will
61
+ // automatically be added in the compile step due to $ref usage (and $id lookup)
62
+ const ajv = new Ajv2019({
63
+ allErrors: true,
64
+ verbose: true,
65
+ schemas: [commonSchema]
66
+ });
67
+
68
+ export const getToClientTopic = (
69
+ deviceUuid: string,
70
+ deviceType: string = DEVICE_TYPE
71
+ ) => `${CLIENT_TOPIC_PREFIX}/${deviceType}/${deviceUuid}`;
72
+
73
+ export const getToCloudTopic = (
74
+ deviceUuid: string,
75
+ deviceType: string = DEVICE_TYPE
76
+ ) => `${CLOUD_TOPIC_PREFIX}/${deviceType}/${deviceUuid}`;
77
+
78
+ export const getToDeviceTopic = (
79
+ deviceUuid: string,
80
+ deviceType: string = DEVICE_TYPE
81
+ ) => `${DEVICE_TOPIC_PREFIX}/${deviceType}/${deviceUuid}`;
82
+
83
+ /* ============================================================================
84
+ To Client Message
85
+ ============================================================================ */
86
+
87
+ export type ToClientMessage =
88
+ | AppLogsMessage
89
+ | ToClientStatusResponseMessage
90
+ | AppStateMessage
91
+ | DeviceStatsMessage;
92
+
93
+ export type ToClientMessagePayload =
94
+ | AppLogsPayload
95
+ | AppStatePayload
96
+ | DeviceStatsPayload
97
+ | StatusResponsePayload;
98
+
99
+ ajv.addSchema(deviceStatsSchema, 'device-stats-schema.json');
100
+ ajv.addSchema(appStateSchema, 'app-state-schema.json');
101
+ ajv.addSchema(appLogsSchema, 'app-logs-schema.json');
102
+ ajv.addSchema(statusResponseSchema, 'status-response-schema.json');
103
+ ajv.addSchema(toClientMessageSchema, 'to-client-message-schema.json');
104
+ export const validateToClientMessage = ajv.compile<ToClientMessage>(
105
+ toClientMessageSchema
106
+ );
107
+
108
+ /* ============================================================================
109
+ ToCloud Message
110
+ ============================================================================ */
111
+
112
+ export type ToCloudMessage = SignedUrlsRequestMessage;
113
+
114
+ export type ToCloudMessagePayload = SignedUrlsRequestPayload;
115
+
116
+ ajv.addSchema(signedUrlsRequestSchema, 'signed-urls-request-schema.json');
117
+ export const validateToCloudMessage =
118
+ ajv.compile<ToCloudMessage>(toCloudMessageSchema);
119
+
120
+ /* ============================================================================
121
+ To Device Agent Message
122
+ ============================================================================ */
123
+
124
+ export type ToDeviceAgentMessage =
125
+ | AppStateControlMessage
126
+ | AppVersionControlMessage
127
+ | LiveStateUpdatesToggleMessage
128
+ | ToDeviceStatusResponseMessage
129
+ | AppInstallResponseMessage
130
+ | ModelsInstallResponseMessage
131
+ | DeviceActionMessage;
132
+
133
+ export type ToDeviceAgentMessagePayload =
134
+ | AppStateControlPayload
135
+ | AppVersionControlInstallPayload
136
+ | AppVersionControlUninstallPayload
137
+ | AppVersionControlUpdateConfigPayload
138
+ | LiveStateUpdatesTogglePayload
139
+ | StatusResponsePayload
140
+ | AppInstallResponsePayload
141
+ | ModelsInstallResponsePayload
142
+ | DeviceActionPayload;
143
+
144
+ ajv.addSchema(modelsInstallPayloadSchema, 'models-install-payload-schema.json');
145
+ ajv.addSchema(appInstallSchema, 'app-install-schema.json');
146
+ ajv.addSchema(appUpdateConfigSchema, 'app-update-config-schema.json');
147
+ ajv.addSchema(appUninstallSchema, 'app-uninstall-schema.json');
148
+ ajv.addSchema(appStateControlSchema, 'app-state-control-schema.json');
149
+ ajv.addSchema(appVersionControlSchema, 'app-version-control-schema.json');
150
+ ajv.addSchema(appInstallResponseSchema, 'app-install-response-schema.json');
151
+ ajv.addSchema(
152
+ modelsInstallResponseSchema,
153
+ 'models-install-response-schema.json'
154
+ );
155
+ ajv.addSchema(liveUpdatesTogglesSchema, 'live-updates-toggle-schema.json');
156
+ ajv.addSchema(deviceActionSchema, 'device-action-schema.json');
157
+
158
+ export const validateToDeviceAgentMessage = ajv.compile<ToDeviceAgentMessage>(
159
+ toDeviceAgentMessageSchema
160
+ );
package/src/utils.ts ADDED
@@ -0,0 +1,21 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+
3
+ export function loadSchemaAsObject(schema: object) {
4
+ return JSON.parse(JSON.stringify(schema));
5
+ }
6
+
7
+ /* eslint-disable */
8
+ export function keyMirror<T extends object>(obj: T): { [K in keyof T]: K } {
9
+ const newObj = {};
10
+ for (const key in obj) {
11
+ if (obj.hasOwnProperty(key)) {
12
+ newObj[String(key)] = key;
13
+ }
14
+ }
15
+ return newObj as { [K in keyof T]: K };
16
+ }
17
+ /* eslint-enable */
18
+
19
+ export function generateTxId(): string {
20
+ return uuidv4();
21
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {}
4
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": ["./src", "./tests"],
4
+ "compilerOptions": {}
5
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,88 @@
1
+ {
2
+ "extends": "@alwaysai/tsconfig/nodejs/tsconfig.json",
3
+ "include": ["src"],
4
+ "compilerOptions": {
5
+ "rootDir": "./src",
6
+ "outDir": "./lib",
7
+ // "allowJs": false,
8
+ "allowSyntheticDefaultImports": true,
9
+ // "allowUnreachableCode": false,
10
+ // "allowUnusedLabels": false,
11
+ "alwaysStrict": false,
12
+ // "baseUrl": ".",
13
+ // "build": false,
14
+ // "charset": "utf8",
15
+ // "checkJs": false,
16
+ // "composite": true,
17
+ "declaration": true,
18
+ // "declarationDir": ".",
19
+ "declarationMap": true,
20
+ // "diagnostics": false,
21
+ // "disableSizeLimit": false,
22
+ "downlevelIteration": true,
23
+ // "emitBOM": false,
24
+ // "emitDeclarationOnly": false,
25
+ // "emitDecoratorMetadata": false,
26
+ // "esModuleInterop": false,
27
+ // "experimentalDecorators": false,
28
+ "forceConsistentCasingInFileNames": true,
29
+ // "importHelpers": false,
30
+ // "inlineSourceMap": false,
31
+ // "inlineSources": false,
32
+ // "isolatedModules": false,
33
+ // "jsx": "preserve",
34
+ // "jsxFactory": "React.createElement",
35
+ // "keyofStringsOnly": false,
36
+ // "lib": [],
37
+ // "listEmittedFiles": false,
38
+ // "listFiles": false,
39
+ // "locale": "en",
40
+ // "mapRoot": ".",
41
+ // "maxNodeModuleJsDepth": 0,
42
+ "module": "commonjs",
43
+ "moduleResolution": "node",
44
+ "newLine": "lf",
45
+ // "noEmit": false,
46
+ // "noEmitHelpers": false,
47
+ "noEmitOnError": false,
48
+ "noErrorTruncation": true,
49
+ // "noFallthroughCasesInSwitch": false,
50
+ "noImplicitAny": false,
51
+ "noImplicitReturns": false,
52
+ "noImplicitThis": false,
53
+ // "noImplicitUseStrict": false,
54
+ // "noLib": false,
55
+ // "noStrictGenericChecks": false,
56
+ // "noResolve": false,
57
+ // "noUnusedLocals": false,
58
+ // "noUnusedParameters": false,
59
+ // "out": DEPRECATED
60
+ // "outDir": "lib",
61
+ // "outFile": "dist/lib.js",
62
+ // "paths": [],
63
+ // "preserveConstEnums": false,
64
+ // "preserveSymlinks": false,
65
+ // "preserveWatchOutput": false,
66
+ // "pretty": true,
67
+ // "reactNamespace": DEPRECATED
68
+ // "removeComments": false,
69
+ "resolveJsonModule": true,
70
+ // "rootDir": "src",
71
+ // "rootDirs": ["src"],
72
+ // "skipDefaultLibCheck": DEPRECATED
73
+ // "skipLibCheck": false,
74
+ "sourceMap": true,
75
+ // "sourceRoot": ".",
76
+ "strict": false,
77
+ "strictFunctionTypes": false,
78
+ "strictNullChecks": true,
79
+ "strictPropertyInitialization": false
80
+ // "stripInternal": false,
81
+ // "suppressExcessPropertyErrors": false,
82
+ // "suppressImplicitAnyIndexErrors": false,
83
+ // "target": "esnext",
84
+ // "traceResolution": false,
85
+ // "types": [],
86
+ // "typeRoots": [],
87
+ }
88
+ }