@ovok/native 1.6.55 → 1.8.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 (282) hide show
  1. package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js +2 -1
  2. package/lib/commonjs/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
  3. package/lib/commonjs/modules/bt-device/constants/device-list-items.js +7 -0
  4. package/lib/commonjs/modules/bt-device/constants/device-list-items.js.map +1 -1
  5. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-assets.js +3 -1
  6. package/lib/commonjs/modules/bt-device/constants/supported-device-catalog-assets.js.map +1 -1
  7. package/lib/commonjs/modules/bt-device/constants/supported-devices.js +11 -2
  8. package/lib/commonjs/modules/bt-device/constants/supported-devices.js.map +1 -1
  9. package/lib/commonjs/modules/bt-management/core/resolve-device-key.js +6 -1
  10. package/lib/commonjs/modules/bt-management/core/resolve-device-key.js.map +1 -1
  11. package/lib/commonjs/modules/bt-management/index.js +48 -0
  12. package/lib/commonjs/modules/bt-management/index.js.map +1 -1
  13. package/lib/commonjs/modules/bt-management/services/bt-manager.js +9 -17
  14. package/lib/commonjs/modules/bt-management/services/bt-manager.js.map +1 -1
  15. package/lib/commonjs/modules/bt-management/services/device-classes.js +3 -1
  16. package/lib/commonjs/modules/bt-management/services/device-classes.js.map +1 -1
  17. package/lib/commonjs/modules/bt-management/services/device-creator.js +9 -7
  18. package/lib/commonjs/modules/bt-management/services/device-creator.js.map +1 -1
  19. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js +1 -7
  20. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  21. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.history-sequencer.js +1 -5
  22. package/lib/commonjs/modules/bt-management/services/devices/bp2/bp2.history-sequencer.js.map +1 -1
  23. package/lib/commonjs/modules/bt-management/services/devices/bt-command-writer.js +2 -8
  24. package/lib/commonjs/modules/bt-management/services/devices/bt-command-writer.js.map +1 -1
  25. package/lib/commonjs/modules/bt-management/services/devices/bt-connection-handler.js +17 -31
  26. package/lib/commonjs/modules/bt-management/services/devices/bt-connection-handler.js.map +1 -1
  27. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js +1 -1
  28. package/lib/commonjs/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  29. package/lib/commonjs/modules/bt-management/services/devices/bt-device-information.js +2 -3
  30. package/lib/commonjs/modules/bt-management/services/devices/bt-device-information.js.map +1 -1
  31. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js +8 -24
  32. package/lib/commonjs/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  33. package/lib/commonjs/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js +0 -3
  34. package/lib/commonjs/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js.map +1 -1
  35. package/lib/commonjs/modules/bt-management/services/devices/trasense/s9-advertisement.js +31 -0
  36. package/lib/commonjs/modules/bt-management/services/devices/trasense/s9-advertisement.js.map +1 -0
  37. package/lib/commonjs/modules/bt-management/services/devices/trasense/s9-frame-reader.js +27 -0
  38. package/lib/commonjs/modules/bt-management/services/devices/trasense/s9-frame-reader.js.map +1 -0
  39. package/lib/commonjs/modules/bt-management/services/devices/trasense/s9.command-sequencer.js +340 -0
  40. package/lib/commonjs/modules/bt-management/services/devices/trasense/s9.command-sequencer.js.map +1 -0
  41. package/lib/commonjs/modules/bt-management/services/devices/trasense/s9.device.js +74 -0
  42. package/lib/commonjs/modules/bt-management/services/devices/trasense/s9.device.js.map +1 -0
  43. package/lib/commonjs/modules/bt-management/types/clock-sync.js +1 -0
  44. package/lib/commonjs/modules/bt-management/types/clock-sync.js.map +1 -1
  45. package/lib/commonjs/modules/bt-management/types/integrated-devices.js +1 -0
  46. package/lib/commonjs/modules/bt-management/types/integrated-devices.js.map +1 -1
  47. package/lib/commonjs/modules/data-sync/index.js +15 -0
  48. package/lib/commonjs/modules/data-sync/index.js.map +1 -1
  49. package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js +25 -19
  50. package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js.map +1 -1
  51. package/lib/commonjs/modules/data-sync/services/managers/data-processor.js +73 -17
  52. package/lib/commonjs/modules/data-sync/services/managers/data-processor.js.map +1 -1
  53. package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js +14 -0
  54. package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js.map +1 -1
  55. package/lib/commonjs/modules/data-sync/utils/convert-generic-health-data.js +45 -7
  56. package/lib/commonjs/modules/data-sync/utils/convert-generic-health-data.js.map +1 -1
  57. package/lib/commonjs/modules/data-sync/utils/get-health-record-sync-id.js +15 -2
  58. package/lib/commonjs/modules/data-sync/utils/get-health-record-sync-id.js.map +1 -1
  59. package/lib/commonjs/modules/data-sync/utils/get-records-from-health-connect.js +103 -8
  60. package/lib/commonjs/modules/data-sync/utils/get-records-from-health-connect.js.map +1 -1
  61. package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js +66 -23
  62. package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
  63. package/lib/commonjs/modules/data-sync/utils/get-total-records-count.js +4 -1
  64. package/lib/commonjs/modules/data-sync/utils/get-total-records-count.js.map +1 -1
  65. package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js +3 -3
  66. package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
  67. package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js +364 -0
  68. package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js.map +1 -0
  69. package/lib/commonjs/modules/data-sync/utils/health-units.js +13 -11
  70. package/lib/commonjs/modules/data-sync/utils/health-units.js.map +1 -1
  71. package/lib/commonjs/modules/data-sync/utils/healthkit-data-types.js +34 -0
  72. package/lib/commonjs/modules/data-sync/utils/healthkit-data-types.js.map +1 -0
  73. package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js +2 -1
  74. package/lib/module/modules/bt-device/constants/device-instruction-pdfs.js.map +1 -1
  75. package/lib/module/modules/bt-device/constants/device-list-items.js +7 -0
  76. package/lib/module/modules/bt-device/constants/device-list-items.js.map +1 -1
  77. package/lib/module/modules/bt-device/constants/supported-device-catalog-assets.js +3 -1
  78. package/lib/module/modules/bt-device/constants/supported-device-catalog-assets.js.map +1 -1
  79. package/lib/module/modules/bt-device/constants/supported-devices.js +12 -3
  80. package/lib/module/modules/bt-device/constants/supported-devices.js.map +1 -1
  81. package/lib/module/modules/bt-management/core/resolve-device-key.js +6 -1
  82. package/lib/module/modules/bt-management/core/resolve-device-key.js.map +1 -1
  83. package/lib/module/modules/bt-management/index.js +4 -0
  84. package/lib/module/modules/bt-management/index.js.map +1 -1
  85. package/lib/module/modules/bt-management/services/bt-manager.js +9 -17
  86. package/lib/module/modules/bt-management/services/bt-manager.js.map +1 -1
  87. package/lib/module/modules/bt-management/services/device-classes.js +3 -1
  88. package/lib/module/modules/bt-management/services/device-classes.js.map +1 -1
  89. package/lib/module/modules/bt-management/services/device-creator.js +9 -7
  90. package/lib/module/modules/bt-management/services/device-creator.js.map +1 -1
  91. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js +1 -7
  92. package/lib/module/modules/bt-management/services/devices/bp2/bp2.device.js.map +1 -1
  93. package/lib/module/modules/bt-management/services/devices/bp2/bp2.history-sequencer.js +1 -5
  94. package/lib/module/modules/bt-management/services/devices/bp2/bp2.history-sequencer.js.map +1 -1
  95. package/lib/module/modules/bt-management/services/devices/bt-command-writer.js +2 -8
  96. package/lib/module/modules/bt-management/services/devices/bt-command-writer.js.map +1 -1
  97. package/lib/module/modules/bt-management/services/devices/bt-connection-handler.js +17 -31
  98. package/lib/module/modules/bt-management/services/devices/bt-connection-handler.js.map +1 -1
  99. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js +1 -1
  100. package/lib/module/modules/bt-management/services/devices/bt-data-processor.js.map +1 -1
  101. package/lib/module/modules/bt-management/services/devices/bt-device-information.js +2 -3
  102. package/lib/module/modules/bt-management/services/devices/bt-device-information.js.map +1 -1
  103. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js +8 -24
  104. package/lib/module/modules/bt-management/services/devices/bt-managed-device.js.map +1 -1
  105. package/lib/module/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js +0 -3
  106. package/lib/module/modules/bt-management/services/devices/custom/custom-lepu-sequencer.js.map +1 -1
  107. package/lib/module/modules/bt-management/services/devices/trasense/s9-advertisement.js +26 -0
  108. package/lib/module/modules/bt-management/services/devices/trasense/s9-advertisement.js.map +1 -0
  109. package/lib/module/modules/bt-management/services/devices/trasense/s9-frame-reader.js +22 -0
  110. package/lib/module/modules/bt-management/services/devices/trasense/s9-frame-reader.js.map +1 -0
  111. package/lib/module/modules/bt-management/services/devices/trasense/s9.command-sequencer.js +336 -0
  112. package/lib/module/modules/bt-management/services/devices/trasense/s9.command-sequencer.js.map +1 -0
  113. package/lib/module/modules/bt-management/services/devices/trasense/s9.device.js +69 -0
  114. package/lib/module/modules/bt-management/services/devices/trasense/s9.device.js.map +1 -0
  115. package/lib/module/modules/bt-management/types/clock-sync.js +1 -0
  116. package/lib/module/modules/bt-management/types/clock-sync.js.map +1 -1
  117. package/lib/module/modules/bt-management/types/device-measurement-map.js.map +1 -1
  118. package/lib/module/modules/bt-management/types/integrated-devices.js +1 -0
  119. package/lib/module/modules/bt-management/types/integrated-devices.js.map +1 -1
  120. package/lib/module/modules/data-sync/index.js +1 -0
  121. package/lib/module/modules/data-sync/index.js.map +1 -1
  122. package/lib/module/modules/data-sync/services/base-health-sync-service.js +25 -19
  123. package/lib/module/modules/data-sync/services/base-health-sync-service.js.map +1 -1
  124. package/lib/module/modules/data-sync/services/managers/data-processor.js +74 -18
  125. package/lib/module/modules/data-sync/services/managers/data-processor.js.map +1 -1
  126. package/lib/module/modules/data-sync/services/managers/storage-manager.js +14 -0
  127. package/lib/module/modules/data-sync/services/managers/storage-manager.js.map +1 -1
  128. package/lib/module/modules/data-sync/utils/convert-generic-health-data.js +45 -7
  129. package/lib/module/modules/data-sync/utils/convert-generic-health-data.js.map +1 -1
  130. package/lib/module/modules/data-sync/utils/get-health-record-sync-id.js +15 -2
  131. package/lib/module/modules/data-sync/utils/get-health-record-sync-id.js.map +1 -1
  132. package/lib/module/modules/data-sync/utils/get-records-from-health-connect.js +103 -8
  133. package/lib/module/modules/data-sync/utils/get-records-from-health-connect.js.map +1 -1
  134. package/lib/module/modules/data-sync/utils/get-samples-from-health.js +66 -22
  135. package/lib/module/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
  136. package/lib/module/modules/data-sync/utils/get-total-records-count.js +4 -1
  137. package/lib/module/modules/data-sync/utils/get-total-records-count.js.map +1 -1
  138. package/lib/module/modules/data-sync/utils/get-total-samples-count.js +2 -2
  139. package/lib/module/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
  140. package/lib/module/modules/data-sync/utils/health-data-catalog.js +360 -0
  141. package/lib/module/modules/data-sync/utils/health-data-catalog.js.map +1 -0
  142. package/lib/module/modules/data-sync/utils/health-units.js +13 -11
  143. package/lib/module/modules/data-sync/utils/health-units.js.map +1 -1
  144. package/lib/module/modules/data-sync/utils/healthkit-data-types.js +26 -0
  145. package/lib/module/modules/data-sync/utils/healthkit-data-types.js.map +1 -0
  146. package/lib/typescript/commonjs/src/modules/bt-device/constants/device-instruction-pdfs.d.ts.map +1 -1
  147. package/lib/typescript/commonjs/src/modules/bt-device/constants/device-list-items.d.ts.map +1 -1
  148. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-assets.d.ts +3 -1
  149. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-device-catalog-assets.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-devices.d.ts +7 -0
  151. package/lib/typescript/commonjs/src/modules/bt-device/constants/supported-devices.d.ts.map +1 -1
  152. package/lib/typescript/commonjs/src/modules/bt-management/core/resolve-device-key.d.ts +1 -1
  153. package/lib/typescript/commonjs/src/modules/bt-management/core/resolve-device-key.d.ts.map +1 -1
  154. package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts +4 -0
  155. package/lib/typescript/commonjs/src/modules/bt-management/index.d.ts.map +1 -1
  156. package/lib/typescript/commonjs/src/modules/bt-management/services/bt-manager.d.ts.map +1 -1
  157. package/lib/typescript/commonjs/src/modules/bt-management/services/device-classes.d.ts +2 -0
  158. package/lib/typescript/commonjs/src/modules/bt-management/services/device-classes.d.ts.map +1 -1
  159. package/lib/typescript/commonjs/src/modules/bt-management/services/device-creator.d.ts +1 -1
  160. package/lib/typescript/commonjs/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
  161. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  162. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bp2/bp2.history-sequencer.d.ts.map +1 -1
  163. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-command-writer.d.ts.map +1 -1
  164. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-connection-handler.d.ts.map +1 -1
  165. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-device-information.d.ts.map +1 -1
  166. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  167. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/custom/custom-lepu-sequencer.d.ts.map +1 -1
  168. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/trasense/s9-advertisement.d.ts +8 -0
  169. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/trasense/s9-advertisement.d.ts.map +1 -0
  170. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/trasense/s9-frame-reader.d.ts +7 -0
  171. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/trasense/s9-frame-reader.d.ts.map +1 -0
  172. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/trasense/s9.command-sequencer.d.ts +63 -0
  173. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/trasense/s9.command-sequencer.d.ts.map +1 -0
  174. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/trasense/s9.device.d.ts +18 -0
  175. package/lib/typescript/commonjs/src/modules/bt-management/services/devices/trasense/s9.device.d.ts.map +1 -0
  176. package/lib/typescript/commonjs/src/modules/bt-management/types/clock-sync.d.ts.map +1 -1
  177. package/lib/typescript/commonjs/src/modules/bt-management/types/device-connection-event.d.ts +5 -1
  178. package/lib/typescript/commonjs/src/modules/bt-management/types/device-connection-event.d.ts.map +1 -1
  179. package/lib/typescript/commonjs/src/modules/bt-management/types/device-data.d.ts +2 -0
  180. package/lib/typescript/commonjs/src/modules/bt-management/types/device-data.d.ts.map +1 -1
  181. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts +3 -0
  182. package/lib/typescript/commonjs/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  183. package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts +2 -1
  184. package/lib/typescript/commonjs/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
  185. package/lib/typescript/commonjs/src/modules/data-sync/index.d.ts +1 -0
  186. package/lib/typescript/commonjs/src/modules/data-sync/index.d.ts.map +1 -1
  187. package/lib/typescript/commonjs/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
  188. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts +2 -1
  189. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
  190. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts +2 -0
  191. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
  192. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/sync-progress-manager.d.ts +1 -1
  193. package/lib/typescript/commonjs/src/modules/data-sync/types/convert-data-props.d.ts +2 -0
  194. package/lib/typescript/commonjs/src/modules/data-sync/types/convert-data-props.d.ts.map +1 -1
  195. package/lib/typescript/commonjs/src/modules/data-sync/types/data-from-provider-result.d.ts +4 -0
  196. package/lib/typescript/commonjs/src/modules/data-sync/types/data-from-provider-result.d.ts.map +1 -1
  197. package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-props.d.ts +6 -1
  198. package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-props.d.ts.map +1 -1
  199. package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-generic-health-data.d.ts +1 -1
  200. package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-generic-health-data.d.ts.map +1 -1
  201. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-health-record-sync-id.d.ts +9 -1
  202. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-health-record-sync-id.d.ts.map +1 -1
  203. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-records-from-health-connect.d.ts.map +1 -1
  204. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts +49 -4
  205. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
  206. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-records-count.d.ts.map +1 -1
  207. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
  208. package/lib/typescript/commonjs/src/modules/data-sync/utils/health-data-catalog.d.ts +30 -0
  209. package/lib/typescript/commonjs/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -0
  210. package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts +1 -1
  211. package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
  212. package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts +11 -0
  213. package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -0
  214. package/lib/typescript/module/src/modules/bt-device/constants/device-instruction-pdfs.d.ts.map +1 -1
  215. package/lib/typescript/module/src/modules/bt-device/constants/device-list-items.d.ts.map +1 -1
  216. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-assets.d.ts +3 -1
  217. package/lib/typescript/module/src/modules/bt-device/constants/supported-device-catalog-assets.d.ts.map +1 -1
  218. package/lib/typescript/module/src/modules/bt-device/constants/supported-devices.d.ts +7 -0
  219. package/lib/typescript/module/src/modules/bt-device/constants/supported-devices.d.ts.map +1 -1
  220. package/lib/typescript/module/src/modules/bt-management/core/resolve-device-key.d.ts +1 -1
  221. package/lib/typescript/module/src/modules/bt-management/core/resolve-device-key.d.ts.map +1 -1
  222. package/lib/typescript/module/src/modules/bt-management/index.d.ts +4 -0
  223. package/lib/typescript/module/src/modules/bt-management/index.d.ts.map +1 -1
  224. package/lib/typescript/module/src/modules/bt-management/services/bt-manager.d.ts.map +1 -1
  225. package/lib/typescript/module/src/modules/bt-management/services/device-classes.d.ts +2 -0
  226. package/lib/typescript/module/src/modules/bt-management/services/device-classes.d.ts.map +1 -1
  227. package/lib/typescript/module/src/modules/bt-management/services/device-creator.d.ts +1 -1
  228. package/lib/typescript/module/src/modules/bt-management/services/device-creator.d.ts.map +1 -1
  229. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.device.d.ts.map +1 -1
  230. package/lib/typescript/module/src/modules/bt-management/services/devices/bp2/bp2.history-sequencer.d.ts.map +1 -1
  231. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-command-writer.d.ts.map +1 -1
  232. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-connection-handler.d.ts.map +1 -1
  233. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-device-information.d.ts.map +1 -1
  234. package/lib/typescript/module/src/modules/bt-management/services/devices/bt-managed-device.d.ts.map +1 -1
  235. package/lib/typescript/module/src/modules/bt-management/services/devices/custom/custom-lepu-sequencer.d.ts.map +1 -1
  236. package/lib/typescript/module/src/modules/bt-management/services/devices/trasense/s9-advertisement.d.ts +8 -0
  237. package/lib/typescript/module/src/modules/bt-management/services/devices/trasense/s9-advertisement.d.ts.map +1 -0
  238. package/lib/typescript/module/src/modules/bt-management/services/devices/trasense/s9-frame-reader.d.ts +7 -0
  239. package/lib/typescript/module/src/modules/bt-management/services/devices/trasense/s9-frame-reader.d.ts.map +1 -0
  240. package/lib/typescript/module/src/modules/bt-management/services/devices/trasense/s9.command-sequencer.d.ts +63 -0
  241. package/lib/typescript/module/src/modules/bt-management/services/devices/trasense/s9.command-sequencer.d.ts.map +1 -0
  242. package/lib/typescript/module/src/modules/bt-management/services/devices/trasense/s9.device.d.ts +18 -0
  243. package/lib/typescript/module/src/modules/bt-management/services/devices/trasense/s9.device.d.ts.map +1 -0
  244. package/lib/typescript/module/src/modules/bt-management/types/clock-sync.d.ts.map +1 -1
  245. package/lib/typescript/module/src/modules/bt-management/types/device-connection-event.d.ts +5 -1
  246. package/lib/typescript/module/src/modules/bt-management/types/device-connection-event.d.ts.map +1 -1
  247. package/lib/typescript/module/src/modules/bt-management/types/device-data.d.ts +2 -0
  248. package/lib/typescript/module/src/modules/bt-management/types/device-data.d.ts.map +1 -1
  249. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts +3 -0
  250. package/lib/typescript/module/src/modules/bt-management/types/device-measurement-map.d.ts.map +1 -1
  251. package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts +2 -1
  252. package/lib/typescript/module/src/modules/bt-management/types/integrated-devices.d.ts.map +1 -1
  253. package/lib/typescript/module/src/modules/data-sync/index.d.ts +1 -0
  254. package/lib/typescript/module/src/modules/data-sync/index.d.ts.map +1 -1
  255. package/lib/typescript/module/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
  256. package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts +2 -1
  257. package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
  258. package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts +2 -0
  259. package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
  260. package/lib/typescript/module/src/modules/data-sync/services/managers/sync-progress-manager.d.ts +1 -1
  261. package/lib/typescript/module/src/modules/data-sync/types/convert-data-props.d.ts +2 -0
  262. package/lib/typescript/module/src/modules/data-sync/types/convert-data-props.d.ts.map +1 -1
  263. package/lib/typescript/module/src/modules/data-sync/types/data-from-provider-result.d.ts +4 -0
  264. package/lib/typescript/module/src/modules/data-sync/types/data-from-provider-result.d.ts.map +1 -1
  265. package/lib/typescript/module/src/modules/data-sync/types/health-sync-props.d.ts +6 -1
  266. package/lib/typescript/module/src/modules/data-sync/types/health-sync-props.d.ts.map +1 -1
  267. package/lib/typescript/module/src/modules/data-sync/utils/convert-generic-health-data.d.ts +1 -1
  268. package/lib/typescript/module/src/modules/data-sync/utils/convert-generic-health-data.d.ts.map +1 -1
  269. package/lib/typescript/module/src/modules/data-sync/utils/get-health-record-sync-id.d.ts +9 -1
  270. package/lib/typescript/module/src/modules/data-sync/utils/get-health-record-sync-id.d.ts.map +1 -1
  271. package/lib/typescript/module/src/modules/data-sync/utils/get-records-from-health-connect.d.ts.map +1 -1
  272. package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts +49 -4
  273. package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
  274. package/lib/typescript/module/src/modules/data-sync/utils/get-total-records-count.d.ts.map +1 -1
  275. package/lib/typescript/module/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
  276. package/lib/typescript/module/src/modules/data-sync/utils/health-data-catalog.d.ts +30 -0
  277. package/lib/typescript/module/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -0
  278. package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts +1 -1
  279. package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
  280. package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts +11 -0
  281. package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -0
  282. package/package.json +1 -1
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ import { base64ToHex } from "../../../utils/base-64-to-hex.js";
4
+ import { hexToByte } from "../../../utils/hex-to-byte.js";
5
+ const NAME = "S9";
6
+ const COMPANY_ID = [0x0a, 0x0a];
7
+ const PAYLOAD_LENGTH = 18;
8
+
9
+ /**
10
+ * The SH09 reuses company ID 0x0A0A and advertises only as "S9". Require both
11
+ * fields and the exact manufacturer payload length; the name alone is ambiguous.
12
+ * react-native-ble-plx exposes the manufacturer-specific bytes as base64, including
13
+ * the two company-ID bytes at the start of the AD structure.
14
+ */
15
+ export const isTrasenseS9Advertisement = (advertisedName, manufacturerData) => {
16
+ if (advertisedName !== NAME || !manufacturerData) {
17
+ return false;
18
+ }
19
+ try {
20
+ const bytes = base64ToHex(manufacturerData).map(hexToByte);
21
+ return bytes.length === PAYLOAD_LENGTH + COMPANY_ID.length && bytes[0] === COMPANY_ID[0] && bytes[1] === COMPANY_ID[1];
22
+ } catch {
23
+ return false;
24
+ }
25
+ };
26
+ //# sourceMappingURL=s9-advertisement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["base64ToHex","hexToByte","NAME","COMPANY_ID","PAYLOAD_LENGTH","isTrasenseS9Advertisement","advertisedName","manufacturerData","bytes","map","length"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/trasense/s9-advertisement.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,kCAA+B;AAC3D,SAASC,SAAS,QAAQ,+BAA4B;AAEtD,MAAMC,IAAI,GAAG,IAAI;AACjB,MAAMC,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,CAAU;AACxC,MAAMC,cAAc,GAAG,EAAE;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,GAAGA,CACvCC,cAAsB,EACtBC,gBAAyB,KACb;EACZ,IAAID,cAAc,KAAKJ,IAAI,IAAI,CAACK,gBAAgB,EAAE;IAChD,OAAO,KAAK;EACd;EAEA,IAAI;IACF,MAAMC,KAAK,GAAGR,WAAW,CAACO,gBAAgB,CAAC,CAACE,GAAG,CAACR,SAAS,CAAC;IAE1D,OACEO,KAAK,CAACE,MAAM,KAAKN,cAAc,GAAGD,UAAU,CAACO,MAAM,IACnDF,KAAK,CAAC,CAAC,CAAC,KAAKL,UAAU,CAAC,CAAC,CAAC,IAC1BK,KAAK,CAAC,CAAC,CAAC,KAAKL,UAAU,CAAC,CAAC,CAAC;EAE9B,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;AACF,CAAC","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ import { FrameReadStatus } from "../../../types/frame-read-status.js";
4
+ const FRAME_LENGTH = 20;
5
+
6
+ /** SH09 notifications are fixed-width, zero-padded 20-byte replies. */
7
+ export class S9FrameReader {
8
+ readFrame(buffer) {
9
+ if (buffer.length < FRAME_LENGTH) {
10
+ return {
11
+ status: FrameReadStatus.INCOMPLETE,
12
+ consumedBytes: 0
13
+ };
14
+ }
15
+ return {
16
+ status: FrameReadStatus.COMPLETE,
17
+ consumedBytes: FRAME_LENGTH,
18
+ frame: buffer.slice(0, FRAME_LENGTH)
19
+ };
20
+ }
21
+ }
22
+ //# sourceMappingURL=s9-frame-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FrameReadStatus","FRAME_LENGTH","S9FrameReader","readFrame","buffer","length","status","INCOMPLETE","consumedBytes","COMPLETE","frame","slice"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/trasense/s9-frame-reader.ts"],"mappings":";;AACA,SAASA,eAAe,QAAQ,qCAAkC;AAGlE,MAAMC,YAAY,GAAG,EAAE;;AAEvB;AACA,OAAO,MAAMC,aAAa,CAAwB;EACzCC,SAASA,CAACC,MAAyB,EAAmB;IAC3D,IAAIA,MAAM,CAACC,MAAM,GAAGJ,YAAY,EAAE;MAChC,OAAO;QAAEK,MAAM,EAAEN,eAAe,CAACO,UAAU;QAAEC,aAAa,EAAE;MAAE,CAAC;IACjE;IAEA,OAAO;MACLF,MAAM,EAAEN,eAAe,CAACS,QAAQ;MAChCD,aAAa,EAAEP,YAAY;MAC3BS,KAAK,EAAEN,MAAM,CAACO,KAAK,CAAC,CAAC,EAAEV,YAAY;IACrC,CAAC;EACH;AACF","ignoreList":[]}
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+
3
+ /* eslint-disable max-lines */
4
+
5
+ import { MeasurementTypeKey } from "@ovok/core";
6
+ import { CaseType } from "../../../types/case-type.js";
7
+ import { getClockParts } from "../../../types/clock-sync.js";
8
+ import { hexToByte } from "../../../utils/hex-to-byte.js";
9
+ const TRASENSE_S9_SERVICE = "0000fff0-0000-1000-8000-00805f9b34fb";
10
+ const TRASENSE_S9_WRITE = "0000fff1-0000-1000-8000-00805f9b34fb";
11
+ const TRASENSE_S9_NOTIFY = "0000fff2-0000-1000-8000-00805f9b34fb";
12
+ const RESPONSE = {
13
+ identity: 0xf0,
14
+ address: 0x88,
15
+ clock: 0x81,
16
+ historyIndex: 0x90,
17
+ steps: 0x93,
18
+ heartRate: 0xd6,
19
+ battery: 0xb0
20
+ };
21
+ const HISTORY_HOURS = [0x00, 0x06, 0x0c, 0x12];
22
+ const HISTORY_SLOTS = 7;
23
+ const RESPONSE_TIMEOUT_MS = 3_000;
24
+ const MAX_RESPONSE_RETRIES = 1;
25
+ const MAX_HEART_RATE_POLLS = 12;
26
+ const HEART_RATE_POLL_INTERVAL_MS = 1_000;
27
+ const byte = value => (value & 0xff).toString(16).padStart(2, "0");
28
+ const values = frame => frame.map(hexToByte);
29
+ const command = (write, request, delayBeforeWriteMs) => ({
30
+ ...write,
31
+ frame: [...request, ...new Array(20 - request.length).fill(0)].map(byte),
32
+ ...(delayBeforeWriteMs === undefined ? {} : {
33
+ delayBeforeWriteMs
34
+ })
35
+ });
36
+ const decodeFirmware = frame => values(frame).slice(1).filter(value => value !== 0).map(value => String.fromCharCode(value)).join("").trim();
37
+ const buildDateFromFirmware = firmware => {
38
+ const match = /^(\d{4})(\d{2})(\d{2})\.SH09(?:\.|$)/.exec(firmware);
39
+ if (!match) {
40
+ return undefined;
41
+ }
42
+ const date = {
43
+ year: Number(match[1]),
44
+ month: Number(match[2]),
45
+ day: Number(match[3])
46
+ };
47
+ return isValidDate(date) ? date : undefined;
48
+ };
49
+ const isValidDate = ({
50
+ year,
51
+ month,
52
+ day
53
+ }) => {
54
+ const date = new Date(0);
55
+ date.setFullYear(year, month - 1, day);
56
+ return Number.isInteger(year) && Number.isInteger(month) && Number.isInteger(day) && month >= 1 && month <= 12 && day >= 1 && date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day;
57
+ };
58
+ const dateFromReply = frame => {
59
+ if (frame.length < 5) {
60
+ return undefined;
61
+ }
62
+ const date = {
63
+ year: (frame[1] ?? 0) * 100 + (frame[2] ?? 0),
64
+ month: frame[3] ?? 0,
65
+ day: frame[4] ?? 0
66
+ };
67
+ return isValidDate(date) ? date : undefined;
68
+ };
69
+ const isBefore = (left, right) => left.year < right.year || left.year === right.year && left.month < right.month || left.year === right.year && left.month === right.month && left.day < right.day;
70
+ const dateAtHour = (date, hour, timezone) => {
71
+ const result = new Date(0);
72
+ if (timezone === "utc") {
73
+ result.setUTCFullYear(date.year, date.month - 1, date.day);
74
+ result.setUTCHours(hour, 0, 0, 0);
75
+ } else {
76
+ result.setFullYear(date.year, date.month - 1, date.day);
77
+ result.setHours(hour, 0, 0, 0);
78
+ }
79
+ return result;
80
+ };
81
+ const isResponseFor = (phase, frame) => {
82
+ const response = hexToByte(frame[0] ?? "00");
83
+ if (phase === "heart-rate") {
84
+ return response === RESPONSE.heartRate && hexToByte(frame[1] ?? "00") === 0x02;
85
+ }
86
+ switch (phase) {
87
+ case "identity":
88
+ return response === RESPONSE.identity;
89
+ case "address":
90
+ return response === RESPONSE.address;
91
+ case "clock":
92
+ return response === RESPONSE.clock;
93
+ case "history-index":
94
+ return response === RESPONSE.historyIndex;
95
+ case "steps":
96
+ return response === RESPONSE.steps;
97
+ case "battery":
98
+ return response === RESPONSE.battery;
99
+ case "done":
100
+ return false;
101
+ }
102
+ };
103
+
104
+ /** Runs only the SH09 commands verified on firmware image 1. */
105
+ class S9CommandSequencer {
106
+ phase = "identity";
107
+ retries = 0;
108
+ firmware = "";
109
+ historyCount = 0;
110
+ historySlot = 0;
111
+ historyHourIndex = 0;
112
+ heartRatePolls = 0;
113
+ constructor(params) {
114
+ this.params = params;
115
+ }
116
+ initialCommands = () => [this.queue([0x70])];
117
+ isHistoryTransfer = () => true;
118
+ commandTimeoutMs = () => RESPONSE_TIMEOUT_MS;
119
+ commandProgress = frame => isResponseFor(this.phase, frame) ? "complete" : "ignored";
120
+ onCommandTimeout = () => {
121
+ if (this.pendingCommand && this.retries < MAX_RESPONSE_RETRIES) {
122
+ this.retries += 1;
123
+ return {
124
+ commands: [this.pendingCommand]
125
+ };
126
+ }
127
+ return {
128
+ terminal: true
129
+ };
130
+ };
131
+ nextCommand = frame => {
132
+ if (!isResponseFor(this.phase, frame)) {
133
+ return undefined;
134
+ }
135
+ this.pendingCommand = undefined;
136
+ this.retries = 0;
137
+ const response = values(frame);
138
+ switch (this.phase) {
139
+ case "identity":
140
+ return this.handleIdentity(frame);
141
+ case "address":
142
+ return this.handleAddress(response);
143
+ case "clock":
144
+ this.reportClockWrite();
145
+ return this.queueHistoryIndex();
146
+ case "history-index":
147
+ return this.handleHistoryIndex(response);
148
+ case "steps":
149
+ if (!this.handleSteps(response)) {
150
+ return undefined;
151
+ }
152
+ return this.queueNextStepsOrHeartRate();
153
+ case "heart-rate":
154
+ return this.handleHeartRate(response);
155
+ case "battery":
156
+ this.handleBattery(response);
157
+ this.finish();
158
+ return undefined;
159
+ case "done":
160
+ return undefined;
161
+ }
162
+ };
163
+ handleIdentity = frame => {
164
+ const firmware = decodeFirmware(frame);
165
+ if (!/(?:^|\.)SH09(?:\.|$)/.test(firmware)) {
166
+ this.params.onError(new Error("Trasense S9 identity check failed."));
167
+ this.finish();
168
+ return undefined;
169
+ }
170
+ this.firmware = firmware;
171
+ this.firmwareBuildDate = buildDateFromFirmware(firmware);
172
+ this.phase = "address";
173
+ return [this.queue([0x08])];
174
+ };
175
+ handleAddress = response => {
176
+ if (response.length < 7) {
177
+ this.params.onError(new Error("Trasense S9 address reply was incomplete."));
178
+ this.finish();
179
+ return undefined;
180
+ }
181
+ const addressBytes = response.slice(1, 7).reverse();
182
+ if (addressBytes.every(value => value === 0 || value === 0xff)) {
183
+ this.params.onError(new Error("Trasense S9 address reply was invalid."));
184
+ this.finish();
185
+ return undefined;
186
+ }
187
+ const hardwareAddress = addressBytes.map(byte).join(":").toUpperCase();
188
+ this.params.onIdentity(this.firmware, hardwareAddress);
189
+ this.params.onConnectionEvent({
190
+ kind: "device-identified"
191
+ });
192
+ return [this.queueClockOrHistoryIndex()];
193
+ };
194
+ queueClockOrHistoryIndex = () => {
195
+ const options = this.params.clockSync;
196
+ if (options?.enabled === false) {
197
+ return this.queueHistoryIndex()[0];
198
+ }
199
+ this.phase = "clock";
200
+ const now = options?.now?.() ?? new Date();
201
+
202
+ // SH09 has no time-zone setting; its clock and history are local wall time.
203
+ const parts = getClockParts(now, "local");
204
+ return this.queue([0x01, Math.floor(parts.year / 100), parts.year % 100, parts.month, parts.day, parts.hours, parts.minutes, parts.seconds, 0x00, 0x18], undefined, now);
205
+ };
206
+ reportClockWrite = () => {
207
+ const clockAt = this.clockAt ?? new Date();
208
+ this.params.onConnectionEvent({
209
+ kind: "clock-synchronized",
210
+ clockAt,
211
+ phoneUtcOffsetMinutes: -clockAt.getTimezoneOffset()
212
+ });
213
+ };
214
+ queueHistoryIndex = () => {
215
+ this.phase = "history-index";
216
+ return [this.queue([0x10])];
217
+ };
218
+ handleHistoryIndex = response => {
219
+ if (response.length < 7) {
220
+ this.params.onError(new Error("Trasense S9 history index was incomplete."));
221
+ this.finish();
222
+ return undefined;
223
+ }
224
+ const todaySlot = response[1] ?? 0;
225
+ const count = response[2] ?? 0;
226
+ if (count > HISTORY_SLOTS || todaySlot >= Math.max(count, 1)) {
227
+ this.params.onError(new Error("Trasense S9 history index was invalid."));
228
+ this.finish();
229
+ return undefined;
230
+ }
231
+ this.historyCount = count;
232
+ this.historySlot = 0;
233
+ this.historyHourIndex = 0;
234
+ if (count === 0 || !this.firmwareBuildDate) {
235
+ return this.queueHeartRate();
236
+ }
237
+ return this.queueSteps();
238
+ };
239
+ queueSteps = () => {
240
+ this.phase = "steps";
241
+ return [this.queue([0x13, this.historySlot, HISTORY_HOURS[this.historyHourIndex] ?? 0])];
242
+ };
243
+ handleSteps = response => {
244
+ const date = dateFromReply(response);
245
+ const hour = response[5] ?? -1;
246
+ const expectedHour = HISTORY_HOURS[this.historyHourIndex];
247
+ if (response.length < 18 || !date || hour !== expectedHour) {
248
+ this.params.onError(new Error("Trasense S9 steps reply was invalid."));
249
+ this.finish();
250
+ return false;
251
+ }
252
+ if (this.firmwareBuildDate && !isBefore(date, this.firmwareBuildDate)) {
253
+ for (let index = 0; index < 6; index += 1) {
254
+ const high = response[6 + index * 2] ?? 0;
255
+ const low = response[7 + index * 2] ?? 0;
256
+ const stepCount = high * 256 + low;
257
+ if (stepCount === 0xffff) {
258
+ continue;
259
+ }
260
+ const start = dateAtHour(date, hour + index, "local");
261
+ this.params.onResult({
262
+ caseType: CaseType.RESULT,
263
+ measurementTypeKey: MeasurementTypeKey.stepCount,
264
+ stepCount,
265
+ start,
266
+ end: new Date(start.getTime() + 60 * 60 * 1000)
267
+ });
268
+ }
269
+ }
270
+ return true;
271
+ };
272
+ queueNextStepsOrHeartRate = () => {
273
+ this.historyHourIndex += 1;
274
+ if (this.historyHourIndex >= HISTORY_HOURS.length) {
275
+ this.historyHourIndex = 0;
276
+ this.historySlot += 1;
277
+ }
278
+ if (this.historySlot < this.historyCount) {
279
+ return this.queueSteps();
280
+ }
281
+ return this.queueHeartRate();
282
+ };
283
+ queueHeartRate = () => {
284
+ this.phase = "heart-rate";
285
+ this.heartRatePolls = 0;
286
+ return [this.queue([0x56, 0x02])];
287
+ };
288
+ handleHeartRate = response => {
289
+ const heartRate = response[2] ?? 0;
290
+ if (heartRate >= 40 && heartRate <= 200) {
291
+ const recordedAt = this.params.clockSync?.now?.() ?? new Date();
292
+ this.params.onResult({
293
+ caseType: CaseType.RESULT,
294
+ measurementTypeKey: MeasurementTypeKey.heartRate,
295
+ heartRate,
296
+ start: recordedAt,
297
+ end: recordedAt
298
+ });
299
+ return this.queueBattery();
300
+ }
301
+ this.heartRatePolls += 1;
302
+ if (this.heartRatePolls < MAX_HEART_RATE_POLLS) {
303
+ return [this.queue([0x56, 0x02], HEART_RATE_POLL_INTERVAL_MS)];
304
+ }
305
+ return this.queueBattery();
306
+ };
307
+ queueBattery = () => {
308
+ this.phase = "battery";
309
+ return [this.queue([0x30])];
310
+ };
311
+ handleBattery = response => {
312
+ const level = response[1] ?? -1;
313
+ if (level < 0 || level > 5) {
314
+ return;
315
+ }
316
+ this.params.onConnectionEvent({
317
+ kind: "battery",
318
+ batteryLevel: level === 0 ? 5 : level * 20
319
+ });
320
+ };
321
+ queue = (request, delayBeforeWriteMs, clockAt) => {
322
+ this.pendingCommand = command(this.params.write, request, delayBeforeWriteMs);
323
+ this.retries = 0;
324
+ if (clockAt) {
325
+ this.clockAt = clockAt;
326
+ }
327
+ return this.pendingCommand;
328
+ };
329
+ finish = () => {
330
+ this.phase = "done";
331
+ this.pendingCommand = undefined;
332
+ this.params.onComplete();
333
+ };
334
+ }
335
+ export { S9CommandSequencer, TRASENSE_S9_NOTIFY, TRASENSE_S9_SERVICE, TRASENSE_S9_WRITE };
336
+ //# sourceMappingURL=s9.command-sequencer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MeasurementTypeKey","CaseType","getClockParts","hexToByte","TRASENSE_S9_SERVICE","TRASENSE_S9_WRITE","TRASENSE_S9_NOTIFY","RESPONSE","identity","address","clock","historyIndex","steps","heartRate","battery","HISTORY_HOURS","HISTORY_SLOTS","RESPONSE_TIMEOUT_MS","MAX_RESPONSE_RETRIES","MAX_HEART_RATE_POLLS","HEART_RATE_POLL_INTERVAL_MS","byte","value","toString","padStart","values","frame","map","command","write","request","delayBeforeWriteMs","Array","length","fill","undefined","decodeFirmware","slice","filter","String","fromCharCode","join","trim","buildDateFromFirmware","firmware","match","exec","date","year","Number","month","day","isValidDate","Date","setFullYear","isInteger","getFullYear","getMonth","getDate","dateFromReply","isBefore","left","right","dateAtHour","hour","timezone","result","setUTCFullYear","setUTCHours","setHours","isResponseFor","phase","response","S9CommandSequencer","retries","historyCount","historySlot","historyHourIndex","heartRatePolls","constructor","params","initialCommands","queue","isHistoryTransfer","commandTimeoutMs","commandProgress","onCommandTimeout","pendingCommand","commands","terminal","nextCommand","handleIdentity","handleAddress","reportClockWrite","queueHistoryIndex","handleHistoryIndex","handleSteps","queueNextStepsOrHeartRate","handleHeartRate","handleBattery","finish","test","onError","Error","firmwareBuildDate","addressBytes","reverse","every","hardwareAddress","toUpperCase","onIdentity","onConnectionEvent","kind","queueClockOrHistoryIndex","options","clockSync","enabled","now","parts","Math","floor","hours","minutes","seconds","clockAt","phoneUtcOffsetMinutes","getTimezoneOffset","todaySlot","count","max","queueHeartRate","queueSteps","expectedHour","index","high","low","stepCount","start","onResult","caseType","RESULT","measurementTypeKey","end","getTime","recordedAt","queueBattery","level","batteryLevel","onComplete"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/trasense/s9.command-sequencer.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ import { MeasurementTypeKey } from "@ovok/core";
4
+ import { CaseType } from "../../../types/case-type.js";
5
+ import { BTManagedDevice } from "../bt-managed-device.js";
6
+ import { S9FrameReader } from "./s9-frame-reader.js";
7
+ import { S9CommandSequencer, TRASENSE_S9_NOTIFY, TRASENSE_S9_SERVICE, TRASENSE_S9_WRITE } from "./s9.command-sequencer.js";
8
+ const acceptProtocolFrames = {
9
+ caseValuePosition: [],
10
+ cases: [{
11
+ caseValue: "",
12
+ caseType: CaseType.OTHER,
13
+ parseDefinitions: [],
14
+ description: "SH09 protocol frame handled by its command sequencer"
15
+ }]
16
+ };
17
+ const s9Services = [{
18
+ uuid: TRASENSE_S9_SERVICE,
19
+ writeUuid: {
20
+ uuid: TRASENSE_S9_SERVICE,
21
+ mainCommandUuid: TRASENSE_S9_WRITE
22
+ },
23
+ monitorUuids: [{
24
+ uuid: TRASENSE_S9_NOTIFY,
25
+ parsingModel: acceptProtocolFrames
26
+ }]
27
+ }];
28
+ const S9_SUPPORTED_MEASUREMENTS = [MeasurementTypeKey.stepCount, MeasurementTypeKey.heartRate];
29
+
30
+ /** Trasense SH09. Its address and advertisement data are sensitive and never logged. */
31
+ export class TrasenseS9Device extends BTManagedDevice {
32
+ mainServices = s9Services;
33
+ stuckDataTimeout = 120_000;
34
+ onStreamStart = undefined;
35
+ frameReader = new S9FrameReader();
36
+ constructor(device, params) {
37
+ super(device, params);
38
+
39
+ // Manufacturer data contains device health information; do not expose it in callbacks.
40
+ this.deviceData.manufacturerData = "";
41
+ this.createCommandSequencer = () => new S9CommandSequencer({
42
+ clockSync: params.clockSync,
43
+ write: {
44
+ serviceUuid: TRASENSE_S9_SERVICE,
45
+ characteristicUuid: TRASENSE_S9_WRITE
46
+ },
47
+ onResult: result => this.onResult?.(result),
48
+ onConnectionEvent: event => this.onConnectionEvent?.({
49
+ deviceData: this.deviceData,
50
+ ...event
51
+ }),
52
+ onIdentity: (_firmware, hardwareAddress) => {
53
+ this.deviceData.model = "SH09";
54
+ this.deviceData.hardwareAddress = hardwareAddress;
55
+ },
56
+ onError: error => this.onError?.(error),
57
+ onComplete: () => {
58
+ setTimeout(() => void this.disconnect(), 0);
59
+ }
60
+ });
61
+ }
62
+ getSupportedMeasurementTypeKeys() {
63
+ return [...S9_SUPPORTED_MEASUREMENTS];
64
+ }
65
+ handleSuccessResult() {
66
+ return;
67
+ }
68
+ }
69
+ //# sourceMappingURL=s9.device.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MeasurementTypeKey","CaseType","BTManagedDevice","S9FrameReader","S9CommandSequencer","TRASENSE_S9_NOTIFY","TRASENSE_S9_SERVICE","TRASENSE_S9_WRITE","acceptProtocolFrames","caseValuePosition","cases","caseValue","caseType","OTHER","parseDefinitions","description","s9Services","uuid","writeUuid","mainCommandUuid","monitorUuids","parsingModel","S9_SUPPORTED_MEASUREMENTS","stepCount","heartRate","TrasenseS9Device","mainServices","stuckDataTimeout","onStreamStart","undefined","frameReader","constructor","device","params","deviceData","manufacturerData","createCommandSequencer","clockSync","write","serviceUuid","characteristicUuid","onResult","result","onConnectionEvent","event","onIdentity","_firmware","hardwareAddress","model","onError","error","onComplete","setTimeout","disconnect","getSupportedMeasurementTypeKeys","handleSuccessResult"],"sourceRoot":"../../../../../../../src","sources":["modules/bt-management/services/devices/trasense/s9.device.ts"],"mappings":";;AAAA,SAASA,kBAAkB,QAAQ,YAAY;AAG/C,SAASC,QAAQ,QAAQ,6BAA0B;AAKnD,SAASC,eAAe,QAAQ,yBAAsB;AAEtD,SAASC,aAAa,QAAQ,sBAAmB;AACjD,SACEC,kBAAkB,EAClBC,kBAAkB,EAClBC,mBAAmB,EACnBC,iBAAiB,QACZ,2BAAwB;AAE/B,MAAMC,oBAAoB,GAAG;EAC3BC,iBAAiB,EAAE,EAAE;EACrBC,KAAK,EAAE,CACL;IACEC,SAAS,EAAE,EAAE;IACbC,QAAQ,EAAEX,QAAQ,CAACY,KAAK;IACxBC,gBAAgB,EAAE,EAAE;IACpBC,WAAW,EAAE;EACf,CAAC;AAEL,CAAC;AAED,MAAMC,UAAsB,GAAG,CAC7B;EACEC,IAAI,EAAEX,mBAAmB;EACzBY,SAAS,EAAE;IACTD,IAAI,EAAEX,mBAAmB;IACzBa,eAAe,EAAEZ;EACnB,CAAC;EACDa,YAAY,EAAE,CACZ;IAAEH,IAAI,EAAEZ,kBAAkB;IAAEgB,YAAY,EAAEb;EAAqB,CAAC;AAEpE,CAAC,CACF;AAED,MAAMc,yBAAyB,GAAG,CAChCtB,kBAAkB,CAACuB,SAAS,EAC5BvB,kBAAkB,CAACwB,SAAS,CAC7B;;AAED;AACA,OAAO,MAAMC,gBAAgB,SAASvB,eAAe,CAAgC;EACzEwB,YAAY,GAAGV,UAAU;EACzBW,gBAAgB,GAAG,OAAO;EAC1BC,aAAa,GAAGC,SAAS;EACzBC,WAAW,GAAG,IAAI3B,aAAa,CAAC,CAAC;EAEpC4B,WAAWA,CAChBC,MAAc,EACdC,MAAyD,EACzD;IACA,KAAK,CAACD,MAAM,EAAEC,MAAM,CAAC;;IAErB;IACA,IAAI,CAACC,UAAU,CAACC,gBAAgB,GAAG,EAAE;IAErC,IAAI,CAACC,sBAAsB,GAAG,MAC5B,IAAIhC,kBAAkB,CAAC;MACrBiC,SAAS,EAAEJ,MAAM,CAACI,SAAS;MAC3BC,KAAK,EAAE;QACLC,WAAW,EAAEjC,mBAAmB;QAChCkC,kBAAkB,EAAEjC;MACtB,CAAC;MACDkC,QAAQ,EAAGC,MAAM,IAAK,IAAI,CAACD,QAAQ,GAAGC,MAAM,CAAC;MAC7CC,iBAAiB,EAAGC,KAAK,IACvB,IAAI,CAACD,iBAAiB,GAAG;QAAET,UAAU,EAAE,IAAI,CAACA,UAAU;QAAE,GAAGU;MAAM,CAAC,CAAC;MACrEC,UAAU,EAAEA,CAACC,SAAS,EAAEC,eAAe,KAAK;QAC1C,IAAI,CAACb,UAAU,CAACc,KAAK,GAAG,MAAM;QAC9B,IAAI,CAACd,UAAU,CAACa,eAAe,GAAGA,eAAe;MACnD,CAAC;MACDE,OAAO,EAAGC,KAAK,IAAK,IAAI,CAACD,OAAO,GAAGC,KAAK,CAAC;MACzCC,UAAU,EAAEA,CAAA,KAAM;QAChBC,UAAU,CAAC,MAAM,KAAK,IAAI,CAACC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;MAC7C;IACF,CAAC,CAAC;EACN;EAEmBC,+BAA+BA,CAAA,EAAyB;IACzE,OAAO,CAAC,GAAGhC,yBAAyB,CAAC;EACvC;EAEUiC,mBAAmBA,CAAA,EAAmB;IAC9C;EACF;AACF","ignoreList":[]}
@@ -38,6 +38,7 @@ export const clockSyncCapabilityForDevice = deviceName => {
38
38
  return "unsupported";
39
39
  case IntegratedDevices.GENIAL_T31:
40
40
  case IntegratedDevices.ZH_SG_A606:
41
+ case IntegratedDevices.TRASENSE_S9:
41
42
  return "supported";
42
43
  default:
43
44
  return "unknown";
@@ -1 +1 @@
1
- {"version":3,"names":["IntegratedDevices","isClockSyncEnabled","options","enabled","getClockParts","date","timezone","year","getUTCFullYear","month","getUTCMonth","day","getUTCDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","clockSyncCapabilityForDevice","deviceName","BC01","MYSENSE","VEROVAL_ECG","AOJ20A","BP2","VIATOM_R20","VIATOM_R200","VIATOM_BBSM_BS1","VEROVAL_ACTIVITY","GENIAL_T31","ZH_SG_A606"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/clock-sync.ts"],"mappings":";;AAAA;;AAEA,SAASA,iBAAiB,QAAQ,yBAAsB;AAkBxD,OAAO,MAAMC,kBAAkB,GAAIC,OAA0B,IAC3DA,OAAO,EAAEC,OAAO,KAAK,KAAK;AAE5B,OAAO,MAAMC,aAAa,GAAGA,CAC3BC,IAAU,EACVC,QAA2B,GAAG,OAAO,KAErCA,QAAQ,KAAK,KAAK,GACd;EACEC,IAAI,EAAEF,IAAI,CAACG,cAAc,CAAC,CAAC;EAC3BC,KAAK,EAAEJ,IAAI,CAACK,WAAW,CAAC,CAAC,GAAG,CAAC;EAC7BC,GAAG,EAAEN,IAAI,CAACO,UAAU,CAAC,CAAC;EACtBC,KAAK,EAAER,IAAI,CAACS,WAAW,CAAC,CAAC;EACzBC,OAAO,EAAEV,IAAI,CAACW,aAAa,CAAC,CAAC;EAC7BC,OAAO,EAAEZ,IAAI,CAACa,aAAa,CAAC,CAAC;EAC7BC,YAAY,EAAEd,IAAI,CAACe,kBAAkB,CAAC;AACxC,CAAC,GACD;EACEb,IAAI,EAAEF,IAAI,CAACgB,WAAW,CAAC,CAAC;EACxBZ,KAAK,EAAEJ,IAAI,CAACiB,QAAQ,CAAC,CAAC,GAAG,CAAC;EAC1BX,GAAG,EAAEN,IAAI,CAACkB,OAAO,CAAC,CAAC;EACnBV,KAAK,EAAER,IAAI,CAACmB,QAAQ,CAAC,CAAC;EACtBT,OAAO,EAAEV,IAAI,CAACoB,UAAU,CAAC,CAAC;EAC1BR,OAAO,EAAEZ,IAAI,CAACqB,UAAU,CAAC,CAAC;EAC1BP,YAAY,EAAEd,IAAI,CAACsB,eAAe,CAAC;AACrC,CAAC;;AAEP;AACA,OAAO,MAAMC,4BAA4B,GACvCC,UAAkB,IACM;EACxB,QAAQA,UAAU;IAChB,KAAK7B,iBAAiB,CAAC8B,IAAI;IAC3B,KAAK9B,iBAAiB,CAAC+B,OAAO;IAC9B,KAAK/B,iBAAiB,CAACgC,WAAW;IAClC,KAAKhC,iBAAiB,CAACiC,MAAM;IAC7B,KAAKjC,iBAAiB,CAACkC,GAAG;IAC1B,KAAKlC,iBAAiB,CAACmC,UAAU;IACjC,KAAKnC,iBAAiB,CAACoC,WAAW;IAClC,KAAKpC,iBAAiB,CAACqC,eAAe;MACpC,OAAO,WAAW;IACpB,KAAKrC,iBAAiB,CAACsC,gBAAgB;MACrC,OAAO,aAAa;IACtB,KAAKtC,iBAAiB,CAACuC,UAAU;IACjC,KAAKvC,iBAAiB,CAACwC,UAAU;MAC/B,OAAO,WAAW;IACpB;MACE,OAAO,SAAS;EACpB;AACF,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["IntegratedDevices","isClockSyncEnabled","options","enabled","getClockParts","date","timezone","year","getUTCFullYear","month","getUTCMonth","day","getUTCDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","milliseconds","getUTCMilliseconds","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","clockSyncCapabilityForDevice","deviceName","BC01","MYSENSE","VEROVAL_ECG","AOJ20A","BP2","VIATOM_R20","VIATOM_R200","VIATOM_BBSM_BS1","VEROVAL_ACTIVITY","GENIAL_T31","ZH_SG_A606","TRASENSE_S9"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/clock-sync.ts"],"mappings":";;AAAA;;AAEA,SAASA,iBAAiB,QAAQ,yBAAsB;AAkBxD,OAAO,MAAMC,kBAAkB,GAAIC,OAA0B,IAC3DA,OAAO,EAAEC,OAAO,KAAK,KAAK;AAE5B,OAAO,MAAMC,aAAa,GAAGA,CAC3BC,IAAU,EACVC,QAA2B,GAAG,OAAO,KAErCA,QAAQ,KAAK,KAAK,GACd;EACEC,IAAI,EAAEF,IAAI,CAACG,cAAc,CAAC,CAAC;EAC3BC,KAAK,EAAEJ,IAAI,CAACK,WAAW,CAAC,CAAC,GAAG,CAAC;EAC7BC,GAAG,EAAEN,IAAI,CAACO,UAAU,CAAC,CAAC;EACtBC,KAAK,EAAER,IAAI,CAACS,WAAW,CAAC,CAAC;EACzBC,OAAO,EAAEV,IAAI,CAACW,aAAa,CAAC,CAAC;EAC7BC,OAAO,EAAEZ,IAAI,CAACa,aAAa,CAAC,CAAC;EAC7BC,YAAY,EAAEd,IAAI,CAACe,kBAAkB,CAAC;AACxC,CAAC,GACD;EACEb,IAAI,EAAEF,IAAI,CAACgB,WAAW,CAAC,CAAC;EACxBZ,KAAK,EAAEJ,IAAI,CAACiB,QAAQ,CAAC,CAAC,GAAG,CAAC;EAC1BX,GAAG,EAAEN,IAAI,CAACkB,OAAO,CAAC,CAAC;EACnBV,KAAK,EAAER,IAAI,CAACmB,QAAQ,CAAC,CAAC;EACtBT,OAAO,EAAEV,IAAI,CAACoB,UAAU,CAAC,CAAC;EAC1BR,OAAO,EAAEZ,IAAI,CAACqB,UAAU,CAAC,CAAC;EAC1BP,YAAY,EAAEd,IAAI,CAACsB,eAAe,CAAC;AACrC,CAAC;;AAEP;AACA,OAAO,MAAMC,4BAA4B,GACvCC,UAAkB,IACM;EACxB,QAAQA,UAAU;IAChB,KAAK7B,iBAAiB,CAAC8B,IAAI;IAC3B,KAAK9B,iBAAiB,CAAC+B,OAAO;IAC9B,KAAK/B,iBAAiB,CAACgC,WAAW;IAClC,KAAKhC,iBAAiB,CAACiC,MAAM;IAC7B,KAAKjC,iBAAiB,CAACkC,GAAG;IAC1B,KAAKlC,iBAAiB,CAACmC,UAAU;IACjC,KAAKnC,iBAAiB,CAACoC,WAAW;IAClC,KAAKpC,iBAAiB,CAACqC,eAAe;MACpC,OAAO,WAAW;IACpB,KAAKrC,iBAAiB,CAACsC,gBAAgB;MACrC,OAAO,aAAa;IACtB,KAAKtC,iBAAiB,CAACuC,UAAU;IACjC,KAAKvC,iBAAiB,CAACwC,UAAU;IACjC,KAAKxC,iBAAiB,CAACyC,WAAW;MAChC,OAAO,WAAW;IACpB;MACE,OAAO,SAAS;EACpB;AACF,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["IntegratedDevices"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/device-measurement-map.ts"],"mappings":";;AAiBA,SAASA,iBAAiB,QAAQ,yBAAsB;;AA2GxD;AACA;AACA;AACA","ignoreList":[]}
1
+ {"version":3,"names":["IntegratedDevices"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/device-measurement-map.ts"],"mappings":";;AAiBA,SAASA,iBAAiB,QAAQ,yBAAsB;;AAkHxD;AACA;AACA;AACA","ignoreList":[]}
@@ -57,6 +57,7 @@ export let IntegratedDevices = /*#__PURE__*/function (IntegratedDevices) {
57
57
  IntegratedDevices["PF10AW_ME"] = "PF10AW-ME";
58
58
  IntegratedDevices["SA10AW_PU"] = "SA10AW-PU";
59
59
  IntegratedDevices["PF10BW_VE"] = "PF10BW-VE";
60
+ IntegratedDevices["TRASENSE_S9"] = "Trasense S9";
60
61
  return IntegratedDevices;
61
62
  }({});
62
63
  //# sourceMappingURL=integrated-devices.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["IntegratedDevices"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/integrated-devices.ts"],"mappings":";;AAAA,WAAYA,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["IntegratedDevices"],"sourceRoot":"../../../../../src","sources":["modules/bt-management/types/integrated-devices.ts"],"mappings":";;AAAA,WAAYA,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA","ignoreList":[]}
@@ -9,5 +9,6 @@ export * from "./types/health-authorization-status.js";
9
9
  export * from "./types/health-sync-keys.js";
10
10
  export * from "./types/health-sync-batch-error.js";
11
11
  export * from "./hooks/use-health-import.js";
12
+ export { HEALTH_DATA_CATALOG, getHealthDataCoding } from "./utils/health-data-catalog.js";
12
13
  export { HealthAuthorizationContext, useHealthAuthorization } from "./contexts/health-authorization-context.js";
13
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["HealthAuthorizationContext","useHealthAuthorization"],"sourceRoot":"../../../../src","sources":["modules/data-sync/index.ts"],"mappings":";;AAAA,cAAc,2BAAwB;AACtC,cAAc,oCAAiC;AAC/C,cAAc,uDAAoD;AAClE,cAAc,0BAAuB;AACrC,cAAc,sCAAmC;AACjD,cAAc,wCAAqC;AACnD,cAAc,6BAA0B;AACxC,cAAc,oCAAiC;AAC/C,cAAc,8BAA2B;AACzC,SACEA,0BAA0B,EAC1BC,sBAAsB,QACjB,4CAAyC","ignoreList":[]}
1
+ {"version":3,"names":["HEALTH_DATA_CATALOG","getHealthDataCoding","HealthAuthorizationContext","useHealthAuthorization"],"sourceRoot":"../../../../src","sources":["modules/data-sync/index.ts"],"mappings":";;AAAA,cAAc,2BAAwB;AACtC,cAAc,oCAAiC;AAC/C,cAAc,uDAAoD;AAClE,cAAc,0BAAuB;AACrC,cAAc,sCAAmC;AACjD,cAAc,wCAAqC;AACnD,cAAc,6BAA0B;AACxC,cAAc,oCAAiC;AAC/C,cAAc,8BAA2B;AACzC,SAASA,mBAAmB,EAAEC,mBAAmB,QAAQ,gCAA6B;AACtF,SACEC,0BAA0B,EAC1BC,sBAAsB,QACjB,4CAAyC","ignoreList":[]}
@@ -71,7 +71,7 @@ export class BaseHealthSyncService {
71
71
  if (!data) {
72
72
  continue;
73
73
  }
74
- const latestValidStartDate = this.dataProcessor.getLatestValidStartDate(this.stateManager.latestObservationDates, data, getHealthDataMode(measurementTypeKey, data.mode));
74
+ const latestValidStartDate = this.dataProcessor.getLatestValidStartDate(this.stateManager.latestObservationDates, data, measurementTypeKey, getHealthDataMode(measurementTypeKey, data.mode));
75
75
  const totalCount = await this.dataProcessor.getTotalRecordsCountForType(measurementTypeKey, data, latestValidStartDate);
76
76
  this.progressManager.setTotalObservations(measurementTypeKey, totalCount);
77
77
  }
@@ -92,12 +92,13 @@ export class BaseHealthSyncService {
92
92
  }
93
93
  }
94
94
  async syncDataByType(measurementTypeKey, data) {
95
- const latestValidStartDate = this.dataProcessor.getLatestValidStartDate(this.stateManager.latestObservationDates, data, getHealthDataMode(measurementTypeKey, data.mode));
95
+ const latestValidStartDate = this.dataProcessor.getLatestValidStartDate(this.stateManager.latestObservationDates, data, measurementTypeKey, getHealthDataMode(measurementTypeKey, data.mode));
96
96
  let hasMore = true;
97
97
  while (hasMore && !this.stateManager.shouldStopSync) {
98
98
  const {
99
99
  observationBodies,
100
100
  observationSyncIds,
101
+ deletedObservationSyncIds,
101
102
  hasMore: currentHasMore,
102
103
  anchors
103
104
  } = await this.dataProcessor.getObservationBodiesForType(measurementTypeKey, data, latestValidStartDate);
@@ -106,25 +107,30 @@ export class BaseHealthSyncService {
106
107
  break;
107
108
  }
108
109
  const entries = this.dataProcessor.generateObservationEntries(observationBodies, observationSyncIds, getHealthDataMode(measurementTypeKey, data.mode));
109
- if (entries.length !== 0 && !this.stateManager.shouldStopSync) {
110
+ if ((entries.length !== 0 || deletedObservationSyncIds.length !== 0) && !this.stateManager.shouldStopSync) {
110
111
  try {
111
- const startedAt = Date.now();
112
- const result = await withSyncRetries(() => this.storageManager.saveObservations(entries), () => this.stateManager.shouldStopSync);
113
- if (this.stateManager.shouldStopSync) {
114
- return;
112
+ if (entries.length !== 0) {
113
+ const startedAt = Date.now();
114
+ const result = await withSyncRetries(() => this.storageManager.saveObservations(entries), () => this.stateManager.shouldStopSync);
115
+ if (this.stateManager.shouldStopSync) {
116
+ return;
117
+ }
118
+ const responseEntries = result.entry ?? [];
119
+ const savedCount = responseEntries.length ? responseEntries.filter(entry => entry.response?.status.startsWith("2")).length : entries.length;
120
+ const createdCount = responseEntries.filter(entry => entry.response?.status.startsWith("201")).length;
121
+ recordOvokMetric("ovok.health.samples.imported", createdCount, {
122
+ provider: this.getProviderName(),
123
+ measurementTypeKey
124
+ });
125
+ recordOvokDuration("ovok.measurement.save.duration", Date.now() - startedAt, {
126
+ provider: this.getProviderName()
127
+ });
128
+ this.stateManager.addResult(result);
129
+ this.progressManager.incrementSyncedObservations(measurementTypeKey, savedCount, createdCount);
130
+ }
131
+ if (deletedObservationSyncIds.length !== 0) {
132
+ await this.storageManager.deleteObservations(deletedObservationSyncIds, this.patientId);
115
133
  }
116
- const responseEntries = result.entry ?? [];
117
- const savedCount = responseEntries.length ? responseEntries.filter(entry => entry.response?.status.startsWith("2")).length : entries.length;
118
- const createdCount = responseEntries.filter(entry => entry.response?.status.startsWith("201")).length;
119
- recordOvokMetric("ovok.health.samples.imported", createdCount, {
120
- provider: this.getProviderName(),
121
- measurementTypeKey
122
- });
123
- recordOvokDuration("ovok.measurement.save.duration", Date.now() - startedAt, {
124
- provider: this.getProviderName()
125
- });
126
- this.stateManager.addResult(result);
127
- this.progressManager.incrementSyncedObservations(measurementTypeKey, savedCount, createdCount);
128
134
  this.storageManager.saveAnchors(anchors);
129
135
  } catch (error) {
130
136
  if (isSyncRetryCancelled(error) || this.stateManager.shouldStopSync) {