@fluidframework/odsp-driver 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.224419
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/.eslintrc.js +12 -12
- package/.mocharc.js +12 -0
- package/CHANGELOG.md +162 -0
- package/README.md +56 -0
- package/api-extractor-lint.json +4 -0
- package/api-extractor.json +2 -2
- package/api-report/odsp-driver.api.md +310 -0
- package/dist/{ReadBufferUtils.js → ReadBufferUtils.cjs} +16 -9
- package/dist/ReadBufferUtils.cjs.map +1 -0
- package/dist/ReadBufferUtils.d.ts.map +1 -1
- package/dist/{WriteBufferUtils.js → WriteBufferUtils.cjs} +73 -69
- package/dist/WriteBufferUtils.cjs.map +1 -0
- package/dist/WriteBufferUtils.d.ts +3 -5
- package/dist/WriteBufferUtils.d.ts.map +1 -1
- package/dist/{checkUrl.js → checkUrl.cjs} +7 -6
- package/dist/checkUrl.cjs.map +1 -0
- package/dist/checkUrl.d.ts +1 -0
- package/dist/checkUrl.d.ts.map +1 -1
- package/dist/compactSnapshotParser.cjs +207 -0
- package/dist/compactSnapshotParser.cjs.map +1 -0
- package/dist/compactSnapshotParser.d.ts +12 -3
- package/dist/compactSnapshotParser.d.ts.map +1 -1
- package/dist/{compactSnapshotWriter.js → compactSnapshotWriter.cjs} +43 -33
- package/dist/compactSnapshotWriter.cjs.map +1 -0
- package/dist/compactSnapshotWriter.d.ts +2 -3
- package/dist/compactSnapshotWriter.d.ts.map +1 -1
- package/dist/{constants.js → constants.cjs} +7 -1
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/{contracts.js → contracts.cjs} +1 -1
- package/dist/contracts.cjs.map +1 -0
- package/dist/contracts.d.ts +16 -53
- package/dist/contracts.d.ts.map +1 -1
- package/dist/{contractsPublic.js → contractsPublic.cjs} +9 -3
- package/dist/contractsPublic.cjs.map +1 -0
- package/dist/contractsPublic.d.ts +15 -0
- package/dist/contractsPublic.d.ts.map +1 -1
- package/dist/createFile.cjs +177 -0
- package/dist/createFile.cjs.map +1 -0
- package/dist/createFile.d.ts +6 -10
- package/dist/createFile.d.ts.map +1 -1
- package/dist/createNewContainerOnExistingFile.cjs +60 -0
- package/dist/createNewContainerOnExistingFile.cjs.map +1 -0
- package/dist/createNewContainerOnExistingFile.d.ts +22 -0
- package/dist/createNewContainerOnExistingFile.d.ts.map +1 -0
- package/dist/createNewModule.cjs +12 -0
- package/dist/createNewModule.cjs.map +1 -0
- package/dist/createNewModule.d.ts +7 -0
- package/dist/createNewModule.d.ts.map +1 -0
- package/dist/createNewUtils.cjs +203 -0
- package/dist/createNewUtils.cjs.map +1 -0
- package/dist/createNewUtils.d.ts +16 -0
- package/dist/createNewUtils.d.ts.map +1 -1
- package/dist/{createOdspCreateContainerRequest.js → createOdspCreateContainerRequest.cjs} +8 -4
- package/dist/createOdspCreateContainerRequest.cjs.map +1 -0
- package/dist/createOdspCreateContainerRequest.d.ts +5 -3
- package/dist/createOdspCreateContainerRequest.d.ts.map +1 -1
- package/dist/{createOdspUrl.js → createOdspUrl.cjs} +2 -1
- package/dist/createOdspUrl.cjs.map +1 -0
- package/dist/createOdspUrl.d.ts +1 -0
- package/dist/createOdspUrl.d.ts.map +1 -1
- package/dist/{epochTracker.js → epochTracker.cjs} +102 -48
- package/dist/epochTracker.cjs.map +1 -0
- package/dist/epochTracker.d.ts +32 -8
- package/dist/epochTracker.d.ts.map +1 -1
- package/dist/{fetch.js → fetch.cjs} +1 -1
- package/dist/fetch.cjs.map +1 -0
- package/dist/fetch.d.ts +1 -1
- package/dist/fetch.d.ts.map +1 -1
- package/dist/{fetchSnapshot.js → fetchSnapshot.cjs} +192 -176
- package/dist/fetchSnapshot.cjs.map +1 -0
- package/dist/fetchSnapshot.d.ts +10 -5
- package/dist/fetchSnapshot.d.ts.map +1 -1
- package/dist/{getFileLink.js → getFileLink.cjs} +52 -41
- package/dist/getFileLink.cjs.map +1 -0
- package/dist/getFileLink.d.ts +4 -7
- package/dist/getFileLink.d.ts.map +1 -1
- package/dist/{getQueryString.js → getQueryString.cjs} +1 -1
- package/dist/getQueryString.cjs.map +1 -0
- package/dist/getQueryString.d.ts.map +1 -1
- package/dist/{getUrlAndHeadersWithAuth.js → getUrlAndHeadersWithAuth.cjs} +4 -2
- package/dist/getUrlAndHeadersWithAuth.cjs.map +1 -0
- package/dist/getUrlAndHeadersWithAuth.d.ts.map +1 -1
- package/dist/index.cjs +59 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +19 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/localOdspDriver/localOdspDeltaStorageService.cjs +35 -0
- package/dist/localOdspDriver/localOdspDeltaStorageService.cjs.map +1 -0
- package/dist/localOdspDriver/localOdspDeltaStorageService.d.ts +17 -0
- package/dist/localOdspDriver/localOdspDeltaStorageService.d.ts.map +1 -0
- package/dist/localOdspDriver/{localOdspDocumentService.js → localOdspDocumentService.cjs} +7 -5
- package/dist/localOdspDriver/localOdspDocumentService.cjs.map +1 -0
- package/dist/localOdspDriver/localOdspDocumentService.d.ts +3 -2
- package/dist/localOdspDriver/localOdspDocumentService.d.ts.map +1 -1
- package/dist/localOdspDriver/{localOdspDocumentServiceFactory.js → localOdspDocumentServiceFactory.cjs} +9 -10
- package/dist/localOdspDriver/localOdspDocumentServiceFactory.cjs.map +1 -0
- package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts +2 -3
- package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -1
- package/dist/localOdspDriver/{localOdspDocumentStorageManager.js → localOdspDocumentStorageManager.cjs} +13 -11
- package/dist/localOdspDriver/localOdspDocumentStorageManager.cjs.map +1 -0
- package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts +2 -2
- package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +1 -1
- package/dist/odsp-driver-alpha.d.ts +497 -0
- package/dist/odsp-driver-beta.d.ts +159 -0
- package/dist/odsp-driver-public.d.ts +159 -0
- package/dist/odsp-driver-untrimmed.d.ts +566 -0
- package/dist/{odspCache.js → odspCache.cjs} +9 -10
- package/dist/odspCache.cjs.map +1 -0
- package/dist/odspCache.d.ts +19 -4
- package/dist/odspCache.d.ts.map +1 -1
- package/dist/odspDelayLoadedDeltaStream.cjs +291 -0
- package/dist/odspDelayLoadedDeltaStream.cjs.map +1 -0
- package/dist/odspDelayLoadedDeltaStream.d.ts +75 -0
- package/dist/odspDelayLoadedDeltaStream.d.ts.map +1 -0
- package/dist/{odspDeltaStorageService.js → odspDeltaStorageService.cjs} +70 -71
- package/dist/odspDeltaStorageService.cjs.map +1 -0
- package/dist/odspDeltaStorageService.d.ts +8 -6
- package/dist/odspDeltaStorageService.d.ts.map +1 -1
- package/dist/{odspDocumentDeltaConnection.js → odspDocumentDeltaConnection.cjs} +224 -113
- package/dist/odspDocumentDeltaConnection.cjs.map +1 -0
- package/dist/odspDocumentDeltaConnection.d.ts +32 -12
- package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
- package/dist/odspDocumentService.cjs +225 -0
- package/dist/odspDocumentService.cjs.map +1 -0
- package/dist/odspDocumentService.d.ts +11 -25
- package/dist/odspDocumentService.d.ts.map +1 -1
- package/dist/{odspDocumentServiceFactory.js → odspDocumentServiceFactory.cjs} +8 -5
- package/dist/odspDocumentServiceFactory.cjs.map +1 -0
- package/dist/odspDocumentServiceFactory.d.ts +4 -0
- package/dist/odspDocumentServiceFactory.d.ts.map +1 -1
- package/dist/odspDocumentServiceFactoryCore.cjs +196 -0
- package/dist/odspDocumentServiceFactoryCore.cjs.map +1 -0
- package/dist/odspDocumentServiceFactoryCore.d.ts +16 -11
- package/dist/odspDocumentServiceFactoryCore.d.ts.map +1 -1
- package/dist/odspDocumentServiceFactoryWithCodeSplit.cjs +20 -0
- package/dist/odspDocumentServiceFactoryWithCodeSplit.cjs.map +1 -0
- package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts +5 -0
- package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +1 -1
- package/dist/odspDocumentStorageManager.cjs +490 -0
- package/dist/odspDocumentStorageManager.cjs.map +1 -0
- package/dist/odspDocumentStorageManager.d.ts +11 -5
- package/dist/odspDocumentStorageManager.d.ts.map +1 -1
- package/dist/{odspDocumentStorageServiceBase.js → odspDocumentStorageServiceBase.cjs} +32 -34
- package/dist/odspDocumentStorageServiceBase.cjs.map +1 -0
- package/dist/odspDocumentStorageServiceBase.d.ts +7 -9
- package/dist/odspDocumentStorageServiceBase.d.ts.map +1 -1
- package/dist/{odspDriverUrlResolver.js → odspDriverUrlResolver.cjs} +50 -36
- package/dist/odspDriverUrlResolver.cjs.map +1 -0
- package/dist/odspDriverUrlResolver.d.ts +12 -0
- package/dist/odspDriverUrlResolver.d.ts.map +1 -1
- package/dist/{odspDriverUrlResolverForShareLink.js → odspDriverUrlResolverForShareLink.cjs} +37 -26
- package/dist/odspDriverUrlResolverForShareLink.cjs.map +1 -0
- package/dist/odspDriverUrlResolverForShareLink.d.ts +5 -3
- package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
- package/dist/{odspError.js → odspError.cjs} +7 -3
- package/dist/odspError.cjs.map +1 -0
- package/dist/odspError.d.ts.map +1 -1
- package/dist/{odspFluidFileLink.js → odspFluidFileLink.cjs} +25 -18
- package/dist/odspFluidFileLink.cjs.map +1 -0
- package/dist/odspFluidFileLink.d.ts +10 -1
- package/dist/odspFluidFileLink.d.ts.map +1 -1
- package/dist/odspLocationRedirection.cjs +24 -0
- package/dist/odspLocationRedirection.cjs.map +1 -0
- package/dist/odspLocationRedirection.d.ts +14 -0
- package/dist/odspLocationRedirection.d.ts.map +1 -0
- package/dist/{odspPublicUtils.js → odspPublicUtils.cjs} +7 -4
- package/dist/odspPublicUtils.cjs.map +1 -0
- package/dist/odspPublicUtils.d.ts +6 -0
- package/dist/odspPublicUtils.d.ts.map +1 -1
- package/dist/{odspSnapshotParser.js → odspSnapshotParser.cjs} +11 -12
- package/dist/odspSnapshotParser.cjs.map +1 -0
- package/dist/odspSnapshotParser.d.ts.map +1 -1
- package/dist/{odspSummaryUploadManager.js → odspSummaryUploadManager.cjs} +47 -34
- package/dist/odspSummaryUploadManager.cjs.map +1 -0
- package/dist/odspSummaryUploadManager.d.ts +7 -4
- package/dist/odspSummaryUploadManager.d.ts.map +1 -1
- package/dist/{odspUrlHelper.js → odspUrlHelper.cjs} +9 -3
- package/dist/odspUrlHelper.cjs.map +1 -0
- package/dist/odspUrlHelper.d.ts +5 -0
- package/dist/odspUrlHelper.d.ts.map +1 -1
- package/dist/{odspUtils.js → odspUtils.cjs} +118 -30
- package/dist/odspUtils.cjs.map +1 -0
- package/dist/odspUtils.d.ts +35 -6
- package/dist/odspUtils.d.ts.map +1 -1
- package/dist/{opsCaching.js → opsCaching.cjs} +25 -9
- package/dist/opsCaching.cjs.map +1 -0
- package/dist/opsCaching.d.ts +3 -3
- package/dist/opsCaching.d.ts.map +1 -1
- package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
- package/dist/packageVersion.cjs.map +1 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/prefetchLatestSnapshot.cjs +100 -0
- package/dist/prefetchLatestSnapshot.cjs.map +1 -0
- package/dist/prefetchLatestSnapshot.d.ts +12 -7
- package/dist/prefetchLatestSnapshot.d.ts.map +1 -1
- package/dist/{retryErrorsStorageAdapter.js → retryErrorsStorageAdapter.cjs} +13 -6
- package/dist/retryErrorsStorageAdapter.cjs.map +1 -0
- package/dist/retryErrorsStorageAdapter.d.ts +5 -4
- package/dist/retryErrorsStorageAdapter.d.ts.map +1 -1
- package/dist/{retryUtils.js → retryUtils.cjs} +30 -14
- package/dist/retryUtils.cjs.map +1 -0
- package/dist/retryUtils.d.ts +2 -2
- package/dist/retryUtils.d.ts.map +1 -1
- package/dist/socketModule.cjs +10 -0
- package/dist/socketModule.cjs.map +1 -0
- package/dist/socketModule.d.ts +7 -0
- package/dist/socketModule.d.ts.map +1 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/{vroom.js → vroom.cjs} +24 -9
- package/dist/vroom.cjs.map +1 -0
- package/dist/vroom.d.ts +4 -4
- package/dist/vroom.d.ts.map +1 -1
- package/dist/{zipItDataRepresentationUtils.js → zipItDataRepresentationUtils.cjs} +227 -118
- package/dist/zipItDataRepresentationUtils.cjs.map +1 -0
- package/dist/zipItDataRepresentationUtils.d.ts +47 -20
- package/dist/zipItDataRepresentationUtils.d.ts.map +1 -1
- package/lib/ReadBufferUtils.d.mts.map +1 -0
- package/lib/{ReadBufferUtils.js → ReadBufferUtils.mjs} +14 -7
- package/lib/ReadBufferUtils.mjs.map +1 -0
- package/lib/{WriteBufferUtils.d.ts → WriteBufferUtils.d.mts} +3 -5
- package/lib/WriteBufferUtils.d.mts.map +1 -0
- package/lib/{WriteBufferUtils.js → WriteBufferUtils.mjs} +68 -64
- package/lib/WriteBufferUtils.mjs.map +1 -0
- package/lib/{checkUrl.d.ts → checkUrl.d.mts} +1 -0
- package/lib/checkUrl.d.mts.map +1 -0
- package/lib/{checkUrl.js → checkUrl.mjs} +7 -6
- package/lib/checkUrl.mjs.map +1 -0
- package/lib/compactSnapshotParser.d.mts +24 -0
- package/lib/compactSnapshotParser.d.mts.map +1 -0
- package/lib/compactSnapshotParser.mjs +203 -0
- package/lib/compactSnapshotParser.mjs.map +1 -0
- package/lib/{compactSnapshotWriter.d.ts → compactSnapshotWriter.d.mts} +3 -4
- package/lib/compactSnapshotWriter.d.mts.map +1 -0
- package/lib/{compactSnapshotWriter.js → compactSnapshotWriter.mjs} +41 -31
- package/lib/compactSnapshotWriter.mjs.map +1 -0
- package/lib/{constants.d.ts → constants.d.mts} +6 -0
- package/lib/constants.d.mts.map +1 -0
- package/lib/{constants.js → constants.mjs} +7 -1
- package/lib/constants.mjs.map +1 -0
- package/lib/{contracts.d.ts → contracts.d.mts} +17 -54
- package/lib/contracts.d.mts.map +1 -0
- package/lib/{contracts.js → contracts.mjs} +1 -1
- package/lib/contracts.mjs.map +1 -0
- package/lib/{contractsPublic.d.ts → contractsPublic.d.mts} +15 -0
- package/lib/contractsPublic.d.mts.map +1 -0
- package/lib/{contractsPublic.js → contractsPublic.mjs} +7 -1
- package/lib/contractsPublic.mjs.map +1 -0
- package/lib/createFile.d.mts +18 -0
- package/lib/createFile.d.mts.map +1 -0
- package/lib/createFile.mjs +171 -0
- package/lib/createFile.mjs.map +1 -0
- package/lib/createNewContainerOnExistingFile.d.mts +22 -0
- package/lib/createNewContainerOnExistingFile.d.mts.map +1 -0
- package/lib/createNewContainerOnExistingFile.mjs +56 -0
- package/lib/createNewContainerOnExistingFile.mjs.map +1 -0
- package/lib/createNewModule.d.mts +7 -0
- package/lib/createNewModule.d.mts.map +1 -0
- package/lib/createNewModule.mjs +7 -0
- package/lib/createNewModule.mjs.map +1 -0
- package/lib/createNewUtils.d.mts +27 -0
- package/lib/createNewUtils.d.mts.map +1 -0
- package/lib/createNewUtils.mjs +197 -0
- package/lib/createNewUtils.mjs.map +1 -0
- package/lib/{createOdspCreateContainerRequest.d.ts → createOdspCreateContainerRequest.d.mts} +5 -7
- package/lib/createOdspCreateContainerRequest.d.mts.map +1 -0
- package/lib/{createOdspCreateContainerRequest.js → createOdspCreateContainerRequest.mjs} +8 -4
- package/lib/createOdspCreateContainerRequest.mjs.map +1 -0
- package/lib/{createOdspUrl.d.ts → createOdspUrl.d.mts} +2 -1
- package/lib/{createOdspUrl.d.ts.map → createOdspUrl.d.mts.map} +1 -1
- package/lib/{createOdspUrl.js → createOdspUrl.mjs} +2 -1
- package/lib/createOdspUrl.mjs.map +1 -0
- package/lib/{epochTracker.d.ts → epochTracker.d.mts} +34 -10
- package/lib/epochTracker.d.mts.map +1 -0
- package/lib/{epochTracker.js → epochTracker.mjs} +97 -43
- package/lib/epochTracker.mjs.map +1 -0
- package/lib/{fetch.d.ts → fetch.d.mts} +1 -1
- package/lib/{fetch.d.ts.map → fetch.d.mts.map} +1 -1
- package/lib/{fetch.js → fetch.mjs} +1 -1
- package/lib/fetch.mjs.map +1 -0
- package/lib/{fetchSnapshot.d.ts → fetchSnapshot.d.mts} +14 -9
- package/lib/fetchSnapshot.d.mts.map +1 -0
- package/lib/{fetchSnapshot.js → fetchSnapshot.mjs} +185 -167
- package/lib/fetchSnapshot.mjs.map +1 -0
- package/lib/{getFileLink.d.ts → getFileLink.d.mts} +4 -7
- package/lib/getFileLink.d.mts.map +1 -0
- package/lib/{getFileLink.js → getFileLink.mjs} +49 -38
- package/lib/getFileLink.mjs.map +1 -0
- package/lib/{getQueryString.d.ts → getQueryString.d.mts} +0 -4
- package/lib/getQueryString.d.mts.map +1 -0
- package/lib/{getQueryString.js → getQueryString.mjs} +1 -1
- package/lib/getQueryString.mjs.map +1 -0
- package/lib/{getUrlAndHeadersWithAuth.d.ts.map → getUrlAndHeadersWithAuth.d.mts.map} +1 -1
- package/lib/{getUrlAndHeadersWithAuth.js → getUrlAndHeadersWithAuth.mjs} +4 -2
- package/lib/getUrlAndHeadersWithAuth.mjs.map +1 -0
- package/lib/index.d.mts +24 -0
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +22 -0
- package/lib/index.mjs.map +1 -0
- package/lib/localOdspDriver/localOdspDeltaStorageService.d.mts +17 -0
- package/lib/localOdspDriver/localOdspDeltaStorageService.d.mts.map +1 -0
- package/lib/localOdspDriver/localOdspDeltaStorageService.mjs +31 -0
- package/lib/localOdspDriver/localOdspDeltaStorageService.mjs.map +1 -0
- package/lib/localOdspDriver/{localOdspDocumentService.d.ts → localOdspDocumentService.d.mts} +3 -2
- package/lib/localOdspDriver/localOdspDocumentService.d.mts.map +1 -0
- package/lib/localOdspDriver/{localOdspDocumentService.js → localOdspDocumentService.mjs} +8 -6
- package/lib/localOdspDriver/localOdspDocumentService.mjs.map +1 -0
- package/lib/localOdspDriver/{localOdspDocumentServiceFactory.d.ts → localOdspDocumentServiceFactory.d.mts} +4 -5
- package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.mts.map +1 -0
- package/lib/localOdspDriver/{localOdspDocumentServiceFactory.js → localOdspDocumentServiceFactory.mjs} +9 -10
- package/lib/localOdspDriver/localOdspDocumentServiceFactory.mjs.map +1 -0
- package/lib/localOdspDriver/{localOdspDocumentStorageManager.d.ts → localOdspDocumentStorageManager.d.mts} +3 -3
- package/lib/localOdspDriver/localOdspDocumentStorageManager.d.mts.map +1 -0
- package/lib/localOdspDriver/{localOdspDocumentStorageManager.js → localOdspDocumentStorageManager.mjs} +11 -9
- package/lib/localOdspDriver/localOdspDocumentStorageManager.mjs.map +1 -0
- package/lib/odsp-driver-alpha.d.mts +497 -0
- package/lib/odsp-driver-beta.d.mts +159 -0
- package/lib/odsp-driver-public.d.mts +159 -0
- package/lib/odsp-driver-untrimmed.d.mts +566 -0
- package/lib/{odspCache.d.ts → odspCache.d.mts} +19 -8
- package/lib/odspCache.d.mts.map +1 -0
- package/lib/{odspCache.js → odspCache.mjs} +6 -11
- package/lib/odspCache.mjs.map +1 -0
- package/lib/odspDelayLoadedDeltaStream.d.mts +75 -0
- package/lib/odspDelayLoadedDeltaStream.d.mts.map +1 -0
- package/lib/odspDelayLoadedDeltaStream.mjs +287 -0
- package/lib/odspDelayLoadedDeltaStream.mjs.map +1 -0
- package/lib/{odspDeltaStorageService.d.ts → odspDeltaStorageService.d.mts} +9 -7
- package/lib/odspDeltaStorageService.d.mts.map +1 -0
- package/lib/{odspDeltaStorageService.js → odspDeltaStorageService.mjs} +70 -68
- package/lib/odspDeltaStorageService.mjs.map +1 -0
- package/lib/{odspDocumentDeltaConnection.d.ts → odspDocumentDeltaConnection.d.mts} +33 -13
- package/lib/odspDocumentDeltaConnection.d.mts.map +1 -0
- package/lib/{odspDocumentDeltaConnection.js → odspDocumentDeltaConnection.mjs} +214 -103
- package/lib/odspDocumentDeltaConnection.mjs.map +1 -0
- package/lib/{odspDocumentService.d.ts → odspDocumentService.d.mts} +14 -28
- package/lib/odspDocumentService.d.mts.map +1 -0
- package/lib/odspDocumentService.mjs +221 -0
- package/lib/odspDocumentService.mjs.map +1 -0
- package/lib/{odspDocumentServiceFactory.d.ts → odspDocumentServiceFactory.d.mts} +5 -1
- package/lib/odspDocumentServiceFactory.d.mts.map +1 -0
- package/lib/{odspDocumentServiceFactory.js → odspDocumentServiceFactory.mjs} +8 -6
- package/lib/odspDocumentServiceFactory.mjs.map +1 -0
- package/lib/{odspDocumentServiceFactoryCore.d.ts → odspDocumentServiceFactoryCore.d.mts} +17 -12
- package/lib/odspDocumentServiceFactoryCore.d.mts.map +1 -0
- package/lib/odspDocumentServiceFactoryCore.mjs +192 -0
- package/lib/odspDocumentServiceFactoryCore.mjs.map +1 -0
- package/lib/{odspDocumentServiceFactoryWithCodeSplit.d.ts → odspDocumentServiceFactoryWithCodeSplit.d.mts} +6 -1
- package/lib/odspDocumentServiceFactoryWithCodeSplit.d.mts.map +1 -0
- package/lib/{odspDocumentServiceFactoryWithCodeSplit.js → odspDocumentServiceFactoryWithCodeSplit.mjs} +8 -3
- package/lib/odspDocumentServiceFactoryWithCodeSplit.mjs.map +1 -0
- package/lib/{odspDocumentStorageManager.d.ts → odspDocumentStorageManager.d.mts} +17 -11
- package/lib/odspDocumentStorageManager.d.mts.map +1 -0
- package/lib/odspDocumentStorageManager.mjs +486 -0
- package/lib/odspDocumentStorageManager.mjs.map +1 -0
- package/lib/{odspDocumentStorageServiceBase.d.ts → odspDocumentStorageServiceBase.d.mts} +8 -10
- package/lib/odspDocumentStorageServiceBase.d.mts.map +1 -0
- package/lib/{odspDocumentStorageServiceBase.js → odspDocumentStorageServiceBase.mjs} +31 -33
- package/lib/odspDocumentStorageServiceBase.mjs.map +1 -0
- package/lib/{odspDriverUrlResolver.d.ts → odspDriverUrlResolver.d.mts} +12 -0
- package/lib/odspDriverUrlResolver.d.mts.map +1 -0
- package/lib/{odspDriverUrlResolver.js → odspDriverUrlResolver.mjs} +50 -40
- package/lib/odspDriverUrlResolver.mjs.map +1 -0
- package/lib/{odspDriverUrlResolverForShareLink.d.ts → odspDriverUrlResolverForShareLink.d.mts} +6 -4
- package/lib/odspDriverUrlResolverForShareLink.d.mts.map +1 -0
- package/lib/{odspDriverUrlResolverForShareLink.js → odspDriverUrlResolverForShareLink.mjs} +36 -29
- package/lib/odspDriverUrlResolverForShareLink.mjs.map +1 -0
- package/lib/{odspError.d.ts → odspError.d.mts} +1 -1
- package/lib/odspError.d.mts.map +1 -0
- package/lib/{odspError.js → odspError.mjs} +7 -3
- package/lib/odspError.mjs.map +1 -0
- package/lib/{odspFluidFileLink.d.ts → odspFluidFileLink.d.mts} +11 -2
- package/lib/odspFluidFileLink.d.mts.map +1 -0
- package/lib/{odspFluidFileLink.js → odspFluidFileLink.mjs} +23 -16
- package/lib/odspFluidFileLink.mjs.map +1 -0
- package/lib/odspLocationRedirection.d.mts +14 -0
- package/lib/odspLocationRedirection.d.mts.map +1 -0
- package/lib/odspLocationRedirection.mjs +20 -0
- package/lib/odspLocationRedirection.mjs.map +1 -0
- package/lib/{odspPublicUtils.d.ts → odspPublicUtils.d.mts} +6 -0
- package/lib/odspPublicUtils.d.mts.map +1 -0
- package/lib/{odspPublicUtils.js → odspPublicUtils.mjs} +5 -2
- package/lib/odspPublicUtils.mjs.map +1 -0
- package/lib/{odspSnapshotParser.d.ts → odspSnapshotParser.d.mts} +2 -2
- package/lib/odspSnapshotParser.d.mts.map +1 -0
- package/lib/{odspSnapshotParser.js → odspSnapshotParser.mjs} +10 -11
- package/lib/odspSnapshotParser.mjs.map +1 -0
- package/lib/{odspSummaryUploadManager.d.ts → odspSummaryUploadManager.d.mts} +8 -5
- package/lib/odspSummaryUploadManager.d.mts.map +1 -0
- package/lib/{odspSummaryUploadManager.js → odspSummaryUploadManager.mjs} +41 -32
- package/lib/odspSummaryUploadManager.mjs.map +1 -0
- package/lib/{odspUrlHelper.d.ts → odspUrlHelper.d.mts} +5 -0
- package/lib/odspUrlHelper.d.mts.map +1 -0
- package/lib/{odspUrlHelper.js → odspUrlHelper.mjs} +9 -3
- package/lib/odspUrlHelper.mjs.map +1 -0
- package/lib/{odspUtils.d.ts → odspUtils.d.mts} +36 -7
- package/lib/odspUtils.d.mts.map +1 -0
- package/lib/{odspUtils.js → odspUtils.mjs} +109 -27
- package/lib/odspUtils.mjs.map +1 -0
- package/lib/{opsCaching.d.ts → opsCaching.d.mts} +3 -3
- package/lib/opsCaching.d.mts.map +1 -0
- package/lib/{opsCaching.js → opsCaching.mjs} +23 -7
- package/lib/opsCaching.mjs.map +1 -0
- package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
- package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
- package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
- package/lib/packageVersion.mjs.map +1 -0
- package/lib/{prefetchLatestSnapshot.d.ts → prefetchLatestSnapshot.d.mts} +13 -8
- package/lib/prefetchLatestSnapshot.d.mts.map +1 -0
- package/lib/prefetchLatestSnapshot.mjs +96 -0
- package/lib/prefetchLatestSnapshot.mjs.map +1 -0
- package/lib/{retryErrorsStorageAdapter.d.ts → retryErrorsStorageAdapter.d.mts} +5 -4
- package/lib/retryErrorsStorageAdapter.d.mts.map +1 -0
- package/lib/{retryErrorsStorageAdapter.js → retryErrorsStorageAdapter.mjs} +13 -6
- package/lib/retryErrorsStorageAdapter.mjs.map +1 -0
- package/lib/{retryUtils.d.ts → retryUtils.d.mts} +2 -2
- package/lib/retryUtils.d.mts.map +1 -0
- package/lib/{retryUtils.js → retryUtils.mjs} +27 -11
- package/lib/retryUtils.mjs.map +1 -0
- package/lib/socketModule.d.mts +7 -0
- package/lib/socketModule.d.mts.map +1 -0
- package/lib/socketModule.mjs +7 -0
- package/lib/socketModule.mjs.map +1 -0
- package/lib/{vroom.d.ts → vroom.d.mts} +6 -6
- package/lib/vroom.d.mts.map +1 -0
- package/lib/{vroom.js → vroom.mjs} +24 -9
- package/lib/vroom.mjs.map +1 -0
- package/lib/{zipItDataRepresentationUtils.d.ts → zipItDataRepresentationUtils.d.mts} +48 -21
- package/lib/zipItDataRepresentationUtils.d.mts.map +1 -0
- package/lib/{zipItDataRepresentationUtils.js → zipItDataRepresentationUtils.mjs} +213 -111
- package/lib/zipItDataRepresentationUtils.mjs.map +1 -0
- package/package.json +89 -69
- package/prettier.config.cjs +8 -0
- package/src/ReadBufferUtils.ts +51 -44
- package/src/WriteBufferUtils.ts +203 -181
- package/src/checkUrl.ts +16 -15
- package/src/compactSnapshotParser.ts +219 -103
- package/src/compactSnapshotWriter.ts +118 -97
- package/src/constants.ts +7 -0
- package/src/contracts.ts +96 -136
- package/src/contractsPublic.ts +31 -16
- package/src/createFile.ts +243 -305
- package/src/createNewContainerOnExistingFile.ts +93 -0
- package/src/createNewModule.ts +7 -0
- package/src/createNewUtils.ts +266 -56
- package/src/createOdspCreateContainerRequest.ts +22 -18
- package/src/createOdspUrl.ts +12 -13
- package/src/epochTracker.ts +596 -457
- package/src/fetch.ts +4 -4
- package/src/fetchSnapshot.ts +583 -508
- package/src/getFileLink.ts +194 -155
- package/src/getQueryString.ts +11 -9
- package/src/getUrlAndHeadersWithAuth.ts +34 -33
- package/src/index.ts +42 -18
- package/src/localOdspDriver/localOdspDeltaStorageService.ts +49 -0
- package/src/localOdspDriver/localOdspDocumentService.ts +40 -38
- package/src/localOdspDriver/localOdspDocumentServiceFactory.ts +46 -43
- package/src/localOdspDriver/localOdspDocumentStorageManager.ts +55 -50
- package/src/odspCache.ts +112 -90
- package/src/odspDelayLoadedDeltaStream.ts +459 -0
- package/src/odspDeltaStorageService.ts +232 -221
- package/src/odspDocumentDeltaConnection.ts +751 -563
- package/src/odspDocumentService.ts +324 -523
- package/src/odspDocumentServiceFactory.ts +20 -21
- package/src/odspDocumentServiceFactoryCore.ts +325 -202
- package/src/odspDocumentServiceFactoryWithCodeSplit.ts +20 -20
- package/src/odspDocumentStorageManager.ts +730 -534
- package/src/odspDocumentStorageServiceBase.ts +279 -254
- package/src/odspDriverUrlResolver.ts +230 -188
- package/src/odspDriverUrlResolverForShareLink.ts +223 -203
- package/src/odspError.ts +27 -19
- package/src/odspFluidFileLink.ts +106 -87
- package/src/odspLocationRedirection.ts +26 -0
- package/src/odspPublicUtils.ts +20 -14
- package/src/odspSnapshotParser.ts +53 -46
- package/src/odspSummaryUploadManager.ts +243 -218
- package/src/odspUrlHelper.ts +81 -71
- package/src/odspUtils.ts +401 -259
- package/src/opsCaching.ts +214 -193
- package/src/packageVersion.ts +1 -1
- package/src/prefetchLatestSnapshot.ts +142 -80
- package/src/retryErrorsStorageAdapter.ts +92 -77
- package/src/retryUtils.ts +80 -57
- package/src/socketModule.ts +8 -0
- package/src/vroom.ts +92 -83
- package/src/zipItDataRepresentationUtils.ts +534 -394
- package/tsc-multi.test.json +4 -0
- package/tsconfig.json +11 -13
- package/.editorconfig +0 -7
- package/dist/ReadBufferUtils.js.map +0 -1
- package/dist/WriteBufferUtils.js.map +0 -1
- package/dist/checkUrl.js.map +0 -1
- package/dist/compactSnapshotParser.js +0 -115
- package/dist/compactSnapshotParser.js.map +0 -1
- package/dist/compactSnapshotWriter.js.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/contracts.js.map +0 -1
- package/dist/contractsPublic.js.map +0 -1
- package/dist/createFile.js +0 -242
- package/dist/createFile.js.map +0 -1
- package/dist/createNewUtils.js +0 -67
- package/dist/createNewUtils.js.map +0 -1
- package/dist/createOdspCreateContainerRequest.js.map +0 -1
- package/dist/createOdspUrl.js.map +0 -1
- package/dist/epochTracker.js.map +0 -1
- package/dist/fetch.js.map +0 -1
- package/dist/fetchSnapshot.js.map +0 -1
- package/dist/getFileLink.js.map +0 -1
- package/dist/getQueryString.js.map +0 -1
- package/dist/getSocketIo.d.ts +0 -11
- package/dist/getSocketIo.d.ts.map +0 -1
- package/dist/getSocketIo.js +0 -20
- package/dist/getSocketIo.js.map +0 -1
- package/dist/getUrlAndHeadersWithAuth.js.map +0 -1
- package/dist/index.js +0 -41
- package/dist/index.js.map +0 -1
- package/dist/localOdspDriver/localOdspDocumentService.js.map +0 -1
- package/dist/localOdspDriver/localOdspDocumentServiceFactory.js.map +0 -1
- package/dist/localOdspDriver/localOdspDocumentStorageManager.js.map +0 -1
- package/dist/odspCache.js.map +0 -1
- package/dist/odspDeltaStorageService.js.map +0 -1
- package/dist/odspDocumentDeltaConnection.js.map +0 -1
- package/dist/odspDocumentService.js +0 -364
- package/dist/odspDocumentService.js.map +0 -1
- package/dist/odspDocumentServiceFactory.js.map +0 -1
- package/dist/odspDocumentServiceFactoryCore.js +0 -118
- package/dist/odspDocumentServiceFactoryCore.js.map +0 -1
- package/dist/odspDocumentServiceFactoryWithCodeSplit.js +0 -34
- package/dist/odspDocumentServiceFactoryWithCodeSplit.js.map +0 -1
- package/dist/odspDocumentStorageManager.js +0 -356
- package/dist/odspDocumentStorageManager.js.map +0 -1
- package/dist/odspDocumentStorageServiceBase.js.map +0 -1
- package/dist/odspDriverUrlResolver.js.map +0 -1
- package/dist/odspDriverUrlResolverForShareLink.js.map +0 -1
- package/dist/odspError.js.map +0 -1
- package/dist/odspFluidFileLink.js.map +0 -1
- package/dist/odspPublicUtils.js.map +0 -1
- package/dist/odspSnapshotParser.js.map +0 -1
- package/dist/odspSummaryUploadManager.js.map +0 -1
- package/dist/odspUrlHelper.js.map +0 -1
- package/dist/odspUtils.js.map +0 -1
- package/dist/opsCaching.js.map +0 -1
- package/dist/packageVersion.js.map +0 -1
- package/dist/prefetchLatestSnapshot.js +0 -57
- package/dist/prefetchLatestSnapshot.js.map +0 -1
- package/dist/retryErrorsStorageAdapter.js.map +0 -1
- package/dist/retryUtils.js.map +0 -1
- package/dist/vroom.js.map +0 -1
- package/dist/zipItDataRepresentationUtils.js.map +0 -1
- package/lib/ReadBufferUtils.d.ts.map +0 -1
- package/lib/ReadBufferUtils.js.map +0 -1
- package/lib/WriteBufferUtils.d.ts.map +0 -1
- package/lib/WriteBufferUtils.js.map +0 -1
- package/lib/checkUrl.d.ts.map +0 -1
- package/lib/checkUrl.js.map +0 -1
- package/lib/compactSnapshotParser.d.ts +0 -15
- package/lib/compactSnapshotParser.d.ts.map +0 -1
- package/lib/compactSnapshotParser.js +0 -111
- package/lib/compactSnapshotParser.js.map +0 -1
- package/lib/compactSnapshotWriter.d.ts.map +0 -1
- package/lib/compactSnapshotWriter.js.map +0 -1
- package/lib/constants.d.ts.map +0 -1
- package/lib/constants.js.map +0 -1
- package/lib/contracts.d.ts.map +0 -1
- package/lib/contracts.js.map +0 -1
- package/lib/contractsPublic.d.ts.map +0 -1
- package/lib/contractsPublic.js.map +0 -1
- package/lib/createFile.d.ts +0 -22
- package/lib/createFile.d.ts.map +0 -1
- package/lib/createFile.js +0 -235
- package/lib/createFile.js.map +0 -1
- package/lib/createNewUtils.d.ts +0 -11
- package/lib/createNewUtils.d.ts.map +0 -1
- package/lib/createNewUtils.js +0 -63
- package/lib/createNewUtils.js.map +0 -1
- package/lib/createOdspCreateContainerRequest.d.ts.map +0 -1
- package/lib/createOdspCreateContainerRequest.js.map +0 -1
- package/lib/createOdspUrl.js.map +0 -1
- package/lib/epochTracker.d.ts.map +0 -1
- package/lib/epochTracker.js.map +0 -1
- package/lib/fetch.js.map +0 -1
- package/lib/fetchSnapshot.d.ts.map +0 -1
- package/lib/fetchSnapshot.js.map +0 -1
- package/lib/getFileLink.d.ts.map +0 -1
- package/lib/getFileLink.js.map +0 -1
- package/lib/getQueryString.d.ts.map +0 -1
- package/lib/getQueryString.js.map +0 -1
- package/lib/getSocketIo.d.ts +0 -11
- package/lib/getSocketIo.d.ts.map +0 -1
- package/lib/getSocketIo.js +0 -13
- package/lib/getSocketIo.js.map +0 -1
- package/lib/getUrlAndHeadersWithAuth.js.map +0 -1
- package/lib/index.d.ts +0 -21
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -29
- package/lib/index.js.map +0 -1
- package/lib/localOdspDriver/localOdspDocumentService.d.ts.map +0 -1
- package/lib/localOdspDriver/localOdspDocumentService.js.map +0 -1
- package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +0 -1
- package/lib/localOdspDriver/localOdspDocumentServiceFactory.js.map +0 -1
- package/lib/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +0 -1
- package/lib/localOdspDriver/localOdspDocumentStorageManager.js.map +0 -1
- package/lib/odspCache.d.ts.map +0 -1
- package/lib/odspCache.js.map +0 -1
- package/lib/odspDeltaStorageService.d.ts.map +0 -1
- package/lib/odspDeltaStorageService.js.map +0 -1
- package/lib/odspDocumentDeltaConnection.d.ts.map +0 -1
- package/lib/odspDocumentDeltaConnection.js.map +0 -1
- package/lib/odspDocumentService.d.ts.map +0 -1
- package/lib/odspDocumentService.js +0 -360
- package/lib/odspDocumentService.js.map +0 -1
- package/lib/odspDocumentServiceFactory.d.ts.map +0 -1
- package/lib/odspDocumentServiceFactory.js.map +0 -1
- package/lib/odspDocumentServiceFactoryCore.d.ts.map +0 -1
- package/lib/odspDocumentServiceFactoryCore.js +0 -114
- package/lib/odspDocumentServiceFactoryCore.js.map +0 -1
- package/lib/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +0 -1
- package/lib/odspDocumentServiceFactoryWithCodeSplit.js.map +0 -1
- package/lib/odspDocumentStorageManager.d.ts.map +0 -1
- package/lib/odspDocumentStorageManager.js +0 -352
- package/lib/odspDocumentStorageManager.js.map +0 -1
- package/lib/odspDocumentStorageServiceBase.d.ts.map +0 -1
- package/lib/odspDocumentStorageServiceBase.js.map +0 -1
- package/lib/odspDriverUrlResolver.d.ts.map +0 -1
- package/lib/odspDriverUrlResolver.js.map +0 -1
- package/lib/odspDriverUrlResolverForShareLink.d.ts.map +0 -1
- package/lib/odspDriverUrlResolverForShareLink.js.map +0 -1
- package/lib/odspError.d.ts.map +0 -1
- package/lib/odspError.js.map +0 -1
- package/lib/odspFluidFileLink.d.ts.map +0 -1
- package/lib/odspFluidFileLink.js.map +0 -1
- package/lib/odspPublicUtils.d.ts.map +0 -1
- package/lib/odspPublicUtils.js.map +0 -1
- package/lib/odspSnapshotParser.d.ts.map +0 -1
- package/lib/odspSnapshotParser.js.map +0 -1
- package/lib/odspSummaryUploadManager.d.ts.map +0 -1
- package/lib/odspSummaryUploadManager.js.map +0 -1
- package/lib/odspUrlHelper.d.ts.map +0 -1
- package/lib/odspUrlHelper.js.map +0 -1
- package/lib/odspUtils.d.ts.map +0 -1
- package/lib/odspUtils.js.map +0 -1
- package/lib/opsCaching.d.ts.map +0 -1
- package/lib/opsCaching.js.map +0 -1
- package/lib/packageVersion.js.map +0 -1
- package/lib/prefetchLatestSnapshot.d.ts.map +0 -1
- package/lib/prefetchLatestSnapshot.js +0 -53
- package/lib/prefetchLatestSnapshot.js.map +0 -1
- package/lib/retryErrorsStorageAdapter.d.ts.map +0 -1
- package/lib/retryErrorsStorageAdapter.js.map +0 -1
- package/lib/retryUtils.d.ts.map +0 -1
- package/lib/retryUtils.js.map +0 -1
- package/lib/vroom.d.ts.map +0 -1
- package/lib/vroom.js.map +0 -1
- package/lib/zipItDataRepresentationUtils.d.ts.map +0 -1
- package/lib/zipItDataRepresentationUtils.js.map +0 -1
- package/src/getSocketIo.ts +0 -14
- package/tsconfig.esnext.json +0 -7
- /package/lib/{ReadBufferUtils.d.ts → ReadBufferUtils.d.mts} +0 -0
- /package/lib/{getUrlAndHeadersWithAuth.d.ts → getUrlAndHeadersWithAuth.d.mts} +0 -0
package/src/fetchSnapshot.ts
CHANGED
|
@@ -3,44 +3,65 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { default as AbortController } from "abort-controller";
|
|
7
6
|
import { v4 as uuid } from "uuid";
|
|
8
|
-
import {
|
|
9
|
-
|
|
7
|
+
import {
|
|
8
|
+
ITelemetryLoggerExt,
|
|
9
|
+
isFluidError,
|
|
10
|
+
PerformanceEvent,
|
|
11
|
+
wrapError,
|
|
12
|
+
} from "@fluidframework/telemetry-utils";
|
|
13
|
+
import { fromUtf8ToBase64 } from "@fluid-internal/client-utils";
|
|
14
|
+
import { assert } from "@fluidframework/core-utils";
|
|
15
|
+
import { getW3CData } from "@fluidframework/driver-base";
|
|
10
16
|
import { DriverErrorType } from "@fluidframework/driver-definitions";
|
|
11
|
-
import { isFluidError, PerformanceEvent, wrapError } from "@fluidframework/telemetry-utils";
|
|
12
17
|
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
IOdspResolvedUrl,
|
|
19
|
+
ISnapshotOptions,
|
|
20
|
+
OdspErrorType,
|
|
21
|
+
InstrumentedStorageTokenFetcher,
|
|
17
22
|
} from "@fluidframework/odsp-driver-definitions";
|
|
18
23
|
import { ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
19
|
-
import {
|
|
20
|
-
|
|
24
|
+
import {
|
|
25
|
+
DriverErrorTelemetryProps,
|
|
26
|
+
isRuntimeMessage,
|
|
27
|
+
NonRetryableError,
|
|
28
|
+
} from "@fluidframework/driver-utils";
|
|
29
|
+
import { fetchIncorrectResponse, throwOdspNetworkError } from "@fluidframework/odsp-doclib-utils";
|
|
30
|
+
import {
|
|
31
|
+
IOdspSnapshot,
|
|
32
|
+
ISnapshotCachedEntry,
|
|
33
|
+
IVersionedValueWithEpoch,
|
|
34
|
+
persistedCacheValueVersion,
|
|
35
|
+
} from "./contracts";
|
|
21
36
|
import { getQueryString } from "./getQueryString";
|
|
22
37
|
import { getUrlAndHeadersWithAuth } from "./getUrlAndHeadersWithAuth";
|
|
23
38
|
import {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
39
|
+
fetchAndParseAsJSONHelper,
|
|
40
|
+
fetchHelper,
|
|
41
|
+
getWithRetryForTokenRefresh,
|
|
42
|
+
getWithRetryForTokenRefreshRepeat,
|
|
43
|
+
IOdspResponse,
|
|
44
|
+
measure,
|
|
45
|
+
measureP,
|
|
29
46
|
} from "./odspUtils";
|
|
30
47
|
import { ISnapshotContents } from "./odspPublicUtils";
|
|
31
48
|
import { convertOdspSnapshotToSnapshotTreeAndBlobs } from "./odspSnapshotParser";
|
|
32
|
-
import {
|
|
33
|
-
|
|
49
|
+
import {
|
|
50
|
+
currentReadVersion,
|
|
51
|
+
ISnapshotContentsWithProps,
|
|
52
|
+
parseCompactSnapshotResponse,
|
|
53
|
+
} from "./compactSnapshotParser";
|
|
34
54
|
import { EpochTracker } from "./epochTracker";
|
|
35
55
|
import { pkgVersion } from "./packageVersion";
|
|
36
56
|
|
|
37
57
|
/**
|
|
38
58
|
* Enum to support different types of snapshot formats.
|
|
59
|
+
* @alpha
|
|
39
60
|
*/
|
|
40
61
|
export enum SnapshotFormatSupportType {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
62
|
+
Json = 0,
|
|
63
|
+
Binary = 1,
|
|
64
|
+
JsonAndBinary = 2,
|
|
44
65
|
}
|
|
45
66
|
|
|
46
67
|
/**
|
|
@@ -54,455 +75,495 @@ export enum SnapshotFormatSupportType {
|
|
|
54
75
|
* @returns A promise of the snapshot and the status code of the response
|
|
55
76
|
*/
|
|
56
77
|
export async function fetchSnapshot(
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
78
|
+
snapshotUrl: string,
|
|
79
|
+
// eslint-disable-next-line @rushstack/no-new-null
|
|
80
|
+
token: string | null,
|
|
81
|
+
versionId: string,
|
|
82
|
+
fetchFullSnapshot: boolean,
|
|
83
|
+
forceAccessTokenViaAuthorizationHeader: boolean,
|
|
84
|
+
logger: ITelemetryLoggerExt,
|
|
85
|
+
snapshotDownloader: (
|
|
86
|
+
url: string,
|
|
87
|
+
fetchOptions: { [index: string]: any },
|
|
88
|
+
) => Promise<IOdspResponse<unknown>>,
|
|
64
89
|
): Promise<ISnapshotContents> {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return convertOdspSnapshotToSnapshotTreeAndBlobs(response.content);
|
|
90
|
+
const path = `/trees/${versionId}`;
|
|
91
|
+
let queryParams: ISnapshotOptions = {};
|
|
92
|
+
|
|
93
|
+
if (fetchFullSnapshot) {
|
|
94
|
+
queryParams = versionId !== "latest" ? { blobs: 2 } : { deltas: 1, blobs: 2 };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const queryString = getQueryString(queryParams);
|
|
98
|
+
const { url, headers } = getUrlAndHeadersWithAuth(
|
|
99
|
+
`${snapshotUrl}${path}${queryString}`,
|
|
100
|
+
token,
|
|
101
|
+
forceAccessTokenViaAuthorizationHeader,
|
|
102
|
+
);
|
|
103
|
+
const response = (await PerformanceEvent.timedExecAsync(
|
|
104
|
+
logger,
|
|
105
|
+
{
|
|
106
|
+
eventName: "fetchSnapshot",
|
|
107
|
+
headers: Object.keys(headers).length !== 0 ? true : undefined,
|
|
108
|
+
},
|
|
109
|
+
async () => snapshotDownloader(url, { headers }),
|
|
110
|
+
)) as IOdspResponse<IOdspSnapshot>;
|
|
111
|
+
return convertOdspSnapshotToSnapshotTreeAndBlobs(response.content);
|
|
88
112
|
}
|
|
89
113
|
|
|
90
114
|
export async function fetchSnapshotWithRedeem(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
115
|
+
odspResolvedUrl: IOdspResolvedUrl,
|
|
116
|
+
storageTokenFetcher: InstrumentedStorageTokenFetcher,
|
|
117
|
+
snapshotOptions: ISnapshotOptions | undefined,
|
|
118
|
+
forceAccessTokenViaAuthorizationHeader: boolean,
|
|
119
|
+
logger: ITelemetryLoggerExt,
|
|
120
|
+
snapshotDownloader: (
|
|
121
|
+
finalOdspResolvedUrl: IOdspResolvedUrl,
|
|
122
|
+
storageToken: string,
|
|
123
|
+
snapshotOptions: ISnapshotOptions | undefined,
|
|
124
|
+
controller?: AbortController,
|
|
125
|
+
) => Promise<ISnapshotRequestAndResponseOptions>,
|
|
126
|
+
putInCache: (valueWithEpoch: IVersionedValueWithEpoch) => Promise<void>,
|
|
127
|
+
removeEntries: () => Promise<void>,
|
|
128
|
+
enableRedeemFallback?: boolean,
|
|
105
129
|
): Promise<ISnapshotContents> {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
130
|
+
// back-compat: This block to be removed with #8784 when we only consume/consider odsp resolvers that are >= 0.51
|
|
131
|
+
const sharingLinkToRedeem = (odspResolvedUrl as any).sharingLinkToRedeem;
|
|
132
|
+
if (sharingLinkToRedeem) {
|
|
133
|
+
odspResolvedUrl.shareLinkInfo = { ...odspResolvedUrl.shareLinkInfo, sharingLinkToRedeem };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return fetchLatestSnapshotCore(
|
|
137
|
+
odspResolvedUrl,
|
|
138
|
+
storageTokenFetcher,
|
|
139
|
+
snapshotOptions,
|
|
140
|
+
logger,
|
|
141
|
+
snapshotDownloader,
|
|
142
|
+
putInCache,
|
|
143
|
+
enableRedeemFallback,
|
|
144
|
+
)
|
|
145
|
+
.catch(async (error) => {
|
|
146
|
+
if (enableRedeemFallback && isRedeemSharingLinkError(odspResolvedUrl, error)) {
|
|
147
|
+
// Execute the redeem fallback
|
|
148
|
+
|
|
149
|
+
await redeemSharingLink(
|
|
150
|
+
odspResolvedUrl,
|
|
151
|
+
storageTokenFetcher,
|
|
152
|
+
logger,
|
|
153
|
+
forceAccessTokenViaAuthorizationHeader,
|
|
154
|
+
);
|
|
155
|
+
const odspResolvedUrlWithoutShareLink: IOdspResolvedUrl = {
|
|
156
|
+
...odspResolvedUrl,
|
|
157
|
+
shareLinkInfo: {
|
|
158
|
+
...odspResolvedUrl.shareLinkInfo,
|
|
159
|
+
sharingLinkToRedeem: undefined,
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
// Log initial failure only if redeem succeeded - it points out to some bug somewhere
|
|
164
|
+
// If redeem failed, that most likely means user has no permissions to access a file,
|
|
165
|
+
// and thus it's not worth it logging extra errors - same error will be logged by end-to-end
|
|
166
|
+
// flow (container open) based on a failure above.
|
|
167
|
+
logger.sendTelemetryEvent(
|
|
168
|
+
{
|
|
169
|
+
eventName: "RedeemFallback",
|
|
170
|
+
errorType: error.errorType,
|
|
171
|
+
},
|
|
172
|
+
error,
|
|
173
|
+
);
|
|
174
|
+
|
|
175
|
+
return fetchLatestSnapshotCore(
|
|
176
|
+
odspResolvedUrlWithoutShareLink,
|
|
177
|
+
storageTokenFetcher,
|
|
178
|
+
snapshotOptions,
|
|
179
|
+
logger,
|
|
180
|
+
snapshotDownloader,
|
|
181
|
+
putInCache,
|
|
182
|
+
);
|
|
183
|
+
} else {
|
|
184
|
+
throw error;
|
|
185
|
+
}
|
|
186
|
+
})
|
|
187
|
+
.catch(async (error) => {
|
|
188
|
+
// Clear the cache on 401/403/404 on snapshot fetch from network because this means either the user doesn't
|
|
189
|
+
// have permissions for the file or it was deleted. So, if we do not clear cache, we will continue fetching
|
|
190
|
+
// snapshot from cache in the future.
|
|
191
|
+
if (
|
|
192
|
+
(typeof error === "object" &&
|
|
193
|
+
error !== null &&
|
|
194
|
+
error.errorType === DriverErrorType.authorizationError) ||
|
|
195
|
+
error.errorType === DriverErrorType.fileNotFoundOrAccessDeniedError
|
|
196
|
+
) {
|
|
197
|
+
await removeEntries();
|
|
198
|
+
}
|
|
199
|
+
throw error;
|
|
200
|
+
});
|
|
159
201
|
}
|
|
160
202
|
|
|
161
203
|
async function redeemSharingLink(
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
204
|
+
odspResolvedUrl: IOdspResolvedUrl,
|
|
205
|
+
storageTokenFetcher: InstrumentedStorageTokenFetcher,
|
|
206
|
+
logger: ITelemetryLoggerExt,
|
|
207
|
+
forceAccessTokenViaAuthorizationHeader: boolean,
|
|
166
208
|
) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
209
|
+
return PerformanceEvent.timedExecAsync(
|
|
210
|
+
logger,
|
|
211
|
+
{
|
|
212
|
+
eventName: "RedeemShareLink",
|
|
213
|
+
},
|
|
214
|
+
async () =>
|
|
215
|
+
getWithRetryForTokenRefresh(async (tokenFetchOptions) => {
|
|
216
|
+
assert(
|
|
217
|
+
!!odspResolvedUrl.shareLinkInfo?.sharingLinkToRedeem,
|
|
218
|
+
0x1ed /* "Share link should be present" */,
|
|
219
|
+
);
|
|
220
|
+
const storageToken = await storageTokenFetcher(
|
|
221
|
+
tokenFetchOptions,
|
|
222
|
+
"RedeemShareLink",
|
|
223
|
+
);
|
|
224
|
+
const encodedShareUrl = getEncodedShareUrl(
|
|
225
|
+
odspResolvedUrl.shareLinkInfo?.sharingLinkToRedeem,
|
|
226
|
+
);
|
|
227
|
+
const redeemUrl = `${odspResolvedUrl.siteUrl}/_api/v2.0/shares/${encodedShareUrl}`;
|
|
228
|
+
const { url, headers } = getUrlAndHeadersWithAuth(
|
|
229
|
+
redeemUrl,
|
|
230
|
+
storageToken,
|
|
231
|
+
forceAccessTokenViaAuthorizationHeader,
|
|
232
|
+
);
|
|
233
|
+
headers.prefer = "redeemSharingLink";
|
|
234
|
+
return fetchAndParseAsJSONHelper(url, { headers });
|
|
235
|
+
}),
|
|
236
|
+
);
|
|
184
237
|
}
|
|
185
238
|
|
|
186
239
|
async function fetchLatestSnapshotCore(
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
240
|
+
odspResolvedUrl: IOdspResolvedUrl,
|
|
241
|
+
storageTokenFetcher: InstrumentedStorageTokenFetcher,
|
|
242
|
+
snapshotOptions: ISnapshotOptions | undefined,
|
|
243
|
+
logger: ITelemetryLoggerExt,
|
|
244
|
+
snapshotDownloader: (
|
|
245
|
+
finalOdspResolvedUrl: IOdspResolvedUrl,
|
|
246
|
+
storageToken: string,
|
|
247
|
+
snapshotOptions: ISnapshotOptions | undefined,
|
|
248
|
+
controller?: AbortController,
|
|
249
|
+
) => Promise<ISnapshotRequestAndResponseOptions>,
|
|
250
|
+
putInCache: (valueWithEpoch: IVersionedValueWithEpoch) => Promise<void>,
|
|
251
|
+
enableRedeemFallback?: boolean,
|
|
199
252
|
): Promise<ISnapshotContents> {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
253
|
+
return getWithRetryForTokenRefresh(async (tokenFetchOptions) => {
|
|
254
|
+
const storageToken = await storageTokenFetcher(tokenFetchOptions, "TreesLatest", true);
|
|
255
|
+
assert(storageToken !== null, 0x1e5 /* "Storage token should not be null" */);
|
|
256
|
+
|
|
257
|
+
const perfEvent = {
|
|
258
|
+
eventName: "TreesLatest",
|
|
259
|
+
attempts: tokenFetchOptions.refresh ? 2 : 1,
|
|
260
|
+
shareLinkPresent: odspResolvedUrl.shareLinkInfo?.sharingLinkToRedeem !== undefined,
|
|
261
|
+
isSummarizer: odspResolvedUrl.summarizer,
|
|
262
|
+
redeemFallbackEnabled: enableRedeemFallback,
|
|
263
|
+
};
|
|
264
|
+
if (snapshotOptions !== undefined) {
|
|
265
|
+
Object.entries(snapshotOptions).forEach(([key, value]) => {
|
|
266
|
+
if (value !== undefined) {
|
|
267
|
+
perfEvent[`snapshotOption_${key}`] = value;
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
// This event measures only successful cases of getLatest call (no tokens, no retries).
|
|
272
|
+
return PerformanceEvent.timedExecAsync(logger, perfEvent, async (event) => {
|
|
273
|
+
let controller: AbortController | undefined;
|
|
274
|
+
let fetchTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
275
|
+
if (snapshotOptions?.timeout !== undefined) {
|
|
276
|
+
controller = new AbortController();
|
|
277
|
+
fetchTimeout = setTimeout(() => controller!.abort(), snapshotOptions.timeout);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const [response, fetchTime] = await measureP(async () =>
|
|
281
|
+
snapshotDownloader(odspResolvedUrl, storageToken, snapshotOptions, controller),
|
|
282
|
+
).finally(() => {
|
|
283
|
+
// Clear the fetchTimeout once the response is fetched.
|
|
284
|
+
if (fetchTimeout !== undefined) {
|
|
285
|
+
clearTimeout(fetchTimeout);
|
|
286
|
+
fetchTimeout = undefined;
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
const odspResponse = response.odspResponse;
|
|
291
|
+
const contentType = odspResponse.headers.get("content-type");
|
|
292
|
+
|
|
293
|
+
const propsToLog: DriverErrorTelemetryProps = {
|
|
294
|
+
...odspResponse.propsToLog,
|
|
295
|
+
contentType,
|
|
296
|
+
accept: response.requestHeaders.accept,
|
|
297
|
+
driverVersion: pkgVersion,
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
let parsedSnapshotContents: IOdspResponse<ISnapshotContentsWithProps> | undefined;
|
|
301
|
+
let contentTypeToRead: string | undefined;
|
|
302
|
+
if (contentType?.includes("application/ms-fluid")) {
|
|
303
|
+
contentTypeToRead = "application/ms-fluid";
|
|
304
|
+
} else if (contentType?.includes("application/json")) {
|
|
305
|
+
contentTypeToRead = "application/json";
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
let parseTime: number;
|
|
309
|
+
let receiveContentTime: number;
|
|
310
|
+
try {
|
|
311
|
+
switch (contentTypeToRead) {
|
|
312
|
+
case "application/json": {
|
|
313
|
+
let text: string;
|
|
314
|
+
[text, receiveContentTime] = await measureP(async () =>
|
|
315
|
+
odspResponse.content.text().catch((err) =>
|
|
316
|
+
// Parsing can fail and message could contain full request URI, including
|
|
317
|
+
// tokens, etc. So do not log error object itself.
|
|
318
|
+
throwOdspNetworkError(
|
|
319
|
+
"Error while parsing fetch response",
|
|
320
|
+
fetchIncorrectResponse,
|
|
321
|
+
odspResponse.content, // response
|
|
322
|
+
undefined, // response text
|
|
323
|
+
propsToLog,
|
|
324
|
+
),
|
|
325
|
+
),
|
|
326
|
+
);
|
|
327
|
+
propsToLog.bodySize = text.length;
|
|
328
|
+
let content: IOdspSnapshot;
|
|
329
|
+
[content, parseTime] = measure(() => JSON.parse(text) as IOdspSnapshot);
|
|
330
|
+
validateBlobsAndTrees(content);
|
|
331
|
+
const snapshotContents: ISnapshotContents =
|
|
332
|
+
convertOdspSnapshotToSnapshotTreeAndBlobs(content);
|
|
333
|
+
parsedSnapshotContents = {
|
|
334
|
+
...odspResponse,
|
|
335
|
+
content: {
|
|
336
|
+
...snapshotContents,
|
|
337
|
+
telemetryProps: {},
|
|
338
|
+
},
|
|
339
|
+
};
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
case "application/ms-fluid": {
|
|
343
|
+
let content: ArrayBuffer;
|
|
344
|
+
[content, receiveContentTime] = await measureP(async () =>
|
|
345
|
+
odspResponse.content.arrayBuffer().catch((err) =>
|
|
346
|
+
// Parsing can fail and message could contain full request URI, including
|
|
347
|
+
// tokens, etc. So do not log error object itself.
|
|
348
|
+
throwOdspNetworkError(
|
|
349
|
+
"Error while parsing fetch response",
|
|
350
|
+
fetchIncorrectResponse,
|
|
351
|
+
odspResponse.content, // response
|
|
352
|
+
undefined, // response text
|
|
353
|
+
propsToLog,
|
|
354
|
+
),
|
|
355
|
+
),
|
|
356
|
+
);
|
|
357
|
+
propsToLog.bodySize = content.byteLength;
|
|
358
|
+
let snapshotContents: ISnapshotContentsWithProps;
|
|
359
|
+
[snapshotContents, parseTime] = measure(() =>
|
|
360
|
+
parseCompactSnapshotResponse(new Uint8Array(content), logger),
|
|
361
|
+
);
|
|
362
|
+
if (
|
|
363
|
+
snapshotContents.snapshotTree.trees === undefined ||
|
|
364
|
+
snapshotContents.snapshotTree.blobs === undefined
|
|
365
|
+
) {
|
|
366
|
+
throw new NonRetryableError(
|
|
367
|
+
"Returned odsp snapshot is malformed. No trees or blobs!",
|
|
368
|
+
DriverErrorType.incorrectServerResponse,
|
|
369
|
+
propsToLog,
|
|
370
|
+
);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
const props = snapshotContents.telemetryProps;
|
|
374
|
+
const slowTreeParseCodePaths = props.slowTreeStructureCount ?? 0;
|
|
375
|
+
const slowBlobParseCodePaths = props.slowBlobStructureCount ?? 0;
|
|
376
|
+
if (slowTreeParseCodePaths > 10 || slowBlobParseCodePaths > 10) {
|
|
377
|
+
logger.sendErrorEvent({
|
|
378
|
+
eventName: "SlowSnapshotParseCodePaths",
|
|
379
|
+
slowTreeStructureCount: slowTreeParseCodePaths,
|
|
380
|
+
slowBlobStructureCount: slowBlobParseCodePaths,
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
parsedSnapshotContents = { ...odspResponse, content: snapshotContents };
|
|
384
|
+
break;
|
|
385
|
+
}
|
|
386
|
+
default:
|
|
387
|
+
throw new NonRetryableError(
|
|
388
|
+
"Unknown snapshot content type",
|
|
389
|
+
DriverErrorType.incorrectServerResponse,
|
|
390
|
+
propsToLog,
|
|
391
|
+
);
|
|
392
|
+
}
|
|
393
|
+
} catch (error) {
|
|
394
|
+
if (isFluidError(error)) {
|
|
395
|
+
error.addTelemetryProperties(propsToLog);
|
|
396
|
+
throw error;
|
|
397
|
+
}
|
|
398
|
+
const enhancedError = wrapError(
|
|
399
|
+
error,
|
|
400
|
+
(errorMessage) =>
|
|
401
|
+
new NonRetryableError(
|
|
402
|
+
`Error parsing snapshot response: ${errorMessage}`,
|
|
403
|
+
DriverErrorType.genericError,
|
|
404
|
+
propsToLog,
|
|
405
|
+
),
|
|
406
|
+
);
|
|
407
|
+
throw enhancedError;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
assert(parsedSnapshotContents !== undefined, 0x312 /* snapshot should be parsed */);
|
|
411
|
+
const snapshot = parsedSnapshotContents.content;
|
|
412
|
+
const { trees, numBlobs, encodedBlobsSize } = evalBlobsAndTrees(snapshot);
|
|
413
|
+
|
|
414
|
+
// There are some scenarios in ODSP where we cannot cache, trees/latest will explicitly tell us when we
|
|
415
|
+
// cannot cache using an HTTP response header.
|
|
416
|
+
const canCache =
|
|
417
|
+
odspResponse.headers.get("disablebrowsercachingofusercontent") !== "true";
|
|
418
|
+
const sequenceNumber: number = snapshot.sequenceNumber ?? 0;
|
|
419
|
+
const seqNumberFromOps =
|
|
420
|
+
snapshot.ops && snapshot.ops.length > 0
|
|
421
|
+
? snapshot.ops[0].sequenceNumber - 1
|
|
422
|
+
: undefined;
|
|
423
|
+
|
|
424
|
+
if (
|
|
425
|
+
!Number.isInteger(sequenceNumber) ||
|
|
426
|
+
(seqNumberFromOps !== undefined && seqNumberFromOps !== sequenceNumber)
|
|
427
|
+
) {
|
|
428
|
+
logger.sendErrorEvent({
|
|
429
|
+
eventName: "fetchSnapshotError",
|
|
430
|
+
sequenceNumber,
|
|
431
|
+
seqNumberFromOps,
|
|
432
|
+
});
|
|
433
|
+
snapshot.sequenceNumber = undefined;
|
|
434
|
+
} else if (canCache) {
|
|
435
|
+
const fluidEpoch = odspResponse.headers.get("x-fluid-epoch");
|
|
436
|
+
assert(
|
|
437
|
+
fluidEpoch !== undefined,
|
|
438
|
+
0x1e6 /* "Epoch should be present in response" */,
|
|
439
|
+
);
|
|
440
|
+
const value: ISnapshotCachedEntry = {
|
|
441
|
+
...snapshot,
|
|
442
|
+
cacheEntryTime: Date.now(),
|
|
443
|
+
};
|
|
444
|
+
const valueWithEpoch: IVersionedValueWithEpoch = {
|
|
445
|
+
value,
|
|
446
|
+
fluidEpoch,
|
|
447
|
+
version: persistedCacheValueVersion,
|
|
448
|
+
};
|
|
449
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
450
|
+
putInCache(valueWithEpoch);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
event.end({
|
|
454
|
+
trees,
|
|
455
|
+
blobs: snapshot.blobs?.size ?? 0,
|
|
456
|
+
leafNodes: numBlobs,
|
|
457
|
+
encodedBlobsSize,
|
|
458
|
+
sequenceNumber,
|
|
459
|
+
ops: snapshot.ops?.length ?? 0,
|
|
460
|
+
userOps: snapshot.ops?.filter((op) => isRuntimeMessage(op)).length ?? 0,
|
|
461
|
+
headers: Object.keys(response.requestHeaders).length !== 0 ? true : undefined,
|
|
462
|
+
// Measures time to make fetch call. Should be similar to
|
|
463
|
+
// fetchStartToResponseEndTime - receiveContentTime, i.e. it looks like it's time till first byte /
|
|
464
|
+
// end of response headers
|
|
465
|
+
fetchTime,
|
|
466
|
+
// time it takes client to parse payload. Same payload as in "SnapshotParse" event, here for
|
|
467
|
+
// easier analyzes.
|
|
468
|
+
parseTime,
|
|
469
|
+
// Time it takes to receive content (text of buffer) from Response object.
|
|
470
|
+
// This time likely is very closely correlated with networkTime, i.e. time it takes to receive
|
|
471
|
+
// actual content (starting measuring from first bite / end of response header)
|
|
472
|
+
receiveContentTime,
|
|
473
|
+
...getW3CData(response.requestUrl, "fetch"),
|
|
474
|
+
// Sharing link telemetry regarding sharing link redeem status and performance. Ex: FRL; dur=100,
|
|
475
|
+
// Azure Fluid Relay service; desc=S, FRP; desc=False. Here, FRL is the duration taken for redeem,
|
|
476
|
+
// Azure Fluid Relay service is the redeem status (S means success), and FRP is a flag to indicate
|
|
477
|
+
// if the permission has changed.
|
|
478
|
+
sltelemetry: odspResponse.headers.get("x-fluid-sltelemetry"),
|
|
479
|
+
// All other props
|
|
480
|
+
...propsToLog,
|
|
481
|
+
// Various perf counters and measures collected by binary parsing code:
|
|
482
|
+
// slowTreeStructureCount, slowBlobStructureCount, durationStructure, durationStrings,
|
|
483
|
+
// durationSnapshotTree, durationBlobs, etc.
|
|
484
|
+
...parsedSnapshotContents.content.telemetryProps,
|
|
485
|
+
});
|
|
486
|
+
return snapshot;
|
|
487
|
+
}).catch((error) => {
|
|
488
|
+
// We hit these errors in stress tests, under load
|
|
489
|
+
// It's useful to try one more time in such case.
|
|
490
|
+
if (
|
|
491
|
+
typeof error === "object" &&
|
|
492
|
+
error !== null &&
|
|
493
|
+
(error.errorType === DriverErrorType.fetchFailure ||
|
|
494
|
+
error.errorType === OdspErrorType.fetchTimeout)
|
|
495
|
+
) {
|
|
496
|
+
error[getWithRetryForTokenRefreshRepeat] = true;
|
|
497
|
+
}
|
|
498
|
+
throw error;
|
|
499
|
+
});
|
|
500
|
+
});
|
|
437
501
|
}
|
|
438
502
|
|
|
439
503
|
export interface ISnapshotRequestAndResponseOptions {
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
504
|
+
odspResponse: IOdspResponse<Response>;
|
|
505
|
+
requestUrl: string;
|
|
506
|
+
requestHeaders: { [index: string]: any };
|
|
443
507
|
}
|
|
444
508
|
|
|
445
509
|
function getFormBodyAndHeaders(
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
headers?: { [index: string]: string; },
|
|
510
|
+
odspResolvedUrl: IOdspResolvedUrl,
|
|
511
|
+
storageToken: string,
|
|
512
|
+
headers?: { [index: string]: string },
|
|
450
513
|
) {
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
formParams.push(`\r\n--${formBoundary}--`);
|
|
475
|
-
const postBody = formParams.join("\r\n");
|
|
476
|
-
const header: { [index: string]: any; } = {
|
|
477
|
-
"Content-Type": `multipart/form-data;boundary=${formBoundary}`,
|
|
478
|
-
};
|
|
479
|
-
return { body: postBody, headers: header };
|
|
514
|
+
const formBoundary = uuid();
|
|
515
|
+
const formParams: string[] = [];
|
|
516
|
+
formParams.push(`--${formBoundary}`);
|
|
517
|
+
formParams.push(`Authorization: Bearer ${storageToken}`);
|
|
518
|
+
formParams.push(`X-HTTP-Method-Override: GET`);
|
|
519
|
+
|
|
520
|
+
if (headers !== undefined) {
|
|
521
|
+
Object.entries(headers).forEach(([key, value]) => {
|
|
522
|
+
if (value !== undefined) {
|
|
523
|
+
formParams.push(`${key}: ${value}`);
|
|
524
|
+
}
|
|
525
|
+
});
|
|
526
|
+
}
|
|
527
|
+
if (odspResolvedUrl.shareLinkInfo?.sharingLinkToRedeem) {
|
|
528
|
+
formParams.push(`sl: ${odspResolvedUrl.shareLinkInfo?.sharingLinkToRedeem}`);
|
|
529
|
+
}
|
|
530
|
+
formParams.push(`_post: 1`);
|
|
531
|
+
formParams.push(`\r\n--${formBoundary}--`);
|
|
532
|
+
const postBody = formParams.join("\r\n");
|
|
533
|
+
const header: { [index: string]: any } = {
|
|
534
|
+
"Content-Type": `multipart/form-data;boundary=${formBoundary}`,
|
|
535
|
+
};
|
|
536
|
+
return { body: postBody, headers: header };
|
|
480
537
|
}
|
|
481
538
|
|
|
482
|
-
function evalBlobsAndTrees(snapshot: ISnapshotContents) {
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
539
|
+
export function evalBlobsAndTrees(snapshot: ISnapshotContents) {
|
|
540
|
+
const trees = countTreesInSnapshotTree(snapshot.snapshotTree);
|
|
541
|
+
const numBlobs = snapshot.blobs.size;
|
|
542
|
+
let encodedBlobsSize = 0;
|
|
543
|
+
for (const [_, blobContent] of snapshot.blobs) {
|
|
544
|
+
encodedBlobsSize += blobContent.byteLength;
|
|
545
|
+
}
|
|
546
|
+
return { trees, numBlobs, encodedBlobsSize };
|
|
490
547
|
}
|
|
491
548
|
|
|
492
549
|
export function validateBlobsAndTrees(snapshot: IOdspSnapshot) {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
550
|
+
assert(
|
|
551
|
+
snapshot.trees !== undefined,
|
|
552
|
+
0x200 /* "Returned odsp snapshot is malformed. No trees!" */,
|
|
553
|
+
);
|
|
554
|
+
assert(
|
|
555
|
+
snapshot.blobs !== undefined,
|
|
556
|
+
0x201 /* "Returned odsp snapshot is malformed. No blobs!" */,
|
|
557
|
+
);
|
|
497
558
|
}
|
|
498
559
|
|
|
499
560
|
function countTreesInSnapshotTree(snapshotTree: ISnapshotTree): number {
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
561
|
+
let numTrees = 0;
|
|
562
|
+
for (const [_, tree] of Object.entries(snapshotTree.trees)) {
|
|
563
|
+
numTrees += 1;
|
|
564
|
+
numTrees += countTreesInSnapshotTree(tree);
|
|
565
|
+
}
|
|
566
|
+
return numTrees;
|
|
506
567
|
}
|
|
507
568
|
|
|
508
569
|
/**
|
|
@@ -517,78 +578,92 @@ function countTreesInSnapshotTree(snapshotTree: ISnapshotTree): number {
|
|
|
517
578
|
* @returns fetched snapshot.
|
|
518
579
|
*/
|
|
519
580
|
export async function downloadSnapshot(
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
581
|
+
odspResolvedUrl: IOdspResolvedUrl,
|
|
582
|
+
storageToken: string,
|
|
583
|
+
logger: ITelemetryLoggerExt,
|
|
584
|
+
snapshotOptions: ISnapshotOptions | undefined,
|
|
585
|
+
snapshotFormatFetchType?: SnapshotFormatSupportType,
|
|
586
|
+
controller?: AbortController,
|
|
587
|
+
epochTracker?: EpochTracker,
|
|
588
|
+
scenarioName?: string,
|
|
528
589
|
): Promise<ISnapshotRequestAndResponseOptions> {
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
590
|
+
// back-compat: This block to be removed with #8784 when we only consume/consider odsp resolvers that are >= 0.51
|
|
591
|
+
const sharingLinkToRedeem = (odspResolvedUrl as any).sharingLinkToRedeem;
|
|
592
|
+
if (sharingLinkToRedeem) {
|
|
593
|
+
odspResolvedUrl.shareLinkInfo = { ...odspResolvedUrl.shareLinkInfo, sharingLinkToRedeem };
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
const snapshotUrl = odspResolvedUrl.endpoints.snapshotStorageUrl;
|
|
597
|
+
|
|
598
|
+
const queryParams = { ump: 1 };
|
|
599
|
+
if (snapshotOptions !== undefined) {
|
|
600
|
+
Object.entries(snapshotOptions).forEach(([key, value]) => {
|
|
601
|
+
// Exclude "timeout" from query string
|
|
602
|
+
if (value !== undefined && key !== "timeout") {
|
|
603
|
+
queryParams[key] = value;
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
const queryString = getQueryString(queryParams);
|
|
609
|
+
const url = `${snapshotUrl}/trees/latest${queryString}`;
|
|
610
|
+
// The location of file can move on Spo in which case server returns 308(Permanent Redirect) error.
|
|
611
|
+
// Adding below header will make VROOM API return 404 instead of 308 and browser can intercept it.
|
|
612
|
+
// This error thrown by server will contain the new redirect location. Look at the 404 error parsing
|
|
613
|
+
// for futher reference here: \packages\utils\odsp-doclib-utils\src\odspErrorUtils.ts
|
|
614
|
+
const header = { prefer: "manualredirect" };
|
|
615
|
+
const { body, headers } = getFormBodyAndHeaders(odspResolvedUrl, storageToken, header);
|
|
616
|
+
const fetchOptions = {
|
|
617
|
+
body,
|
|
618
|
+
headers,
|
|
619
|
+
signal: controller?.signal,
|
|
620
|
+
method: "POST",
|
|
621
|
+
};
|
|
622
|
+
// Decide what snapshot format to fetch as per the feature gate.
|
|
623
|
+
switch (snapshotFormatFetchType) {
|
|
624
|
+
case SnapshotFormatSupportType.Binary:
|
|
625
|
+
headers.accept = `application/ms-fluid; v=${currentReadVersion}`;
|
|
626
|
+
break;
|
|
627
|
+
default:
|
|
628
|
+
// By default ask both versions and let the server decide the format.
|
|
629
|
+
headers.accept = `application/json, application/ms-fluid; v=${currentReadVersion}`;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
const odspResponse = await (epochTracker?.fetch(
|
|
633
|
+
url,
|
|
634
|
+
fetchOptions,
|
|
635
|
+
"treesLatest",
|
|
636
|
+
true,
|
|
637
|
+
scenarioName,
|
|
638
|
+
) ?? fetchHelper(url, fetchOptions));
|
|
639
|
+
|
|
640
|
+
return {
|
|
641
|
+
odspResponse,
|
|
642
|
+
requestHeaders: headers,
|
|
643
|
+
requestUrl: url,
|
|
644
|
+
};
|
|
570
645
|
}
|
|
571
646
|
|
|
572
647
|
function isRedeemSharingLinkError(odspResolvedUrl: IOdspResolvedUrl, error: any) {
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
648
|
+
if (
|
|
649
|
+
odspResolvedUrl.shareLinkInfo?.sharingLinkToRedeem !== undefined &&
|
|
650
|
+
typeof error === "object" &&
|
|
651
|
+
error !== null &&
|
|
652
|
+
(error.errorType === DriverErrorType.authorizationError ||
|
|
653
|
+
error.errorType === DriverErrorType.fileNotFoundOrAccessDeniedError)
|
|
654
|
+
) {
|
|
655
|
+
return true;
|
|
656
|
+
}
|
|
657
|
+
return false;
|
|
580
658
|
}
|
|
581
659
|
|
|
582
660
|
function getEncodedShareUrl(url: string): string {
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
.replace(/\+/g, "-");
|
|
592
|
-
encodedUrl = "u!".concat(encodedUrl);
|
|
593
|
-
return encodedUrl;
|
|
661
|
+
/**
|
|
662
|
+
* Encode the url to accepted format by Sharepoint
|
|
663
|
+
* https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/shares_get
|
|
664
|
+
*/
|
|
665
|
+
let encodedUrl = fromUtf8ToBase64(encodeURI(url));
|
|
666
|
+
encodedUrl = encodedUrl.replace(/=+$/g, "").replace(/\//g, "_").replace(/\+/g, "-");
|
|
667
|
+
encodedUrl = "u!".concat(encodedUrl);
|
|
668
|
+
return encodedUrl;
|
|
594
669
|
}
|