@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.
- package/lib/commonjs/modules/data-sync/index.js +15 -0
- package/lib/commonjs/modules/data-sync/index.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js +25 -19
- package/lib/commonjs/modules/data-sync/services/base-health-sync-service.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/managers/data-processor.js +73 -17
- package/lib/commonjs/modules/data-sync/services/managers/data-processor.js.map +1 -1
- package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js +14 -0
- package/lib/commonjs/modules/data-sync/services/managers/storage-manager.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/convert-generic-health-data.js +45 -7
- package/lib/commonjs/modules/data-sync/utils/convert-generic-health-data.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-health-record-sync-id.js +15 -2
- package/lib/commonjs/modules/data-sync/utils/get-health-record-sync-id.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-records-from-health-connect.js +103 -8
- package/lib/commonjs/modules/data-sync/utils/get-records-from-health-connect.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js +66 -23
- package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-total-records-count.js +4 -1
- package/lib/commonjs/modules/data-sync/utils/get-total-records-count.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js +3 -3
- package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js +364 -0
- package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/health-units.js +13 -11
- package/lib/commonjs/modules/data-sync/utils/health-units.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/healthkit-data-types.js +34 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-data-types.js.map +1 -0
- package/lib/module/modules/data-sync/index.js +1 -0
- package/lib/module/modules/data-sync/index.js.map +1 -1
- package/lib/module/modules/data-sync/services/base-health-sync-service.js +25 -19
- package/lib/module/modules/data-sync/services/base-health-sync-service.js.map +1 -1
- package/lib/module/modules/data-sync/services/managers/data-processor.js +74 -18
- package/lib/module/modules/data-sync/services/managers/data-processor.js.map +1 -1
- package/lib/module/modules/data-sync/services/managers/storage-manager.js +14 -0
- package/lib/module/modules/data-sync/services/managers/storage-manager.js.map +1 -1
- package/lib/module/modules/data-sync/utils/convert-generic-health-data.js +45 -7
- package/lib/module/modules/data-sync/utils/convert-generic-health-data.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-health-record-sync-id.js +15 -2
- package/lib/module/modules/data-sync/utils/get-health-record-sync-id.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-records-from-health-connect.js +103 -8
- package/lib/module/modules/data-sync/utils/get-records-from-health-connect.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-samples-from-health.js +66 -22
- package/lib/module/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-total-records-count.js +4 -1
- package/lib/module/modules/data-sync/utils/get-total-records-count.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-total-samples-count.js +2 -2
- package/lib/module/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
- package/lib/module/modules/data-sync/utils/health-data-catalog.js +360 -0
- package/lib/module/modules/data-sync/utils/health-data-catalog.js.map +1 -0
- package/lib/module/modules/data-sync/utils/health-units.js +13 -11
- package/lib/module/modules/data-sync/utils/health-units.js.map +1 -1
- package/lib/module/modules/data-sync/utils/healthkit-data-types.js +26 -0
- package/lib/module/modules/data-sync/utils/healthkit-data-types.js.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/index.d.ts +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts +2 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/convert-data-props.d.ts +2 -0
- package/lib/typescript/commonjs/src/modules/data-sync/types/convert-data-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/data-from-provider-result.d.ts +4 -0
- package/lib/typescript/commonjs/src/modules/data-sync/types/data-from-provider-result.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-props.d.ts +6 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-sync-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-generic-health-data.d.ts +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-generic-health-data.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-health-record-sync-id.d.ts +9 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-health-record-sync-id.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-records-from-health-connect.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts +49 -4
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-records-count.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-data-catalog.d.ts +30 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts +11 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/index.d.ts +1 -0
- package/lib/typescript/module/src/modules/data-sync/index.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/services/base-health-sync-service.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts +2 -1
- package/lib/typescript/module/src/modules/data-sync/services/managers/data-processor.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts +2 -0
- package/lib/typescript/module/src/modules/data-sync/services/managers/storage-manager.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/convert-data-props.d.ts +2 -0
- package/lib/typescript/module/src/modules/data-sync/types/convert-data-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/data-from-provider-result.d.ts +4 -0
- package/lib/typescript/module/src/modules/data-sync/types/data-from-provider-result.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-sync-props.d.ts +6 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-sync-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/convert-generic-health-data.d.ts +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/convert-generic-health-data.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-health-record-sync-id.d.ts +9 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-health-record-sync-id.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-records-from-health-connect.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts +49 -4
- package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-total-records-count.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/health-data-catalog.d.ts +30 -0
- package/lib/typescript/module/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts +11 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -0
- 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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
|
|
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":";;AAAA;;AAKA,SACEA,kBAAkB,EAClBC,gBAAgB,EAChBC,YAAY,QACP,kCAA+B;AACtC,SAASC,8BAA8B,QAAQ,iBAAc;AAS7D,SAASC,iBAAiB,QAAQ,qCAAkC;AACpE,SAASC,iBAAiB,QAAuB,8BAA2B;AAE5E,SAASC,oBAAoB,EAAEC,eAAe,QAAQ,wBAAqB;AAE3E,SAASC,aAAa,QAAQ,8BAA2B;AACzD,SAASC,cAAc,QAAQ,+BAA4B;AAC3D,SAASC,mBAAmB,QAAQ,qCAAkC;AACtE,SAASC,gBAAgB,QAAQ,kCAA+B;AAEhE,OAAO,MAAeC,qBAAqB,CAKzC;EAeAC,WAAWA,CAACC,KAAoC,EAAE;IAChD,IAAI,CAACC,MAAM,GAAGD,KAAK,CAACC,MAAM;IAC1B,IAAI,CAACC,SAAS,GAAGF,KAAK,CAACE,SAAS;IAChC,IAAI,CAACC,UAAU,GAAGH,KAAK,CAACG,UAAU;IAClC,IAAI,CAACC,WAAW,GAAGJ,KAAK,CAACI,WAAW;IAEpC,IAAI,CAACC,eAAe,GAAG,IAAIT,mBAAmB,CAC5CI,KAAK,CAACM,cAAc,EACpBN,KAAK,CAACG,UACR,CAAC;IACD,IAAI,CAACI,YAAY,GAAG,IAAIV,gBAAgB,CAAC,CAAC;IAC1C,IAAI,CAACW,cAAc,GAAG,IAAIb,cAAc,CACtCK,KAAK,CAACC,MAAM,EACZ,IAAI,CAACQ,eAAe,CAAC,CACvB,CAAC;IACD,IAAI,CAACC,aAAa,GAAG,IAAIhB,aAAa,CACpCM,KAAK,CAACC,MAAM,EACZD,KAAK,CAACE,SAAS,EACf,IAAI,CAACO,eAAe,CAAC,CAAC,EACtBT,KAAK,CAACW,SAAS,IAAItB,8BAA8B,EACjD,IAAI,CAACmB,cAAc,EACnB,IAAI,CAACI,sBAAsB,CAAC,CAAC,EAC7B,IAAI,CAACC,2BAA2B,CAAC,CAAC,EAClC,IAAI,CAACC,oBAAoB,CAAC,CAC5B,CAAC;EACH;EAgBA;EACA,MAAaC,SAASA,CAAA,EAAkB;IACtC,OAAO,IAAI,CAACR,YAAY,CAACS,IAAI,CAAC,MAC5B5B,YAAY,CAAC,eAAe,EAAE;MAAE6B,QAAQ,EAAE,IAAI,CAACR,eAAe,CAAC;IAAE,CAAC,EAAE,MAClE,IAAI,CAACS,OAAO,CAAC,CACf,CACF,CAAC;EACH;EAEA,MAAcA,OAAOA,CAAA,EAAkB;IACrC,IAAI;MACF,IAAI,CAAC,IAAI,CAACjB,MAAM,CAACkB,aAAa,EAAE;QAC9B,IAAI,CAACf,WAAW,CAAC,IAAIgB,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAErD;MACF;MAEA,IAAI,CAAC,IAAI,CAAClB,SAAS,EAAE;QACnB,IAAI,CAACE,WAAW,CAAC,IAAIgB,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEhD;MACF;MAEA,IAAI,CAACb,YAAY,CAACc,MAAM,CAAC,CAAC;MAC1B,IAAI,CAAChB,eAAe,CAACiB,qBAAqB,CAAC,CAAC;MAE5C,IAAI,CAAC,IAAI,CAACf,YAAY,CAACgB,kBAAkB,EAAE;QACzC,MAAM,IAAI,CAACC,cAAc,CAAC,CAAC;MAC7B;MAEA,MAAM,IAAI,CAACC,mBAAmB,CAAC,CAAC;MAEhC,IAAI,CAACpB,eAAe,CAACqB,gBAAgB,CAAC,IAAI,CAACnB,YAAY,CAACoB,WAAW,CAAC;IACtE,CAAC,CAAC,OAAOC,KAAK,EAAE;MACd,IAAI,CAACxB,WAAW,CAACwB,KAAc,CAAC;IAClC;EACF;EAEA,MAAaC,QAAQA,CAAA,EAAkB;IACrC,IAAI,CAACxB,eAAe,CAACyB,QAAQ,CAAC,CAAC;IAC/B,IAAI,CAACvB,YAAY,CAACwB,KAAK,CAAC,CAAC;IACzB,IAAI,CAACxB,YAAY,CAACyB,cAAc,GAAG,IAAI;EACzC;EAEA,MAAaC,SAASA,CAACC,MAAwB,EAAiB;IAC9D,IAAI,CAAC3B,YAAY,CAAC4B,KAAK,CAACD,MAAM,CAAC;IAC/B,IAAI,CAAC7B,eAAe,CAACqB,gBAAgB,CAACQ,MAAM,CAAC;EAC/C;EAEA,MAAcV,cAAcA,CAAA,EAAkB;IAC5C,MAAMY,sBAAsB,GAC1B,MAAM,IAAI,CAAC1B,aAAa,CAAC2B,yBAAyB,CAAC,IAAI,CAAClC,UAAU,CAAC;IAErE,IAAI,CAACI,YAAY,CAAC6B,sBAAsB,GAAGA,sBAAsB;IAEjE,MAAM,IAAI,CAACE,oBAAoB,CAAC,CAAC;IACjC,IAAI,CAAC/B,YAAY,CAACgB,kBAAkB,GAAG,IAAI;EAC7C;EAEA,MAAce,oBAAoBA,CAAA,EAAkB;IAClD,KAAK,MAAMC,GAAG,IAAIC,MAAM,CAACC,IAAI,CAAC,IAAI,CAACtC,UAAqC,CAAC,EAAE;MACzE,MAAMuC,kBAAkB,GAAGH,GAAoB;MAC/C,MAAMI,IAAI,GAAG,IAAI,CAACC,yBAAyB,CAACF,kBAAkB,CAAC;MAE/D,IAAI,CAACC,IAAI,EAAE;QACT;MACF;MAEA,MAAME,oBAAoB,GAAG,IAAI,CAACnC,aAAa,CAACoC,uBAAuB,CACrE,IAAI,CAACvC,YAAY,CAAC6B,sBAAsB,EACxCO,IAAI,EACJD,kBAAkB,EAClBnD,iBAAiB,CAACmD,kBAAkB,EAAEC,IAAI,CAACI,IAAI,CACjD,CAAC;MAED,MAAMC,UAAU,GAAG,MAAM,IAAI,CAACtC,aAAa,CAACuC,2BAA2B,CACrEP,kBAAkB,EAClBC,IAAI,EACJE,oBACF,CAAC;MAED,IAAI,CAACxC,eAAe,CAAC6C,oBAAoB,CAACR,kBAAkB,EAAEM,UAAU,CAAC;IAC3E;EACF;EAEA,MAAcvB,mBAAmBA,CAAA,EAAkB;IACjD,KAAK,MAAMc,GAAG,IAAIC,MAAM,CAACC,IAAI,CAC3B,IAAI,CAACtC,UACP,CAAC,EAAE;MACD,IAAI,IAAI,CAACI,YAAY,CAACyB,cAAc,EAAE;QACpC;MACF;MAEA,MAAMU,kBAAkB,GAAGH,GAAoB;MAC/C,MAAMI,IAAI,GAAG,IAAI,CAACC,yBAAyB,CAACF,kBAAkB,CAAC;MAE/D,IAAI,CAACC,IAAI,EAAE;QACT,IAAI,CAACtC,eAAe,CAAC8C,SAAS,CAACT,kBAAkB,EAAE,MAAM,CAAC;QAC1D;MACF;MAEA,IAAI,CAACrC,eAAe,CAAC8C,SAAS,CAACT,kBAAkB,EAAE,SAAS,CAAC;MAC7D,MAAM,IAAI,CAACU,cAAc,CAACV,kBAAkB,EAAEC,IAAI,CAAC;IACrD;EACF;EAEA,MAAcS,cAAcA,CAC1BV,kBAAiC,EACjCC,IAA6C,EAC9B;IACf,MAAME,oBAAoB,GAAG,IAAI,CAACnC,aAAa,CAACoC,uBAAuB,CACrE,IAAI,CAACvC,YAAY,CAAC6B,sBAAsB,EACxCO,IAAI,EACJD,kBAAkB,EAClBnD,iBAAiB,CAACmD,kBAAkB,EAAEC,IAAI,CAACI,IAAI,CACjD,CAAC;IAED,IAAIM,OAAO,GAAG,IAAI;IAElB,OAAOA,OAAO,IAAI,CAAC,IAAI,CAAC9C,YAAY,CAACyB,cAAc,EAAE;MACnD,MAAM;QACJsB,iBAAiB;QACjBC,kBAAkB;QAClBC,yBAAyB;QACzBH,OAAO,EAAEI,cAAc;QACvBC;MACF,CAAC,GAAG,MAAM,IAAI,CAAChD,aAAa,CAACiD,2BAA2B,CACtDjB,kBAAkB,EAClBC,IAAI,EACJE,oBACF,CAAC;MAEDQ,OAAO,GAAGI,cAAc;MAExB,IAAI,IAAI,CAAClD,YAAY,CAACyB,cAAc,EAAE;QACpC;MACF;MAEA,MAAM4B,OAAO,GAAG,IAAI,CAAClD,aAAa,CAACmD,0BAA0B,CAC3DP,iBAAiB,EACjBC,kBAAkB,EAClBhE,iBAAiB,CAACmD,kBAAkB,EAAEC,IAAI,CAACI,IAAI,CACjD,CAAC;MAED,IACE,CAACa,OAAO,CAACE,MAAM,KAAK,CAAC,IAAIN,yBAAyB,CAACM,MAAM,KAAK,CAAC,KAC/D,CAAC,IAAI,CAACvD,YAAY,CAACyB,cAAc,EACjC;QACA,IAAI;UACF,IAAI4B,OAAO,CAACE,MAAM,KAAK,CAAC,EAAE;YACxB,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;YAE5B,MAAMC,MAAM,GAAG,MAAMzE,eAAe,CAClC,MAAM,IAAI,CAACe,cAAc,CAAC2D,gBAAgB,CAACP,OAAO,CAAC,EACnD,MAAM,IAAI,CAACrD,YAAY,CAACyB,cAC1B,CAAC;YAED,IAAI,IAAI,CAACzB,YAAY,CAACyB,cAAc,EAAE;cACpC;YACF;YAEA,MAAMoC,eAAe,GAAGF,MAAM,CAACG,KAAK,IAAI,EAAE;YAE1C,MAAMC,UAAU,GAAGF,eAAe,CAACN,MAAM,GACrCM,eAAe,CAACG,MAAM,CAAEF,KAAK,IAC3BA,KAAK,CAACG,QAAQ,EAAEC,MAAM,CAACC,UAAU,CAAC,GAAG,CACvC,CAAC,CAACZ,MAAM,GACRF,OAAO,CAACE,MAAM;YAElB,MAAMa,YAAY,GAAGP,eAAe,CAACG,MAAM,CAAEF,KAAK,IAChDA,KAAK,CAACG,QAAQ,EAAEC,MAAM,CAACC,UAAU,CAAC,KAAK,CACzC,CAAC,CAACZ,MAAM;YAER3E,gBAAgB,CAAC,8BAA8B,EAAEwF,YAAY,EAAE;cAC7D1D,QAAQ,EAAE,IAAI,CAACR,eAAe,CAAC,CAAC;cAChCiC;YACF,CAAC,CAAC;YACFxD,kBAAkB,CAChB,gCAAgC,EAChC8E,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF,SAAS,EACtB;cACE9C,QAAQ,EAAE,IAAI,CAACR,eAAe,CAAC;YACjC,CACF,CAAC;YAED,IAAI,CAACF,YAAY,CAACqE,SAAS,CAACV,MAAM,CAAC;YACnC,IAAI,CAAC7D,eAAe,CAACwE,2BAA2B,CAC9CnC,kBAAkB,EAClB4B,UAAU,EACVK,YACF,CAAC;UACH;UAEA,IAAInB,yBAAyB,CAACM,MAAM,KAAK,CAAC,EAAE;YAC1C,MAAM,IAAI,CAACtD,cAAc,CAACsE,kBAAkB,CAC1CtB,yBAAyB,EACzB,IAAI,CAACtD,SACP,CAAC;UACH;UAEA,IAAI,CAACM,cAAc,CAACuE,WAAW,CAACrB,OAAO,CAAC;QAC1C,CAAC,CAAC,OAAO9B,KAAK,EAAE;UACd,IAAIpC,oBAAoB,CAACoC,KAAK,CAAC,IAAI,IAAI,CAACrB,YAAY,CAACyB,cAAc,EAAE;YACnE;UACF;UAEA,IAAI,CAAC3B,eAAe,CAAC8C,SAAS,CAACT,kBAAkB,EAAE,QAAQ,CAAC;UAC5D,IAAI,CAACtC,WAAW,CAACd,iBAAiB,CAACsC,KAAK,CAAC,CAAC;UAE1C;QACF;MACF,CAAC,MAAM;QACL,IAAI,CAACpB,cAAc,CAACuE,WAAW,CAACrB,OAAO,CAAC;MAC1C;IACF;IAEA,IAAI,CAACrD,eAAe,CAAC8C,SAAS,CAC5BT,kBAAkB,EAClB,IAAI,CAACnC,YAAY,CAACyB,cAAc,GAAG,MAAM,GAAG,WAC9C,CAAC;EACH;EAEQY,yBAAyBA,CAACF,kBAAiC,EAAE;IACnE,OAAO,IAAI,CAACvC,UAAU,CAACuC,kBAAkB,CAAC;EAC5C;AACF","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
|
-
|
|
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
|
|
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
|
-
}) => [
|
|
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
|
|
59
|
-
typeIdentifier
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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(
|
|
67
|
-
|
|
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
|
-
|
|
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:
|
|
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","
|
|
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":";;AAAA;;AAGA,SAASA,kBAAkB,QAAoB,YAAY;AAS3D,SACEC,iBAAiB,EACjBC,cAAc,QAET,iCAA8B;AACrC,SAASC,wBAAwB,QAAQ,2CAAwC;AACjF,SACEC,6BAA6B,EAC7BC,qBAAqB,QAChB,0CAAuC;AAC9C,SAASC,+BAA+B,QAAQ,qDAAkD;AAClG,SAASC,uBAAuB,QAAQ,4CAAyC;AACjF,SAASC,iBAAiB,QAAQ,oCAAiC;AACnE,SAASC,mBAAmB,QAAQ,oCAAiC;AAIrE,OAAO,MAAMC,aAAa,CAKxB;EACAC,WAAWA,CACDC,MAAkB,EAClBC,SAAiB,EACjBC,QAAwB,EACxBC,SAAiB,EACjBC,cAA8B,EAC9BC,sBAEY,EACZC,2BAEgE,EAChEC,oBAEmB,EAC3B;IAAA,KAdQP,MAAkB,GAAlBA,MAAkB;IAAA,KAClBC,SAAiB,GAAjBA,SAAiB;IAAA,KACjBC,QAAwB,GAAxBA,QAAwB;IAAA,KACxBC,SAAiB,GAAjBA,SAAiB;IAAA,KACjBC,cAA8B,GAA9BA,cAA8B;IAAA,KAC9BC,sBAEY,GAFZA,sBAEY;IAAA,KACZC,2BAEgE,GAFhEA,2BAEgE;IAAA,KAChEC,oBAEmB,GAFnBA,oBAEmB;EAC1B;EAEHC,YAAYA,CAACC,UAAuB,EAAY;IAC9C,MAAMC,OAAO,GAAGC,MAAM,CAACD,OAAO,CAACD,UAAU,CAExC;IAED,OAAOC,OAAO,CAACE,OAAO,CAAC,CAAC,CAACC,GAAG,EAAEC,IAAI,CAAC,KACjCA,IAAI,EAAEC,eAAe,CAACC,GAAG,CAAC,CAAC;MAAEC,cAAc;MAAEC;IAAK,CAAC,KACjDC,MAAM,CACJD,IAAI,IACFrB,mBAAmB,CACjB,IAAI,CAACK,QAAQ,EACbiB,MAAM,CAACF,cAAc,CAAC,EACtB5B,iBAAiB,CAACwB,GAAG,EAAmBC,IAAI,CAACM,IAAI,CACnD,CAAC,CAACF,IACN,CACF,CAAC,IAAI,EACP,CAAC;EACH;EAEA,MAAMG,yBAAyBA,CAACZ,UAAuB,EAKrD;IACA,MAAMa,KAAK,GAAG,IAAI,CAACd,YAAY,CAACC,UAAU,CAAC;IAE3C,OAAOf,+BAA+B,CAAC;MACrCM,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBsB,KAAK;MACLrB,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBC,QAAQ,EAAE,IAAI,CAACA;IACjB,CAAC,CAAC;EACJ;EAEA,MAAMqB,2BAA2BA,CAC/BC,kBAAiC,EACjCV,IAA6C,EAC7CW,oBAAsC,EACrB;IACjB,MAAML,IAAI,GAAG/B,iBAAiB,CAACmC,kBAAkB,EAAEV,IAAI,CAACM,IAAI,CAAC;IAE7D,MAAMM,WAAW,GAAG,MAAMC,OAAO,CAACC,GAAG,CACnCd,IAAI,CAACC,eAAe,EAAEC,GAAG,CAAC,OAAO;MAAEC;IAAe,CAAC,KAAK;MACtD,MAAMY,MAAM,GAAG,IAAI,CAACzB,cAAc,CAAC0B,SAAS,CAACb,cAAc,CAAC;MAE5D,OAAO,IAAI,CAACZ,sBAAsB,CAAC;QACjCY,cAAc,EAAEA,cAAiC;QACjDc,SAAS,EAAEN,oBAAoB,EAAEO,WAAW,CAAC,CAAC;QAC9CH,MAAM;QACNT;MACF,CAAC,CAAC;IACJ,CAAC,CACH,CAAC;IAED,OAAOM,WAAW,CAACO,MAAM,CAAC,CAACC,GAAG,EAAEC,KAAK,KAAKD,GAAG,GAAGC,KAAK,EAAE,CAAC,CAAC;EAC3D;EAEA,MAAMC,2BAA2BA,CAC/BZ,kBAAiC,EACjCV,IAA6C,EAC7CW,oBAAsC,EAOrC;IACD,MAAML,IAAI,GAAG/B,iBAAiB,CAACmC,kBAAkB,EAAEV,IAAI,CAACM,IAAI,CAAC;IAE7D,MAAMiB,iBAAiB,GAAGvB,IAAI,CAACC,eAAe,CAACC,GAAG,CAChD,CAAC;MAAEC,cAAc;MAAEC,IAAI;MAAEoB,MAAM;MAAEC;IAAQ,CAAC,KAAK;MAC7C,MAAMC,aAAa,GAAG3C,mBAAmB,CACvC,IAAI,CAACK,QAAQ,EACbiB,MAAM,CAACF,cAAc,CAAC,EACtBG,IACF,CAAC;MAED,OAAO;QACLH,cAAc,EAAEE,MAAM,CAACF,cAAc,CAAC;QACtCC,IAAI,EAAEC,MAAM,CAACD,IAAI,IAAIsB,aAAa,CAACtB,IAAI,CAAC;QACxCoB,MAAM,EAAEA,MAAM,KAAKpB,IAAI,GAAGuB,SAAS,GAAGD,aAAa,CAACF,MAAM,CAAC;QAC3DC,OAAO,EAAEA,OAAO,KAAKrB,IAAI,GAAGuB,SAAS,GAAGD,aAAa,CAACD,OAAO;MAC/D,CAAC;IACH,CACF,CAAC;IAED,MAAMG,mBAAmB,GAAG/B,MAAM,CAACgC,WAAW,CAC5CN,iBAAiB,CAACrB,GAAG,CAAC,CAAC;MAAEC,cAAc;MAAEC;IAAK,CAAC,KAAK,CAClDD,cAAc,EACdC,IAAI,CACL,CACH,CAAC;IAED,MAAM0B,yBAAyB,GAAGjC,MAAM,CAACgC,WAAW,CAClDN,iBAAiB,CAACzB,OAAO,CAAC,CAAC;MAAEK,cAAc;MAAEqB;IAAO,CAAC,KACnDA,MAAM,GAAG,CAAC,CAACrB,cAAc,EAAEqB,MAAM,CAAC,CAAC,GAAG,EACxC,CACF,CAAC;IAED,MAAMO,0BAA0B,GAAGlC,MAAM,CAACgC,WAAW,CACnDN,iBAAiB,CAACzB,OAAO,CAAC,CAAC;MAAEK,cAAc;MAAEsB;IAAQ,CAAC,KACpDA,OAAO,GAAG,CAAC,CAACtB,cAAc,EAAEsB,OAAO,CAAC,CAAC,GAAG,EAC1C,CACF,CAAC;IAED,MAAMO,OAAO,GAAG,MAAMnB,OAAO,CAACC,GAAG,CAC/Bd,IAAI,CAACC,eAAe,EAAEC,GAAG,CAAC,OAAO;MAAEC;IAAe,CAAC,KAAK;MACtD,MAAMY,MAAM,GAAG,IAAI,CAACzB,cAAc,CAAC0B,SAAS,CAACb,cAAc,CAAC;MAE5D,OAAO;QACLA,cAAc;QACd8B,MAAM,EAAE,MAAM,IAAI,CAACzC,2BAA2B,CAAC;UAC7CW,cAAc,EAAEA,cAAiC;UACjDc,SAAS,EACPX,IAAI,KAAK,aAAa,IAAIA,IAAI,KAAK,eAAe,GAC9CN,IAAI,CAACkC,OAAO,EAAEhB,WAAW,CAAC,CAAC,GAC3BP,oBAAoB,EAAEO,WAAW,CAAC,CAAC;UACzCH,MAAM;UACN1B,SAAS,EAAE,IAAI,CAACA,SAAS;UACzBiB;QACF,CAAC;MACH,CAAC;IACH,CAAC,CACH,CAAC;IAED,MAAM6B,UAAU,GAAGH,OAAO,CACvB9B,GAAG,CAAC,CAAC;MAAE+B;IAAO,CAAC,KAAKA,MAAM,CAAClB,MAAM,CAAC,CAClCqB,IAAI,CAAC,CAAC,CACNC,MAAM,CAACC,OAAO,CAAsD;IAEvE,MAAMC,OAAO,GAAGP,OAAO,CAAClC,OAAO,CAAC,CAAC;MAAEmC;IAAO,CAAC,KAAKA,MAAM,CAACjC,IAAI,CAAC;IAE5D,MAAMwC,yBAAyB,GAAGR,OAAO,CAAClC,OAAO,CAC/C,CAAC;MAAEK,cAAc;MAAE8B;IAAO,CAAC,KACzB,CAACA,MAAM,CAACQ,gBAAgB,IAAI,EAAE,EAAEvC,GAAG,CAChCwC,QAAQ,IACPhE,6BAA6B,CAC3ByB,cAAc,EACduC,QAAQ,EACRhC,kBAAkB,EAClB,IAAI,CAACtB,QACP,CACJ,CACJ,CAAC;IAED,MAAMuD,UAAiC,GACrC,IAAI,CAACvD,QAAQ,KAAK,cAAc,IAChCsB,kBAAkB,KAAKlC,cAAc,CAACoE,KAAK,GACvC9D,iBAAiB,CAACyD,OAAO,CAAC,GAC1B,IAAI,CAACnD,QAAQ,KAAK,cAAc,IAC9BsB,kBAAkB,KAAKpC,kBAAkB,CAACuE,aAAa,GACvDC,KAAK,CAACC,IAAI,CACRR,OAAO,CACJpB,MAAM,CAAC,CAAC6B,MAAM,EAAEC,MAAM,KAAK;MAC1B,MAAMC,KAAK,GAAGD,MAGb;MAED,MAAMlD,GAAG,GAAG,GAAG,IAAIoD,IAAI,CAACD,KAAK,CAACjC,SAAS,IAAI,CAAC,CAAC,CAACmC,OAAO,CAAC,CAAC,IAAI,IAAID,IAAI,CACjED,KAAK,CAACG,OAAO,IAAIH,KAAK,CAACjC,SAAS,IAAI,CACtC,CAAC,CAACmC,OAAO,CAAC,CAAC,EAAE;MAEb,MAAME,KAAK,GAAGN,MAAM,CAACO,GAAG,CAACxD,GAAG,CAAC,IAAI,EAAE;MAEnCuD,KAAK,CAACE,IAAI,CAACP,MAAM,CAAC;MAClBD,MAAM,CAACS,GAAG,CAAC1D,GAAG,EAAEuD,KAAK,CAAC;MAEtB,OAAON,MAAM;IACf,CAAC,EAAE,IAAIU,GAAG,CAA8B,CAAC,CAAC,CACzCC,MAAM,CAAC,CACZ,CAAC,GACDpB,OAAO,CAACrC,GAAG,CAAEF,IAAI,IAAK,CAACA,IAAI,CAAC,CAAC;IAErC,MAAM4D,iBAAiB,GAAG,MAAM/C,OAAO,CAACC,GAAG,CACzC6B,UAAU,CAACzC,GAAG,CAAEoD,KAAK,IACnB,IAAI,CAAC7D,oBAAoB,CAAC;MACxBO,IAAI,EAAEsD,KAAK;MACXpE,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBC,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBuB,kBAAkB;MAClBP,cAAc,EACZH,IAAI,CAACC,eAAe,EAAE4D,MAAM,KAAK,CAAC,GAC9BxD,MAAM,CAACL,IAAI,CAACC,eAAe,CAAC,CAAC,CAAC,EAAEE,cAAc,CAAC,GAC/CwB,SAAS;MACfrB,IAAI;MACJsB,mBAAmB;MACnBE,yBAAyB;MACzBC;IACF,CAAC,CACH,CACF,CAAC;IAED,MAAM+B,kBAAkB,GAAGnB,UAAU,CAACzC,GAAG,CAAEoD,KAAK,IAC9C3E,qBAAqB,CAAC2E,KAAK,CAAC,CAAC,CAAC,EAAE5C,kBAAkB,CACpD,CAAC;IAED,OAAO;MACLkD,iBAAiB;MACjBE,kBAAkB;MAClBtB,yBAAyB;MACzBuB,OAAO,EAAE/B,OAAO,CAACgC,IAAI,CACnB,CAAC;QAAE/B;MAAO,CAAC,KACTA,MAAM,CAAC8B,OAAO,KACb,CAAC9B,MAAM,CAACjC,IAAI,CAAC6D,MAAM,IAAI,IAAI,CAACxE,SAAS,IACpC,CAAC4C,MAAM,CAACQ,gBAAgB,EAAEoB,MAAM,IAAI,CAAC,KAAK,IAAI,CAACxE,SAAS,KACxDiD,OAAO,CAACL,MAAM,CAAClB,MAAM,CAAC,CAC5B,CAAC;MACDkD,OAAO,EAAE9B;IACX,CAAC;EACH;EAEA+B,0BAA0BA,CACxBN,iBAAkC,EAClCE,kBAA8C,EAC9CxD,IAA6D,EAC7D;IACA,OAAO7B,wBAAwB,CAAC;MAC9B0F,wBAAwB,EAAEP,iBAAiB;MAC3CxE,QAAQ,EAAE,IAAI,CAACA,QAAQ;MACvBgF,yBAAyB,EAAEN,kBAAkB;MAC7CxD,IAAI;MACJnB,SAAS,EAAE,IAAI,CAACA;IAClB,CAAC,CAAC;EACJ;EAEAN,uBAAuBA,CACrBwF,sBAGE,EACFrE,IAA6C,EAC7CU,kBAAiC,EACjCJ,IAA4D,EAC1C;IAClB,MAAMgE,YAAY,GAAG/F,iBAAiB,CAACmC,kBAAkB,EAAEJ,IAAI,IAAIN,IAAI,CAACM,IAAI,CAAC;IAE7E,MAAMiE,YAAY,GAAG;MACnB,GAAGvE,IAAI;MACPC,eAAe,EAAED,IAAI,CAACC,eAAe,CAACC,GAAG,CAAC,CAAC;QAAEC,cAAc;QAAEC;MAAK,CAAC,MAAM;QACvED,cAAc;QACdC,IAAI,EACFA,IAAI,IACJrB,mBAAmB,CACjB,IAAI,CAACK,QAAQ,EACbiB,MAAM,CAACF,cAAc,CAAC,EACtBmE,YACF,CAAC,CAAClE;MACJ,CAAC,CACH;IACF,CAAC;IAED,OAAOvB,uBAAuB,CAAC;MAC7BwF,sBAAsB;MACtBrE,IAAI,EAAEuE,YAAqE;MAC3EjE,IAAI,EAAEgE;IACR,CAAC,CAAC;EACJ;AACF","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,
|
|
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
|
|
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
|
|
47
|
-
|
|
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 ?
|
|
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
|
-
} :
|
|
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":";;AAAA;;AAKA,SAASA,sBAAsB,QAAQ,yBAAsB;AAG7D,SAASC,0BAA0B,QAAQ,gCAA6B;AAMxE,MAAMC,gBAAgB,GAAG,2BAA2B;AACpD,MAAMC,YAAY,GAAG,kBAAkB;AAEvC,MAAMC,4BAA4B,GAChC,kEAAkE;AAEpE,OAAO,MAAMC,qCAAqC,GAAG,MAAAA,CAAO;EAC1DC,IAAI;EACJC,SAAS;EACTC,IAAI;EACJC,cAAc,EAAEC,wBAAwB;EACxCC,mBAAmB;EACnBC,yBAAyB;EACzBC;AACsB,CAAC,KAA6B;EACpD,MAAMC,KAAK,GAAGR,IAAI,CAAC,CAAC,CAAC;EAErB,IAAI,CAACQ,KAAK,EAAE;IACV,OAAO,EAAE;EACX;EAEA,MAAMC,KAAK,GAAGD,KAAgC;EAE9C,MAAML,cAAc,GAAGO,MAAM,CAC3BN,wBAAwB,IACtBK,KAAK,CAACN,cAAc,IACpBM,KAAK,CAACE,YAAY,IAClBF,KAAK,CAACG,YAAY,IAClBH,KAAK,CAACI,UAAU,IAChB,aACJ,CAAC;EAED,MAAMC,cAAc,GAAGT,mBAAmB,GAAGF,cAAc,CAAC;EAC5D,MAAMY,IAAI,GAAGD,cAAc,IAAIX,cAAc;EAE7C,MAAMa,gBAAgB,GAAGV,yBAAyB,GAAGH,cAAc,CAAC;EAEpE,MAAMc,MAAM,GACVD,gBAAgB,KAAKnB,YAAY,GAC7BiB,cAAc,IAAII,WAAW,CAACJ,cAAc,CAAC,GAC3CjB,YAAY,GACZsB,SAAS,GACXH,gBAAgB;EAEtB,MAAMI,QAAQ,GAAGC,WAAW,CAACrB,IAAI,CAAC;EAClC,MAAMsB,WAAW,GAAGC,cAAc,CAACf,KAAK,EAAEN,IAAI,EAAEkB,QAAQ,CAAC;EAEzD,IAAI,CAACE,WAAW,IAAI,CAACrB,SAAS,EAAE;IAC9B,OAAO,EAAE;EACX;EAEA,MAAMuB,QAAQ,GAAGC,WAAW,CAACjB,KAAK,CAAC;EACnC,MAAMkB,MAAM,GAAG/B,0BAA0B,CAAC6B,QAAQ,CAAC;EACnD,MAAMG,eAAe,GAAGP,QAAQ,EAAEQ,KAAK,IAAIC,OAAO,CAACrB,KAAK,CAAC;EAEzD,MAAMsB,WAAwB,GAAG;IAC/BC,YAAY,EAAE,aAAa;IAC3BC,EAAE,EAAEC,sBAAsB,CAAC;MACzB9B,cAAc;MACdY,IAAI;MACJK,QAAQ;MACRc,IAAI,EAAEP,eAAe;MACrBL;IACF,CAAC,CAAC;IACFa,MAAM,EAAE,YAAY;IACpBC,OAAO,EAAE;MAAEC,SAAS,EAAE,WAAWpC,SAAS;IAAG,CAAC;IAC9Cc,IAAI,EAAE;MACJuB,MAAM,EAAE,CACN;QACE,IAAIrB,MAAM,GAAG;UAAEA;QAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7BF,IAAI;QACJ,IAAIR,0BAA0B,GAAGJ,cAAc,CAAC,GAC5C;UAAEoC,OAAO,EAAEhC,0BAA0B,CAACJ,cAAc;QAAE,CAAC,GACvD,CAAC,CAAC;MACR,CAAC;IAEL,CAAC;IACD,IAAIuB,MAAM,GAAG;MAAEA;IAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7Bc,SAAS,EAAE,CACT;MACEC,GAAG,EAAE3C,4BAA4B;MACjC4C,WAAW,EAAEC,IAAI,CAACC,SAAS,CAAC5C,IAAI,CAAC6C,GAAG,CAACC,oBAAoB,CAAC;IAC5D,CAAC,CACF;IACD,IAAI1B,QAAQ,GACR;MACE2B,eAAe,EAAE;QACfnB,KAAK,EAAER,QAAQ,CAACQ,KAAK,CAACoB,WAAW,CAAC,CAAC;QACnCC,GAAG,EAAE7B,QAAQ,CAAC6B,GAAG,CAACD,WAAW,CAAC;MAChC;IACF,CAAC,GACDrB,eAAe,GACb;MAAEuB,iBAAiB,EAAEvB,eAAe,CAACqB,WAAW,CAAC;IAAE,CAAC,GACpD,CAAC,CAAC,CAAC;IACT,GAAG1B;EACL,CAAC;EAED,IAAIpB,IAAI,KAAK,eAAe,IAAIR,sBAAsB,CAACc,KAAK,CAAC,EAAE;IAC7DsB,WAAW,CAACqB,SAAS,GAAG,CACtB,IAAI3C,KAAK,CAAC4C,OAAO,KAAKjC,SAAS,GAC3B,EAAE,GACF,CAACgC,SAAS,CAAC,SAAS,EAAE3C,KAAK,CAAC4C,OAAO,EAAE5C,KAAK,CAAC6C,IAAI,CAAC,CAAC,CAAC,EACtD,IAAI7C,KAAK,CAAC8C,OAAO,KAAKnC,SAAS,GAC3B,EAAE,GACF,CAACgC,SAAS,CAAC,SAAS,EAAE3C,KAAK,CAAC8C,OAAO,EAAE9C,KAAK,CAAC6C,IAAI,CAAC,CAAC,CAAC,CACvD;EACH;EAEA,MAAME,eAAe,GAAGC,uBAAuB,CAACxD,IAAI,CAAC;EAErD,IAAIuD,eAAe,CAACE,MAAM,GAAG,CAAC,EAAE;IAC9B3B,WAAW,CAACqB,SAAS,GAAG,CACtB,IAAIrB,WAAW,CAACqB,SAAS,IAAI,EAAE,CAAC,EAChC,GAAGI,eAAe,CACnB;EACH;EAEA,OAAO,CAACzB,WAAW,CAAC;AACtB,CAAC;AAED,MAAMZ,WAAW,GAAIH,IAAY,IAAc,gBAAgB,CAAC2C,IAAI,CAAC3C,IAAI,CAAC;AAE1E,MAAM4C,qBAAqB,GAAG,IAAIC,GAAG,CAAC,CACpC,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,MAAM,CACP,CAAC;;AAEF;AACA;AACA;AACA;AACA,MAAMd,oBAAoB,GAAIrC,KAAc,IAAc;EACxD,IAAIA,KAAK,YAAYoD,IAAI,EAAE;IACzB,OAAOpD,KAAK,CAACuC,WAAW,CAAC,CAAC;EAC5B;EAEA,IAAIc,KAAK,CAACC,OAAO,CAACtD,KAAK,CAAC,EAAE;IACxB,OAAOA,KAAK,CAACoC,GAAG,CAACC,oBAAoB,CAAC;EACxC;EAEA,IAAI,OAAOrC,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE;IAC/C,OAAOA,KAAK;EACd;EAEA,OAAOuD,MAAM,CAACC,WAAW,CACvBD,MAAM,CAACE,OAAO,CAACzD,KAAK,CAAC,CAClB0D,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,KAAK,CAACT,qBAAqB,CAACU,GAAG,CAACD,GAAG,CAAC,CAAC,CAClDvB,GAAG,CAAC,CAAC,CAACuB,GAAG,EAAEE,KAAK,CAAC,KAAK,CAACF,GAAG,EAAEtB,oBAAoB,CAACwB,KAAK,CAAC,CAAC,CAC7D,CAAC;AACH,CAAC;AAED,MAAM/C,cAAc,GAAGA,CACrBd,KAAc,EACdP,IAAoB,EACpBkB,QAAgD,KACO;EACvD,MAAMmD,GAAG,GAAG9D,KAAgC;EAE5C,IAAIf,sBAAsB,CAACe,KAAK,CAAC,EAAE;IACjC,MAAM+D,MAAM,GACV/D,KAAK,CAACgE,IAAI,KAAK,eAAe,GAAGhE,KAAK,CAACiE,OAAO,GAAGjE,KAAK,CAACA,KAAK;IAE9D,OAAO+D,MAAM,KAAKrD,SAAS,GACvB;MACEuB,WAAW,EACTC,IAAI,CAACC,SAAS,CAACE,oBAAoB,CAACrC,KAAK,CAAC,CAAC,IAAIC,MAAM,CAACD,KAAK;IAC/D,CAAC,GACD;MAAEkE,aAAa,EAAEC,QAAQ,CAACJ,MAAM,EAAE/D,KAAK,CAAC4C,IAAI;IAAE,CAAC;EACrD;EAEA,IAAInD,IAAI,KAAK,SAAS,IAAIkB,QAAQ,EAAE;IAClC,OAAO;MACLuD,aAAa,EAAEC,QAAQ,CACrB,CAACxD,QAAQ,CAAC6B,GAAG,CAAC4B,OAAO,CAAC,CAAC,GAAGzD,QAAQ,CAACQ,KAAK,CAACiD,OAAO,CAAC,CAAC,IAAI,KAAK,EAC3D,KACF;IACF,CAAC;EACH;EAEA,MAAMC,SAAS,GAAGC,YAAY,CAACR,GAAG,CAAC;EAEnC,OAAOO,SAAS,GACZ;IAAEH,aAAa,EAAEC,QAAQ,CAACE,SAAS,CAACrE,KAAK,EAAEqE,SAAS,CAACzB,IAAI;EAAE,CAAC,GAC5D;IACEX,WAAW,EACTC,IAAI,CAACC,SAAS,CAACE,oBAAoB,CAACyB,GAAG,CAAC,CAAC,IAAI7D,MAAM,CAAC6D,GAAG;EAC3D,CAAC;AACP,CAAC;AAED,MAAMQ,YAAY,GAChBR,GAA4B,IACoB;EAChD,IAAI,OAAOA,GAAG,CAACK,QAAQ,KAAK,QAAQ,EAAE;IACpC,OAAO;MAAEnE,KAAK,EAAE8D,GAAG,CAACK,QAAQ;MAAEvB,IAAI,EAAE3C,MAAM,CAAC6D,GAAG,CAAClB,IAAI,IAAI,GAAG;IAAE,CAAC;EAC/D;EAEA,MAAM2B,UAA2C,GAAG,CAClD,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,EAC3B,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAAC,EAC9B,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,EAC7B,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,EAC/B,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC,EAC7B,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,CACrC;EAED,KAAK,MAAM,CAACC,YAAY,EAAEC,QAAQ,EAAEC,YAAY,CAAC,IAAIH,UAAU,EAAE;IAC/D,MAAMI,SAAS,GAAGb,GAAG,CAACU,YAAY,CAAwC;IAE1E,IAAI,OAAOG,SAAS,GAAGF,QAAQ,CAAC,KAAK,QAAQ,EAAE;MAC7C,OAAO;QACLzE,KAAK,EAAE2E,SAAS,CAACF,QAAQ,CAAW;QACpC7B,IAAI,EAAEgC,aAAa,CAAC3E,MAAM,CAAC0E,SAAS,CAAC/B,IAAI,IAAI8B,YAAY,CAAC;MAC5D,CAAC;IACH;EACF;EAEA,MAAMG,mBAAoD,GAAG,CAC3D,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,EACxB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EACvB,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EACzB,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,EAC1B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAC5B;EAED,KAAK,MAAM,CAACL,YAAY,EAAEC,QAAQ,EAAEC,YAAY,CAAC,IAAIG,mBAAmB,EAAE;IACxE,MAAMF,SAAS,GAAGb,GAAG,CAACU,YAAY,CAAwC;IAE1E,IAAI,OAAOG,SAAS,GAAGF,QAAQ,CAAC,KAAK,QAAQ,EAAE;MAC7C,OAAO;QACLzE,KAAK,EAAE2E,SAAS,CAACF,QAAQ,CAAW;QACpC7B,IAAI,EAAEgC,aAAa,CAAC3E,MAAM,CAAC0E,SAAS,CAAC/B,IAAI,IAAI8B,YAAY,CAAC;MAC5D,CAAC;IACH;EACF;EAEA,MAAMI,gBAAyC,GAAG,CAChD,CAAC,OAAO,EAAE,OAAO,CAAC,EAClB,CAAC,QAAQ,EAAE,OAAO,CAAC,EACnB,CAAC,MAAM,EAAE,WAAW,CAAC,EACrB,CAAC,gBAAgB,EAAE,WAAW,CAAC,EAC/B,CAAC,YAAY,EAAE,GAAG,CAAC,EACnB,CAAC,iCAAiC,EAAE,WAAW,CAAC,CACjD;EAED,KAAK,MAAM,CAACnB,GAAG,EAAEf,IAAI,CAAC,IAAIkC,gBAAgB,EAAE;IAC1C,IAAI,OAAOhB,GAAG,CAACH,GAAG,CAAC,KAAK,QAAQ,EAAE;MAChC,OAAO;QAAE3D,KAAK,EAAE8D,GAAG,CAACH,GAAG,CAAW;QAAEf;MAAK,CAAC;IAC5C;EACF;EAEA,OAAOlC,SAAS;AAClB,CAAC;AAED,MAAME,WAAW,GACfrB,IAAe,IAC4B;EAC3C,MAAMwF,SAAS,GAAGxF,IAAI,CACnB6C,GAAG,CAAE4C,IAAI,IAAK;IACb,MAAMlB,GAAG,GAAGkB,IAA+B;IAC3C,MAAMC,UAAU,GAAGnB,GAAG,CAACoB,SAAS,IAAIpB,GAAG,CAACqB,SAAS,IAAI,CAAC;IACtD,MAAMhE,KAAK,GAAG,IAAIiC,IAAI,CAAC6B,UAAoC,CAAC;IAC5D,MAAMG,QAAQ,GAAGtB,GAAG,CAACuB,OAAO,IAAIvB,GAAG,CAACwB,OAAO,IAAInE,KAAK;IACpD,MAAMqB,GAAG,GAAG,IAAIY,IAAI,CAACgC,QAAkC,CAAC;IAExD,OAAOG,MAAM,CAACC,KAAK,CAACrE,KAAK,CAACiD,OAAO,CAAC,CAAC,CAAC,IAAImB,MAAM,CAACC,KAAK,CAAChD,GAAG,CAAC4B,OAAO,CAAC,CAAC,CAAC,GAC/D1D,SAAS,GACT;MAAES,KAAK;MAAEqB;IAAI,CAAC;EACpB,CAAC,CAAC,CACDkB,MAAM,CAAC+B,OAAO,CAAiC;EAElD,IAAIV,SAAS,CAAC/B,MAAM,KAAK,CAAC,EAAE;IAC1B,OAAOtC,SAAS;EAClB;EAEA,OAAO;IACLS,KAAK,EAAE,IAAIiC,IAAI,CAACsC,IAAI,CAACC,GAAG,CAAC,GAAGZ,SAAS,CAAC3C,GAAG,CAAC,CAAC;MAAEjB;IAAM,CAAC,KAAKA,KAAK,CAACiD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E5B,GAAG,EAAE,IAAIY,IAAI,CAACsC,IAAI,CAACE,GAAG,CAAC,GAAGb,SAAS,CAAC3C,GAAG,CAAC,CAAC;MAAEI;IAAI,CAAC,KAAKA,GAAG,CAAC4B,OAAO,CAAC,CAAC,CAAC,CAAC;EACtE,CAAC;AACH,CAAC;AAED,MAAMhD,OAAO,GAAIpB,KAAc,IAAuB;EACpD,MAAM8D,GAAG,GAAG9D,KAAgC;EAC5C,MAAMyB,IAAI,GAAGqC,GAAG,CAACuB,OAAO,IAAIvB,GAAG,CAACwB,OAAO,IAAIxB,GAAG,CAACoB,SAAS,IAAIpB,GAAG,CAACqB,SAAS,IAAIrB,GAAG,CAAC+B,IAAI;EAErF,IAAI,CAACpE,IAAI,EAAE;IACT,OAAOf,SAAS;EAClB;EAEA,MAAMoF,MAAM,GAAG,IAAI1C,IAAI,CAAC3B,IAAqB,CAAC;EAE9C,OAAO8D,MAAM,CAACC,KAAK,CAACM,MAAM,CAAC1B,OAAO,CAAC,CAAC,CAAC,GAAG1D,SAAS,GAAGoF,MAAM;AAC5D,CAAC;AAED,MAAM9E,WAAW,GAAIhB,KAAc,IAAK;EACtC,MAAM8D,GAAG,GAAG9D,KAAgC;EAC5C,MAAMe,QAAQ,GAAI+C,GAAG,CAAC/C,QAAQ,IAAI,CAAC,CAA6B;EAChE,MAAMgF,cAAc,GAAGjC,GAAG,CAACiC,cAAqD;EAChF,MAAMC,MAAM,GAAGD,cAAc,EAAEC,MAA6C;EAE5E,MAAM/E,MAAM,GACT6C,GAAG,CAAC7C,MAAM,IACVF,QAAQ,CAACE,MAA8C;EAE1D,OAAO;IACLgF,YAAY,EAAEhG,MAAM,CAACgB,MAAM,EAAEgF,YAAY,IAAIlF,QAAQ,CAACmF,UAAU,IAAI,EAAE,CAAC,IAAIxF,SAAS;IACpFyF,KAAK,EAAE,OAAOlF,MAAM,EAAEkF,KAAK,KAAK,QAAQ,GAAGlF,MAAM,CAACkF,KAAK,GAAGzF,SAAS;IACnE0F,SAAS,EAAEnG,MAAM,CACf+F,MAAM,EAAEK,IAAI,IAAIvC,GAAG,CAACsC,SAAS,IAAIrF,QAAQ,CAACmF,UAAU,IAAI,EAC1D,CAAC,IAAIxF,SAAS;IACd4F,eAAe,EACb,OAAOvF,QAAQ,CAACuF,eAAe,KAAK,QAAQ,GACxCvF,QAAQ,CAACuF,eAAe,GACxB5F;EACR,CAAC;AACH,CAAC;AAED,MAAMqC,uBAAuB,GAAIxD,IAAe,IAC9CA,IAAI,CAACgH,OAAO,CAAEvB,IAAI,IAAK;EACrB,MAAMwB,MAAM,GAAIxB,IAAI,CAA4BwB,MAAM,IAAI,EAAE;EAE5D,IAAIA,MAAM,CAACxD,MAAM,KAAK,CAAC,EAAE;IACvB,MAAMc,GAAG,GAAGkB,IAA+B;IAC3C,MAAM7D,KAAK,GAAG2C,GAAG,CAACoB,SAAS,IAAIpB,GAAG,CAACqB,SAAS;IAC5C,MAAM3C,GAAG,GAAGsB,GAAG,CAACuB,OAAO,IAAIvB,GAAG,CAACwB,OAAO;IAEtC,MAAMmB,QAAQ,GACZtF,KAAK,IAAIqB,GAAG,GACR,CAAC,IAAIY,IAAI,CAACZ,GAAoB,CAAC,CAAC4B,OAAO,CAAC,CAAC,GACvC,IAAIhB,IAAI,CAACjC,KAAsB,CAAC,CAACiD,OAAO,CAAC,CAAC,IAC5C,KAAK,GACL,CAAC;IAEP,OAAOmB,MAAM,CAACmB,QAAQ,CAACD,QAAQ,CAAC,IAAIA,QAAQ,GAAG,CAAC,IAAI3C,GAAG,CAAC9D,KAAK,KAAKU,SAAS,GACvE,CAACgC,SAAS,CAAC,eAAezC,MAAM,CAAC6D,GAAG,CAAC9D,KAAK,CAAC,EAAE,EAAEyG,QAAQ,EAAE,KAAK,CAAC,CAAC,GAChE,EAAE;EACR;EAEA,OAAOD,MAAM,CAACD,OAAO,CAAEI,KAAK,IAAK;IAC/B,MAAM7C,GAAG,GAAG6C,KAAgC;IAC5C,MAAMxF,KAAK,GAAG,IAAIiC,IAAI,CAACU,GAAG,CAACqB,SAAmB,CAAC;IAC/C,MAAM3C,GAAG,GAAG,IAAIY,IAAI,CAACU,GAAG,CAACwB,OAAiB,CAAC;IAC3C,MAAMmB,QAAQ,GAAG,CAACjE,GAAG,CAAC4B,OAAO,CAAC,CAAC,GAAGjD,KAAK,CAACiD,OAAO,CAAC,CAAC,IAAI,KAAK;IAE1D,OAAOmB,MAAM,CAACmB,QAAQ,CAACD,QAAQ,CAAC,IAAIA,QAAQ,GAAG,CAAC,GAC5C,CAAC/D,SAAS,CAAC,eAAezC,MAAM,CAAC6D,GAAG,CAAC6C,KAAK,CAAC,EAAE,EAAEF,QAAQ,EAAE,KAAK,CAAC,CAAC,GAChE,EAAE;EACR,CAAC,CAAC;AACJ,CAAC,CAAC;AAEJ,MAAM/D,SAAS,GAAGA,CAACkE,KAAa,EAAE5G,KAAa,EAAE4C,IAAY,MAAM;EACjEtC,IAAI,EAAE;IAAEuG,IAAI,EAAED;EAAM,CAAC;EACrB1C,aAAa,EAAEC,QAAQ,CAACnE,KAAK,EAAE4C,IAAI;AACrC,CAAC,CAAC;AAEF,MAAMuB,QAAQ,GAAGA,CAACnE,KAAa,EAAE4C,IAAY,MAAM;EACjD5C,KAAK;EACL4C,IAAI;EACJpC,MAAM,EAAErB,gBAAgB;EACxBmB,IAAI,EAAEsE,aAAa,CAAChC,IAAI;AAC1B,CAAC,CAAC;AAEF,MAAMgC,aAAa,GAAIhC,IAAY,IACjC,CAAC;EACCkE,UAAU,EAAE,IAAI;EAChBC,MAAM,EAAE,GAAG;EACXC,KAAK,EAAE,IAAI;EACXC,SAAS,EAAE,IAAI;EACfC,KAAK,EAAE,GAAG;EACVC,UAAU,EAAE,IAAI;EAChBC,YAAY,EAAE,MAAM;EACpBC,QAAQ,EAAE,KAAK;EACfC,OAAO,EAAE,KAAK;EACdC,OAAO,EAAE,GAAG;EACZC,cAAc,EAAE;AAClB,CAAC,EAAE5E,IAAI,CAAC,IAAIA,IAAI;AAElB,MAAMpB,sBAAsB,GAAGA,CAAC;EAC9B9B,cAAc;EACdY,IAAI;EACJK,QAAQ;EACRc,IAAI;EACJZ;AAOF,CAAC,KAAa;EACZ,MAAMgF,IAAI,GAAGlF,QAAQ,GACjB,GAAGA,QAAQ,CAACQ,KAAK,CAACoB,WAAW,CAAC,CAAC,IAAI5B,QAAQ,CAAC6B,GAAG,CAACD,WAAW,CAAC,CAAC,EAAE,GAC/Dd,IAAI,EAAEc,WAAW,CAAC,CAAC,IAAI,SAAS;EAEpC,MAAMvC,KAAK,GACTa,WAAW,CAACqD,aAAa,EAAElE,KAAK,IAAIa,WAAW,CAACoB,WAAW,IAAI,OAAO;EAExE,OAAO,UAAU,CAACvC,cAAc,EAAEY,IAAI,EAAEuF,IAAI,EAAE7F,KAAK,CAAC,CACjDyH,IAAI,CAAC,GAAG,CAAC,CACTC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAC/BC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACnB,CAAC","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
|
-
|
|
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":";;
|
|
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
|
|
17
|
-
|
|
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:
|
|
93
|
+
startTime: resolvedStartDate,
|
|
22
94
|
endTime: endDate
|
|
23
95
|
},
|
|
24
96
|
pageSize: chunkSize,
|
|
25
|
-
pageToken
|
|
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
|
-
|
|
111
|
+
hasMore: Boolean(result.pageToken),
|
|
112
|
+
anchor: {
|
|
30
113
|
typeIdentifier,
|
|
31
|
-
anchor:
|
|
32
|
-
}
|
|
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));
|