@fluidframework/routerlicious-driver 1.4.0-115997 → 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 +10 -12
- package/.mocharc.js +12 -0
- package/CHANGELOG.md +156 -0
- package/README.md +39 -1
- package/api-extractor-lint.json +4 -0
- package/api-extractor.json +2 -2
- package/api-report/routerlicious-driver.api.md +108 -0
- package/dist/cache.cjs +30 -0
- package/dist/cache.cjs.map +1 -0
- package/dist/cache.d.ts +7 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/{definitions.js → contracts.cjs} +1 -1
- package/dist/contracts.cjs.map +1 -0
- package/dist/contracts.d.ts +42 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/{createNewUtils.js → createNewUtils.cjs} +7 -5
- package/dist/createNewUtils.cjs.map +1 -0
- package/dist/createNewUtils.d.ts +1 -1
- package/dist/createNewUtils.d.ts.map +1 -1
- package/dist/{defaultTokenProvider.js → defaultTokenProvider.cjs} +2 -1
- package/dist/defaultTokenProvider.cjs.map +1 -0
- package/dist/defaultTokenProvider.d.ts +1 -0
- package/dist/defaultTokenProvider.d.ts.map +1 -1
- package/dist/definitions.cjs +7 -0
- package/dist/definitions.cjs.map +1 -0
- package/dist/definitions.d.ts.map +1 -1
- package/dist/deltaStorageService.cjs +122 -0
- package/dist/deltaStorageService.cjs.map +1 -0
- package/dist/deltaStorageService.d.ts +7 -6
- package/dist/deltaStorageService.d.ts.map +1 -1
- package/dist/{documentDeltaConnection.js → documentDeltaConnection.cjs} +8 -13
- package/dist/documentDeltaConnection.cjs.map +1 -0
- package/dist/documentDeltaConnection.d.ts +3 -4
- package/dist/documentDeltaConnection.d.ts.map +1 -1
- package/dist/{documentService.js → documentService.cjs} +61 -64
- package/dist/documentService.cjs.map +1 -0
- package/dist/documentService.d.ts +12 -4
- package/dist/documentService.d.ts.map +1 -1
- package/dist/{documentServiceFactory.js → documentServiceFactory.cjs} +87 -33
- package/dist/documentServiceFactory.cjs.map +1 -0
- package/dist/documentServiceFactory.d.ts +5 -3
- package/dist/documentServiceFactory.d.ts.map +1 -1
- package/dist/{documentStorageService.js → documentStorageService.cjs} +18 -16
- package/dist/documentStorageService.cjs.map +1 -0
- package/dist/documentStorageService.d.ts +4 -3
- package/dist/documentStorageService.d.ts.map +1 -1
- package/dist/errorUtils.cjs +87 -0
- package/dist/errorUtils.cjs.map +1 -0
- package/dist/errorUtils.d.ts +56 -10
- package/dist/errorUtils.d.ts.map +1 -1
- package/dist/gitManager.cjs +46 -0
- package/dist/gitManager.cjs.map +1 -0
- package/dist/gitManager.d.ts +27 -0
- package/dist/gitManager.d.ts.map +1 -0
- package/dist/historian.cjs +72 -0
- package/dist/historian.cjs.map +1 -0
- package/dist/historian.d.ts +34 -0
- package/dist/historian.d.ts.map +1 -0
- package/dist/index.cjs +19 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +5 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/mapWithExpiration.cjs +105 -0
- package/dist/mapWithExpiration.cjs.map +1 -0
- package/dist/mapWithExpiration.d.ts +34 -0
- package/dist/mapWithExpiration.d.ts.map +1 -0
- package/dist/{nullBlobStorageService.js → nullBlobStorageService.cjs} +5 -5
- package/dist/nullBlobStorageService.cjs.map +1 -0
- package/dist/nullBlobStorageService.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/{policies.js → policies.cjs} +1 -1
- package/dist/policies.cjs.map +1 -0
- package/dist/policies.d.ts +22 -9
- package/dist/policies.d.ts.map +1 -1
- package/dist/r11sSnapshotParser.cjs +73 -0
- package/dist/r11sSnapshotParser.cjs.map +1 -0
- package/dist/r11sSnapshotParser.d.ts +14 -0
- package/dist/r11sSnapshotParser.d.ts.map +1 -0
- package/dist/restWrapper.cjs +249 -0
- package/dist/restWrapper.cjs.map +1 -0
- package/dist/restWrapper.d.ts +32 -12
- package/dist/restWrapper.d.ts.map +1 -1
- package/dist/restWrapperBase.cjs +89 -0
- package/dist/restWrapperBase.cjs.map +1 -0
- package/dist/restWrapperBase.d.ts +26 -0
- package/dist/restWrapperBase.d.ts.map +1 -0
- package/dist/retriableGitManager.cjs +40 -0
- package/dist/retriableGitManager.cjs.map +1 -0
- package/dist/retriableGitManager.d.ts +13 -23
- package/dist/retriableGitManager.d.ts.map +1 -1
- package/dist/routerlicious-driver-alpha.d.ts +92 -0
- package/dist/routerlicious-driver-beta.d.ts +98 -0
- package/dist/routerlicious-driver-public.d.ts +98 -0
- package/dist/routerlicious-driver-untrimmed.d.ts +261 -0
- package/dist/{shreddedSummaryDocumentStorageService.js → shreddedSummaryDocumentStorageService.cjs} +41 -34
- package/dist/shreddedSummaryDocumentStorageService.cjs.map +1 -0
- package/dist/shreddedSummaryDocumentStorageService.d.ts +6 -5
- package/dist/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
- package/dist/storageContracts.cjs +7 -0
- package/dist/storageContracts.cjs.map +1 -0
- package/dist/storageContracts.d.ts +45 -0
- package/dist/storageContracts.d.ts.map +1 -0
- package/dist/summaryTreeUploadManager.cjs +110 -0
- package/dist/summaryTreeUploadManager.cjs.map +1 -0
- package/dist/summaryTreeUploadManager.d.ts +23 -0
- package/dist/summaryTreeUploadManager.d.ts.map +1 -0
- package/dist/{tokens.js → tokens.cjs} +1 -1
- package/dist/tokens.cjs.map +1 -0
- package/dist/tokens.d.ts +34 -5
- package/dist/tokens.d.ts.map +1 -1
- package/dist/treeUtils.cjs +107 -0
- package/dist/treeUtils.cjs.map +1 -0
- package/dist/treeUtils.d.ts +58 -0
- package/dist/treeUtils.d.ts.map +1 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/{urlUtils.js → urlUtils.cjs} +21 -25
- package/dist/urlUtils.cjs.map +1 -0
- package/dist/urlUtils.d.ts +2 -2
- package/dist/urlUtils.d.ts.map +1 -1
- package/dist/wholeSummaryDocumentStorageService.cjs +253 -0
- package/dist/wholeSummaryDocumentStorageService.cjs.map +1 -0
- package/dist/wholeSummaryDocumentStorageService.d.ts +10 -8
- package/dist/wholeSummaryDocumentStorageService.d.ts.map +1 -1
- package/dist/wholeSummaryUploadManager.cjs +37 -0
- package/dist/wholeSummaryUploadManager.cjs.map +1 -0
- package/dist/wholeSummaryUploadManager.d.ts +16 -0
- package/dist/wholeSummaryUploadManager.d.ts.map +1 -0
- package/lib/{cache.d.ts → cache.d.mts} +7 -0
- package/lib/cache.d.mts.map +1 -0
- package/lib/cache.mjs +25 -0
- package/lib/cache.mjs.map +1 -0
- package/lib/contracts.d.mts +42 -0
- package/lib/contracts.d.mts.map +1 -0
- package/lib/{definitions.js → contracts.mjs} +1 -1
- package/lib/contracts.mjs.map +1 -0
- package/lib/{createNewUtils.d.ts → createNewUtils.d.mts} +1 -1
- package/lib/{createNewUtils.d.ts.map → createNewUtils.d.mts.map} +1 -1
- package/lib/{createNewUtils.js → createNewUtils.mjs} +7 -5
- package/lib/createNewUtils.mjs.map +1 -0
- package/lib/{defaultTokenProvider.d.ts → defaultTokenProvider.d.mts} +2 -1
- package/lib/defaultTokenProvider.d.mts.map +1 -0
- package/lib/{defaultTokenProvider.js → defaultTokenProvider.mjs} +2 -1
- package/lib/defaultTokenProvider.mjs.map +1 -0
- package/lib/definitions.d.mts.map +1 -0
- package/lib/definitions.mjs +6 -0
- package/{dist/definitions.js.map → lib/definitions.mjs.map} +1 -1
- package/lib/{deltaStorageService.d.ts → deltaStorageService.d.mts} +8 -7
- package/lib/deltaStorageService.d.mts.map +1 -0
- package/lib/deltaStorageService.mjs +117 -0
- package/lib/deltaStorageService.mjs.map +1 -0
- package/lib/{documentDeltaConnection.d.ts → documentDeltaConnection.d.mts} +3 -4
- package/lib/documentDeltaConnection.d.mts.map +1 -0
- package/lib/{documentDeltaConnection.js → documentDeltaConnection.mjs} +8 -13
- package/lib/documentDeltaConnection.mjs.map +1 -0
- package/lib/{documentService.d.ts → documentService.d.mts} +16 -8
- package/lib/documentService.d.mts.map +1 -0
- package/lib/{documentService.js → documentService.mjs} +60 -44
- package/lib/documentService.mjs.map +1 -0
- package/lib/{documentServiceFactory.d.ts → documentServiceFactory.d.mts} +7 -5
- package/lib/documentServiceFactory.d.mts.map +1 -0
- package/lib/{documentServiceFactory.js → documentServiceFactory.mjs} +88 -34
- package/lib/documentServiceFactory.mjs.map +1 -0
- package/lib/{documentStorageService.d.ts → documentStorageService.d.mts} +7 -6
- package/lib/documentStorageService.d.mts.map +1 -0
- package/lib/{documentStorageService.js → documentStorageService.mjs} +19 -17
- package/lib/documentStorageService.mjs.map +1 -0
- package/lib/errorUtils.d.mts +93 -0
- package/lib/errorUtils.d.mts.map +1 -0
- package/lib/errorUtils.mjs +81 -0
- package/lib/errorUtils.mjs.map +1 -0
- package/lib/gitManager.d.mts +27 -0
- package/lib/gitManager.d.mts.map +1 -0
- package/lib/gitManager.mjs +42 -0
- package/lib/gitManager.mjs.map +1 -0
- package/lib/historian.d.mts +34 -0
- package/lib/historian.d.mts.map +1 -0
- package/lib/historian.mjs +67 -0
- package/lib/historian.mjs.map +1 -0
- package/lib/index.d.mts +10 -0
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +8 -0
- package/lib/index.mjs.map +1 -0
- package/lib/mapWithExpiration.d.mts +34 -0
- package/lib/mapWithExpiration.d.mts.map +1 -0
- package/lib/mapWithExpiration.mjs +101 -0
- package/lib/mapWithExpiration.mjs.map +1 -0
- package/lib/nullBlobStorageService.d.mts.map +1 -0
- package/lib/{nullBlobStorageService.js → nullBlobStorageService.mjs} +5 -5
- package/lib/nullBlobStorageService.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/{policies.d.ts → policies.d.mts} +22 -9
- package/lib/policies.d.mts.map +1 -0
- package/lib/{policies.js → policies.mjs} +1 -1
- package/lib/policies.mjs.map +1 -0
- package/lib/r11sSnapshotParser.d.mts +14 -0
- package/lib/r11sSnapshotParser.d.mts.map +1 -0
- package/lib/r11sSnapshotParser.mjs +69 -0
- package/lib/r11sSnapshotParser.mjs.map +1 -0
- package/lib/restWrapper.d.mts +53 -0
- package/lib/restWrapper.d.mts.map +1 -0
- package/lib/restWrapper.mjs +236 -0
- package/lib/restWrapper.mjs.map +1 -0
- package/lib/restWrapperBase.d.mts +26 -0
- package/lib/restWrapperBase.d.mts.map +1 -0
- package/lib/restWrapperBase.mjs +84 -0
- package/lib/restWrapperBase.mjs.map +1 -0
- package/lib/retriableGitManager.d.mts +24 -0
- package/lib/retriableGitManager.d.mts.map +1 -0
- package/lib/retriableGitManager.mjs +36 -0
- package/lib/retriableGitManager.mjs.map +1 -0
- package/lib/routerlicious-driver-alpha.d.mts +92 -0
- package/lib/routerlicious-driver-beta.d.mts +98 -0
- package/lib/routerlicious-driver-public.d.mts +98 -0
- package/lib/routerlicious-driver-untrimmed.d.mts +261 -0
- package/lib/{shreddedSummaryDocumentStorageService.d.ts → shreddedSummaryDocumentStorageService.d.mts} +9 -8
- package/lib/shreddedSummaryDocumentStorageService.d.mts.map +1 -0
- package/lib/{shreddedSummaryDocumentStorageService.js → shreddedSummaryDocumentStorageService.mjs} +41 -34
- package/lib/shreddedSummaryDocumentStorageService.mjs.map +1 -0
- package/lib/storageContracts.d.mts +45 -0
- package/lib/storageContracts.d.mts.map +1 -0
- package/lib/storageContracts.mjs +6 -0
- package/lib/storageContracts.mjs.map +1 -0
- package/lib/summaryTreeUploadManager.d.mts +23 -0
- package/lib/summaryTreeUploadManager.d.mts.map +1 -0
- package/lib/summaryTreeUploadManager.mjs +106 -0
- package/lib/summaryTreeUploadManager.mjs.map +1 -0
- package/lib/{tokens.d.ts → tokens.d.mts} +34 -5
- package/lib/tokens.d.mts.map +1 -0
- package/lib/{tokens.js → tokens.mjs} +1 -1
- package/lib/tokens.mjs.map +1 -0
- package/lib/treeUtils.d.mts +58 -0
- package/lib/treeUtils.d.mts.map +1 -0
- package/lib/treeUtils.mjs +100 -0
- package/lib/treeUtils.mjs.map +1 -0
- package/lib/{urlUtils.d.ts → urlUtils.d.mts} +2 -2
- package/lib/urlUtils.d.mts.map +1 -0
- package/lib/urlUtils.mjs +38 -0
- package/lib/urlUtils.mjs.map +1 -0
- package/lib/{wholeSummaryDocumentStorageService.d.ts → wholeSummaryDocumentStorageService.d.mts} +12 -10
- package/lib/wholeSummaryDocumentStorageService.d.mts.map +1 -0
- package/lib/wholeSummaryDocumentStorageService.mjs +249 -0
- package/lib/wholeSummaryDocumentStorageService.mjs.map +1 -0
- package/lib/wholeSummaryUploadManager.d.mts +16 -0
- package/lib/wholeSummaryUploadManager.d.mts.map +1 -0
- package/lib/wholeSummaryUploadManager.mjs +33 -0
- package/lib/wholeSummaryUploadManager.mjs.map +1 -0
- package/package.json +104 -68
- package/prettier.config.cjs +8 -0
- package/src/cache.ts +25 -9
- package/src/contracts.ts +60 -0
- package/src/createNewUtils.ts +26 -24
- package/src/defaultTokenProvider.ts +14 -15
- package/src/definitions.ts +2 -2
- package/src/deltaStorageService.ts +145 -91
- package/src/documentDeltaConnection.ts +54 -52
- package/src/documentService.ts +272 -242
- package/src/documentServiceFactory.ts +338 -237
- package/src/documentStorageService.ts +92 -84
- package/src/errorUtils.ts +117 -79
- package/src/gitManager.ts +67 -0
- package/src/historian.ts +121 -0
- package/src/index.ts +15 -8
- package/src/mapWithExpiration.ts +124 -0
- package/src/nullBlobStorageService.ts +24 -21
- package/src/packageVersion.ts +1 -1
- package/src/policies.ts +51 -38
- package/src/r11sSnapshotParser.ts +82 -0
- package/src/restWrapper.ts +400 -216
- package/src/restWrapperBase.ts +146 -0
- package/src/retriableGitManager.ts +76 -153
- package/src/shreddedSummaryDocumentStorageService.ts +214 -195
- package/src/storageContracts.ts +63 -0
- package/src/summaryTreeUploadManager.ts +155 -0
- package/src/tokens.ts +74 -39
- package/src/treeUtils.ts +138 -0
- package/src/urlUtils.ts +27 -28
- package/src/wholeSummaryDocumentStorageService.ts +352 -252
- package/src/wholeSummaryUploadManager.ts +64 -0
- package/tsc-multi.test.json +4 -0
- package/tsconfig.json +10 -13
- package/dist/cache.js +0 -20
- package/dist/cache.js.map +0 -1
- package/dist/createNewUtils.js.map +0 -1
- package/dist/defaultTokenProvider.js.map +0 -1
- package/dist/deltaStorageService.js +0 -82
- package/dist/deltaStorageService.js.map +0 -1
- package/dist/documentDeltaConnection.js.map +0 -1
- package/dist/documentService.js.map +0 -1
- package/dist/documentServiceFactory.js.map +0 -1
- package/dist/documentStorageService.js.map +0 -1
- package/dist/errorUtils.js +0 -56
- package/dist/errorUtils.js.map +0 -1
- package/dist/index.js +0 -25
- package/dist/index.js.map +0 -1
- package/dist/nullBlobStorageService.js.map +0 -1
- package/dist/packageVersion.js.map +0 -1
- package/dist/policies.js.map +0 -1
- package/dist/restWrapper.js +0 -153
- package/dist/restWrapper.js.map +0 -1
- package/dist/retriableGitManager.js +0 -76
- package/dist/retriableGitManager.js.map +0 -1
- package/dist/shreddedSummaryDocumentStorageService.js.map +0 -1
- package/dist/tokens.js.map +0 -1
- package/dist/urlUtils.js.map +0 -1
- package/dist/wholeSummaryDocumentStorageService.js +0 -191
- package/dist/wholeSummaryDocumentStorageService.js.map +0 -1
- package/lib/cache.d.ts.map +0 -1
- package/lib/cache.js +0 -16
- package/lib/cache.js.map +0 -1
- package/lib/createNewUtils.js.map +0 -1
- package/lib/defaultTokenProvider.d.ts.map +0 -1
- package/lib/defaultTokenProvider.js.map +0 -1
- package/lib/definitions.d.ts.map +0 -1
- package/lib/definitions.js.map +0 -1
- package/lib/deltaStorageService.d.ts.map +0 -1
- package/lib/deltaStorageService.js +0 -77
- package/lib/deltaStorageService.js.map +0 -1
- package/lib/documentDeltaConnection.d.ts.map +0 -1
- package/lib/documentDeltaConnection.js.map +0 -1
- package/lib/documentService.d.ts.map +0 -1
- package/lib/documentService.js.map +0 -1
- package/lib/documentServiceFactory.d.ts.map +0 -1
- package/lib/documentServiceFactory.js.map +0 -1
- package/lib/documentStorageService.d.ts.map +0 -1
- package/lib/documentStorageService.js.map +0 -1
- package/lib/errorUtils.d.ts +0 -47
- package/lib/errorUtils.d.ts.map +0 -1
- package/lib/errorUtils.js +0 -50
- package/lib/errorUtils.js.map +0 -1
- package/lib/index.d.ts +0 -13
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -13
- package/lib/index.js.map +0 -1
- package/lib/nullBlobStorageService.d.ts.map +0 -1
- package/lib/nullBlobStorageService.js.map +0 -1
- package/lib/packageVersion.js.map +0 -1
- package/lib/policies.d.ts.map +0 -1
- package/lib/policies.js.map +0 -1
- package/lib/restWrapper.d.ts +0 -33
- package/lib/restWrapper.d.ts.map +0 -1
- package/lib/restWrapper.js +0 -144
- package/lib/restWrapper.js.map +0 -1
- package/lib/retriableGitManager.d.ts +0 -34
- package/lib/retriableGitManager.d.ts.map +0 -1
- package/lib/retriableGitManager.js +0 -72
- package/lib/retriableGitManager.js.map +0 -1
- package/lib/shreddedSummaryDocumentStorageService.d.ts.map +0 -1
- package/lib/shreddedSummaryDocumentStorageService.js.map +0 -1
- package/lib/tokens.d.ts.map +0 -1
- package/lib/tokens.js.map +0 -1
- package/lib/urlUtils.d.ts.map +0 -1
- package/lib/urlUtils.js +0 -42
- package/lib/urlUtils.js.map +0 -1
- package/lib/wholeSummaryDocumentStorageService.d.ts.map +0 -1
- package/lib/wholeSummaryDocumentStorageService.js +0 -187
- package/lib/wholeSummaryDocumentStorageService.js.map +0 -1
- package/tsconfig.esnext.json +0 -7
- /package/lib/{definitions.d.ts → definitions.d.mts} +0 -0
- /package/lib/{nullBlobStorageService.d.ts → nullBlobStorageService.d.mts} +0 -0
package/src/documentService.ts
CHANGED
|
@@ -3,23 +3,31 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { assert } from "@fluidframework/
|
|
6
|
+
import { assert } from "@fluidframework/core-utils";
|
|
7
7
|
import * as api from "@fluidframework/driver-definitions";
|
|
8
|
-
import {
|
|
8
|
+
import { DriverErrorTypes } from "@fluidframework/driver-definitions";
|
|
9
|
+
import { RateLimiter, NetworkErrorBasic, canRetryOnError } from "@fluidframework/driver-utils";
|
|
9
10
|
import { IClient } from "@fluidframework/protocol-definitions";
|
|
10
|
-
import { GitManager, Historian, RestWrapper } from "@fluidframework/server-services-client";
|
|
11
11
|
import io from "socket.io-client";
|
|
12
|
-
import { PerformanceEvent } from "@fluidframework/telemetry-utils";
|
|
13
|
-
import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
12
|
+
import { PerformanceEvent, wrapError, ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
|
|
14
13
|
import { DeltaStorageService, DocumentDeltaStorageService } from "./deltaStorageService";
|
|
15
14
|
import { DocumentStorageService } from "./documentStorageService";
|
|
16
15
|
import { R11sDocumentDeltaConnection } from "./documentDeltaConnection";
|
|
17
16
|
import { NullBlobStorageService } from "./nullBlobStorageService";
|
|
18
17
|
import { ITokenProvider } from "./tokens";
|
|
19
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
RouterliciousOrdererRestWrapper,
|
|
20
|
+
RouterliciousStorageRestWrapper,
|
|
21
|
+
TokenFetcher,
|
|
22
|
+
} from "./restWrapper";
|
|
20
23
|
import { IRouterliciousDriverPolicies } from "./policies";
|
|
21
24
|
import { ICache } from "./cache";
|
|
22
25
|
import { ISnapshotTreeVersion } from "./definitions";
|
|
26
|
+
import { pkgVersion as driverVersion } from "./packageVersion";
|
|
27
|
+
import { GitManager } from "./gitManager";
|
|
28
|
+
import { Historian } from "./historian";
|
|
29
|
+
import { RestWrapper } from "./restWrapperBase";
|
|
30
|
+
import { INormalizedWholeSnapshot } from "./contracts";
|
|
23
31
|
|
|
24
32
|
/**
|
|
25
33
|
* Amount of time between discoveries within which we don't need to rediscover on re-connect.
|
|
@@ -33,260 +41,282 @@ const RediscoverAfterTimeSinceDiscoveryMs = 5 * 60000; // 5 minute
|
|
|
33
41
|
* The DocumentService manages the Socket.IO connection and manages routing requests to connected
|
|
34
42
|
* clients.
|
|
35
43
|
*/
|
|
44
|
+
// eslint-disable-next-line import/namespace
|
|
36
45
|
export class DocumentService implements api.IDocumentService {
|
|
37
|
-
|
|
38
|
-
|
|
46
|
+
private lastDiscoveredAt: number = Date.now();
|
|
47
|
+
private discoverP: Promise<void> | undefined;
|
|
39
48
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
private ordererRestWrapper: RestWrapper | undefined;
|
|
49
|
+
private storageManager: GitManager | undefined;
|
|
50
|
+
private noCacheStorageManager: GitManager | undefined;
|
|
43
51
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
52
|
+
public get resolvedUrl() {
|
|
53
|
+
return this._resolvedUrl;
|
|
54
|
+
}
|
|
47
55
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
56
|
+
constructor(
|
|
57
|
+
private _resolvedUrl: api.IResolvedUrl,
|
|
58
|
+
protected ordererUrl: string,
|
|
59
|
+
private deltaStorageUrl: string,
|
|
60
|
+
private deltaStreamUrl: string,
|
|
61
|
+
private storageUrl: string,
|
|
62
|
+
private readonly logger: ITelemetryLoggerExt,
|
|
63
|
+
protected tokenProvider: ITokenProvider,
|
|
64
|
+
protected tenantId: string,
|
|
65
|
+
protected documentId: string,
|
|
66
|
+
protected ordererRestWrapper: RouterliciousOrdererRestWrapper,
|
|
67
|
+
private readonly documentStorageServicePolicies: api.IDocumentStorageServicePolicies,
|
|
68
|
+
private readonly driverPolicies: IRouterliciousDriverPolicies,
|
|
69
|
+
private readonly blobCache: ICache<ArrayBufferLike>,
|
|
70
|
+
private readonly wholeSnapshotTreeCache: ICache<INormalizedWholeSnapshot>,
|
|
71
|
+
private readonly shreddedSummaryTreeCache: ICache<ISnapshotTreeVersion>,
|
|
72
|
+
private readonly discoverFluidResolvedUrl: () => Promise<api.IResolvedUrl>,
|
|
73
|
+
private storageRestWrapper: RouterliciousStorageRestWrapper,
|
|
74
|
+
private readonly storageTokenFetcher: TokenFetcher,
|
|
75
|
+
private readonly ordererTokenFetcher: TokenFetcher,
|
|
76
|
+
) {}
|
|
63
77
|
|
|
64
|
-
|
|
78
|
+
private documentStorageService: DocumentStorageService | undefined;
|
|
65
79
|
|
|
66
|
-
|
|
80
|
+
public dispose() {}
|
|
67
81
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
82
|
+
/**
|
|
83
|
+
* Connects to a storage endpoint for snapshot service.
|
|
84
|
+
*
|
|
85
|
+
* @returns returns the document storage service for routerlicious driver.
|
|
86
|
+
*/
|
|
87
|
+
public async connectToStorage(): Promise<api.IDocumentStorageService> {
|
|
88
|
+
if (this.documentStorageService !== undefined) {
|
|
89
|
+
return this.documentStorageService;
|
|
90
|
+
}
|
|
77
91
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
92
|
+
if (this.storageUrl === undefined) {
|
|
93
|
+
return new NullBlobStorageService();
|
|
94
|
+
}
|
|
81
95
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
96
|
+
const getStorageManager = async (disableCache?: boolean): Promise<GitManager> => {
|
|
97
|
+
const shouldUpdateDiscoveredSessionInfo = this.shouldUpdateDiscoveredSessionInfo();
|
|
98
|
+
if (shouldUpdateDiscoveredSessionInfo) {
|
|
99
|
+
await this.refreshDiscovery();
|
|
100
|
+
}
|
|
101
|
+
if (
|
|
102
|
+
!this.storageManager ||
|
|
103
|
+
!this.noCacheStorageManager ||
|
|
104
|
+
shouldUpdateDiscoveredSessionInfo
|
|
105
|
+
) {
|
|
106
|
+
if (shouldUpdateDiscoveredSessionInfo) {
|
|
107
|
+
const rateLimiter = new RateLimiter(
|
|
108
|
+
this.driverPolicies.maxConcurrentStorageRequests,
|
|
109
|
+
);
|
|
110
|
+
this.storageRestWrapper = await RouterliciousStorageRestWrapper.load(
|
|
111
|
+
this.tenantId,
|
|
112
|
+
this.storageTokenFetcher,
|
|
113
|
+
this.logger,
|
|
114
|
+
rateLimiter,
|
|
115
|
+
this.driverPolicies.enableRestLess,
|
|
116
|
+
this.storageUrl,
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
const historian = new Historian(true, false, this.storageRestWrapper);
|
|
120
|
+
this.storageManager = new GitManager(historian);
|
|
121
|
+
const noCacheHistorian = new Historian(true, true, this.storageRestWrapper);
|
|
122
|
+
this.noCacheStorageManager = new GitManager(noCacheHistorian);
|
|
123
|
+
}
|
|
111
124
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
125
|
+
return disableCache ? this.noCacheStorageManager : this.storageManager;
|
|
126
|
+
};
|
|
127
|
+
// Initialize storageManager and noCacheStorageManager
|
|
128
|
+
const storageManager = await getStorageManager();
|
|
129
|
+
const noCacheStorageManager = await getStorageManager(true);
|
|
130
|
+
this.documentStorageService = new DocumentStorageService(
|
|
131
|
+
this.documentId,
|
|
132
|
+
storageManager,
|
|
133
|
+
this.logger,
|
|
134
|
+
this.documentStorageServicePolicies,
|
|
135
|
+
this.driverPolicies,
|
|
136
|
+
this.blobCache,
|
|
137
|
+
this.wholeSnapshotTreeCache,
|
|
138
|
+
this.shreddedSummaryTreeCache,
|
|
139
|
+
noCacheStorageManager,
|
|
140
|
+
getStorageManager,
|
|
141
|
+
);
|
|
142
|
+
return this.documentStorageService;
|
|
143
|
+
}
|
|
123
144
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
noCacheStorageManager,
|
|
133
|
-
getStorageManager);
|
|
134
|
-
return this.documentStorageService;
|
|
135
|
-
}
|
|
145
|
+
/**
|
|
146
|
+
* Connects to a delta storage endpoint for getting ops between a range.
|
|
147
|
+
*
|
|
148
|
+
* @returns returns the document delta storage service for routerlicious driver.
|
|
149
|
+
*/
|
|
150
|
+
public async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {
|
|
151
|
+
await this.connectToStorage();
|
|
152
|
+
assert(!!this.documentStorageService, 0x0b1 /* "Storage service not initialized" */);
|
|
136
153
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
*
|
|
140
|
-
* @returns returns the document delta storage service for routerlicious driver.
|
|
141
|
-
*/
|
|
142
|
-
public async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {
|
|
143
|
-
await this.connectToStorage();
|
|
144
|
-
assert(!!this.documentStorageService, 0x0b1 /* "Storage service not initialized" */);
|
|
154
|
+
const getRestWrapper = async (): Promise<RestWrapper> => {
|
|
155
|
+
const shouldUpdateDiscoveredSessionInfo = this.shouldUpdateDiscoveredSessionInfo();
|
|
145
156
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
this.documentStorageService,
|
|
177
|
-
);
|
|
178
|
-
}
|
|
157
|
+
if (shouldUpdateDiscoveredSessionInfo) {
|
|
158
|
+
await this.refreshDiscovery();
|
|
159
|
+
const rateLimiter = new RateLimiter(
|
|
160
|
+
this.driverPolicies.maxConcurrentOrdererRequests,
|
|
161
|
+
);
|
|
162
|
+
this.ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(
|
|
163
|
+
this.ordererTokenFetcher,
|
|
164
|
+
this.logger,
|
|
165
|
+
rateLimiter,
|
|
166
|
+
this.driverPolicies.enableRestLess,
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
return this.ordererRestWrapper;
|
|
170
|
+
};
|
|
171
|
+
const restWrapper = await getRestWrapper();
|
|
172
|
+
const deltaStorageService = new DeltaStorageService(
|
|
173
|
+
this.deltaStorageUrl,
|
|
174
|
+
restWrapper,
|
|
175
|
+
this.logger,
|
|
176
|
+
getRestWrapper,
|
|
177
|
+
() => this.deltaStorageUrl,
|
|
178
|
+
);
|
|
179
|
+
return new DocumentDeltaStorageService(
|
|
180
|
+
this.tenantId,
|
|
181
|
+
this.documentId,
|
|
182
|
+
deltaStorageService,
|
|
183
|
+
this.documentStorageService,
|
|
184
|
+
this.logger,
|
|
185
|
+
);
|
|
186
|
+
}
|
|
179
187
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
188
|
+
/**
|
|
189
|
+
* Connects to a delta stream endpoint for emitting ops.
|
|
190
|
+
*
|
|
191
|
+
* @returns returns the document delta stream service for routerlicious driver.
|
|
192
|
+
*/
|
|
193
|
+
public async connectToDeltaStream(client: IClient): Promise<api.IDocumentDeltaConnection> {
|
|
194
|
+
const connect = async (refreshToken?: boolean) => {
|
|
195
|
+
let ordererToken = await this.ordererRestWrapper.getToken();
|
|
196
|
+
if (this.shouldUpdateDiscoveredSessionInfo()) {
|
|
197
|
+
await this.refreshDiscovery();
|
|
198
|
+
}
|
|
190
199
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
200
|
+
if (refreshToken) {
|
|
201
|
+
ordererToken = await PerformanceEvent.timedExecAsync(
|
|
202
|
+
this.logger,
|
|
203
|
+
{
|
|
204
|
+
eventName: "GetDeltaStreamToken",
|
|
205
|
+
docId: this.documentId,
|
|
206
|
+
details: JSON.stringify({
|
|
207
|
+
refreshToken,
|
|
208
|
+
}),
|
|
209
|
+
},
|
|
210
|
+
async () =>
|
|
211
|
+
this.tokenProvider
|
|
212
|
+
.fetchOrdererToken(this.tenantId, this.documentId, refreshToken)
|
|
213
|
+
.then(
|
|
214
|
+
(newOrdererToken) => {
|
|
215
|
+
this.ordererRestWrapper.setToken(newOrdererToken);
|
|
216
|
+
return newOrdererToken;
|
|
217
|
+
},
|
|
218
|
+
(error) => {
|
|
219
|
+
const tokenError = wrapError(
|
|
220
|
+
error,
|
|
221
|
+
(errorMessage) =>
|
|
222
|
+
new NetworkErrorBasic(
|
|
223
|
+
`The Host-provided token fetcher threw an error`,
|
|
224
|
+
DriverErrorTypes.fetchTokenError,
|
|
225
|
+
canRetryOnError(error),
|
|
226
|
+
{ errorMessage, driverVersion },
|
|
227
|
+
),
|
|
228
|
+
);
|
|
229
|
+
throw tokenError;
|
|
230
|
+
},
|
|
231
|
+
),
|
|
232
|
+
);
|
|
233
|
+
}
|
|
208
234
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
235
|
+
return PerformanceEvent.timedExecAsync(
|
|
236
|
+
this.logger,
|
|
237
|
+
{
|
|
238
|
+
eventName: "ConnectToDeltaStream",
|
|
239
|
+
docId: this.documentId,
|
|
240
|
+
},
|
|
241
|
+
async () => {
|
|
242
|
+
return R11sDocumentDeltaConnection.create(
|
|
243
|
+
this.tenantId,
|
|
244
|
+
this.documentId,
|
|
245
|
+
ordererToken.jwt,
|
|
246
|
+
io,
|
|
247
|
+
client,
|
|
248
|
+
this.deltaStreamUrl,
|
|
249
|
+
this.logger,
|
|
250
|
+
undefined /* timeoutMs */,
|
|
251
|
+
this.driverPolicies.enableLongPollingDowngrade,
|
|
252
|
+
);
|
|
253
|
+
},
|
|
254
|
+
);
|
|
255
|
+
};
|
|
228
256
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
257
|
+
// Attempt to establish connection.
|
|
258
|
+
// Retry with new token on authorization error; otherwise, allow container layer to handle.
|
|
259
|
+
try {
|
|
260
|
+
const connection = await connect();
|
|
261
|
+
return connection;
|
|
262
|
+
} catch (error: any) {
|
|
263
|
+
if (error?.statusCode === 401) {
|
|
264
|
+
// Fetch new token and retry once,
|
|
265
|
+
// otherwise 401 will be bubbled up as non-retriable AuthorizationError.
|
|
266
|
+
return connect(true /* refreshToken */);
|
|
267
|
+
}
|
|
268
|
+
throw error;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
243
271
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
272
|
+
/**
|
|
273
|
+
* Re-discover session URLs if necessary.
|
|
274
|
+
*/
|
|
275
|
+
private async refreshDiscovery(): Promise<void> {
|
|
276
|
+
if (!this.discoverP) {
|
|
277
|
+
this.discoverP = PerformanceEvent.timedExecAsync(
|
|
278
|
+
this.logger,
|
|
279
|
+
{
|
|
280
|
+
eventName: "RefreshDiscovery",
|
|
281
|
+
},
|
|
282
|
+
async () => this.refreshDiscoveryCore(),
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
return this.discoverP;
|
|
286
|
+
}
|
|
259
287
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
288
|
+
private async refreshDiscoveryCore(): Promise<void> {
|
|
289
|
+
const fluidResolvedUrl = await this.discoverFluidResolvedUrl();
|
|
290
|
+
this._resolvedUrl = fluidResolvedUrl;
|
|
291
|
+
this.storageUrl = fluidResolvedUrl.endpoints.storageUrl;
|
|
292
|
+
this.ordererUrl = fluidResolvedUrl.endpoints.ordererUrl;
|
|
293
|
+
this.deltaStorageUrl = fluidResolvedUrl.endpoints.deltaStorageUrl;
|
|
294
|
+
this.deltaStreamUrl = fluidResolvedUrl.endpoints.deltaStreamUrl || this.ordererUrl;
|
|
295
|
+
}
|
|
267
296
|
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
297
|
+
/**
|
|
298
|
+
* Whether enough time has passed since last disconnect to warrant a new discovery call on reconnect.
|
|
299
|
+
*/
|
|
300
|
+
private shouldUpdateDiscoveredSessionInfo(): boolean {
|
|
301
|
+
if (!this.driverPolicies.enableDiscovery) {
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
const now = Date.now();
|
|
305
|
+
// When connection is disconnected, we cannot know if session has moved or document has been deleted
|
|
306
|
+
// without re-doing discovery on the next attempt to connect.
|
|
307
|
+
// Disconnect event is not so reliable in local testing. To ensure re-discovery when necessary,
|
|
308
|
+
// re-discover if enough time has passed since last discovery.
|
|
309
|
+
const pastLastDiscoveryTimeThreshold =
|
|
310
|
+
now - this.lastDiscoveredAt > RediscoverAfterTimeSinceDiscoveryMs;
|
|
311
|
+
if (pastLastDiscoveryTimeThreshold) {
|
|
312
|
+
// Reset discover promise and refresh discovery.
|
|
313
|
+
this.lastDiscoveredAt = Date.now();
|
|
314
|
+
this.discoverP = undefined;
|
|
315
|
+
this.refreshDiscovery().catch(() => {
|
|
316
|
+
// Undo discovery time set on failure, so that next check refreshes.
|
|
317
|
+
this.lastDiscoveredAt = 0;
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
return pastLastDiscoveryTimeThreshold;
|
|
321
|
+
}
|
|
292
322
|
}
|