grm-shared-library 1.1.188 → 1.1.190

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 (121) hide show
  1. package/dist/cjs/index.js +1 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/kafka/topics.js +13 -0
  4. package/dist/cjs/kafka/topics.js.map +1 -1
  5. package/dist/cjs/modules/common/constants/service.const.js +1 -0
  6. package/dist/cjs/modules/common/constants/service.const.js.map +1 -1
  7. package/dist/cjs/modules/socket/enums/redis-channel-name.enum.js +1 -0
  8. package/dist/cjs/modules/socket/enums/redis-channel-name.enum.js.map +1 -1
  9. package/dist/cjs/modules/socket/enums/socket-event-name.enum.js +5 -0
  10. package/dist/cjs/modules/socket/enums/socket-event-name.enum.js.map +1 -1
  11. package/dist/cjs/modules/tracking/constants/tracking-kafka.const.js +48 -0
  12. package/dist/cjs/modules/tracking/constants/tracking-kafka.const.js.map +1 -0
  13. package/dist/cjs/modules/tracking/enums/tracking-connection-status.enum.js +27 -0
  14. package/dist/cjs/modules/tracking/enums/tracking-connection-status.enum.js.map +1 -0
  15. package/dist/cjs/modules/tracking/enums/tracking-event-quality.enum.js +22 -0
  16. package/dist/cjs/modules/tracking/enums/tracking-event-quality.enum.js.map +1 -0
  17. package/dist/cjs/modules/tracking/enums/tracking-provider-code.enum.js +28 -0
  18. package/dist/cjs/modules/tracking/enums/tracking-provider-code.enum.js.map +1 -0
  19. package/dist/cjs/modules/tracking/enums/tracking-transport-type.enum.js +22 -0
  20. package/dist/cjs/modules/tracking/enums/tracking-transport-type.enum.js.map +1 -0
  21. package/dist/cjs/modules/tracking/enums/tracking-unit-online-status.enum.js +18 -0
  22. package/dist/cjs/modules/tracking/enums/tracking-unit-online-status.enum.js.map +1 -0
  23. package/dist/cjs/modules/tracking/index.js +40 -0
  24. package/dist/cjs/modules/tracking/index.js.map +1 -0
  25. package/dist/cjs/modules/tracking/interfaces/response-unit-lifecycle-events.js +3 -0
  26. package/dist/cjs/modules/tracking/interfaces/response-unit-lifecycle-events.js.map +1 -0
  27. package/dist/cjs/modules/tracking/interfaces/response-unit-position-event-v1.js +3 -0
  28. package/dist/cjs/modules/tracking/interfaces/response-unit-position-event-v1.js.map +1 -0
  29. package/dist/cjs/modules/tracking/interfaces/response-unit-status-event-v1.js +3 -0
  30. package/dist/cjs/modules/tracking/interfaces/response-unit-status-event-v1.js.map +1 -0
  31. package/dist/cjs/modules/tracking/interfaces/tracking-device-unmapped-event-v1.js +3 -0
  32. package/dist/cjs/modules/tracking/interfaces/tracking-device-unmapped-event-v1.js.map +1 -0
  33. package/dist/cjs/modules/tracking/interfaces/tracking-ingestion-error-event-v1.js +3 -0
  34. package/dist/cjs/modules/tracking/interfaces/tracking-ingestion-error-event-v1.js.map +1 -0
  35. package/dist/cjs/modules/tracking/interfaces/tracking-position-quality-flags.js +3 -0
  36. package/dist/cjs/modules/tracking/interfaces/tracking-position-quality-flags.js.map +1 -0
  37. package/dist/cjs/modules/tracking/interfaces/tracking-provider-health-event-v1.js +3 -0
  38. package/dist/cjs/modules/tracking/interfaces/tracking-provider-health-event-v1.js.map +1 -0
  39. package/dist/cjs/modules/tracking/interfaces/tracking-realtime-envelope.js +3 -0
  40. package/dist/cjs/modules/tracking/interfaces/tracking-realtime-envelope.js.map +1 -0
  41. package/dist/cjs/modules/tracking/interfaces/tracking-socket-payloads.js +3 -0
  42. package/dist/cjs/modules/tracking/interfaces/tracking-socket-payloads.js.map +1 -0
  43. package/dist/cjs/modules/tracking/interfaces/tracking-unit-current-state.js +3 -0
  44. package/dist/cjs/modules/tracking/interfaces/tracking-unit-current-state.js.map +1 -0
  45. package/dist/cjs/modules/tracking/utils/tracking-event-id.util.js +31 -0
  46. package/dist/cjs/modules/tracking/utils/tracking-event-id.util.js.map +1 -0
  47. package/dist/cjs/modules/tracking/utils/tracking-validation.util.js +101 -0
  48. package/dist/cjs/modules/tracking/utils/tracking-validation.util.js.map +1 -0
  49. package/dist/esm/index.js +1 -0
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/kafka/topics.js +13 -0
  52. package/dist/esm/kafka/topics.js.map +1 -1
  53. package/dist/esm/modules/common/constants/service.const.js +1 -0
  54. package/dist/esm/modules/common/constants/service.const.js.map +1 -1
  55. package/dist/esm/modules/socket/enums/redis-channel-name.enum.js +1 -0
  56. package/dist/esm/modules/socket/enums/redis-channel-name.enum.js.map +1 -1
  57. package/dist/esm/modules/socket/enums/socket-event-name.enum.js +5 -0
  58. package/dist/esm/modules/socket/enums/socket-event-name.enum.js.map +1 -1
  59. package/dist/esm/modules/tracking/constants/tracking-kafka.const.js +45 -0
  60. package/dist/esm/modules/tracking/constants/tracking-kafka.const.js.map +1 -0
  61. package/dist/esm/modules/tracking/enums/tracking-connection-status.enum.js +24 -0
  62. package/dist/esm/modules/tracking/enums/tracking-connection-status.enum.js.map +1 -0
  63. package/dist/esm/modules/tracking/enums/tracking-event-quality.enum.js +19 -0
  64. package/dist/esm/modules/tracking/enums/tracking-event-quality.enum.js.map +1 -0
  65. package/dist/esm/modules/tracking/enums/tracking-provider-code.enum.js +25 -0
  66. package/dist/esm/modules/tracking/enums/tracking-provider-code.enum.js.map +1 -0
  67. package/dist/esm/modules/tracking/enums/tracking-transport-type.enum.js +19 -0
  68. package/dist/esm/modules/tracking/enums/tracking-transport-type.enum.js.map +1 -0
  69. package/dist/esm/modules/tracking/enums/tracking-unit-online-status.enum.js +15 -0
  70. package/dist/esm/modules/tracking/enums/tracking-unit-online-status.enum.js.map +1 -0
  71. package/dist/esm/modules/tracking/index.js +24 -0
  72. package/dist/esm/modules/tracking/index.js.map +1 -0
  73. package/dist/esm/modules/tracking/interfaces/response-unit-lifecycle-events.js +2 -0
  74. package/dist/esm/modules/tracking/interfaces/response-unit-lifecycle-events.js.map +1 -0
  75. package/dist/esm/modules/tracking/interfaces/response-unit-position-event-v1.js +2 -0
  76. package/dist/esm/modules/tracking/interfaces/response-unit-position-event-v1.js.map +1 -0
  77. package/dist/esm/modules/tracking/interfaces/response-unit-status-event-v1.js +2 -0
  78. package/dist/esm/modules/tracking/interfaces/response-unit-status-event-v1.js.map +1 -0
  79. package/dist/esm/modules/tracking/interfaces/tracking-device-unmapped-event-v1.js +2 -0
  80. package/dist/esm/modules/tracking/interfaces/tracking-device-unmapped-event-v1.js.map +1 -0
  81. package/dist/esm/modules/tracking/interfaces/tracking-ingestion-error-event-v1.js +2 -0
  82. package/dist/esm/modules/tracking/interfaces/tracking-ingestion-error-event-v1.js.map +1 -0
  83. package/dist/esm/modules/tracking/interfaces/tracking-position-quality-flags.js +2 -0
  84. package/dist/esm/modules/tracking/interfaces/tracking-position-quality-flags.js.map +1 -0
  85. package/dist/esm/modules/tracking/interfaces/tracking-provider-health-event-v1.js +2 -0
  86. package/dist/esm/modules/tracking/interfaces/tracking-provider-health-event-v1.js.map +1 -0
  87. package/dist/esm/modules/tracking/interfaces/tracking-realtime-envelope.js +2 -0
  88. package/dist/esm/modules/tracking/interfaces/tracking-realtime-envelope.js.map +1 -0
  89. package/dist/esm/modules/tracking/interfaces/tracking-socket-payloads.js +2 -0
  90. package/dist/esm/modules/tracking/interfaces/tracking-socket-payloads.js.map +1 -0
  91. package/dist/esm/modules/tracking/interfaces/tracking-unit-current-state.js +2 -0
  92. package/dist/esm/modules/tracking/interfaces/tracking-unit-current-state.js.map +1 -0
  93. package/dist/esm/modules/tracking/utils/tracking-event-id.util.js +27 -0
  94. package/dist/esm/modules/tracking/utils/tracking-event-id.util.js.map +1 -0
  95. package/dist/esm/modules/tracking/utils/tracking-validation.util.js +93 -0
  96. package/dist/esm/modules/tracking/utils/tracking-validation.util.js.map +1 -0
  97. package/dist/types/index.d.ts +1 -0
  98. package/dist/types/kafka/topics.d.ts +10 -0
  99. package/dist/types/modules/common/constants/service.const.d.ts +4 -0
  100. package/dist/types/modules/socket/enums/redis-channel-name.enum.d.ts +2 -1
  101. package/dist/types/modules/socket/enums/socket-event-name.enum.d.ts +5 -1
  102. package/dist/types/modules/tracking/constants/tracking-kafka.const.d.ts +43 -0
  103. package/dist/types/modules/tracking/enums/tracking-connection-status.enum.d.ts +22 -0
  104. package/dist/types/modules/tracking/enums/tracking-event-quality.enum.d.ts +17 -0
  105. package/dist/types/modules/tracking/enums/tracking-provider-code.enum.d.ts +23 -0
  106. package/dist/types/modules/tracking/enums/tracking-transport-type.enum.d.ts +17 -0
  107. package/dist/types/modules/tracking/enums/tracking-unit-online-status.enum.d.ts +13 -0
  108. package/dist/types/modules/tracking/index.d.ts +18 -0
  109. package/dist/types/modules/tracking/interfaces/response-unit-lifecycle-events.d.ts +48 -0
  110. package/dist/types/modules/tracking/interfaces/response-unit-position-event-v1.d.ts +62 -0
  111. package/dist/types/modules/tracking/interfaces/response-unit-status-event-v1.d.ts +23 -0
  112. package/dist/types/modules/tracking/interfaces/tracking-device-unmapped-event-v1.d.ts +25 -0
  113. package/dist/types/modules/tracking/interfaces/tracking-ingestion-error-event-v1.d.ts +27 -0
  114. package/dist/types/modules/tracking/interfaces/tracking-position-quality-flags.d.ts +22 -0
  115. package/dist/types/modules/tracking/interfaces/tracking-provider-health-event-v1.d.ts +27 -0
  116. package/dist/types/modules/tracking/interfaces/tracking-realtime-envelope.d.ts +32 -0
  117. package/dist/types/modules/tracking/interfaces/tracking-socket-payloads.d.ts +53 -0
  118. package/dist/types/modules/tracking/interfaces/tracking-unit-current-state.d.ts +27 -0
  119. package/dist/types/modules/tracking/utils/tracking-event-id.util.d.ts +27 -0
  120. package/dist/types/modules/tracking/utils/tracking-validation.util.d.ts +40 -0
  121. package/package.json +70 -70
@@ -53,5 +53,18 @@ export const KAFKA_TOPICS = {
53
53
  NEWSFEED_COMMENT_CREATED: 'newsfeed.comment.created',
54
54
  NEWSFEED_COMMENT_UPDATED: 'newsfeed.comment.updated',
55
55
  NEWSFEED_COMMENT_DELETED: 'newsfeed.comment.deleted',
56
+ // Response-unit tracking (clarion-response-tracking) — versioned
57
+ TRACKING_POSITION: 'tracking.response-unit.position.v1',
58
+ TRACKING_STATUS: 'tracking.response-unit.status.v1',
59
+ TRACKING_PROVIDER_HEALTH: 'tracking.provider.health.v1',
60
+ TRACKING_DEVICE_UNMAPPED: 'tracking.device.unmapped.v1',
61
+ TRACKING_INGESTION_ERROR: 'tracking.ingestion.error.v1',
62
+ // Organization response-unit lifecycle (producer: clarion-organization;
63
+ // consumer: clarion-response-tracking projection) — versioned.
64
+ ORG_RESPONSE_UNIT_CREATED: 'organization.response-unit.created.v1',
65
+ ORG_RESPONSE_UNIT_UPDATED: 'organization.response-unit.updated.v1',
66
+ ORG_RESPONSE_UNIT_DELETED: 'organization.response-unit.deleted.v1',
67
+ ORG_RESPONSE_UNIT_CONTROL_CENTRE_CHANGED: 'organization.response-unit.control-centre-changed.v1',
68
+ ORG_RESPONSE_UNIT_STATUS_CHANGED: 'organization.response-unit.status-changed.v1',
56
69
  };
57
70
  //# sourceMappingURL=topics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../../src/kafka/topics.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,OAAO;IACP,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,6BAA6B,EAAE,+BAA+B;IAC9D,6BAA6B,EAAE,+BAA+B;IAC9D,OAAO;IACP,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,MAAM;IACN,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,MAAM;IACN,YAAY,EAAE,eAAe;IAC7B,aAAa,EAAE,eAAe;IAC9B,WAAW;IACX,cAAc,EAAE,gBAAgB;IAChC,WAAW;IACX,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,uBAAuB,EAAE,yBAAyB;IAClD,sBAAsB,EAAE,wBAAwB;IAChD,yBAAyB,EAAE,2BAA2B;IACtD,wBAAwB,EAAE,0BAA0B;IACpD,0BAA0B,EAAE,4BAA4B;IACxD,sBAAsB,EAAE,wBAAwB;IAChD,iBAAiB,EAAE,mBAAmB;IACtC,2BAA2B,EAAE,6BAA6B;IAC1D,yCAAyC,EAAE,2CAA2C;IACtF,OAAO;IACP,oBAAoB,EAAE,sBAAsB;IAC5C,yBAAyB,EAAE,2BAA2B;IACtD,qBAAqB,EAAE,uBAAuB;IAC9C,OAAO;IACP,YAAY,EAAE,cAAc;IAC5B,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,OAAO;IACP,iBAAiB,EAAE,mBAAmB;IACtC,oBAAoB,EAAE,sBAAsB;IAC5C,WAAW;IACX,qBAAqB,EAAE,uBAAuB;IAC9C,uBAAuB,EAAE,yBAAyB;IAClD,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,qBAAqB,EAAE,uBAAuB;IAC9C,mBAAmB,EAAE,qBAAqB;IAC1C,qBAAqB,EAAE,uBAAuB;IAC9C,oBAAoB,EAAE,sBAAsB;IAC5C,wBAAwB,EAAE,0BAA0B;IACpD,wBAAwB,EAAE,0BAA0B;IACpD,wBAAwB,EAAE,0BAA0B;CACvD,CAAC"}
1
+ {"version":3,"file":"topics.js","sourceRoot":"","sources":["../../../src/kafka/topics.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IACxB,OAAO;IACP,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,6BAA6B,EAAE,+BAA+B;IAC9D,6BAA6B,EAAE,+BAA+B;IAC9D,OAAO;IACP,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,YAAY,EAAE,cAAc;IAC5B,MAAM;IACN,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,MAAM;IACN,YAAY,EAAE,eAAe;IAC7B,aAAa,EAAE,eAAe;IAC9B,WAAW;IACX,cAAc,EAAE,gBAAgB;IAChC,WAAW;IACX,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,uBAAuB,EAAE,yBAAyB;IAClD,sBAAsB,EAAE,wBAAwB;IAChD,yBAAyB,EAAE,2BAA2B;IACtD,wBAAwB,EAAE,0BAA0B;IACpD,0BAA0B,EAAE,4BAA4B;IACxD,sBAAsB,EAAE,wBAAwB;IAChD,iBAAiB,EAAE,mBAAmB;IACtC,2BAA2B,EAAE,6BAA6B;IAC1D,yCAAyC,EAAE,2CAA2C;IACtF,OAAO;IACP,oBAAoB,EAAE,sBAAsB;IAC5C,yBAAyB,EAAE,2BAA2B;IACtD,qBAAqB,EAAE,uBAAuB;IAC9C,OAAO;IACP,YAAY,EAAE,cAAc;IAC5B,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,OAAO;IACP,iBAAiB,EAAE,mBAAmB;IACtC,oBAAoB,EAAE,sBAAsB;IAC5C,WAAW;IACX,qBAAqB,EAAE,uBAAuB;IAC9C,uBAAuB,EAAE,yBAAyB;IAClD,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,qBAAqB,EAAE,uBAAuB;IAC9C,mBAAmB,EAAE,qBAAqB;IAC1C,qBAAqB,EAAE,uBAAuB;IAC9C,oBAAoB,EAAE,sBAAsB;IAC5C,wBAAwB,EAAE,0BAA0B;IACpD,wBAAwB,EAAE,0BAA0B;IACpD,wBAAwB,EAAE,0BAA0B;IACpD,iEAAiE;IACjE,iBAAiB,EAAE,oCAAoC;IACvD,eAAe,EAAE,kCAAkC;IACnD,wBAAwB,EAAE,6BAA6B;IACvD,wBAAwB,EAAE,6BAA6B;IACvD,wBAAwB,EAAE,6BAA6B;IACvD,wEAAwE;IACxE,+DAA+D;IAC/D,yBAAyB,EAAE,uCAAuC;IAClE,yBAAyB,EAAE,uCAAuC;IAClE,yBAAyB,EAAE,uCAAuC;IAClE,wCAAwC,EACpC,sDAAsD;IAC1D,gCAAgC,EAAE,8CAA8C;CACnF,CAAC"}
@@ -13,5 +13,6 @@ export const SERVICE_CONSTS = {
13
13
  CALL_SERVICE: { name: 'call-service', port: 3011 },
14
14
  BILLING_SERVICE: { name: 'billing-service', port: 3012 },
15
15
  NEWSFEED_SERVICE: { name: 'newsfeed-service', port: 3015 },
16
+ RESPONSE_TRACKING_SERVICE: { name: 'response-tracking-service', port: 3016 },
16
17
  };
17
18
  //# sourceMappingURL=service.const.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.const.js","sourceRoot":"","sources":["../../../../../src/modules/common/constants/service.const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;IAClD,oBAAoB,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE;IAClE,gBAAgB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1D,oBAAoB,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE;IAClE,wBAAwB,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1E,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;IAChD,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;IAChD,eAAe,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE;IACxD,cAAc,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE;IACtD,YAAY,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;IAClD,YAAY,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;IAClD,eAAe,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE;IACxD,gBAAgB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE;CAC7D,CAAC"}
1
+ {"version":3,"file":"service.const.js","sourceRoot":"","sources":["../../../../../src/modules/common/constants/service.const.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC1B,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;IAChD,YAAY,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;IAClD,oBAAoB,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE;IAClE,gBAAgB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1D,oBAAoB,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,EAAE;IAClE,wBAAwB,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1E,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;IAChD,WAAW,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;IAChD,eAAe,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE;IACxD,cAAc,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE;IACtD,YAAY,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;IAClD,YAAY,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE;IAClD,eAAe,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE;IACxD,gBAAgB,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAAE;IAC1D,yBAAyB,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,IAAI,EAAE;CAC/E,CAAC"}
@@ -5,5 +5,6 @@ export var RedisChannelName;
5
5
  RedisChannelName["PUSH_NOTIFICATIONS"] = "realtime:push-notifications";
6
6
  RedisChannelName["TASKS"] = "realtime:tasks";
7
7
  RedisChannelName["NEWSFEED"] = "realtime:newsfeed";
8
+ RedisChannelName["TRACKING"] = "realtime:tracking";
8
9
  })(RedisChannelName || (RedisChannelName = {}));
9
10
  //# sourceMappingURL=redis-channel-name.enum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redis-channel-name.enum.js","sourceRoot":"","sources":["../../../../../src/modules/socket/enums/redis-channel-name.enum.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,gBAMX;AAND,WAAY,gBAAgB;IACxB,oDAAgC,CAAA;IAChC,oEAAgD,CAAA;IAChD,sEAAkD,CAAA;IAClD,4CAAwB,CAAA;IACxB,kDAA8B,CAAA;AAClC,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,QAM3B"}
1
+ {"version":3,"file":"redis-channel-name.enum.js","sourceRoot":"","sources":["../../../../../src/modules/socket/enums/redis-channel-name.enum.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IACxB,oDAAgC,CAAA;IAChC,oEAAgD,CAAA;IAChD,sEAAkD,CAAA;IAClD,4CAAwB,CAAA;IACxB,kDAA8B,CAAA;IAC9B,kDAA8B,CAAA;AAClC,CAAC,EAPW,gBAAgB,KAAhB,gBAAgB,QAO3B"}
@@ -6,5 +6,10 @@ export var SocketEventName;
6
6
  SocketEventName["TASK_EVENT"] = "task.event";
7
7
  SocketEventName["TRIP_EVENT"] = "trip.event";
8
8
  SocketEventName["NEWSFEED_EVENT"] = "newsfeed.event";
9
+ // Response-unit tracking (clarion-response-tracking → clarion-socket)
10
+ SocketEventName["TRACKING_POSITION"] = "tracking:position";
11
+ SocketEventName["TRACKING_STATUS"] = "tracking:status";
12
+ SocketEventName["TRACKING_REMOVED"] = "tracking:removed";
13
+ SocketEventName["TRACKING_PROVIDER_HEALTH"] = "tracking:provider-health";
9
14
  })(SocketEventName || (SocketEventName = {}));
10
15
  //# sourceMappingURL=socket-event-name.enum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"socket-event-name.enum.js","sourceRoot":"","sources":["../../../../../src/modules/socket/enums/socket-event-name.enum.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IACvB,oDAAiC,CAAA;IACjC,mEAAgD,CAAA;IAChD,qEAAkD,CAAA;IAClD,4CAAyB,CAAA;IACzB,4CAAyB,CAAA;IACzB,oDAAiC,CAAA;AACrC,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B"}
1
+ {"version":3,"file":"socket-event-name.enum.js","sourceRoot":"","sources":["../../../../../src/modules/socket/enums/socket-event-name.enum.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,eAYX;AAZD,WAAY,eAAe;IACvB,oDAAiC,CAAA;IACjC,mEAAgD,CAAA;IAChD,qEAAkD,CAAA;IAClD,4CAAyB,CAAA;IACzB,4CAAyB,CAAA;IACzB,oDAAiC,CAAA;IACjC,sEAAsE;IACtE,0DAAuC,CAAA;IACvC,sDAAmC,CAAA;IACnC,wDAAqC,CAAA;IACrC,wEAAqD,CAAA;AACzD,CAAC,EAZW,eAAe,KAAf,eAAe,QAY1B"}
@@ -0,0 +1,45 @@
1
+ import { KAFKA_TOPICS } from '../../../kafka/topics';
2
+ /**
3
+ * Grouped, typed view of the tracking Kafka topics. The canonical string values
4
+ * live in {@link KAFKA_TOPICS} (alongside every other domain's topics); this
5
+ * object references them so there is a single source of truth and no drift.
6
+ *
7
+ * Producer: clarion-response-tracking (connector-worker → POSITION, DEVICE_UNMAPPED,
8
+ * PROVIDER_HEALTH, INGESTION_ERROR; projector → STATUS).
9
+ * Consumers: clarion-response-tracking (projector) for POSITION/STATUS.
10
+ */
11
+ export const TRACKING_KAFKA_TOPICS = {
12
+ POSITION: KAFKA_TOPICS.TRACKING_POSITION,
13
+ STATUS: KAFKA_TOPICS.TRACKING_STATUS,
14
+ PROVIDER_HEALTH: KAFKA_TOPICS.TRACKING_PROVIDER_HEALTH,
15
+ DEVICE_UNMAPPED: KAFKA_TOPICS.TRACKING_DEVICE_UNMAPPED,
16
+ INGESTION_ERROR: KAFKA_TOPICS.TRACKING_INGESTION_ERROR,
17
+ };
18
+ /**
19
+ * Response-unit lifecycle topics. Producer: clarion-organization. Consumer:
20
+ * clarion-response-tracking projection. Single source of truth = {@link KAFKA_TOPICS}.
21
+ */
22
+ export const ORG_RESPONSE_UNIT_TOPICS = {
23
+ CREATED: KAFKA_TOPICS.ORG_RESPONSE_UNIT_CREATED,
24
+ UPDATED: KAFKA_TOPICS.ORG_RESPONSE_UNIT_UPDATED,
25
+ DELETED: KAFKA_TOPICS.ORG_RESPONSE_UNIT_DELETED,
26
+ CONTROL_CENTRE_CHANGED: KAFKA_TOPICS.ORG_RESPONSE_UNIT_CONTROL_CENTRE_CHANGED,
27
+ STATUS_CHANGED: KAFKA_TOPICS.ORG_RESPONSE_UNIT_STATUS_CHANGED,
28
+ };
29
+ /**
30
+ * Consumer group ids for tracking consumers. Distinct groups keep each concern's
31
+ * offsets independent and let projector replicas share partitions safely.
32
+ */
33
+ export const TRACKING_CONSUMER_GROUPS = {
34
+ /** clarion-response-tracking projector: history + current-state + status. */
35
+ PROJECTOR: 'response-tracking-projector-consumer',
36
+ };
37
+ /**
38
+ * Redis pub/sub channel clarion-response-tracking publishes client-safe tracking
39
+ * envelopes to, and clarion-socket subscribes to for fan-out. Mirrors the
40
+ * `realtime:*` channel convention in {@link RedisChannelName}.
41
+ */
42
+ export const TRACKING_REALTIME_CHANNEL = 'realtime:tracking';
43
+ /** Current schema version for all Tracking*EventV1 contracts. */
44
+ export const TRACKING_SCHEMA_VERSION = 1;
45
+ //# sourceMappingURL=tracking-kafka.const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-kafka.const.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/constants/tracking-kafka.const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACjC,QAAQ,EAAE,YAAY,CAAC,iBAAiB;IACxC,MAAM,EAAE,YAAY,CAAC,eAAe;IACpC,eAAe,EAAE,YAAY,CAAC,wBAAwB;IACtD,eAAe,EAAE,YAAY,CAAC,wBAAwB;IACtD,eAAe,EAAE,YAAY,CAAC,wBAAwB;CAChD,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,OAAO,EAAE,YAAY,CAAC,yBAAyB;IAC/C,OAAO,EAAE,YAAY,CAAC,yBAAyB;IAC/C,OAAO,EAAE,YAAY,CAAC,yBAAyB;IAC/C,sBAAsB,EAAE,YAAY,CAAC,wCAAwC;IAC7E,cAAc,EAAE,YAAY,CAAC,gCAAgC;CACvD,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACpC,6EAA6E;IAC7E,SAAS,EAAE,sCAAsC;CAC3C,CAAC;AAEX;;;;GAIG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAC;AAE7D,iEAAiE;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAU,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Lifecycle state of a provider connection as observed by the connector worker.
3
+ * Surfaced in provider-health events and the provider-connection REST resource.
4
+ */
5
+ export var TrackingConnectionStatus;
6
+ (function (TrackingConnectionStatus) {
7
+ /** Administratively disabled — the worker will not attempt to connect. */
8
+ TrackingConnectionStatus["DISABLED"] = "DISABLED";
9
+ /** Not currently connected (idle, or between reconnect attempts). */
10
+ TrackingConnectionStatus["DISCONNECTED"] = "DISCONNECTED";
11
+ /** Transport handshake in progress. */
12
+ TrackingConnectionStatus["CONNECTING"] = "CONNECTING";
13
+ /** Transport is up; provider authentication / subscription in progress. */
14
+ TrackingConnectionStatus["AUTHENTICATING"] = "AUTHENTICATING";
15
+ /** Authenticated, subscribed and receiving (or ready to receive) telemetry. */
16
+ TrackingConnectionStatus["CONNECTED"] = "CONNECTED";
17
+ /** Connected but unhealthy (e.g. no telemetry for longer than expected). */
18
+ TrackingConnectionStatus["DEGRADED"] = "DEGRADED";
19
+ /** Provider rejected the credentials — a config problem, not a network blip. */
20
+ TrackingConnectionStatus["AUTHENTICATION_FAILED"] = "AUTHENTICATION_FAILED";
21
+ /** Non-auth error state (transport failure, protocol error, etc.). */
22
+ TrackingConnectionStatus["ERROR"] = "ERROR";
23
+ })(TrackingConnectionStatus || (TrackingConnectionStatus = {}));
24
+ //# sourceMappingURL=tracking-connection-status.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-connection-status.enum.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/enums/tracking-connection-status.enum.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAN,IAAY,wBAiBX;AAjBD,WAAY,wBAAwB;IAChC,0EAA0E;IAC1E,iDAAqB,CAAA;IACrB,qEAAqE;IACrE,yDAA6B,CAAA;IAC7B,uCAAuC;IACvC,qDAAyB,CAAA;IACzB,2EAA2E;IAC3E,6DAAiC,CAAA;IACjC,+EAA+E;IAC/E,mDAAuB,CAAA;IACvB,4EAA4E;IAC5E,iDAAqB,CAAA;IACrB,gFAAgF;IAChF,2EAA+C,CAAA;IAC/C,sEAAsE;IACtE,2CAAe,CAAA;AACnB,CAAC,EAjBW,wBAAwB,KAAxB,wBAAwB,QAiBnC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Coarse classification of an ingested location, used for diagnostics and to
3
+ * decide whether an event updates current state (only fresh, in-order, valid
4
+ * events do). Fine-grained booleans live in {@link TrackingPositionQualityFlags}.
5
+ */
6
+ export var TrackingEventQuality;
7
+ (function (TrackingEventQuality) {
8
+ /** Valid, fresh and in order. */
9
+ TrackingEventQuality["GOOD"] = "GOOD";
10
+ /** Already seen (same deterministic eventId). */
11
+ TrackingEventQuality["DUPLICATE"] = "DUPLICATE";
12
+ /** Older than the current state for this unit. */
13
+ TrackingEventQuality["OUT_OF_ORDER"] = "OUT_OF_ORDER";
14
+ /** Coordinates outside the valid WGS84 range. */
15
+ TrackingEventQuality["INVALID_COORDINATES"] = "INVALID_COORDINATES";
16
+ /** Timestamp missing, unparseable, or outside the accepted tolerance. */
17
+ TrackingEventQuality["INVALID_TIMESTAMP"] = "INVALID_TIMESTAMP";
18
+ })(TrackingEventQuality || (TrackingEventQuality = {}));
19
+ //# sourceMappingURL=tracking-event-quality.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-event-quality.enum.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/enums/tracking-event-quality.enum.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAN,IAAY,oBAWX;AAXD,WAAY,oBAAoB;IAC5B,iCAAiC;IACjC,qCAAa,CAAA;IACb,iDAAiD;IACjD,+CAAuB,CAAA;IACvB,kDAAkD;IAClD,qDAA6B,CAAA;IAC7B,iDAAiD;IACjD,mEAA2C,CAAA;IAC3C,yEAAyE;IACzE,+DAAuC,CAAA;AAC3C,CAAC,EAXW,oBAAoB,KAApB,oBAAoB,QAW/B"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Identifies the third-party tracking platform a provider connection integrates
3
+ * with. Provider-neutral: the core ingestion pipeline, tenant model, device
4
+ * bindings and canonical events never branch on a specific provider — only the
5
+ * per-provider adapter inside clarion-response-tracking understands the raw
6
+ * wire format.
7
+ *
8
+ * Only {@link TrackingProviderCode.TELOX} has a working adapter in Phase 1. The
9
+ * remaining values are reserved so future adapters can be added without changing
10
+ * the shared contracts, database columns or Kafka events.
11
+ */
12
+ export var TrackingProviderCode;
13
+ (function (TrackingProviderCode) {
14
+ /** Telox WebSocket platform (G4S Phase 1 integration). */
15
+ TrackingProviderCode["TELOX"] = "TELOX";
16
+ /** Wialon (reserved — not implemented in Phase 1). */
17
+ TrackingProviderCode["WIALON"] = "WIALON";
18
+ /** Teltonika direct device ingestion (reserved — not implemented in Phase 1). */
19
+ TrackingProviderCode["TELTONIKA"] = "TELTONIKA";
20
+ /** Generic WebSocket adapter (reserved). */
21
+ TrackingProviderCode["GENERIC_WEBSOCKET"] = "GENERIC_WEBSOCKET";
22
+ /** Generic HTTP polling adapter (reserved). */
23
+ TrackingProviderCode["GENERIC_HTTP_POLLING"] = "GENERIC_HTTP_POLLING";
24
+ })(TrackingProviderCode || (TrackingProviderCode = {}));
25
+ //# sourceMappingURL=tracking-provider-code.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-provider-code.enum.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/enums/tracking-provider-code.enum.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAN,IAAY,oBAWX;AAXD,WAAY,oBAAoB;IAC5B,0DAA0D;IAC1D,uCAAe,CAAA;IACf,sDAAsD;IACtD,yCAAiB,CAAA;IACjB,iFAAiF;IACjF,+CAAuB,CAAA;IACvB,4CAA4C;IAC5C,+DAAuC,CAAA;IACvC,+CAA+C;IAC/C,qEAA6C,CAAA;AACjD,CAAC,EAXW,oBAAoB,KAApB,oBAAoB,QAW/B"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * How a provider connection physically transports telemetry into
3
+ * clarion-response-tracking. Phase 1 implements only {@link WEBSOCKET} (Telox);
4
+ * the remaining values are reserved for future adapters.
5
+ */
6
+ export var TrackingTransportType;
7
+ (function (TrackingTransportType) {
8
+ /** Outbound WebSocket client maintained by the connector worker (Telox). */
9
+ TrackingTransportType["WEBSOCKET"] = "WEBSOCKET";
10
+ /** Outbound HTTP polling loop. */
11
+ TrackingTransportType["HTTP_POLLING"] = "HTTP_POLLING";
12
+ /** Inbound TCP listener (direct device ingestion). */
13
+ TrackingTransportType["TCP"] = "TCP";
14
+ /** Inbound UDP listener (direct device ingestion). */
15
+ TrackingTransportType["UDP"] = "UDP";
16
+ /** MQTT subscription. */
17
+ TrackingTransportType["MQTT"] = "MQTT";
18
+ })(TrackingTransportType || (TrackingTransportType = {}));
19
+ //# sourceMappingURL=tracking-transport-type.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-transport-type.enum.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/enums/tracking-transport-type.enum.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAN,IAAY,qBAWX;AAXD,WAAY,qBAAqB;IAC7B,4EAA4E;IAC5E,gDAAuB,CAAA;IACvB,kCAAkC;IAClC,sDAA6B,CAAA;IAC7B,sDAAsD;IACtD,oCAAW,CAAA;IACX,sDAAsD;IACtD,oCAAW,CAAA;IACX,yBAAyB;IACzB,sCAAa,CAAA;AACjB,CAAC,EAXW,qBAAqB,KAArB,qBAAqB,QAWhC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Freshness of a response unit's last known position, derived by the projector's
3
+ * scheduled status evaluator from the gap between "now" and the last event time,
4
+ * using per-connection stale/offline thresholds.
5
+ */
6
+ export var TrackingUnitOnlineStatus;
7
+ (function (TrackingUnitOnlineStatus) {
8
+ /** Reporting within the configured stale threshold. */
9
+ TrackingUnitOnlineStatus["ONLINE"] = "ONLINE";
10
+ /** No update within the stale threshold but within the offline threshold. */
11
+ TrackingUnitOnlineStatus["STALE"] = "STALE";
12
+ /** No update within the offline threshold. */
13
+ TrackingUnitOnlineStatus["OFFLINE"] = "OFFLINE";
14
+ })(TrackingUnitOnlineStatus || (TrackingUnitOnlineStatus = {}));
15
+ //# sourceMappingURL=tracking-unit-online-status.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-unit-online-status.enum.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/enums/tracking-unit-online-status.enum.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAN,IAAY,wBAOX;AAPD,WAAY,wBAAwB;IAChC,uDAAuD;IACvD,6CAAiB,CAAA;IACjB,6EAA6E;IAC7E,2CAAe,CAAA;IACf,8CAA8C;IAC9C,+CAAmB,CAAA;AACvB,CAAC,EAPW,wBAAwB,KAAxB,wBAAwB,QAOnC"}
@@ -0,0 +1,24 @@
1
+ // Enums
2
+ export * from './enums/tracking-provider-code.enum';
3
+ export * from './enums/tracking-transport-type.enum';
4
+ export * from './enums/tracking-connection-status.enum';
5
+ export * from './enums/tracking-unit-online-status.enum';
6
+ export * from './enums/tracking-event-quality.enum';
7
+ // Interfaces — canonical Kafka event contracts
8
+ export * from './interfaces/tracking-position-quality-flags';
9
+ export * from './interfaces/response-unit-position-event-v1';
10
+ export * from './interfaces/response-unit-status-event-v1';
11
+ export * from './interfaces/tracking-provider-health-event-v1';
12
+ export * from './interfaces/tracking-device-unmapped-event-v1';
13
+ export * from './interfaces/tracking-ingestion-error-event-v1';
14
+ export * from './interfaces/response-unit-lifecycle-events';
15
+ // Interfaces — projections & realtime delivery
16
+ export * from './interfaces/tracking-unit-current-state';
17
+ export * from './interfaces/tracking-socket-payloads';
18
+ export * from './interfaces/tracking-realtime-envelope';
19
+ // Constants
20
+ export * from './constants/tracking-kafka.const';
21
+ // Utilities
22
+ export * from './utils/tracking-event-id.util';
23
+ export * from './utils/tracking-validation.util';
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/tracking/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,qCAAqC,CAAC;AACpD,cAAc,sCAAsC,CAAC;AACrD,cAAc,yCAAyC,CAAC;AACxD,cAAc,0CAA0C,CAAC;AACzD,cAAc,qCAAqC,CAAC;AAEpD,+CAA+C;AAC/C,cAAc,8CAA8C,CAAC;AAC7D,cAAc,8CAA8C,CAAC;AAC7D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,6CAA6C,CAAC;AAE5D,+CAA+C;AAC/C,cAAc,0CAA0C,CAAC;AACzD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AAExD,YAAY;AACZ,cAAc,kCAAkC,CAAC;AAEjD,YAAY;AACZ,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=response-unit-lifecycle-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-unit-lifecycle-events.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/interfaces/response-unit-lifecycle-events.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=response-unit-position-event-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-unit-position-event-v1.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/interfaces/response-unit-position-event-v1.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=response-unit-status-event-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-unit-status-event-v1.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/interfaces/response-unit-status-event-v1.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tracking-device-unmapped-event-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-device-unmapped-event-v1.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/interfaces/tracking-device-unmapped-event-v1.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tracking-ingestion-error-event-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-ingestion-error-event-v1.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/interfaces/tracking-ingestion-error-event-v1.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tracking-position-quality-flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-position-quality-flags.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/interfaces/tracking-position-quality-flags.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tracking-provider-health-event-v1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-provider-health-event-v1.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/interfaces/tracking-provider-health-event-v1.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tracking-realtime-envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-realtime-envelope.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/interfaces/tracking-realtime-envelope.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tracking-socket-payloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-socket-payloads.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/interfaces/tracking-socket-payloads.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tracking-unit-current-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-unit-current-state.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/interfaces/tracking-unit-current-state.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { createHash } from 'node:crypto';
2
+ /**
3
+ * Build a deterministic tracking event id (sha256 hex) from stable fix inputs.
4
+ *
5
+ * Coordinates are quantized to 6 decimal places (~0.11 m) so floating-point
6
+ * representation differences across services never split one physical fix into
7
+ * two ids. Epoch seconds are truncated to whole seconds.
8
+ */
9
+ export function buildTrackingEventId(parts) {
10
+ const canonical = [
11
+ parts.providerConnectionId,
12
+ parts.externalUnitId,
13
+ Math.trunc(parts.eventEpochSeconds),
14
+ parts.latitude.toFixed(6),
15
+ parts.longitude.toFixed(6),
16
+ ].join('|');
17
+ return createHash('sha256').update(canonical).digest('hex');
18
+ }
19
+ /**
20
+ * Kafka partition key for position/status events. Keying by
21
+ * `{organizationId}:{controlCentreId}:{responseUnitId}` guarantees per-unit
22
+ * ordering within a partition. Never use a random key for these events.
23
+ */
24
+ export function buildTrackingPartitionKey(organizationId, controlCentreId, responseUnitId) {
25
+ return `${organizationId}:${controlCentreId}:${responseUnitId}`;
26
+ }
27
+ //# sourceMappingURL=tracking-event-id.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-event-id.util.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/utils/tracking-event-id.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAgBzC;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAA2B;IAC5D,MAAM,SAAS,GAAG;QACd,KAAK,CAAC,oBAAoB;QAC1B,KAAK,CAAC,cAAc;QACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC;QACnC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACzB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;KAC7B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACrC,cAAsB,EACtB,eAAuB,EACvB,cAAsB;IAEtB,OAAO,GAAG,cAAc,IAAI,eAAe,IAAI,cAAc,EAAE,CAAC;AACpE,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Provider-neutral validation/normalization helpers shared by the ingestion
3
+ * pipeline (and reusable by tests). No provider-specific field names appear here.
4
+ */
5
+ /** WGS84 latitude range check. */
6
+ export function isValidLatitude(value) {
7
+ return typeof value === 'number' && Number.isFinite(value) && value >= -90 && value <= 90;
8
+ }
9
+ /** WGS84 longitude range check. */
10
+ export function isValidLongitude(value) {
11
+ return typeof value === 'number' && Number.isFinite(value) && value >= -180 && value <= 180;
12
+ }
13
+ /** A valid course is a finite number in [0, 360). */
14
+ export function isValidCourseDegrees(value) {
15
+ return typeof value === 'number' && Number.isFinite(value) && value >= 0 && value < 360;
16
+ }
17
+ /**
18
+ * Normalize a raw course/bearing value into degrees in [0, 360), or null when it
19
+ * cannot be trusted for rotation.
20
+ *
21
+ * - A raw value of exactly `unknownSentinel` (default -1) is treated as unknown.
22
+ * - When `divisor` > 1 the raw value is divided (e.g. 27306 / 100 = 273.06).
23
+ * - The result is wrapped into [0, 360); a non-finite result yields null.
24
+ *
25
+ * The divisor is NOT hardcoded to a provider's scale — callers pass the value
26
+ * they have configured/confirmed for that connection.
27
+ */
28
+ export function normalizeCourseDegrees(raw, divisor = 1, unknownSentinel = -1) {
29
+ if (raw === null || raw === undefined || !Number.isFinite(raw)) {
30
+ return null;
31
+ }
32
+ if (unknownSentinel !== null && raw === unknownSentinel) {
33
+ return null;
34
+ }
35
+ const scaled = divisor && divisor !== 0 ? raw / divisor : raw;
36
+ if (!Number.isFinite(scaled)) {
37
+ return null;
38
+ }
39
+ // Wrap into [0, 360).
40
+ const wrapped = ((scaled % 360) + 360) % 360;
41
+ return isValidCourseDegrees(wrapped) ? wrapped : null;
42
+ }
43
+ /**
44
+ * Convert a raw speed into kilometres per hour given the source unit and an
45
+ * optional multiplier applied to the raw value first. Returns null for
46
+ * non-finite or negative inputs. `RAW` means "already km/h after the multiplier".
47
+ */
48
+ export function normalizeSpeedToKph(raw, unit = 'RAW', multiplier = 1) {
49
+ if (raw === null || raw === undefined || !Number.isFinite(raw)) {
50
+ return null;
51
+ }
52
+ const value = raw * (Number.isFinite(multiplier) ? multiplier : 1);
53
+ if (value < 0) {
54
+ return null;
55
+ }
56
+ switch (unit) {
57
+ case 'KPH':
58
+ case 'RAW':
59
+ return value;
60
+ case 'MPS':
61
+ return value * 3.6;
62
+ case 'MPH':
63
+ return value * 1.609344;
64
+ default:
65
+ return value;
66
+ }
67
+ }
68
+ /**
69
+ * Validate a provider epoch-seconds timestamp against a tolerance window and
70
+ * convert to an ISO 8601 UTC string. Returns null when out of range/unparseable.
71
+ *
72
+ * @param epochSeconds provider timestamp in seconds
73
+ * @param nowMs current time in ms (injectable for deterministic tests)
74
+ * @param futureToleranceSeconds max seconds a fix may be ahead of now
75
+ * @param maxAgeSeconds max seconds a fix may be behind now (0/undefined = no limit)
76
+ */
77
+ export function epochSecondsToIsoUtc(epochSeconds, nowMs, futureToleranceSeconds = 300, maxAgeSeconds) {
78
+ if (epochSeconds === null ||
79
+ epochSeconds === undefined ||
80
+ !Number.isFinite(epochSeconds) ||
81
+ epochSeconds <= 0) {
82
+ return null;
83
+ }
84
+ const eventMs = Math.trunc(epochSeconds) * 1000;
85
+ if (eventMs > nowMs + futureToleranceSeconds * 1000) {
86
+ return null;
87
+ }
88
+ if (maxAgeSeconds && maxAgeSeconds > 0 && eventMs < nowMs - maxAgeSeconds * 1000) {
89
+ return null;
90
+ }
91
+ return new Date(eventMs).toISOString();
92
+ }
93
+ //# sourceMappingURL=tracking-validation.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracking-validation.util.js","sourceRoot":"","sources":["../../../../../src/modules/tracking/utils/tracking-validation.util.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ export * from './modules/notification/index';
18
18
  export * from './modules/chat/index';
19
19
  export * from './modules/country/index';
20
20
  export * from './modules/phone/index';
21
+ export * from './modules/tracking/index';
21
22
  export * from './interfaces/server-message';
22
23
  export * from './interfaces/i-request-with-user';
23
24
  export * from './interfaces/validated-user';
@@ -43,4 +43,14 @@ export declare const KAFKA_TOPICS: {
43
43
  NEWSFEED_COMMENT_CREATED: string;
44
44
  NEWSFEED_COMMENT_UPDATED: string;
45
45
  NEWSFEED_COMMENT_DELETED: string;
46
+ TRACKING_POSITION: string;
47
+ TRACKING_STATUS: string;
48
+ TRACKING_PROVIDER_HEALTH: string;
49
+ TRACKING_DEVICE_UNMAPPED: string;
50
+ TRACKING_INGESTION_ERROR: string;
51
+ ORG_RESPONSE_UNIT_CREATED: string;
52
+ ORG_RESPONSE_UNIT_UPDATED: string;
53
+ ORG_RESPONSE_UNIT_DELETED: string;
54
+ ORG_RESPONSE_UNIT_CONTROL_CENTRE_CHANGED: string;
55
+ ORG_RESPONSE_UNIT_STATUS_CHANGED: string;
46
56
  };
@@ -55,4 +55,8 @@ export declare const SERVICE_CONSTS: {
55
55
  name: string;
56
56
  port: number;
57
57
  };
58
+ RESPONSE_TRACKING_SERVICE: {
59
+ name: string;
60
+ port: number;
61
+ };
58
62
  };
@@ -3,5 +3,6 @@ export declare enum RedisChannelName {
3
3
  WEB_NOTIFICATIONS = "realtime:web-notifications",
4
4
  PUSH_NOTIFICATIONS = "realtime:push-notifications",
5
5
  TASKS = "realtime:tasks",
6
- NEWSFEED = "realtime:newsfeed"
6
+ NEWSFEED = "realtime:newsfeed",
7
+ TRACKING = "realtime:tracking"
7
8
  }
@@ -4,5 +4,9 @@ export declare enum SocketEventName {
4
4
  PUSH_NOTIFICATION_EVENT = "pushNotification.event",
5
5
  TASK_EVENT = "task.event",
6
6
  TRIP_EVENT = "trip.event",
7
- NEWSFEED_EVENT = "newsfeed.event"
7
+ NEWSFEED_EVENT = "newsfeed.event",
8
+ TRACKING_POSITION = "tracking:position",
9
+ TRACKING_STATUS = "tracking:status",
10
+ TRACKING_REMOVED = "tracking:removed",
11
+ TRACKING_PROVIDER_HEALTH = "tracking:provider-health"
8
12
  }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Grouped, typed view of the tracking Kafka topics. The canonical string values
3
+ * live in {@link KAFKA_TOPICS} (alongside every other domain's topics); this
4
+ * object references them so there is a single source of truth and no drift.
5
+ *
6
+ * Producer: clarion-response-tracking (connector-worker → POSITION, DEVICE_UNMAPPED,
7
+ * PROVIDER_HEALTH, INGESTION_ERROR; projector → STATUS).
8
+ * Consumers: clarion-response-tracking (projector) for POSITION/STATUS.
9
+ */
10
+ export declare const TRACKING_KAFKA_TOPICS: {
11
+ readonly POSITION: string;
12
+ readonly STATUS: string;
13
+ readonly PROVIDER_HEALTH: string;
14
+ readonly DEVICE_UNMAPPED: string;
15
+ readonly INGESTION_ERROR: string;
16
+ };
17
+ /**
18
+ * Response-unit lifecycle topics. Producer: clarion-organization. Consumer:
19
+ * clarion-response-tracking projection. Single source of truth = {@link KAFKA_TOPICS}.
20
+ */
21
+ export declare const ORG_RESPONSE_UNIT_TOPICS: {
22
+ readonly CREATED: string;
23
+ readonly UPDATED: string;
24
+ readonly DELETED: string;
25
+ readonly CONTROL_CENTRE_CHANGED: string;
26
+ readonly STATUS_CHANGED: string;
27
+ };
28
+ /**
29
+ * Consumer group ids for tracking consumers. Distinct groups keep each concern's
30
+ * offsets independent and let projector replicas share partitions safely.
31
+ */
32
+ export declare const TRACKING_CONSUMER_GROUPS: {
33
+ /** clarion-response-tracking projector: history + current-state + status. */
34
+ readonly PROJECTOR: "response-tracking-projector-consumer";
35
+ };
36
+ /**
37
+ * Redis pub/sub channel clarion-response-tracking publishes client-safe tracking
38
+ * envelopes to, and clarion-socket subscribes to for fan-out. Mirrors the
39
+ * `realtime:*` channel convention in {@link RedisChannelName}.
40
+ */
41
+ export declare const TRACKING_REALTIME_CHANNEL = "realtime:tracking";
42
+ /** Current schema version for all Tracking*EventV1 contracts. */
43
+ export declare const TRACKING_SCHEMA_VERSION: 1;