@ovok/native 1.7.0 → 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 (109) hide show
  1. package/lib/commonjs/modules/data-sync/index.js +15 -0
  2. package/lib/commonjs/modules/data-sync/index.js.map +1 -1
  3. package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js +25 -19
  4. package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js.map +1 -1
  5. package/lib/commonjs/modules/data-sync/services/managers/data-processor.js +73 -17
  6. package/lib/commonjs/modules/data-sync/services/managers/data-processor.js.map +1 -1
  7. package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js +14 -0
  8. package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js.map +1 -1
  9. package/lib/commonjs/modules/data-sync/utils/convert-generic-health-data.js +45 -7
  10. package/lib/commonjs/modules/data-sync/utils/convert-generic-health-data.js.map +1 -1
  11. package/lib/commonjs/modules/data-sync/utils/get-health-record-sync-id.js +15 -2
  12. package/lib/commonjs/modules/data-sync/utils/get-health-record-sync-id.js.map +1 -1
  13. package/lib/commonjs/modules/data-sync/utils/get-records-from-health-connect.js +103 -8
  14. package/lib/commonjs/modules/data-sync/utils/get-records-from-health-connect.js.map +1 -1
  15. package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js +66 -23
  16. package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
  17. package/lib/commonjs/modules/data-sync/utils/get-total-records-count.js +4 -1
  18. package/lib/commonjs/modules/data-sync/utils/get-total-records-count.js.map +1 -1
  19. package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js +3 -3
  20. package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
  21. package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js +364 -0
  22. package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js.map +1 -0
  23. package/lib/commonjs/modules/data-sync/utils/health-units.js +13 -11
  24. package/lib/commonjs/modules/data-sync/utils/health-units.js.map +1 -1
  25. package/lib/commonjs/modules/data-sync/utils/healthkit-data-types.js +34 -0
  26. package/lib/commonjs/modules/data-sync/utils/healthkit-data-types.js.map +1 -0
  27. package/lib/module/modules/data-sync/index.js +1 -0
  28. package/lib/module/modules/data-sync/index.js.map +1 -1
  29. package/lib/module/modules/data-sync/services/base-health-sync-service.js +25 -19
  30. package/lib/module/modules/data-sync/services/base-health-sync-service.js.map +1 -1
  31. package/lib/module/modules/data-sync/services/managers/data-processor.js +74 -18
  32. package/lib/module/modules/data-sync/services/managers/data-processor.js.map +1 -1
  33. package/lib/module/modules/data-sync/services/managers/storage-manager.js +14 -0
  34. package/lib/module/modules/data-sync/services/managers/storage-manager.js.map +1 -1
  35. package/lib/module/modules/data-sync/utils/convert-generic-health-data.js +45 -7
  36. package/lib/module/modules/data-sync/utils/convert-generic-health-data.js.map +1 -1
  37. package/lib/module/modules/data-sync/utils/get-health-record-sync-id.js +15 -2
  38. package/lib/module/modules/data-sync/utils/get-health-record-sync-id.js.map +1 -1
  39. package/lib/module/modules/data-sync/utils/get-records-from-health-connect.js +103 -8
  40. package/lib/module/modules/data-sync/utils/get-records-from-health-connect.js.map +1 -1
  41. package/lib/module/modules/data-sync/utils/get-samples-from-health.js +66 -22
  42. package/lib/module/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
  43. package/lib/module/modules/data-sync/utils/get-total-records-count.js +4 -1
  44. package/lib/module/modules/data-sync/utils/get-total-records-count.js.map +1 -1
  45. package/lib/module/modules/data-sync/utils/get-total-samples-count.js +2 -2
  46. package/lib/module/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
  47. package/lib/module/modules/data-sync/utils/health-data-catalog.js +360 -0
  48. package/lib/module/modules/data-sync/utils/health-data-catalog.js.map +1 -0
  49. package/lib/module/modules/data-sync/utils/health-units.js +13 -11
  50. package/lib/module/modules/data-sync/utils/health-units.js.map +1 -1
  51. package/lib/module/modules/data-sync/utils/healthkit-data-types.js +26 -0
  52. package/lib/module/modules/data-sync/utils/healthkit-data-types.js.map +1 -0
  53. package/lib/typescript/commonjs/src/modules/data-sync/index.d.ts +1 -0
  54. package/lib/typescript/commonjs/src/modules/data-sync/index.d.ts.map +1 -1
  55. package/lib/typescript/commonjs/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
  56. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts +2 -1
  57. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
  58. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts +2 -0
  59. package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
  60. package/lib/typescript/commonjs/src/modules/data-sync/types/convert-data-props.d.ts +2 -0
  61. package/lib/typescript/commonjs/src/modules/data-sync/types/convert-data-props.d.ts.map +1 -1
  62. package/lib/typescript/commonjs/src/modules/data-sync/types/data-from-provider-result.d.ts +4 -0
  63. package/lib/typescript/commonjs/src/modules/data-sync/types/data-from-provider-result.d.ts.map +1 -1
  64. package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-props.d.ts +6 -1
  65. package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-props.d.ts.map +1 -1
  66. package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-generic-health-data.d.ts +1 -1
  67. package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-generic-health-data.d.ts.map +1 -1
  68. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-health-record-sync-id.d.ts +9 -1
  69. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-health-record-sync-id.d.ts.map +1 -1
  70. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-records-from-health-connect.d.ts.map +1 -1
  71. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts +49 -4
  72. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
  73. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-records-count.d.ts.map +1 -1
  74. package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
  75. package/lib/typescript/commonjs/src/modules/data-sync/utils/health-data-catalog.d.ts +30 -0
  76. package/lib/typescript/commonjs/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -0
  77. package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts +1 -1
  78. package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
  79. package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts +11 -0
  80. package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -0
  81. package/lib/typescript/module/src/modules/data-sync/index.d.ts +1 -0
  82. package/lib/typescript/module/src/modules/data-sync/index.d.ts.map +1 -1
  83. package/lib/typescript/module/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
  84. package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts +2 -1
  85. package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
  86. package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts +2 -0
  87. package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
  88. package/lib/typescript/module/src/modules/data-sync/types/convert-data-props.d.ts +2 -0
  89. package/lib/typescript/module/src/modules/data-sync/types/convert-data-props.d.ts.map +1 -1
  90. package/lib/typescript/module/src/modules/data-sync/types/data-from-provider-result.d.ts +4 -0
  91. package/lib/typescript/module/src/modules/data-sync/types/data-from-provider-result.d.ts.map +1 -1
  92. package/lib/typescript/module/src/modules/data-sync/types/health-sync-props.d.ts +6 -1
  93. package/lib/typescript/module/src/modules/data-sync/types/health-sync-props.d.ts.map +1 -1
  94. package/lib/typescript/module/src/modules/data-sync/utils/convert-generic-health-data.d.ts +1 -1
  95. package/lib/typescript/module/src/modules/data-sync/utils/convert-generic-health-data.d.ts.map +1 -1
  96. package/lib/typescript/module/src/modules/data-sync/utils/get-health-record-sync-id.d.ts +9 -1
  97. package/lib/typescript/module/src/modules/data-sync/utils/get-health-record-sync-id.d.ts.map +1 -1
  98. package/lib/typescript/module/src/modules/data-sync/utils/get-records-from-health-connect.d.ts.map +1 -1
  99. package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts +49 -4
  100. package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
  101. package/lib/typescript/module/src/modules/data-sync/utils/get-total-records-count.d.ts.map +1 -1
  102. package/lib/typescript/module/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
  103. package/lib/typescript/module/src/modules/data-sync/utils/health-data-catalog.d.ts +30 -0
  104. package/lib/typescript/module/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -0
  105. package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts +1 -1
  106. package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
  107. package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts +11 -0
  108. package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -0
  109. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["recordOvokDuration","recordOvokMetric","withOvokSpan","DEFAULT_HEALTH_SYNC_CHUNK_SIZE","toHealthSyncError","getHealthDataMode","isSyncRetryCancelled","withSyncRetries","DataProcessor","StorageManager","SyncProgressManager","SyncStateManager","BaseHealthSyncService","constructor","props","client","patientId","dataToSync","onSyncError","progressManager","updateProgress","stateManager","storageManager","getProviderName","dataProcessor","chunkSize","getTotalCountsFunction","getDataFromProviderFunction","getConverterFunction","startSync","once","provider","runSync","isInitialized","Error","resume","setNotStartedStatuses","initialDataFetched","initializeSync","processAllDataTypes","setPauseStatuses","pauseReason","error","stopSync","resetAll","reset","shouldStopSync","pauseSync","reason","pause","latestObservationDates","getLatestObservationDates","calculateTotalCounts","key","Object","keys","measurementTypeKey","data","getDataForMeasurementType","latestValidStartDate","getLatestValidStartDate","mode","totalCount","getTotalRecordsCountForType","setTotalObservations","setStatus","syncDataByType","hasMore","observationBodies","observationSyncIds","currentHasMore","anchors","getObservationBodiesForType","entries","generateObservationEntries","length","startedAt","Date","now","result","saveObservations","responseEntries","entry","savedCount","filter","response","status","startsWith","createdCount","addResult","incrementSyncedObservations","saveAnchors"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/services/base-health-sync-service.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["recordOvokDuration","recordOvokMetric","withOvokSpan","DEFAULT_HEALTH_SYNC_CHUNK_SIZE","toHealthSyncError","getHealthDataMode","isSyncRetryCancelled","withSyncRetries","DataProcessor","StorageManager","SyncProgressManager","SyncStateManager","BaseHealthSyncService","constructor","props","client","patientId","dataToSync","onSyncError","progressManager","updateProgress","stateManager","storageManager","getProviderName","dataProcessor","chunkSize","getTotalCountsFunction","getDataFromProviderFunction","getConverterFunction","startSync","once","provider","runSync","isInitialized","Error","resume","setNotStartedStatuses","initialDataFetched","initializeSync","processAllDataTypes","setPauseStatuses","pauseReason","error","stopSync","resetAll","reset","shouldStopSync","pauseSync","reason","pause","latestObservationDates","getLatestObservationDates","calculateTotalCounts","key","Object","keys","measurementTypeKey","data","getDataForMeasurementType","latestValidStartDate","getLatestValidStartDate","mode","totalCount","getTotalRecordsCountForType","setTotalObservations","setStatus","syncDataByType","hasMore","observationBodies","observationSyncIds","deletedObservationSyncIds","currentHasMore","anchors","getObservationBodiesForType","entries","generateObservationEntries","length","startedAt","Date","now","result","saveObservations","responseEntries","entry","savedCount","filter","response","status","startsWith","createdCount","addResult","incrementSyncedObservations","deleteObservations","saveAnchors"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/services/base-health-sync-service.ts"],"mappings":"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","ignoreList":[]}
@@ -1,12 +1,15 @@
1
1
  "use strict";
2
2
 
3
+ /* eslint-disable max-lines */
4
+
3
5
  import { MeasurementTypeKey } from "@ovok/core";
4
6
  import { getHealthDataMode, HealthDataType } from "../../types/health-sync-keys.js";
5
7
  import { generateObservationEntry } from "../../utils/generate-observation-entry.js";
6
- import { getHealthRecordSyncId } from "../../utils/get-health-record-sync-id.js";
8
+ import { getHealthRecordDeletionSyncId, getHealthRecordSyncId } from "../../utils/get-health-record-sync-id.js";
7
9
  import { getLatestObservationDatesByCode } from "../../utils/get-latest-observation-dates-by-code.js";
8
10
  import { getLatestValidStartDate } from "../../utils/get-latest-valid-start-date.js";
9
11
  import { groupSleepSamples } from "../../utils/group-sleep-samples.js";
12
+ import { getHealthDataCoding } from "../../utils/health-data-catalog.js";
10
13
  export class DataProcessor {
11
14
  constructor(client, patientId, provider, chunkSize, storageManager, getTotalCountsFunction, getDataFromProviderFunction, getConverterFunction) {
12
15
  this.client = client;
@@ -19,7 +22,11 @@ export class DataProcessor {
19
22
  this.getConverterFunction = getConverterFunction;
20
23
  }
21
24
  extractCodes(dataToSync) {
22
- return Object.values(dataToSync).flatMap(data => data?.typeIdentifiers.map(identifier => identifier.code) ?? []);
25
+ const entries = Object.entries(dataToSync);
26
+ return entries.flatMap(([key, data]) => data?.typeIdentifiers.map(({
27
+ typeIdentifier,
28
+ code
29
+ }) => String(code ?? getHealthDataCoding(this.provider, String(typeIdentifier), getHealthDataMode(key, data.mode)).code)) ?? []);
23
30
  }
24
31
  async getLatestObservationDates(dataToSync) {
25
32
  const codes = this.extractCodes(dataToSync);
@@ -47,24 +54,57 @@ export class DataProcessor {
47
54
  }
48
55
  async getObservationBodiesForType(measurementTypeKey, data, latestValidStartDate) {
49
56
  const mode = getHealthDataMode(measurementTypeKey, data.mode);
50
- const typeIdentifierCodes = Object.fromEntries(data.typeIdentifiers.map(({
57
+ const configuredCodings = data.typeIdentifiers.map(({
58
+ typeIdentifier,
59
+ code,
60
+ system,
61
+ display
62
+ }) => {
63
+ const catalogCoding = getHealthDataCoding(this.provider, String(typeIdentifier), mode);
64
+ return {
65
+ typeIdentifier: String(typeIdentifier),
66
+ code: String(code ?? catalogCoding.code),
67
+ system: system ?? (code ? undefined : catalogCoding.system),
68
+ display: display ?? (code ? undefined : catalogCoding.display)
69
+ };
70
+ });
71
+ const typeIdentifierCodes = Object.fromEntries(configuredCodings.map(({
51
72
  typeIdentifier,
52
73
  code
53
- }) => [String(typeIdentifier), String(code)]));
74
+ }) => [typeIdentifier, code]));
75
+ const typeIdentifierCodeSystems = Object.fromEntries(configuredCodings.flatMap(({
76
+ typeIdentifier,
77
+ system
78
+ }) => system ? [[typeIdentifier, system]] : []));
79
+ const typeIdentifierCodeDisplays = Object.fromEntries(configuredCodings.flatMap(({
80
+ typeIdentifier,
81
+ display
82
+ }) => display ? [[typeIdentifier, display]] : []));
54
83
  const results = await Promise.all(data.typeIdentifiers?.map(async ({
55
84
  typeIdentifier
56
85
  }) => {
57
86
  const anchor = this.storageManager.getAnchor(typeIdentifier);
58
- return this.getDataFromProviderFunction({
59
- typeIdentifier: typeIdentifier,
60
- startDate: latestValidStartDate?.toISOString(),
61
- anchor,
62
- chunkSize: this.chunkSize,
63
- mode
64
- });
87
+ return {
88
+ typeIdentifier,
89
+ result: await this.getDataFromProviderFunction({
90
+ typeIdentifier: typeIdentifier,
91
+ startDate: mode === "daily-total" || mode === "daily-summary" ? data.minDate?.toISOString() : latestValidStartDate?.toISOString(),
92
+ anchor,
93
+ chunkSize: this.chunkSize,
94
+ mode
95
+ })
96
+ };
65
97
  }));
66
- const newAnchors = results.map(result => result.anchor).flat().filter(Boolean);
67
- const allData = results.flatMap(result => result.data);
98
+ const newAnchors = results.map(({
99
+ result
100
+ }) => result.anchor).flat().filter(Boolean);
101
+ const allData = results.flatMap(({
102
+ result
103
+ }) => result.data);
104
+ const deletedObservationSyncIds = results.flatMap(({
105
+ typeIdentifier,
106
+ result
107
+ }) => (result.deletedRecordIds ?? []).map(recordId => getHealthRecordDeletionSyncId(typeIdentifier, recordId, measurementTypeKey, this.provider)));
68
108
  const dataGroups = this.provider === "apple-health" && measurementTypeKey === HealthDataType.sleep ? groupSleepSamples(allData) : this.provider === "apple-health" && measurementTypeKey === MeasurementTypeKey.bloodPressure ? Array.from(allData.reduce((groups, sample) => {
69
109
  const value = sample;
70
110
  const key = `${new Date(value.startDate ?? 0).getTime()}:${new Date(value.endDate ?? value.startDate ?? 0).getTime()}`;
@@ -80,13 +120,18 @@ export class DataProcessor {
80
120
  measurementTypeKey,
81
121
  typeIdentifier: data.typeIdentifiers?.length === 1 ? String(data.typeIdentifiers[0]?.typeIdentifier) : undefined,
82
122
  mode,
83
- typeIdentifierCodes
123
+ typeIdentifierCodes,
124
+ typeIdentifierCodeSystems,
125
+ typeIdentifierCodeDisplays
84
126
  })));
85
127
  const observationSyncIds = dataGroups.map(group => getHealthRecordSyncId(group[0], measurementTypeKey));
86
128
  return {
87
129
  observationBodies,
88
130
  observationSyncIds,
89
- hasMore: results.some(result => result.data.length >= this.chunkSize && result.anchor),
131
+ deletedObservationSyncIds,
132
+ hasMore: results.some(({
133
+ result
134
+ }) => result.hasMore ?? ((result.data.length >= this.chunkSize || (result.deletedRecordIds?.length ?? 0) >= this.chunkSize) && Boolean(result.anchor))),
90
135
  anchors: newAnchors
91
136
  };
92
137
  }
@@ -99,11 +144,22 @@ export class DataProcessor {
99
144
  patientId: this.patientId
100
145
  });
101
146
  }
102
- getLatestValidStartDate(latestObservationDates, data, mode) {
147
+ getLatestValidStartDate(latestObservationDates, data, measurementTypeKey, mode) {
148
+ const resolvedMode = getHealthDataMode(measurementTypeKey, mode ?? data.mode);
149
+ const resolvedData = {
150
+ ...data,
151
+ typeIdentifiers: data.typeIdentifiers.map(({
152
+ typeIdentifier,
153
+ code
154
+ }) => ({
155
+ typeIdentifier,
156
+ code: code ?? getHealthDataCoding(this.provider, String(typeIdentifier), resolvedMode).code
157
+ }))
158
+ };
103
159
  return getLatestValidStartDate({
104
160
  latestObservationDates,
105
- data: data,
106
- mode
161
+ data: resolvedData,
162
+ mode: resolvedMode
107
163
  });
108
164
  }
109
165
  }
@@ -1 +1 @@
1
- {"version":3,"names":["MeasurementTypeKey","getHealthDataMode","HealthDataType","generateObservationEntry","getHealthRecordSyncId","getLatestObservationDatesByCode","getLatestValidStartDate","groupSleepSamples","DataProcessor","constructor","client","patientId","provider","chunkSize","storageManager","getTotalCountsFunction","getDataFromProviderFunction","getConverterFunction","extractCodes","dataToSync","Object","values","flatMap","data","typeIdentifiers","map","identifier","code","getLatestObservationDates","codes","getTotalRecordsCountForType","measurementTypeKey","latestValidStartDate","mode","totalCounts","Promise","all","typeIdentifier","anchor","getAnchor","startDate","toISOString","reduce","acc","count","getObservationBodiesForType","typeIdentifierCodes","fromEntries","String","results","newAnchors","result","flat","filter","Boolean","allData","dataGroups","sleep","bloodPressure","Array","from","groups","sample","value","key","Date","getTime","endDate","group","get","push","set","Map","observationBodies","length","undefined","observationSyncIds","hasMore","some","anchors","generateObservationEntries","groupedObservationBodies","groupedObservationSyncIds","latestObservationDates"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/services/managers/data-processor.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["MeasurementTypeKey","getHealthDataMode","HealthDataType","generateObservationEntry","getHealthRecordDeletionSyncId","getHealthRecordSyncId","getLatestObservationDatesByCode","getLatestValidStartDate","groupSleepSamples","getHealthDataCoding","DataProcessor","constructor","client","patientId","provider","chunkSize","storageManager","getTotalCountsFunction","getDataFromProviderFunction","getConverterFunction","extractCodes","dataToSync","entries","Object","flatMap","key","data","typeIdentifiers","map","typeIdentifier","code","String","mode","getLatestObservationDates","codes","getTotalRecordsCountForType","measurementTypeKey","latestValidStartDate","totalCounts","Promise","all","anchor","getAnchor","startDate","toISOString","reduce","acc","count","getObservationBodiesForType","configuredCodings","system","display","catalogCoding","undefined","typeIdentifierCodes","fromEntries","typeIdentifierCodeSystems","typeIdentifierCodeDisplays","results","result","minDate","newAnchors","flat","filter","Boolean","allData","deletedObservationSyncIds","deletedRecordIds","recordId","dataGroups","sleep","bloodPressure","Array","from","groups","sample","value","Date","getTime","endDate","group","get","push","set","Map","values","observationBodies","length","observationSyncIds","hasMore","some","anchors","generateObservationEntries","groupedObservationBodies","groupedObservationSyncIds","latestObservationDates","resolvedMode","resolvedData"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/services/managers/data-processor.ts"],"mappings":"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","ignoreList":[]}
@@ -2,6 +2,8 @@
2
2
 
3
3
  import { saveBundleObservations } from "../../utils/save-bundle-observations.js";
4
4
  export class StorageManager {
5
+ static SYNC_ID_SYSTEM = "https://api.ovok.com/fhir/StructureDefinition/observation-sync-id";
6
+
5
7
  /**
6
8
  * Where an anchor goes when the host client has no storage.
7
9
  *
@@ -30,6 +32,18 @@ export class StorageManager {
30
32
  client: this.client
31
33
  });
32
34
  }
35
+ async deleteObservations(syncIds, patientId) {
36
+ for (const syncId of new Set(syncIds)) {
37
+ const observations = [];
38
+ for await (const page of this.client.searchResourcePages("Observation", {
39
+ subject: `Patient/${patientId}`,
40
+ identifier: `${StorageManager.SYNC_ID_SYSTEM}|${this.provider}:${syncId}`
41
+ })) {
42
+ observations.push(...page);
43
+ }
44
+ await Promise.all(observations.filter(observation => observation.id).map(observation => this.client.deleteResource("Observation", observation.id)));
45
+ }
46
+ }
33
47
  saveAnchor(typeIdentifier, anchor) {
34
48
  const key = this.anchorKey(typeIdentifier);
35
49
  if (this.client.clientStorage) {
@@ -1 +1 @@
1
- {"version":3,"names":["saveBundleObservations","StorageManager","inMemoryAnchors","Map","constructor","client","provider","saveObservations","entries","saveAnchor","typeIdentifier","anchor","key","anchorKey","clientStorage","setString","set","getAnchor","getString","get","saveAnchors","anchors","forEach"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/services/managers/storage-manager.ts"],"mappings":";;AAIA,SAASA,sBAAsB,QAAQ,yCAAsC;AAE7E,OAAO,MAAMC,cAAc,CAAC;EAC1B;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACmBC,eAAe,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAE5DC,WAAWA,CACDC,MAAkB,EAClBC,QAAwB,EAChC;IAAA,KAFQD,MAAkB,GAAlBA,MAAkB;IAAA,KAClBC,QAAwB,GAAxBA,QAAwB;EAC/B;EAEH,MAAMC,gBAAgBA,CACpBC,OAAgE,EAClC;IAC9B,OAAOR,sBAAsB,CAAC;MAC5BQ,OAAO;MACPH,MAAM,EAAE,IAAI,CAACA;IACf,CAAC,CAAC;EACJ;EAEAI,UAAUA,CAACC,cAAsB,EAAEC,MAAc,EAAQ;IACvD,MAAMC,GAAG,GAAG,IAAI,CAACC,SAAS,CAACH,cAAc,CAAC;IAE1C,IAAI,IAAI,CAACL,MAAM,CAACS,aAAa,EAAE;MAC7B,IAAI,CAACT,MAAM,CAACS,aAAa,CAACC,SAAS,CAACH,GAAG,EAAED,MAAM,CAAC;MAEhD;IACF;IAEA,IAAI,CAACT,eAAe,CAACc,GAAG,CAACJ,GAAG,EAAED,MAAM,CAAC;EACvC;EAEAM,SAASA,CAACP,cAAsB,EAAsB;IACpD,MAAME,GAAG,GAAG,IAAI,CAACC,SAAS,CAACH,cAAc,CAAC;IAE1C,OAAO,IAAI,CAACL,MAAM,CAACS,aAAa,GAC5B,IAAI,CAACT,MAAM,CAACS,aAAa,CAACI,SAAS,CAACN,GAAG,CAAC,GACxC,IAAI,CAACV,eAAe,CAACiB,GAAG,CAACP,GAAG,CAAC;EACnC;EAEQC,SAASA,CAACH,cAAsB,EAAU;IAChD,OAAO,GAAG,IAAI,CAACJ,QAAQ,SAASI,cAAc,SAAS;EACzD;EAEAU,WAAWA,CACTC,OAA0D,EACpD;IACNA,OAAO,CAACC,OAAO,CAAC,CAAC;MAAEZ,cAAc;MAAEC;IAAO,CAAC,KAAK;MAC9C,IAAI,CAACF,UAAU,CAACC,cAAc,EAAEC,MAAM,CAAC;IACzC,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
1
+ {"version":3,"names":["saveBundleObservations","StorageManager","SYNC_ID_SYSTEM","inMemoryAnchors","Map","constructor","client","provider","saveObservations","entries","deleteObservations","syncIds","patientId","syncId","Set","observations","page","searchResourcePages","subject","identifier","push","Promise","all","filter","observation","id","map","deleteResource","saveAnchor","typeIdentifier","anchor","key","anchorKey","clientStorage","setString","set","getAnchor","getString","get","saveAnchors","anchors","forEach"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/services/managers/storage-manager.ts"],"mappings":";;AAIA,SAASA,sBAAsB,QAAQ,yCAAsC;AAE7E,OAAO,MAAMC,cAAc,CAAC;EAC1B,OAAwBC,cAAc,GACpC,mEAAmE;;EAErE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACmBC,eAAe,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAE5DC,WAAWA,CACDC,MAAkB,EAClBC,QAAwB,EAChC;IAAA,KAFQD,MAAkB,GAAlBA,MAAkB;IAAA,KAClBC,QAAwB,GAAxBA,QAAwB;EAC/B;EAEH,MAAMC,gBAAgBA,CACpBC,OAAgE,EAClC;IAC9B,OAAOT,sBAAsB,CAAC;MAC5BS,OAAO;MACPH,MAAM,EAAE,IAAI,CAACA;IACf,CAAC,CAAC;EACJ;EAEA,MAAMI,kBAAkBA,CACtBC,OAAiB,EACjBC,SAAiB,EACF;IACf,KAAK,MAAMC,MAAM,IAAI,IAAIC,GAAG,CAACH,OAAO,CAAC,EAAE;MACrC,MAAMI,YAAY,GAAG,EAAE;MAEvB,WAAW,MAAMC,IAAI,IAAI,IAAI,CAACV,MAAM,CAACW,mBAAmB,CAAC,aAAa,EAAE;QACtEC,OAAO,EAAE,WAAWN,SAAS,EAAE;QAC/BO,UAAU,EAAE,GAAGlB,cAAc,CAACC,cAAc,IAAI,IAAI,CAACK,QAAQ,IAAIM,MAAM;MACzE,CAAC,CAAC,EAAE;QACFE,YAAY,CAACK,IAAI,CAAC,GAAGJ,IAAI,CAAC;MAC5B;MAEA,MAAMK,OAAO,CAACC,GAAG,CACfP,YAAY,CACTQ,MAAM,CAAEC,WAAW,IAAKA,WAAW,CAACC,EAAE,CAAC,CACvCC,GAAG,CAAEF,WAAW,IACf,IAAI,CAAClB,MAAM,CAACqB,cAAc,CAAC,aAAa,EAAEH,WAAW,CAACC,EAAG,CAC3D,CACJ,CAAC;IACH;EACF;EAEAG,UAAUA,CAACC,cAAsB,EAAEC,MAAc,EAAQ;IACvD,MAAMC,GAAG,GAAG,IAAI,CAACC,SAAS,CAACH,cAAc,CAAC;IAE1C,IAAI,IAAI,CAACvB,MAAM,CAAC2B,aAAa,EAAE;MAC7B,IAAI,CAAC3B,MAAM,CAAC2B,aAAa,CAACC,SAAS,CAACH,GAAG,EAAED,MAAM,CAAC;MAEhD;IACF;IAEA,IAAI,CAAC3B,eAAe,CAACgC,GAAG,CAACJ,GAAG,EAAED,MAAM,CAAC;EACvC;EAEAM,SAASA,CAACP,cAAsB,EAAsB;IACpD,MAAME,GAAG,GAAG,IAAI,CAACC,SAAS,CAACH,cAAc,CAAC;IAE1C,OAAO,IAAI,CAACvB,MAAM,CAAC2B,aAAa,GAC5B,IAAI,CAAC3B,MAAM,CAAC2B,aAAa,CAACI,SAAS,CAACN,GAAG,CAAC,GACxC,IAAI,CAAC5B,eAAe,CAACmC,GAAG,CAACP,GAAG,CAAC;EACnC;EAEQC,SAASA,CAACH,cAAsB,EAAU;IAChD,OAAO,GAAG,IAAI,CAACtB,QAAQ,SAASsB,cAAc,SAAS;EACzD;EAEAU,WAAWA,CACTC,OAA0D,EACpD;IACNA,OAAO,CAACC,OAAO,CAAC,CAAC;MAAEZ,cAAc;MAAEC;IAAO,CAAC,KAAK;MAC9C,IAAI,CAACF,UAAU,CAACC,cAAc,EAAEC,MAAM,CAAC;IACzC,CAAC,CAAC;EACJ;AACF","ignoreList":[]}
@@ -6,12 +6,15 @@ import { isAggregatedHealthData } from "../types/health-data.js";
6
6
  import { getHealthObservationDevice } from "./health-observation-device.js";
7
7
  const FHIR_UNIT_SYSTEM = "http://unitsofmeasure.org";
8
8
  const LOINC_SYSTEM = "http://loinc.org";
9
+ const HEALTH_RECORD_DATA_EXTENSION = "https://api.ovok.com/fhir/StructureDefinition/health-record-data";
9
10
  export const convertGenericHealthDataToObservation = async ({
10
11
  data,
11
12
  patientId,
12
13
  mode,
13
14
  typeIdentifier: configuredTypeIdentifier,
14
- typeIdentifierCodes
15
+ typeIdentifierCodes,
16
+ typeIdentifierCodeSystems,
17
+ typeIdentifierCodeDisplays
15
18
  }) => {
16
19
  const first = data[0];
17
20
  if (!first) {
@@ -19,7 +22,10 @@ export const convertGenericHealthDataToObservation = async ({
19
22
  }
20
23
  const value = first;
21
24
  const typeIdentifier = String(configuredTypeIdentifier ?? value.typeIdentifier ?? value.quantityType ?? value.categoryType ?? value.recordType ?? "health-data");
22
- const code = typeIdentifierCodes?.[typeIdentifier] ?? typeIdentifier;
25
+ const configuredCode = typeIdentifierCodes?.[typeIdentifier];
26
+ const code = configuredCode ?? typeIdentifier;
27
+ const configuredSystem = typeIdentifierCodeSystems?.[typeIdentifier];
28
+ const system = configuredSystem === LOINC_SYSTEM ? configuredCode && isLoincCode(configuredCode) ? LOINC_SYSTEM : undefined : configuredSystem;
23
29
  const interval = getInterval(data);
24
30
  const measurement = getMeasurement(first, mode, interval);
25
31
  if (!measurement || !patientId) {
@@ -43,13 +49,22 @@ export const convertGenericHealthDataToObservation = async ({
43
49
  },
44
50
  code: {
45
51
  coding: [{
46
- system: LOINC_SYSTEM,
47
- code
52
+ ...(system ? {
53
+ system
54
+ } : {}),
55
+ code,
56
+ ...(typeIdentifierCodeDisplays?.[typeIdentifier] ? {
57
+ display: typeIdentifierCodeDisplays[typeIdentifier]
58
+ } : {})
48
59
  }]
49
60
  },
50
61
  ...(device ? {
51
62
  device
52
63
  } : {}),
64
+ extension: [{
65
+ url: HEALTH_RECORD_DATA_EXTENSION,
66
+ valueString: JSON.stringify(data.map(toPortableRecordData))
67
+ }],
53
68
  ...(interval ? {
54
69
  effectivePeriod: {
55
70
  start: interval.start.toISOString(),
@@ -69,11 +84,32 @@ export const convertGenericHealthDataToObservation = async ({
69
84
  }
70
85
  return [observation];
71
86
  };
87
+ const isLoincCode = code => /^\d+(?:-\d+)?$/.test(code);
88
+ const OMITTED_RECORD_FIELDS = new Set(["device", "metadata", "sourceRevision", "uuid"]);
89
+
90
+ /**
91
+ * Keep structured platform fields that do not fit value[x] without copying
92
+ * platform identifiers or device/source metadata into a free-text field.
93
+ */
94
+ const toPortableRecordData = value => {
95
+ if (value instanceof Date) {
96
+ return value.toISOString();
97
+ }
98
+ if (Array.isArray(value)) {
99
+ return value.map(toPortableRecordData);
100
+ }
101
+ if (typeof value !== "object" || value === null) {
102
+ return value;
103
+ }
104
+ return Object.fromEntries(Object.entries(value).filter(([key]) => !OMITTED_RECORD_FIELDS.has(key)).map(([key, child]) => [key, toPortableRecordData(child)]));
105
+ };
72
106
  const getMeasurement = (value, mode, interval) => {
73
107
  const raw = value;
74
108
  if (isAggregatedHealthData(value)) {
75
109
  const number = value.kind === "daily-summary" ? value.average : value.value;
76
- return number === undefined ? undefined : {
110
+ return number === undefined ? {
111
+ valueString: JSON.stringify(toPortableRecordData(value)) ?? String(value)
112
+ } : {
77
113
  valueQuantity: quantity(number, value.unit)
78
114
  };
79
115
  }
@@ -85,7 +121,9 @@ const getMeasurement = (value, mode, interval) => {
85
121
  const extracted = extractValue(raw);
86
122
  return extracted ? {
87
123
  valueQuantity: quantity(extracted.value, extracted.unit)
88
- } : undefined;
124
+ } : {
125
+ valueString: JSON.stringify(toPortableRecordData(raw)) ?? String(raw)
126
+ };
89
127
  };
90
128
  const extractValue = raw => {
91
129
  if (typeof raw.quantity === "number") {
@@ -221,7 +259,7 @@ const getStableObservationId = ({
221
259
  measurement
222
260
  }) => {
223
261
  const time = interval ? `${interval.start.toISOString()}-${interval.end.toISOString()}` : date?.toISOString() ?? "undated";
224
- const value = measurement.valueQuantity?.value ?? "empty";
262
+ const value = measurement.valueQuantity?.value ?? measurement.valueString ?? "empty";
225
263
  return `health-${[typeIdentifier, code, time, value].join("-").replace(/[^a-zA-Z0-9.-]/g, "-").slice(0, 64)}`;
226
264
  };
227
265
  //# sourceMappingURL=convert-generic-health-data.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["isAggregatedHealthData","getHealthObservationDevice","FHIR_UNIT_SYSTEM","LOINC_SYSTEM","convertGenericHealthDataToObservation","data","patientId","mode","typeIdentifier","configuredTypeIdentifier","typeIdentifierCodes","first","value","String","quantityType","categoryType","recordType","code","interval","getInterval","measurement","getMeasurement","metadata","getMetadata","device","observationDate","start","getDate","observation","resourceType","id","getStableObservationId","date","status","subject","reference","coding","system","effectivePeriod","toISOString","end","effectiveDateTime","component","minimum","undefined","unit","maximum","stageComponents","getSleepStageComponents","length","raw","number","kind","average","valueQuantity","quantity","getTime","extracted","extractValue","candidates","containerKey","valueKey","fallbackUnit","container","normalizeUnit","alternateCandidates","scalarCandidates","key","intervals","map","item","startValue","startDate","startTime","Date","endValue","endDate","endTime","Number","isNaN","filter","Boolean","Math","min","max","time","parsed","sourceRevision","source","manufacturer","dataOrigin","model","sourceApp","name","recordingMethod","flatMap","stages","duration","isFinite","stage","label","text","kilometers","meters","miles","kilograms","grams","milligrams","kilocalories","calories","minutes","seconds","beatsPerMinute","join","replace","slice"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-generic-health-data.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["isAggregatedHealthData","getHealthObservationDevice","FHIR_UNIT_SYSTEM","LOINC_SYSTEM","HEALTH_RECORD_DATA_EXTENSION","convertGenericHealthDataToObservation","data","patientId","mode","typeIdentifier","configuredTypeIdentifier","typeIdentifierCodes","typeIdentifierCodeSystems","typeIdentifierCodeDisplays","first","value","String","quantityType","categoryType","recordType","configuredCode","code","configuredSystem","system","isLoincCode","undefined","interval","getInterval","measurement","getMeasurement","metadata","getMetadata","device","observationDate","start","getDate","observation","resourceType","id","getStableObservationId","date","status","subject","reference","coding","display","extension","url","valueString","JSON","stringify","map","toPortableRecordData","effectivePeriod","toISOString","end","effectiveDateTime","component","minimum","unit","maximum","stageComponents","getSleepStageComponents","length","test","OMITTED_RECORD_FIELDS","Set","Date","Array","isArray","Object","fromEntries","entries","filter","key","has","child","raw","number","kind","average","valueQuantity","quantity","getTime","extracted","extractValue","candidates","containerKey","valueKey","fallbackUnit","container","normalizeUnit","alternateCandidates","scalarCandidates","intervals","item","startValue","startDate","startTime","endValue","endDate","endTime","Number","isNaN","Boolean","Math","min","max","time","parsed","sourceRevision","source","manufacturer","dataOrigin","model","sourceApp","name","recordingMethod","flatMap","stages","duration","isFinite","stage","label","text","kilometers","meters","miles","kilograms","grams","milligrams","kilocalories","calories","minutes","seconds","beatsPerMinute","join","replace","slice"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-generic-health-data.ts"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ const appleTypesWithoutRecordDiscriminator = new Set(["HKDataTypeIdentifierHeartbeatSeries", "HKStateOfMindTypeIdentifier", "HKWorkoutTypeIdentifier"]);
3
4
  const asText = value => {
4
5
  if (value instanceof Date) {
5
6
  return value.toISOString();
@@ -12,9 +13,9 @@ const asText = value => {
12
13
  * Values are deliberately excluded so an updated daily total replaces the
13
14
  * previous total instead of creating a second observation.
14
15
  */
15
- export const getHealthRecordSyncId = (record, measurementTypeKey) => {
16
+ const getHealthRecordSyncId = (record, measurementTypeKey) => {
16
17
  const healthRecord = record;
17
- const type = asText(healthRecord.quantityType ?? healthRecord.recordType) ?? measurementTypeKey;
18
+ const type = asText(healthRecord.quantityType ?? healthRecord.categoryType ?? healthRecord.correlationType ?? healthRecord.recordType) ?? measurementTypeKey;
18
19
  const sourceId = asText(healthRecord.uuid ?? healthRecord.metadata?.id);
19
20
  if (sourceId) {
20
21
  return `${type}:${sourceId}`;
@@ -30,4 +31,16 @@ export const getHealthRecordSyncId = (record, measurementTypeKey) => {
30
31
  }
31
32
  return undefined;
32
33
  };
34
+
35
+ /**
36
+ * Health Connect deletion events contain only the source ID. Its imported
37
+ * Observation identity therefore uses the measurement key (the wrapper's
38
+ * returned record omits RecordType); these Apple sample families likewise
39
+ * have no discriminator on the sample object.
40
+ */
41
+ const getHealthRecordDeletionSyncId = (typeIdentifier, recordId, measurementTypeKey, provider) => {
42
+ const type = provider === "android-health-connect" || provider === "apple-health" && appleTypesWithoutRecordDiscriminator.has(typeIdentifier) ? measurementTypeKey : typeIdentifier;
43
+ return `${type}:${recordId}`;
44
+ };
45
+ export { getHealthRecordDeletionSyncId, getHealthRecordSyncId };
33
46
  //# sourceMappingURL=get-health-record-sync-id.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["asText","value","Date","toISOString","String","undefined","getHealthRecordSyncId","record","measurementTypeKey","healthRecord","type","quantityType","recordType","sourceId","uuid","metadata","id","start","startDate","startTime","end","endDate","endTime","time"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/get-health-record-sync-id.ts"],"mappings":";;AAYA,MAAMA,MAAM,GAAIC,KAAc,IAAyB;EACrD,IAAIA,KAAK,YAAYC,IAAI,EAAE;IACzB,OAAOD,KAAK,CAACE,WAAW,CAAC,CAAC;EAC5B;EAEA,OAAO,OAAOF,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,KAAK,QAAQ,GACzDG,MAAM,CAACH,KAAK,CAAC,GACbI,SAAS;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,GAAGA,CACnCC,MAAe,EACfC,kBAA0B,KACH;EACvB,MAAMC,YAAY,GAAGF,MAA0B;EAE/C,MAAMG,IAAI,GACRV,MAAM,CAACS,YAAY,CAACE,YAAY,IAAIF,YAAY,CAACG,UAAU,CAAC,IAC5DJ,kBAAkB;EAEpB,MAAMK,QAAQ,GAAGb,MAAM,CAACS,YAAY,CAACK,IAAI,IAAIL,YAAY,CAACM,QAAQ,EAAEC,EAAE,CAAC;EAEvE,IAAIH,QAAQ,EAAE;IACZ,OAAO,GAAGH,IAAI,IAAIG,QAAQ,EAAE;EAC9B;EAEA,MAAMI,KAAK,GAAGjB,MAAM,CAACS,YAAY,CAACS,SAAS,IAAIT,YAAY,CAACU,SAAS,CAAC;EACtE,MAAMC,GAAG,GAAGpB,MAAM,CAACS,YAAY,CAACY,OAAO,IAAIZ,YAAY,CAACa,OAAO,CAAC;EAEhE,IAAIL,KAAK,IAAIG,GAAG,EAAE;IAChB,OAAO,GAAGV,IAAI,IAAIO,KAAK,IAAIG,GAAG,IAAIA,GAAG,IAAIH,KAAK,EAAE;EAClD;EAEA,MAAMM,IAAI,GAAGvB,MAAM,CAACS,YAAY,CAACc,IAAI,CAAC;EAEtC,IAAIA,IAAI,EAAE;IACR,OAAO,GAAGb,IAAI,IAAIa,IAAI,EAAE;EAC1B;EAEA,OAAOlB,SAAS;AAClB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["appleTypesWithoutRecordDiscriminator","Set","asText","value","Date","toISOString","String","undefined","getHealthRecordSyncId","record","measurementTypeKey","healthRecord","type","quantityType","categoryType","correlationType","recordType","sourceId","uuid","metadata","id","start","startDate","startTime","end","endDate","endTime","time","getHealthRecordDeletionSyncId","typeIdentifier","recordId","provider","has"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/get-health-record-sync-id.ts"],"mappings":";;AAcA,MAAMA,oCAAoC,GAAG,IAAIC,GAAG,CAAC,CACnD,qCAAqC,EACrC,6BAA6B,EAC7B,yBAAyB,CAC1B,CAAC;AAEF,MAAMC,MAAM,GAAIC,KAAc,IAAyB;EACrD,IAAIA,KAAK,YAAYC,IAAI,EAAE;IACzB,OAAOD,KAAK,CAACE,WAAW,CAAC,CAAC;EAC5B;EAEA,OAAO,OAAOF,KAAK,KAAK,QAAQ,IAAI,OAAOA,KAAK,KAAK,QAAQ,GACzDG,MAAM,CAACH,KAAK,CAAC,GACbI,SAAS;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,MAAMC,qBAAqB,GAAGA,CAC5BC,MAAe,EACfC,kBAA0B,KACH;EACvB,MAAMC,YAAY,GAAGF,MAA0B;EAE/C,MAAMG,IAAI,GACRV,MAAM,CACJS,YAAY,CAACE,YAAY,IACvBF,YAAY,CAACG,YAAY,IACzBH,YAAY,CAACI,eAAe,IAC5BJ,YAAY,CAACK,UACjB,CAAC,IAAIN,kBAAkB;EAEzB,MAAMO,QAAQ,GAAGf,MAAM,CAACS,YAAY,CAACO,IAAI,IAAIP,YAAY,CAACQ,QAAQ,EAAEC,EAAE,CAAC;EAEvE,IAAIH,QAAQ,EAAE;IACZ,OAAO,GAAGL,IAAI,IAAIK,QAAQ,EAAE;EAC9B;EAEA,MAAMI,KAAK,GAAGnB,MAAM,CAACS,YAAY,CAACW,SAAS,IAAIX,YAAY,CAACY,SAAS,CAAC;EACtE,MAAMC,GAAG,GAAGtB,MAAM,CAACS,YAAY,CAACc,OAAO,IAAId,YAAY,CAACe,OAAO,CAAC;EAEhE,IAAIL,KAAK,IAAIG,GAAG,EAAE;IAChB,OAAO,GAAGZ,IAAI,IAAIS,KAAK,IAAIG,GAAG,IAAIA,GAAG,IAAIH,KAAK,EAAE;EAClD;EAEA,MAAMM,IAAI,GAAGzB,MAAM,CAACS,YAAY,CAACgB,IAAI,CAAC;EAEtC,IAAIA,IAAI,EAAE;IACR,OAAO,GAAGf,IAAI,IAAIe,IAAI,EAAE;EAC1B;EAEA,OAAOpB,SAAS;AAClB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,MAAMqB,6BAA6B,GAAGA,CACpCC,cAAsB,EACtBC,QAAgB,EAChBpB,kBAA0B,EAC1BqB,QAAmD,KACxC;EACX,MAAMnB,IAAI,GACRmB,QAAQ,KAAK,wBAAwB,IACpCA,QAAQ,KAAK,cAAc,IAC1B/B,oCAAoC,CAACgC,GAAG,CAACH,cAAc,CAAE,GACvDnB,kBAAkB,GAClBmB,cAAc;EAEpB,OAAO,GAAGjB,IAAI,IAAIkB,QAAQ,EAAE;AAC9B,CAAC;AAED,SAASF,6BAA6B,EAAEpB,qBAAqB","ignoreList":[]}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
 
3
+ /* eslint-disable max-lines */
4
+
3
5
  import { addSeconds, startOfDay, subDays } from "date-fns";
4
- import { aggregateGroupByPeriod, readRecords } from "react-native-health-connect";
6
+ import { aggregateGroupByPeriod, getChanges, readRecords } from "react-native-health-connect";
5
7
  import { DEFAULT_HEALTH_SYNC_CHUNK_SIZE } from "../constants.js";
6
8
  export const getRecordsFromHealthConnect = async ({
7
9
  typeIdentifier,
@@ -13,25 +15,118 @@ export const getRecordsFromHealthConnect = async ({
13
15
  if (mode === "daily-total" || mode === "daily-summary") {
14
16
  return getDailyAggregates(typeIdentifier, mode, _startDate);
15
17
  }
16
- const startDate = _startDate ? addSeconds(new Date(_startDate), 1).toISOString() : subDays(new Date(), 30).toISOString();
17
- const endDate = new Date().toISOString();
18
+ const savedAnchor = decodeAnchor(anchor);
19
+ if (savedAnchor?.phase === "changes") {
20
+ const changes = await getChanges({
21
+ changesToken: savedAnchor.changesToken,
22
+ recordTypes: [typeIdentifier]
23
+ });
24
+ if (!changes.changesTokenExpired) {
25
+ return {
26
+ data: changes.upsertionChanges.map(({
27
+ record
28
+ }) => record),
29
+ ...(changes.deletionChanges.length > 0 ? {
30
+ deletedRecordIds: changes.deletionChanges.map(({
31
+ recordId
32
+ }) => recordId)
33
+ } : {}),
34
+ hasMore: changes.hasMore,
35
+ anchor: {
36
+ typeIdentifier,
37
+ anchor: encodeAnchor({
38
+ version: 1,
39
+ phase: "changes",
40
+ changesToken: changes.nextChangesToken
41
+ })
42
+ }
43
+ };
44
+ }
45
+
46
+ // A token can expire after Health Connect prunes its change log. Establish
47
+ // a new baseline before taking a fresh paginated snapshot; changes made
48
+ // while that snapshot is read will then be delivered on the next pass.
49
+ const baseline = await getChanges({
50
+ recordTypes: [typeIdentifier]
51
+ });
52
+ return readSnapshot({
53
+ typeIdentifier,
54
+ startDate: _startDate,
55
+ chunkSize,
56
+ pageToken: undefined,
57
+ changesToken: baseline.nextChangesToken
58
+ });
59
+ }
60
+ const baseline = savedAnchor ? undefined : await getChanges({
61
+ recordTypes: [typeIdentifier]
62
+ });
63
+ const snapshotAnchor = savedAnchor?.phase === "snapshot" ? savedAnchor : {
64
+ version: 1,
65
+ phase: "snapshot",
66
+ changesToken: baseline?.nextChangesToken ?? "",
67
+ // Anchors written by versions before change tracking were raw
68
+ // readRecords page tokens. Keep those imports resumable.
69
+ ...(anchor && !savedAnchor ? {
70
+ pageToken: anchor
71
+ } : {})
72
+ };
73
+ return readSnapshot({
74
+ typeIdentifier,
75
+ startDate: _startDate,
76
+ chunkSize,
77
+ pageToken: snapshotAnchor.pageToken,
78
+ changesToken: snapshotAnchor.changesToken
79
+ });
80
+ };
81
+ const readSnapshot = async ({
82
+ typeIdentifier,
83
+ startDate,
84
+ endDate = new Date().toISOString(),
85
+ chunkSize,
86
+ pageToken,
87
+ changesToken
88
+ }) => {
89
+ const resolvedStartDate = startDate ? addSeconds(new Date(startDate), 1).toISOString() : subDays(new Date(), 30).toISOString();
18
90
  const result = await readRecords(typeIdentifier, {
19
91
  timeRangeFilter: {
20
92
  operator: "between",
21
- startTime: startDate,
93
+ startTime: resolvedStartDate,
22
94
  endTime: endDate
23
95
  },
24
96
  pageSize: chunkSize,
25
- pageToken: anchor
97
+ pageToken
26
98
  });
99
+ const nextAnchor = result.pageToken ? {
100
+ version: 1,
101
+ phase: "snapshot",
102
+ changesToken,
103
+ pageToken: result.pageToken
104
+ } : {
105
+ version: 1,
106
+ phase: "changes",
107
+ changesToken
108
+ };
27
109
  return {
28
110
  data: result.records,
29
- anchor: result.pageToken ? {
111
+ hasMore: Boolean(result.pageToken),
112
+ anchor: {
30
113
  typeIdentifier,
31
- anchor: result.pageToken
32
- } : undefined
114
+ anchor: encodeAnchor(nextAnchor)
115
+ }
33
116
  };
34
117
  };
118
+ const encodeAnchor = anchor => JSON.stringify(anchor);
119
+ const decodeAnchor = anchor => {
120
+ if (!anchor?.startsWith("{")) {
121
+ return undefined;
122
+ }
123
+ try {
124
+ const parsed = JSON.parse(anchor);
125
+ return parsed.version === 1 && (parsed.phase === "snapshot" || parsed.phase === "changes") && typeof parsed.changesToken === "string" ? parsed : undefined;
126
+ } catch {
127
+ return undefined;
128
+ }
129
+ };
35
130
  const getDailyAggregates = async (typeIdentifier, mode, _startDate) => {
36
131
  const aggregateType = typeIdentifier;
37
132
  const startDate = _startDate ? startOfDay(new Date(_startDate)) : startOfDay(subDays(new Date(), 30));