@thejrsoft/subway-protocol 1.3.0

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 (78) hide show
  1. package/ACK_MESSAGES_IMPLEMENTATION_SUMMARY.md +128 -0
  2. package/ACK_MESSAGE_DESIGN.md +457 -0
  3. package/CHANGELOG.md +58 -0
  4. package/COMMAND_VALIDATION_RULES.md +178 -0
  5. package/DOCUMENTATION_REORGANIZATION_SUMMARY.md +81 -0
  6. package/DOCUMENTATION_STRUCTURE.md +106 -0
  7. package/GATEWAY_MIGRATION_GUIDE.md +130 -0
  8. package/GATEWAY_PROTOCOL_COMPARISON.md +216 -0
  9. package/INTEGRATION_GUIDE.md +190 -0
  10. package/OPTIONAL_FIELDS_WITHOUT_DEFAULTS.md +97 -0
  11. package/PROTOCOL_UTILS_USAGE.md +278 -0
  12. package/README.md +237 -0
  13. package/TYPE_FIXES_SUMMARY.md +210 -0
  14. package/UPDATE_ENUM_VALUES.md +139 -0
  15. package/dist/asyncapi-sync.d.ts +47 -0
  16. package/dist/asyncapi-sync.d.ts.map +1 -0
  17. package/dist/asyncapi-sync.js +85 -0
  18. package/dist/asyncapi-sync.js.map +1 -0
  19. package/dist/command-factory.d.ts +62 -0
  20. package/dist/command-factory.d.ts.map +1 -0
  21. package/dist/command-factory.js +137 -0
  22. package/dist/command-factory.js.map +1 -0
  23. package/dist/command-types.d.ts +27 -0
  24. package/dist/command-types.d.ts.map +1 -0
  25. package/dist/command-types.js +31 -0
  26. package/dist/command-types.js.map +1 -0
  27. package/dist/index.d.ts +403 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +413 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/message-validator.d.ts +102 -0
  32. package/dist/message-validator.d.ts.map +1 -0
  33. package/dist/message-validator.js +640 -0
  34. package/dist/message-validator.js.map +1 -0
  35. package/dist/protocol-utils.d.ts +108 -0
  36. package/dist/protocol-utils.d.ts.map +1 -0
  37. package/dist/protocol-utils.js +293 -0
  38. package/dist/protocol-utils.js.map +1 -0
  39. package/docs/01-protocol/README.md +45 -0
  40. package/docs/01-protocol/design-rationale.md +198 -0
  41. package/docs/01-protocol/message-types.md +669 -0
  42. package/docs/01-protocol/specification.md +1466 -0
  43. package/docs/02-commands/README.md +56 -0
  44. package/docs/02-commands/batch-command.md +435 -0
  45. package/docs/02-commands/complex-command.md +537 -0
  46. package/docs/02-commands/simple-command.md +332 -0
  47. package/docs/02-commands/typed-commands.md +362 -0
  48. package/docs/03-architecture/README.md +66 -0
  49. package/docs/03-architecture/device-protocol.md +430 -0
  50. package/docs/03-architecture/edge-proxy.md +727 -0
  51. package/docs/03-architecture/routing-flow.md +893 -0
  52. package/docs/04-integration/README.md +144 -0
  53. package/docs/04-integration/backend-guide.md +551 -0
  54. package/docs/04-integration/edge-guide.md +684 -0
  55. package/docs/04-integration/gateway-guide.md +180 -0
  56. package/docs/04-integration/migration-guide.md +226 -0
  57. package/docs/05-examples/README.md +141 -0
  58. package/docs/05-examples/progress-update-examples.md +757 -0
  59. package/docs/06-reference/README.md +67 -0
  60. package/docs/06-reference/api.md +572 -0
  61. package/docs/06-reference/faq.md +302 -0
  62. package/docs/06-reference/glossary.md +232 -0
  63. package/examples/backend-upgrade.ts +279 -0
  64. package/examples/edge-multi-device.ts +513 -0
  65. package/examples/gateway-upgrade.ts +150 -0
  66. package/examples/protocol-implementation.ts +715 -0
  67. package/package.json +48 -0
  68. package/scripts/validate-asyncapi.ts +78 -0
  69. package/src/__tests__/protocol.test.ts +297 -0
  70. package/src/asyncapi-sync.ts +84 -0
  71. package/src/command-factory.ts +183 -0
  72. package/src/command-types.ts +72 -0
  73. package/src/edge-proxy.ts +494 -0
  74. package/src/gateway-extensions.ts +278 -0
  75. package/src/index.ts +792 -0
  76. package/src/message-validator.ts +726 -0
  77. package/src/protocol-utils.ts +355 -0
  78. package/tsconfig.json +24 -0
@@ -0,0 +1,640 @@
1
+ "use strict";
2
+ /**
3
+ * 消息验证器 - 提供全面的消息验证功能
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MessageValidator = void 0;
7
+ const index_1 = require("./index");
8
+ /**
9
+ * 消息验证器类
10
+ */
11
+ class MessageValidator {
12
+ /**
13
+ * 通用验证方法,返回详细的验证结果
14
+ */
15
+ static validate(message) {
16
+ const errors = [];
17
+ const warnings = [];
18
+ // 基本结构验证
19
+ if (!message || typeof message !== 'object') {
20
+ errors.push('Message must be an object');
21
+ return { valid: false, errors };
22
+ }
23
+ if (!message.type) {
24
+ errors.push('Message type is required');
25
+ }
26
+ else if (!this.isValidMessageType(message.type)) {
27
+ errors.push(`Invalid message type: ${message.type}`);
28
+ }
29
+ // 根据消息类型进行特定验证
30
+ switch (message.type) {
31
+ case index_1.MessageType.REGISTER:
32
+ return this.validateRegisterMessage(message);
33
+ case index_1.MessageType.COMMAND:
34
+ return this.validateCommandMessage(message);
35
+ case index_1.MessageType.PROGRAM:
36
+ return this.validateProgramMessage(message);
37
+ case index_1.MessageType.PROGRESS_UPDATE:
38
+ return this.validateProgressUpdate(message);
39
+ case index_1.MessageType.HEARTBEAT:
40
+ return this.validateHeartbeatMessage(message);
41
+ case index_1.MessageType.ERROR:
42
+ return this.validateErrorMessage(message);
43
+ default:
44
+ // 其他消息类型的基本验证
45
+ if (!message.timestamp) {
46
+ warnings.push('Timestamp is missing');
47
+ }
48
+ if (!message.version) {
49
+ warnings.push('Version is missing');
50
+ }
51
+ }
52
+ return {
53
+ valid: errors.length === 0,
54
+ errors,
55
+ warnings: warnings.length > 0 ? warnings : undefined
56
+ };
57
+ }
58
+ /**
59
+ * 验证消息基本结构
60
+ */
61
+ static validateStructure(message) {
62
+ if (!message || typeof message !== 'object')
63
+ return false;
64
+ if (!message.type || typeof message.type !== 'string')
65
+ return false;
66
+ return true;
67
+ }
68
+ /**
69
+ * 验证命令消息
70
+ */
71
+ static validateCommandMessage(message) {
72
+ const errors = [];
73
+ const warnings = [];
74
+ if (!this.validateStructure(message)) {
75
+ errors.push('Invalid message structure');
76
+ return { valid: false, errors };
77
+ }
78
+ if (!(0, index_1.isCommandMessage)(message)) {
79
+ errors.push('Not a valid command message');
80
+ return { valid: false, errors };
81
+ }
82
+ // 必需字段验证
83
+ if (!message.requestRef) {
84
+ errors.push('requestRef is required');
85
+ }
86
+ if (!message.targetClientId) {
87
+ errors.push('targetClientId is required');
88
+ }
89
+ if (!message.callback) {
90
+ errors.push('callback is required');
91
+ }
92
+ if (!message.priority) {
93
+ errors.push('priority is required');
94
+ }
95
+ else if (!this.isValidPriority(message.priority)) {
96
+ errors.push(`Invalid priority: ${message.priority}`);
97
+ }
98
+ if (message.timeout === undefined || message.timeout === null) {
99
+ errors.push('timeout is required');
100
+ }
101
+ else if (typeof message.timeout !== 'number' || message.timeout <= 0) {
102
+ errors.push('timeout must be a positive number');
103
+ }
104
+ // 命令字段验证
105
+ if (!message.command) {
106
+ errors.push('command is required');
107
+ }
108
+ else {
109
+ if (!message.command.commandCode) {
110
+ errors.push('command.commandCode is required');
111
+ }
112
+ const commandType = message.command.commandType || index_1.CommandType.SIMPLE;
113
+ switch (commandType) {
114
+ case index_1.CommandType.SIMPLE:
115
+ case index_1.CommandType.BATCH:
116
+ if (!message.command.deviceType) {
117
+ errors.push('command.deviceType is required for SIMPLE/BATCH commands');
118
+ }
119
+ if (!message.command.operationType) {
120
+ errors.push('command.operationType is required for SIMPLE/BATCH commands');
121
+ }
122
+ else if (!this.isValidOperationType(message.command.operationType)) {
123
+ errors.push(`Invalid operationType: ${message.command.operationType}`);
124
+ }
125
+ if (message.command.deviceId === undefined) {
126
+ errors.push('command.deviceId is required for SIMPLE/BATCH commands');
127
+ }
128
+ // 命令类型特定验证
129
+ if (commandType === index_1.CommandType.SIMPLE) {
130
+ // SIMPLE 命令的 deviceId 必须是单个设备
131
+ if (Array.isArray(message.command.deviceId)) {
132
+ errors.push('SIMPLE command deviceId must be a single value (number or string), not an array');
133
+ }
134
+ }
135
+ else if (commandType === index_1.CommandType.BATCH) {
136
+ // BATCH 命令的 deviceId 必须是数组或范围字符串
137
+ if (!Array.isArray(message.command.deviceId) && typeof message.command.deviceId !== 'string') {
138
+ errors.push('BATCH command deviceId must be an array or string (range expression)');
139
+ }
140
+ }
141
+ break;
142
+ case index_1.CommandType.COMPLEX:
143
+ // Complex 命令不需要 deviceType, deviceId, operationType
144
+ break;
145
+ default:
146
+ errors.push(`Invalid commandType: ${commandType}`);
147
+ }
148
+ }
149
+ // 时间戳和版本验证
150
+ if (!message.timestamp) {
151
+ warnings.push('timestamp is missing');
152
+ }
153
+ if (!message.version) {
154
+ warnings.push('version is missing');
155
+ }
156
+ else if (message.version !== index_1.PROTOCOL_VERSION) {
157
+ warnings.push(`Protocol version mismatch: expected ${index_1.PROTOCOL_VERSION}, got ${message.version}`);
158
+ }
159
+ return {
160
+ valid: errors.length === 0,
161
+ errors,
162
+ warnings: warnings.length > 0 ? warnings : undefined
163
+ };
164
+ }
165
+ /**
166
+ * 验证程序消息
167
+ */
168
+ static validateProgramMessage(message) {
169
+ const errors = [];
170
+ const warnings = [];
171
+ if (!this.validateStructure(message)) {
172
+ errors.push('Invalid message structure');
173
+ return { valid: false, errors };
174
+ }
175
+ if (!(0, index_1.isProgramMessage)(message)) {
176
+ errors.push('Not a valid program message');
177
+ return { valid: false, errors };
178
+ }
179
+ // 必需字段验证
180
+ if (!message.requestRef) {
181
+ errors.push('requestRef is required');
182
+ }
183
+ if (!message.targetClientId) {
184
+ errors.push('targetClientId is required');
185
+ }
186
+ if (!message.callback) {
187
+ errors.push('callback is required');
188
+ }
189
+ if (!message.priority) {
190
+ errors.push('priority is required');
191
+ }
192
+ else if (!this.isValidPriority(message.priority)) {
193
+ errors.push(`Invalid priority: ${message.priority}`);
194
+ }
195
+ if (message.timeout === undefined || message.timeout === null) {
196
+ errors.push('timeout is required');
197
+ }
198
+ // 命令和参数验证
199
+ if (!message.command) {
200
+ errors.push('command is required');
201
+ }
202
+ else {
203
+ if (message.command.commandCode !== 'UPLOAD_PROGRAM') {
204
+ errors.push('command.commandCode must be UPLOAD_PROGRAM');
205
+ }
206
+ if (!message.command.parameters) {
207
+ errors.push('command.parameters is required');
208
+ }
209
+ else {
210
+ const params = message.command.parameters;
211
+ // 验证程序参数
212
+ const requiredParams = [
213
+ 'deviceId', 'taskId', 'programId', 'programName',
214
+ 'programNumber', 'programType', 'width', 'height',
215
+ 'direction', 'publishTime', 'unpublishTime',
216
+ 'downloadUrl', 'checksum', 'hashAlgorithm', 'fileSize'
217
+ ];
218
+ for (const param of requiredParams) {
219
+ if (params[param] === undefined || params[param] === null) {
220
+ errors.push(`command.parameters.${param} is required`);
221
+ }
222
+ }
223
+ // 验证特定字段的值
224
+ if (params.programType && !this.isValidProgramType(params.programType)) {
225
+ errors.push(`Invalid programType: ${params.programType}`);
226
+ }
227
+ if (params.direction && !this.isValidProgramDirection(params.direction)) {
228
+ errors.push(`Invalid direction: ${params.direction}`);
229
+ }
230
+ if (params.hashAlgorithm && params.hashAlgorithm !== 'SHA256') {
231
+ errors.push('hashAlgorithm must be SHA256');
232
+ }
233
+ if (params.programNumber !== undefined && (params.programNumber < 1 || params.programNumber > 10)) {
234
+ errors.push('programNumber must be between 1 and 10');
235
+ }
236
+ }
237
+ }
238
+ return {
239
+ valid: errors.length === 0,
240
+ errors,
241
+ warnings: warnings.length > 0 ? warnings : undefined
242
+ };
243
+ }
244
+ /**
245
+ * 验证进度更新消息
246
+ */
247
+ static validateProgressUpdate(message) {
248
+ const errors = [];
249
+ const warnings = [];
250
+ if (!this.validateStructure(message)) {
251
+ errors.push('Invalid message structure');
252
+ return { valid: false, errors };
253
+ }
254
+ if (!(0, index_1.isProgressUpdateMessage)(message)) {
255
+ errors.push('Not a valid progress update message');
256
+ return { valid: false, errors };
257
+ }
258
+ // 必需字段验证
259
+ if (!message.requestRef) {
260
+ errors.push('requestRef is required');
261
+ }
262
+ if (!message.status) {
263
+ errors.push('status is required');
264
+ }
265
+ else if (!this.isValidProgressStatus(message.status)) {
266
+ errors.push(`Invalid status: ${message.status}`);
267
+ }
268
+ if (!message.phase) {
269
+ errors.push('phase is required');
270
+ }
271
+ if (message.progress === undefined || message.progress === null) {
272
+ errors.push('progress is required');
273
+ }
274
+ else if (message.progress < 0 || message.progress > 100) {
275
+ errors.push('progress must be between 0 and 100');
276
+ }
277
+ if (!message.sourceType) {
278
+ errors.push('sourceType is required');
279
+ }
280
+ else if (!['COMMAND', 'SYSTEM'].includes(message.sourceType)) {
281
+ errors.push('sourceType must be COMMAND or SYSTEM');
282
+ }
283
+ // 可选字段验证
284
+ if (message.report) {
285
+ if (!message.report.level || !this.isValidReportLevel(message.report.level)) {
286
+ errors.push('Invalid report.level');
287
+ }
288
+ if (!message.report.message) {
289
+ errors.push('report.message is required when report is present');
290
+ }
291
+ }
292
+ return {
293
+ valid: errors.length === 0,
294
+ errors,
295
+ warnings: warnings.length > 0 ? warnings : undefined
296
+ };
297
+ }
298
+ /**
299
+ * 验证注册消息
300
+ */
301
+ static validateRegisterMessage(message) {
302
+ const errors = [];
303
+ const warnings = [];
304
+ if (!this.validateStructure(message)) {
305
+ errors.push('Invalid message structure');
306
+ return { valid: false, errors };
307
+ }
308
+ if (!(0, index_1.isRegisterMessage)(message)) {
309
+ errors.push('Not a valid register message');
310
+ return { valid: false, errors };
311
+ }
312
+ // 必需字段验证
313
+ if (!message.clientId) {
314
+ errors.push('clientId is required');
315
+ }
316
+ if (!message.clientType) {
317
+ errors.push('clientType is required');
318
+ }
319
+ else if (!this.isValidClientType(message.clientType)) {
320
+ errors.push(`Invalid clientType: ${message.clientType}`);
321
+ }
322
+ // 可选字段验证
323
+ if (message.clientInfo) {
324
+ if (message.clientInfo.capabilities && !Array.isArray(message.clientInfo.capabilities)) {
325
+ errors.push('clientInfo.capabilities must be an array');
326
+ }
327
+ }
328
+ if (message.edgeInfo) {
329
+ if (!message.edgeInfo.edgeId) {
330
+ errors.push('edgeInfo.edgeId is required when edgeInfo is present');
331
+ }
332
+ }
333
+ return {
334
+ valid: errors.length === 0,
335
+ errors,
336
+ warnings: warnings.length > 0 ? warnings : undefined
337
+ };
338
+ }
339
+ /**
340
+ * 验证心跳消息
341
+ */
342
+ static validateHeartbeatMessage(message) {
343
+ const errors = [];
344
+ const warnings = [];
345
+ if (!this.validateStructure(message)) {
346
+ errors.push('Invalid message structure');
347
+ return { valid: false, errors };
348
+ }
349
+ if (!(0, index_1.isHeartbeatMessage)(message)) {
350
+ errors.push('Not a valid heartbeat message');
351
+ return { valid: false, errors };
352
+ }
353
+ if (!message.clientId) {
354
+ errors.push('clientId is required');
355
+ }
356
+ if (message.sequence === undefined || message.sequence === null) {
357
+ errors.push('sequence is required');
358
+ }
359
+ if (!message.clientTime) {
360
+ errors.push('clientTime is required');
361
+ }
362
+ return {
363
+ valid: errors.length === 0,
364
+ errors,
365
+ warnings: warnings.length > 0 ? warnings : undefined
366
+ };
367
+ }
368
+ /**
369
+ * 验证错误消息
370
+ */
371
+ static validateErrorMessage(message) {
372
+ const errors = [];
373
+ const warnings = [];
374
+ if (!this.validateStructure(message)) {
375
+ errors.push('Invalid message structure');
376
+ return { valid: false, errors };
377
+ }
378
+ if (!(0, index_1.isErrorMessage)(message)) {
379
+ errors.push('Not a valid error message');
380
+ return { valid: false, errors };
381
+ }
382
+ if (!message.code) {
383
+ errors.push('code is required');
384
+ }
385
+ if (!message.message) {
386
+ errors.push('message is required');
387
+ }
388
+ return {
389
+ valid: errors.length === 0,
390
+ errors,
391
+ warnings: warnings.length > 0 ? warnings : undefined
392
+ };
393
+ }
394
+ // 字段验证辅助方法
395
+ /**
396
+ * 验证消息类型
397
+ */
398
+ static isValidMessageType(type) {
399
+ return Object.values(index_1.MessageType).includes(type);
400
+ }
401
+ /**
402
+ * 验证客户端类型
403
+ */
404
+ static isValidClientType(clientType) {
405
+ return Object.values(index_1.ClientType).includes(clientType);
406
+ }
407
+ /**
408
+ * 验证优先级
409
+ */
410
+ static isValidPriority(priority) {
411
+ return Object.values(index_1.Priority).includes(priority);
412
+ }
413
+ /**
414
+ * 验证命令状态
415
+ */
416
+ static isValidCommandStatus(status) {
417
+ return Object.values(index_1.CommandStatus).includes(status);
418
+ }
419
+ /**
420
+ * 验证操作类型
421
+ */
422
+ static isValidOperationType(operationType) {
423
+ return Object.values(index_1.OperationType).includes(operationType);
424
+ }
425
+ /**
426
+ * 验证命令类型
427
+ */
428
+ static isValidCommandType(commandType) {
429
+ return Object.values(index_1.CommandType).includes(commandType);
430
+ }
431
+ /**
432
+ * 验证进度状态
433
+ */
434
+ static isValidProgressStatus(status) {
435
+ return Object.values(index_1.ProgressStatus).includes(status);
436
+ }
437
+ /**
438
+ * 验证进度阶段
439
+ */
440
+ static isValidProgressPhase(phase) {
441
+ return Object.values(index_1.ProgressPhase).includes(phase);
442
+ }
443
+ /**
444
+ * 验证报告级别
445
+ */
446
+ static isValidReportLevel(level) {
447
+ return Object.values(index_1.ReportLevel).includes(level);
448
+ }
449
+ /**
450
+ * 验证程序类型
451
+ */
452
+ static isValidProgramType(type) {
453
+ return Object.values(index_1.ProgramType).includes(type);
454
+ }
455
+ /**
456
+ * 验证程序方向
457
+ */
458
+ static isValidProgramDirection(direction) {
459
+ return Object.values(index_1.ProgramDirection).includes(direction);
460
+ }
461
+ /**
462
+ * 获取验证模式
463
+ */
464
+ static getValidationSchema(messageType) {
465
+ const schemas = {
466
+ [index_1.MessageType.REGISTER]: {
467
+ required: ['type', 'clientId', 'clientType', 'timestamp', 'version'],
468
+ optional: ['clientInfo', 'edgeInfo'],
469
+ types: {
470
+ type: 'string',
471
+ clientId: 'string',
472
+ clientType: 'string',
473
+ timestamp: 'string',
474
+ version: 'string',
475
+ clientInfo: 'object',
476
+ edgeInfo: 'object'
477
+ }
478
+ },
479
+ [index_1.MessageType.REGISTER_ACK]: {
480
+ required: ['type', 'clientId', 'success', 'timestamp', 'version'],
481
+ optional: ['sessionId', 'error', 'serverInfo'],
482
+ types: {
483
+ type: 'string',
484
+ clientId: 'string',
485
+ success: 'boolean',
486
+ sessionId: 'string',
487
+ error: 'object',
488
+ serverInfo: 'object',
489
+ timestamp: 'string',
490
+ version: 'string'
491
+ }
492
+ },
493
+ [index_1.MessageType.COMMAND]: {
494
+ required: ['type', 'requestRef', 'targetClientId', 'command', 'priority', 'timeout', 'callback', 'timestamp', 'version'],
495
+ optional: ['retryCount', 'metadata'],
496
+ types: {
497
+ type: 'string',
498
+ requestRef: 'string',
499
+ targetClientId: 'string',
500
+ command: 'object',
501
+ priority: 'string',
502
+ timeout: 'number',
503
+ callback: 'string',
504
+ retryCount: 'number',
505
+ metadata: 'object',
506
+ timestamp: 'string',
507
+ version: 'string'
508
+ }
509
+ },
510
+ [index_1.MessageType.COMMAND_RESPONSE]: {
511
+ required: ['type', 'requestRef', 'status', 'timestamp', 'version'],
512
+ optional: ['result', 'report', 'executionTime'],
513
+ types: {
514
+ type: 'string',
515
+ requestRef: 'string',
516
+ status: 'string',
517
+ result: 'object',
518
+ report: 'object',
519
+ executionTime: 'number',
520
+ timestamp: 'string',
521
+ version: 'string'
522
+ }
523
+ },
524
+ [index_1.MessageType.PROGRAM]: {
525
+ required: ['type', 'requestRef', 'targetClientId', 'command', 'priority', 'timeout', 'callback', 'timestamp', 'version'],
526
+ optional: [],
527
+ types: {
528
+ type: 'string',
529
+ requestRef: 'string',
530
+ targetClientId: 'string',
531
+ command: 'object',
532
+ priority: 'string',
533
+ timeout: 'number',
534
+ callback: 'string',
535
+ timestamp: 'string',
536
+ version: 'string'
537
+ }
538
+ },
539
+ [index_1.MessageType.PROGRAM_RESPONSE]: {
540
+ required: ['type', 'requestRef', 'status', 'timestamp', 'version'],
541
+ optional: ['context', 'report', 'executionTime'],
542
+ types: {
543
+ type: 'string',
544
+ requestRef: 'string',
545
+ status: 'string',
546
+ context: 'object',
547
+ report: 'object',
548
+ executionTime: 'number',
549
+ timestamp: 'string',
550
+ version: 'string'
551
+ }
552
+ },
553
+ [index_1.MessageType.HEARTBEAT]: {
554
+ required: ['type', 'clientId', 'sequence', 'clientTime', 'timestamp', 'version'],
555
+ optional: [],
556
+ types: {
557
+ type: 'string',
558
+ clientId: 'string',
559
+ sequence: 'number',
560
+ clientTime: 'string',
561
+ timestamp: 'string',
562
+ version: 'string'
563
+ }
564
+ },
565
+ [index_1.MessageType.HEARTBEAT_ACK]: {
566
+ required: ['type', 'clientId', 'sequence', 'clientTime', 'serverTime', 'timestamp', 'version'],
567
+ optional: ['latency', 'serverStatus'],
568
+ types: {
569
+ type: 'string',
570
+ clientId: 'string',
571
+ sequence: 'number',
572
+ clientTime: 'string',
573
+ serverTime: 'string',
574
+ latency: 'number',
575
+ serverStatus: 'object',
576
+ timestamp: 'string',
577
+ version: 'string'
578
+ }
579
+ },
580
+ [index_1.MessageType.PROGRESS_UPDATE]: {
581
+ required: ['type', 'requestRef', 'status', 'phase', 'progress', 'sourceType', 'timestamp', 'version'],
582
+ optional: ['context', 'command', 'report'],
583
+ types: {
584
+ type: 'string',
585
+ requestRef: 'string',
586
+ status: 'string',
587
+ phase: 'string',
588
+ progress: 'number',
589
+ sourceType: 'string',
590
+ context: 'object',
591
+ command: 'object',
592
+ report: 'object',
593
+ timestamp: 'string',
594
+ version: 'string'
595
+ }
596
+ },
597
+ [index_1.MessageType.ERROR]: {
598
+ required: ['type', 'code', 'message', 'timestamp', 'version'],
599
+ optional: ['severity', 'category', 'context', 'retryable'],
600
+ types: {
601
+ type: 'string',
602
+ code: 'string',
603
+ message: 'string',
604
+ severity: 'string',
605
+ category: 'string',
606
+ context: 'any',
607
+ retryable: 'boolean',
608
+ timestamp: 'string',
609
+ version: 'string'
610
+ }
611
+ },
612
+ [index_1.MessageType.UNREGISTER]: {
613
+ required: ['type', 'clientId', 'timestamp', 'version'],
614
+ optional: ['reason'],
615
+ types: {
616
+ type: 'string',
617
+ clientId: 'string',
618
+ reason: 'string',
619
+ timestamp: 'string',
620
+ version: 'string'
621
+ }
622
+ },
623
+ [index_1.MessageType.UNREGISTER_ACK]: {
624
+ required: ['type', 'clientId', 'success', 'timestamp', 'version'],
625
+ optional: ['cleanupInfo'],
626
+ types: {
627
+ type: 'string',
628
+ clientId: 'string',
629
+ success: 'boolean',
630
+ cleanupInfo: 'object',
631
+ timestamp: 'string',
632
+ version: 'string'
633
+ }
634
+ }
635
+ };
636
+ return schemas[messageType] || null;
637
+ }
638
+ }
639
+ exports.MessageValidator = MessageValidator;
640
+ //# sourceMappingURL=message-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-validator.js","sourceRoot":"","sources":["../src/message-validator.ts"],"names":[],"mappings":"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"}