@fluidframework/routerlicious-driver 2.0.0-dev.4.4.0.162574 → 2.0.0-dev.5.3.2.178189

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/deltaStorageService.d.ts +5 -5
  3. package/dist/deltaStorageService.d.ts.map +1 -1
  4. package/dist/deltaStorageService.js +41 -29
  5. package/dist/deltaStorageService.js.map +1 -1
  6. package/dist/documentDeltaConnection.d.ts +2 -2
  7. package/dist/documentDeltaConnection.d.ts.map +1 -1
  8. package/dist/documentDeltaConnection.js +2 -4
  9. package/dist/documentDeltaConnection.js.map +1 -1
  10. package/dist/documentService.d.ts +3 -3
  11. package/dist/documentService.d.ts.map +1 -1
  12. package/dist/documentService.js +1 -1
  13. package/dist/documentService.js.map +1 -1
  14. package/dist/documentServiceFactory.d.ts +1 -1
  15. package/dist/documentServiceFactory.d.ts.map +1 -1
  16. package/dist/documentServiceFactory.js +1 -2
  17. package/dist/documentServiceFactory.js.map +1 -1
  18. package/dist/documentStorageService.d.ts +2 -2
  19. package/dist/documentStorageService.d.ts.map +1 -1
  20. package/dist/documentStorageService.js.map +1 -1
  21. package/dist/nullBlobStorageService.js +4 -4
  22. package/dist/nullBlobStorageService.js.map +1 -1
  23. package/dist/packageVersion.d.ts +1 -1
  24. package/dist/packageVersion.js +1 -1
  25. package/dist/packageVersion.js.map +1 -1
  26. package/dist/policies.d.ts +6 -0
  27. package/dist/policies.d.ts.map +1 -1
  28. package/dist/policies.js.map +1 -1
  29. package/dist/r11sSnapshotParser.js +1 -1
  30. package/dist/r11sSnapshotParser.js.map +1 -1
  31. package/dist/restWrapper.d.ts +7 -6
  32. package/dist/restWrapper.d.ts.map +1 -1
  33. package/dist/restWrapper.js +1 -1
  34. package/dist/restWrapper.js.map +1 -1
  35. package/dist/retriableGitManager.d.ts +2 -2
  36. package/dist/retriableGitManager.d.ts.map +1 -1
  37. package/dist/retriableGitManager.js.map +1 -1
  38. package/dist/shreddedSummaryDocumentStorageService.d.ts +3 -3
  39. package/dist/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
  40. package/dist/shreddedSummaryDocumentStorageService.js +1 -1
  41. package/dist/shreddedSummaryDocumentStorageService.js.map +1 -1
  42. package/dist/tsdoc-metadata.json +11 -0
  43. package/dist/urlUtils.d.ts +2 -2
  44. package/dist/urlUtils.d.ts.map +1 -1
  45. package/dist/urlUtils.js.map +1 -1
  46. package/dist/wholeSummaryDocumentStorageService.d.ts +3 -3
  47. package/dist/wholeSummaryDocumentStorageService.d.ts.map +1 -1
  48. package/dist/wholeSummaryDocumentStorageService.js +2 -2
  49. package/dist/wholeSummaryDocumentStorageService.js.map +1 -1
  50. package/lib/deltaStorageService.d.ts +5 -5
  51. package/lib/deltaStorageService.d.ts.map +1 -1
  52. package/lib/deltaStorageService.js +44 -32
  53. package/lib/deltaStorageService.js.map +1 -1
  54. package/lib/documentDeltaConnection.d.ts +2 -2
  55. package/lib/documentDeltaConnection.d.ts.map +1 -1
  56. package/lib/documentDeltaConnection.js +2 -4
  57. package/lib/documentDeltaConnection.js.map +1 -1
  58. package/lib/documentService.d.ts +3 -3
  59. package/lib/documentService.d.ts.map +1 -1
  60. package/lib/documentService.js +1 -1
  61. package/lib/documentService.js.map +1 -1
  62. package/lib/documentServiceFactory.d.ts +1 -1
  63. package/lib/documentServiceFactory.d.ts.map +1 -1
  64. package/lib/documentServiceFactory.js +2 -3
  65. package/lib/documentServiceFactory.js.map +1 -1
  66. package/lib/documentStorageService.d.ts +2 -2
  67. package/lib/documentStorageService.d.ts.map +1 -1
  68. package/lib/documentStorageService.js.map +1 -1
  69. package/lib/nullBlobStorageService.js +4 -4
  70. package/lib/nullBlobStorageService.js.map +1 -1
  71. package/lib/packageVersion.d.ts +1 -1
  72. package/lib/packageVersion.js +1 -1
  73. package/lib/packageVersion.js.map +1 -1
  74. package/lib/policies.d.ts +6 -0
  75. package/lib/policies.d.ts.map +1 -1
  76. package/lib/policies.js.map +1 -1
  77. package/lib/r11sSnapshotParser.js +1 -1
  78. package/lib/r11sSnapshotParser.js.map +1 -1
  79. package/lib/restWrapper.d.ts +7 -6
  80. package/lib/restWrapper.d.ts.map +1 -1
  81. package/lib/restWrapper.js +1 -1
  82. package/lib/restWrapper.js.map +1 -1
  83. package/lib/retriableGitManager.d.ts +2 -2
  84. package/lib/retriableGitManager.d.ts.map +1 -1
  85. package/lib/retriableGitManager.js.map +1 -1
  86. package/lib/shreddedSummaryDocumentStorageService.d.ts +3 -3
  87. package/lib/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
  88. package/lib/shreddedSummaryDocumentStorageService.js +1 -1
  89. package/lib/shreddedSummaryDocumentStorageService.js.map +1 -1
  90. package/lib/urlUtils.d.ts +2 -2
  91. package/lib/urlUtils.d.ts.map +1 -1
  92. package/lib/urlUtils.js.map +1 -1
  93. package/lib/wholeSummaryDocumentStorageService.d.ts +3 -3
  94. package/lib/wholeSummaryDocumentStorageService.d.ts.map +1 -1
  95. package/lib/wholeSummaryDocumentStorageService.js +2 -2
  96. package/lib/wholeSummaryDocumentStorageService.js.map +1 -1
  97. package/package.json +16 -17
  98. package/src/deltaStorageService.ts +68 -42
  99. package/src/documentDeltaConnection.ts +4 -5
  100. package/src/documentService.ts +5 -4
  101. package/src/documentServiceFactory.ts +4 -7
  102. package/src/documentStorageService.ts +3 -3
  103. package/src/nullBlobStorageService.ts +4 -4
  104. package/src/packageVersion.ts +1 -1
  105. package/src/policies.ts +6 -0
  106. package/src/r11sSnapshotParser.ts +1 -1
  107. package/src/restWrapper.ts +13 -9
  108. package/src/retriableGitManager.ts +2 -2
  109. package/src/shreddedSummaryDocumentStorageService.ts +2 -3
  110. package/src/urlUtils.ts +4 -4
  111. package/src/wholeSummaryDocumentStorageService.ts +3 -3
@@ -10,14 +10,12 @@ import {
10
10
  IDocumentService,
11
11
  IDocumentServiceFactory,
12
12
  IDocumentStorageServicePolicies,
13
- IFluidResolvedUrl,
14
13
  IResolvedUrl,
15
14
  LoaderCachingPolicy,
16
15
  } from "@fluidframework/driver-definitions";
17
- import { ITelemetryBaseLogger } from "@fluidframework/common-definitions";
16
+ import { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
18
17
  import { ISummaryTree } from "@fluidframework/protocol-definitions";
19
18
  import {
20
- ensureFluidResolvedUrl,
21
19
  getDocAttributesFromProtocolSummary,
22
20
  getQuorumValuesFromProtocolSummary,
23
21
  isCombinedAppAndProtocolSummary,
@@ -52,6 +50,7 @@ const defaultRouterliciousDriverPolicies: IRouterliciousDriverPolicies = {
52
50
  enableWholeSummaryUpload: false,
53
51
  enableRestLess: true,
54
52
  enableInternalSummaryCaching: true,
53
+ enableLongPollingDowngrade: true,
55
54
  };
56
55
 
57
56
  /**
@@ -101,7 +100,6 @@ export class RouterliciousDocumentServiceFactory implements IDocumentServiceFact
101
100
  logger?: ITelemetryBaseLogger,
102
101
  clientIsSummarizer?: boolean,
103
102
  ): Promise<IDocumentService> {
104
- ensureFluidResolvedUrl(resolvedUrl);
105
103
  if (createNewSummary === undefined) {
106
104
  throw new Error("Empty file summary creation isn't supported in this driver.");
107
105
  }
@@ -242,7 +240,6 @@ export class RouterliciousDocumentServiceFactory implements IDocumentServiceFact
242
240
  clientIsSummarizer?: boolean,
243
241
  session?: ISession,
244
242
  ): Promise<IDocumentService> {
245
- ensureFluidResolvedUrl(resolvedUrl);
246
243
  const parsedUrl = parseFluidUrl(resolvedUrl.url);
247
244
  const [, tenantId, documentId] = parsedUrl.pathname.split("/");
248
245
  if (!documentId || !tenantId) {
@@ -279,7 +276,7 @@ export class RouterliciousDocumentServiceFactory implements IDocumentServiceFact
279
276
  ordererTokenP,
280
277
  );
281
278
 
282
- const discoverFluidResolvedUrl = async (): Promise<IFluidResolvedUrl> => {
279
+ const discoverFluidResolvedUrl = async (): Promise<IResolvedUrl> => {
283
280
  if (!this.driverPolicies.enableDiscovery) {
284
281
  return resolvedUrl;
285
282
  }
@@ -304,7 +301,7 @@ export class RouterliciousDocumentServiceFactory implements IDocumentServiceFact
304
301
  );
305
302
  return getDiscoveredFluidResolvedUrl(resolvedUrl, discoveredSession);
306
303
  };
307
- const fluidResolvedUrl: IFluidResolvedUrl =
304
+ const fluidResolvedUrl: IResolvedUrl =
308
305
  session !== undefined
309
306
  ? getDiscoveredFluidResolvedUrl(resolvedUrl, session)
310
307
  : await discoverFluidResolvedUrl();
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { ITelemetryLogger } from "@fluidframework/common-definitions";
6
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
7
7
  import {
8
8
  IDocumentStorageService,
9
9
  IDocumentStorageServicePolicies,
@@ -32,7 +32,7 @@ export class DocumentStorageService extends DocumentStorageServiceProxy {
32
32
  private static loadInternalDocumentStorageService(
33
33
  id: string,
34
34
  manager: GitManager,
35
- logger: ITelemetryLogger,
35
+ logger: ITelemetryLoggerExt,
36
36
  policies: IDocumentStorageServicePolicies,
37
37
  driverPolicies?: IRouterliciousDriverPolicies,
38
38
  blobCache?: ICache<ArrayBufferLike>,
@@ -76,7 +76,7 @@ export class DocumentStorageService extends DocumentStorageServiceProxy {
76
76
  constructor(
77
77
  public readonly id: string,
78
78
  public manager: GitManager,
79
- logger: ITelemetryLogger,
79
+ logger: ITelemetryLoggerExt,
80
80
  policies: IDocumentStorageServicePolicies,
81
81
  driverPolicies?: IRouterliciousDriverPolicies,
82
82
  blobCache?: ICache<ArrayBufferLike>,
@@ -27,17 +27,17 @@ export class NullBlobStorageService implements IDocumentStorageService {
27
27
  summary: api.ISummaryTree,
28
28
  context: ISummaryContext,
29
29
  ): Promise<string> {
30
- return Promise.reject(new Error("Invalid operation"));
30
+ throw new Error("Invalid operation");
31
31
  }
32
32
 
33
33
  public async downloadSummary(handle: api.ISummaryHandle): Promise<api.ISummaryTree> {
34
- return Promise.reject(new Error("Invalid operation"));
34
+ throw new Error("Invalid operation");
35
35
  }
36
36
 
37
37
  public async createBlob(file: ArrayBufferLike): Promise<api.ICreateBlobResponse> {
38
- return Promise.reject(new Error("Null blob storage can not create blob"));
38
+ throw new Error("Null blob storage can not create blob");
39
39
  }
40
40
  public async readBlob(blobId: string): Promise<ArrayBufferLike> {
41
- return Promise.reject(new Error("Null blob storage can not read blob"));
41
+ throw new Error("Null blob storage can not read blob");
42
42
  }
43
43
  }
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/routerlicious-driver";
9
- export const pkgVersion = "2.0.0-dev.4.4.0.162574";
9
+ export const pkgVersion = "2.0.0-dev.5.3.2.178189";
package/src/policies.ts CHANGED
@@ -48,4 +48,10 @@ export interface IRouterliciousDriverPolicies {
48
48
  * Default: true
49
49
  */
50
50
  enableInternalSummaryCaching: boolean;
51
+ /**
52
+ * Enable downgrading socket connection to long-polling
53
+ * when websocket connection cannot be established.
54
+ * Default: true
55
+ */
56
+ enableLongPollingDowngrade: boolean;
51
57
  }
@@ -9,7 +9,7 @@ import { stringToBuffer } from "@fluidframework/common-utils";
9
9
  import { INormalizedWholeSummary } from "./contracts";
10
10
 
11
11
  /**
12
- * Build a tree heirarchy from a flat tree.
12
+ * Build a tree hierarchy from a flat tree.
13
13
  *
14
14
  * @param flatTree - a flat tree
15
15
  * @param treePrefixToRemove - tree prefix to strip
@@ -3,14 +3,18 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { ITelemetryLogger, ITelemetryProperties } from "@fluidframework/common-definitions";
6
+ import { ITelemetryProperties } from "@fluidframework/core-interfaces";
7
+ import {
8
+ ITelemetryLoggerExt,
9
+ PerformanceEvent,
10
+ TelemetryLogger,
11
+ } from "@fluidframework/telemetry-utils";
7
12
  import { assert, fromUtf8ToBase64, performance } from "@fluidframework/common-utils";
8
13
  import { RateLimiter } from "@fluidframework/driver-utils";
9
14
  import {
10
15
  getAuthorizationTokenFromCredentials,
11
16
  RestLessClient,
12
17
  } from "@fluidframework/server-services-client";
13
- import { PerformanceEvent, TelemetryLogger } from "@fluidframework/telemetry-utils";
14
18
  import fetch from "cross-fetch";
15
19
  import type { AxiosRequestConfig, AxiosRequestHeaders } from "axios";
16
20
  import safeStringify from "json-stringify-safe";
@@ -102,7 +106,7 @@ export class RouterliciousRestWrapper extends RestWrapper {
102
106
  private token: ITokenResponse | undefined;
103
107
 
104
108
  constructor(
105
- logger: ITelemetryLogger,
109
+ logger: ITelemetryLoggerExt,
106
110
  private readonly rateLimiter: RateLimiter,
107
111
  private readonly fetchRefreshedToken: TokenFetcher,
108
112
  private readonly getAuthorizationHeader: AuthorizationHeaderGetter,
@@ -235,7 +239,7 @@ export class RouterliciousRestWrapper extends RestWrapper {
235
239
 
236
240
  export class RouterliciousStorageRestWrapper extends RouterliciousRestWrapper {
237
241
  private constructor(
238
- logger: ITelemetryLogger,
242
+ logger: ITelemetryLoggerExt,
239
243
  rateLimiter: RateLimiter,
240
244
  fetchToken: TokenFetcher,
241
245
  getAuthorizationHeader: AuthorizationHeaderGetter,
@@ -259,7 +263,7 @@ export class RouterliciousStorageRestWrapper extends RouterliciousRestWrapper {
259
263
  public static async load(
260
264
  tenantId: string,
261
265
  tokenFetcher: TokenFetcher,
262
- logger: ITelemetryLogger,
266
+ logger: ITelemetryLoggerExt,
263
267
  rateLimiter: RateLimiter,
264
268
  useRestLess: boolean,
265
269
  baseurl?: string,
@@ -296,7 +300,7 @@ export class RouterliciousStorageRestWrapper extends RouterliciousRestWrapper {
296
300
 
297
301
  export class RouterliciousOrdererRestWrapper extends RouterliciousRestWrapper {
298
302
  private constructor(
299
- logger: ITelemetryLogger,
303
+ logger: ITelemetryLoggerExt,
300
304
  rateLimiter: RateLimiter,
301
305
  fetchToken: TokenFetcher,
302
306
  getAuthorizationHeader: AuthorizationHeaderGetter,
@@ -319,7 +323,7 @@ export class RouterliciousOrdererRestWrapper extends RouterliciousRestWrapper {
319
323
 
320
324
  public static async load(
321
325
  tokenFetcher: TokenFetcher,
322
- logger: ITelemetryLogger,
326
+ logger: ITelemetryLoggerExt,
323
327
  rateLimiter: RateLimiter,
324
328
  useRestLess: boolean,
325
329
  baseurl?: string,
@@ -349,7 +353,7 @@ export function toInstrumentedR11sOrdererTokenFetcher(
349
353
  tenantId: string,
350
354
  documentId: string | undefined,
351
355
  tokenProvider: ITokenProvider,
352
- logger: ITelemetryLogger,
356
+ logger: ITelemetryLoggerExt,
353
357
  ): TokenFetcher {
354
358
  const fetchOrdererToken = async (refreshToken?: boolean): Promise<ITokenResponse> => {
355
359
  return PerformanceEvent.timedExecAsync(
@@ -376,7 +380,7 @@ export function toInstrumentedR11sStorageTokenFetcher(
376
380
  tenantId: string,
377
381
  documentId: string,
378
382
  tokenProvider: ITokenProvider,
379
- logger: ITelemetryLogger,
383
+ logger: ITelemetryLoggerExt,
380
384
  ): TokenFetcher {
381
385
  const fetchStorageToken = async (refreshToken?: boolean): Promise<ITokenResponse> => {
382
386
  return PerformanceEvent.timedExecAsync(
@@ -10,14 +10,14 @@ import {
10
10
  IWriteSummaryResponse,
11
11
  } from "@fluidframework/server-services-client";
12
12
  import { runWithRetry } from "@fluidframework/driver-utils";
13
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
13
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
14
14
  import { IGitManager } from "./storageContracts";
15
15
  import { IR11sResponse } from "./restWrapper";
16
16
 
17
17
  export class RetriableGitManager implements IGitManager {
18
18
  constructor(
19
19
  private readonly internalGitManager: IGitManager,
20
- private readonly logger: ITelemetryLogger,
20
+ private readonly logger: ITelemetryLoggerExt,
21
21
  ) {}
22
22
 
23
23
  public async getCommits(
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { ITelemetryLogger } from "@fluidframework/common-definitions";
6
+ import { ITelemetryLoggerExt, PerformanceEvent } from "@fluidframework/telemetry-utils";
7
7
  import { stringToBuffer, Uint8ArrayToString } from "@fluidframework/common-utils";
8
8
  import {
9
9
  IDocumentStorageService,
@@ -18,7 +18,6 @@ import {
18
18
  ISummaryTree,
19
19
  IVersion,
20
20
  } from "@fluidframework/protocol-definitions";
21
- import { PerformanceEvent } from "@fluidframework/telemetry-utils";
22
21
  import { IRouterliciousDriverPolicies } from "./policies";
23
22
  import { ICache, InMemoryCache } from "./cache";
24
23
  import { RetriableGitManager } from "./retriableGitManager";
@@ -57,7 +56,7 @@ export class ShreddedSummaryDocumentStorageService implements IDocumentStorageSe
57
56
  constructor(
58
57
  protected readonly id: string,
59
58
  protected readonly manager: GitManager,
60
- protected readonly logger: ITelemetryLogger,
59
+ protected readonly logger: ITelemetryLoggerExt,
61
60
  public readonly policies: IDocumentStorageServicePolicies,
62
61
  driverPolicies?: IRouterliciousDriverPolicies,
63
62
  blobCache?: ICache<ArrayBufferLike>,
package/src/urlUtils.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { IFluidResolvedUrl } from "@fluidframework/driver-definitions";
6
+ import { IResolvedUrl } from "@fluidframework/driver-definitions";
7
7
  import URLParse from "url-parse";
8
8
  import { ISession } from "@fluidframework/server-services-client";
9
9
 
@@ -21,9 +21,9 @@ export const replaceDocumentIdInPath = (urlPath: string, documentId: string): st
21
21
  urlPath.split("/").slice(0, -1).concat([documentId]).join("/");
22
22
 
23
23
  export const getDiscoveredFluidResolvedUrl = (
24
- resolvedUrl: IFluidResolvedUrl,
24
+ resolvedUrl: IResolvedUrl,
25
25
  session: ISession,
26
- ): IFluidResolvedUrl => {
26
+ ): IResolvedUrl => {
27
27
  const discoveredOrdererUrl = new URLParse(session.ordererUrl);
28
28
  const deltaStorageUrl = new URLParse(resolvedUrl.endpoints.deltaStorageUrl);
29
29
  deltaStorageUrl.set("host", discoveredOrdererUrl.host);
@@ -33,7 +33,7 @@ export const getDiscoveredFluidResolvedUrl = (
33
33
  storageUrl.set("host", discoveredStorageUrl.host);
34
34
 
35
35
  const parsedUrl = parseFluidUrl(resolvedUrl.url);
36
- const discoveredResolvedUrl: IFluidResolvedUrl = {
36
+ const discoveredResolvedUrl: IResolvedUrl = {
37
37
  endpoints: {
38
38
  deltaStorageUrl: deltaStorageUrl.toString(),
39
39
  ordererUrl: session.ordererUrl,
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { ITelemetryLogger } from "@fluidframework/common-definitions";
6
+ import { ITelemetryLoggerExt, PerformanceEvent } from "@fluidframework/telemetry-utils";
7
7
  import {
8
8
  assert,
9
9
  performance,
@@ -24,7 +24,6 @@ import {
24
24
  IVersion,
25
25
  } from "@fluidframework/protocol-definitions";
26
26
  import { IWholeFlatSummary } from "@fluidframework/server-services-client";
27
- import { PerformanceEvent } from "@fluidframework/telemetry-utils";
28
27
  import { ICache, InMemoryCache } from "./cache";
29
28
  import { IRouterliciousDriverPolicies } from "./policies";
30
29
  import {
@@ -56,7 +55,7 @@ export class WholeSummaryDocumentStorageService implements IDocumentStorageServi
56
55
  constructor(
57
56
  protected readonly id: string,
58
57
  protected readonly manager: GitManager,
59
- protected readonly logger: ITelemetryLogger,
58
+ protected readonly logger: ITelemetryLoggerExt,
60
59
  public readonly policies: IDocumentStorageServicePolicies,
61
60
  private readonly driverPolicies?: IRouterliciousDriverPolicies,
62
61
  private readonly blobCache: ICache<ArrayBufferLike> = new InMemoryCache(),
@@ -317,6 +316,7 @@ export class WholeSummaryDocumentStorageService implements IDocumentStorageServi
317
316
  trees,
318
317
  blobs: numBlobs,
319
318
  encodedBlobsSize,
319
+ sequenceNumber: snapshot.sequenceNumber,
320
320
  ...response.propsToLog,
321
321
  snapshotConversionTime,
322
322
  ...getW3CData(response.requestUrl, "xmlhttprequest"),