@fluidframework/routerlicious-driver 2.0.0-internal.2.2.1 → 2.0.0-internal.2.3.1

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 (79) hide show
  1. package/.eslintrc.js +1 -1
  2. package/dist/cache.d.ts +3 -0
  3. package/dist/cache.d.ts.map +1 -1
  4. package/dist/cache.js +7 -2
  5. package/dist/cache.js.map +1 -1
  6. package/dist/documentService.d.ts +4 -2
  7. package/dist/documentService.d.ts.map +1 -1
  8. package/dist/documentService.js +18 -39
  9. package/dist/documentService.js.map +1 -1
  10. package/dist/documentServiceFactory.d.ts.map +1 -1
  11. package/dist/documentServiceFactory.js +16 -5
  12. package/dist/documentServiceFactory.js.map +1 -1
  13. package/dist/documentStorageService.d.ts +1 -1
  14. package/dist/documentStorageService.d.ts.map +1 -1
  15. package/dist/documentStorageService.js +1 -1
  16. package/dist/documentStorageService.js.map +1 -1
  17. package/dist/errorUtils.d.ts +2 -1
  18. package/dist/errorUtils.d.ts.map +1 -1
  19. package/dist/errorUtils.js +6 -0
  20. package/dist/errorUtils.js.map +1 -1
  21. package/dist/packageVersion.d.ts +1 -1
  22. package/dist/packageVersion.js +1 -1
  23. package/dist/packageVersion.js.map +1 -1
  24. package/dist/restWrapper.d.ts +8 -5
  25. package/dist/restWrapper.d.ts.map +1 -1
  26. package/dist/restWrapper.js +33 -38
  27. package/dist/restWrapper.js.map +1 -1
  28. package/dist/shreddedSummaryDocumentStorageService.d.ts +1 -1
  29. package/dist/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
  30. package/dist/shreddedSummaryDocumentStorageService.js +1 -1
  31. package/dist/shreddedSummaryDocumentStorageService.js.map +1 -1
  32. package/dist/wholeSummaryDocumentStorageService.d.ts +1 -1
  33. package/dist/wholeSummaryDocumentStorageService.d.ts.map +1 -1
  34. package/dist/wholeSummaryDocumentStorageService.js +1 -1
  35. package/dist/wholeSummaryDocumentStorageService.js.map +1 -1
  36. package/lib/cache.d.ts +3 -0
  37. package/lib/cache.d.ts.map +1 -1
  38. package/lib/cache.js +7 -2
  39. package/lib/cache.js.map +1 -1
  40. package/lib/documentService.d.ts +4 -2
  41. package/lib/documentService.d.ts.map +1 -1
  42. package/lib/documentService.js +18 -20
  43. package/lib/documentService.js.map +1 -1
  44. package/lib/documentServiceFactory.d.ts.map +1 -1
  45. package/lib/documentServiceFactory.js +16 -5
  46. package/lib/documentServiceFactory.js.map +1 -1
  47. package/lib/documentStorageService.d.ts +1 -1
  48. package/lib/documentStorageService.d.ts.map +1 -1
  49. package/lib/documentStorageService.js +1 -1
  50. package/lib/documentStorageService.js.map +1 -1
  51. package/lib/errorUtils.d.ts +2 -1
  52. package/lib/errorUtils.d.ts.map +1 -1
  53. package/lib/errorUtils.js +6 -0
  54. package/lib/errorUtils.js.map +1 -1
  55. package/lib/packageVersion.d.ts +1 -1
  56. package/lib/packageVersion.js +1 -1
  57. package/lib/packageVersion.js.map +1 -1
  58. package/lib/restWrapper.d.ts +8 -5
  59. package/lib/restWrapper.d.ts.map +1 -1
  60. package/lib/restWrapper.js +33 -38
  61. package/lib/restWrapper.js.map +1 -1
  62. package/lib/shreddedSummaryDocumentStorageService.d.ts +1 -1
  63. package/lib/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
  64. package/lib/shreddedSummaryDocumentStorageService.js +1 -1
  65. package/lib/shreddedSummaryDocumentStorageService.js.map +1 -1
  66. package/lib/wholeSummaryDocumentStorageService.d.ts +1 -1
  67. package/lib/wholeSummaryDocumentStorageService.d.ts.map +1 -1
  68. package/lib/wholeSummaryDocumentStorageService.js +1 -1
  69. package/lib/wholeSummaryDocumentStorageService.js.map +1 -1
  70. package/package.json +12 -10
  71. package/src/cache.ts +11 -1
  72. package/src/documentService.ts +26 -28
  73. package/src/documentServiceFactory.ts +30 -13
  74. package/src/documentStorageService.ts +1 -1
  75. package/src/errorUtils.ts +7 -2
  76. package/src/packageVersion.ts +1 -1
  77. package/src/restWrapper.ts +49 -37
  78. package/src/shreddedSummaryDocumentStorageService.ts +1 -1
  79. package/src/wholeSummaryDocumentStorageService.ts +1 -1
package/.eslintrc.js CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  module.exports = {
7
7
  "extends": [
8
- require.resolve("@fluidframework/eslint-config-fluid"), "prettier"
8
+ require.resolve("@fluidframework/eslint-config-fluid/minimal"), "prettier"
9
9
  ],
10
10
  "parserOptions": {
11
11
  "project": ["./tsconfig.json", "./src/test/tsconfig.json"]
package/dist/cache.d.ts CHANGED
@@ -6,11 +6,14 @@ export interface ICache<T> {
6
6
  get(key: string): Promise<T | undefined>;
7
7
  put(key: string, value: T): Promise<void>;
8
8
  }
9
+ /** A basic in-memory cache that optionally supports expiring entries after a period of inactivity */
9
10
  export declare class InMemoryCache<T> implements ICache<T> {
10
11
  private readonly cache;
12
+ constructor(expirationMs?: number);
11
13
  get(key: string): Promise<T | undefined>;
12
14
  put(key: string, value: T): Promise<void>;
13
15
  }
16
+ /** This "cache" does nothing on put, and get always returns undefined */
14
17
  export declare class NullCache<T> implements ICache<T> {
15
18
  get(key: string): Promise<T | undefined>;
16
19
  put(key: string, value: T): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,MAAM,CAAC,CAAC;IACrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,qBAAa,aAAa,CAAC,CAAC,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IAEtC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzD;AAED,qBAAa,SAAS,CAAC,CAAC,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAEzD"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,MAAM,CAAC,CAAC;IACrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IACzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,qGAAqG;AACrG,qBAAa,aAAa,CAAC,CAAC,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;gBAE3B,YAAY,CAAC,EAAE,MAAM;IAMpB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzD;AAED,yEAAyE;AACzE,qBAAa,SAAS,CAAC,CAAC,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAEzD"}
package/dist/cache.js CHANGED
@@ -5,9 +5,13 @@
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.NullCache = exports.InMemoryCache = void 0;
8
+ const driver_utils_1 = require("@fluidframework/driver-utils");
9
+ /** A basic in-memory cache that optionally supports expiring entries after a period of inactivity */
8
10
  class InMemoryCache {
9
- constructor() {
10
- this.cache = new Map();
11
+ constructor(expirationMs) {
12
+ this.cache = expirationMs !== undefined
13
+ ? new driver_utils_1.MapWithExpiration(expirationMs)
14
+ : new Map();
11
15
  }
12
16
  async get(key) {
13
17
  return this.cache.get(key);
@@ -17,6 +21,7 @@ class InMemoryCache {
17
21
  }
18
22
  }
19
23
  exports.InMemoryCache = InMemoryCache;
24
+ /** This "cache" does nothing on put, and get always returns undefined */
20
25
  class NullCache {
21
26
  async get(key) {
22
27
  return undefined;
package/dist/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAOH,MAAa,aAAa;IAA1B;QACqB,UAAK,GAAmB,IAAI,GAAG,EAAE,CAAC;IASvD,CAAC;IAPU,KAAK,CAAC,GAAG,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAQ;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;CACJ;AAVD,sCAUC;AAED,MAAa,SAAS;IACX,KAAK,CAAC,GAAG,CAAC,GAAW;QACxB,OAAO,SAAS,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAQ;IACtC,CAAC;CACJ;AAPD,8BAOC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport interface ICache<T> {\n get(key: string): Promise<T | undefined>;\n put(key: string, value: T): Promise<void>;\n}\n\nexport class InMemoryCache<T> implements ICache<T> {\n private readonly cache: Map<string, T> = new Map();\n\n public async get(key: string): Promise<T | undefined> {\n return this.cache.get(key);\n }\n\n public async put(key: string, value: T): Promise<void> {\n this.cache.set(key, value);\n }\n}\n\nexport class NullCache<T> implements ICache<T> {\n public async get(key: string): Promise<T | undefined> {\n return undefined;\n }\n\n public async put(key: string, value: T): Promise<void> {\n }\n}\n"]}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+DAAiE;AAOjE,qGAAqG;AACrG,MAAa,aAAa;IAGtB,YAAY,YAAqB;QAC7B,IAAI,CAAC,KAAK,GAAG,YAAY,KAAK,SAAS;YACnC,CAAC,CAAC,IAAI,gCAAiB,CAAC,YAAY,CAAC;YACrC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAQ;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;CACJ;AAhBD,sCAgBC;AAED,yEAAyE;AACzE,MAAa,SAAS;IACX,KAAK,CAAC,GAAG,CAAC,GAAW;QACxB,OAAO,SAAS,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAQ;IACtC,CAAC;CACJ;AAPD,8BAOC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { MapWithExpiration } from \"@fluidframework/driver-utils\";\n\nexport interface ICache<T> {\n get(key: string): Promise<T | undefined>;\n put(key: string, value: T): Promise<void>;\n}\n\n/** A basic in-memory cache that optionally supports expiring entries after a period of inactivity */\nexport class InMemoryCache<T> implements ICache<T> {\n private readonly cache: Map<string, T>;\n\n constructor(expirationMs?: number) {\n this.cache = expirationMs !== undefined\n ? new MapWithExpiration(expirationMs)\n : new Map();\n }\n\n public async get(key: string): Promise<T | undefined> {\n return this.cache.get(key);\n }\n\n public async put(key: string, value: T): Promise<void> {\n this.cache.set(key, value);\n }\n}\n\n/** This \"cache\" does nothing on put, and get always returns undefined */\nexport class NullCache<T> implements ICache<T> {\n public async get(key: string): Promise<T | undefined> {\n return undefined;\n }\n\n public async put(key: string, value: T): Promise<void> {\n }\n}\n"]}
@@ -6,6 +6,7 @@ import * as api from "@fluidframework/driver-definitions";
6
6
  import { IClient } from "@fluidframework/protocol-definitions";
7
7
  import { ITelemetryLogger } from "@fluidframework/common-definitions";
8
8
  import { ITokenProvider } from "./tokens";
9
+ import { RouterliciousOrdererRestWrapper } from "./restWrapper";
9
10
  import { IRouterliciousDriverPolicies } from "./policies";
10
11
  import { ICache } from "./cache";
11
12
  import { ISnapshotTreeVersion } from "./definitions";
@@ -23,6 +24,8 @@ export declare class DocumentService implements api.IDocumentService {
23
24
  protected tokenProvider: ITokenProvider;
24
25
  protected tenantId: string;
25
26
  protected documentId: string;
27
+ protected ordererRestWrapper: RouterliciousOrdererRestWrapper;
28
+ private readonly documentStorageServicePolicies;
26
29
  private readonly driverPolicies;
27
30
  private readonly blobCache;
28
31
  private readonly snapshotTreeCache;
@@ -31,9 +34,8 @@ export declare class DocumentService implements api.IDocumentService {
31
34
  private discoverP;
32
35
  private storageManager;
33
36
  private noCacheStorageManager;
34
- private ordererRestWrapper;
35
37
  get resolvedUrl(): api.IResolvedUrl;
36
- constructor(_resolvedUrl: api.IResolvedUrl, ordererUrl: string, deltaStorageUrl: string, deltaStreamUrl: string, storageUrl: string, logger: ITelemetryLogger, tokenProvider: ITokenProvider, tenantId: string, documentId: string, driverPolicies: IRouterliciousDriverPolicies, blobCache: ICache<ArrayBufferLike>, snapshotTreeCache: ICache<ISnapshotTreeVersion>, discoverFluidResolvedUrl: () => Promise<api.IFluidResolvedUrl>);
38
+ constructor(_resolvedUrl: api.IResolvedUrl, ordererUrl: string, deltaStorageUrl: string, deltaStreamUrl: string, storageUrl: string, logger: ITelemetryLogger, tokenProvider: ITokenProvider, tenantId: string, documentId: string, ordererRestWrapper: RouterliciousOrdererRestWrapper, documentStorageServicePolicies: api.IDocumentStorageServicePolicies, driverPolicies: IRouterliciousDriverPolicies, blobCache: ICache<ArrayBufferLike>, snapshotTreeCache: ICache<ISnapshotTreeVersion>, discoverFluidResolvedUrl: () => Promise<api.IFluidResolvedUrl>);
37
39
  private documentStorageService;
38
40
  dispose(): void;
39
41
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"documentService.d.ts","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAI/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAKtE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAUrD;;;GAGG;AAEH,qBAAa,eAAgB,YAAW,GAAG,CAAC,gBAAgB;IAapD,OAAO,CAAC,YAAY;IACpB,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,SAAS,CAAC,aAAa,EAAE,cAAc;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IAxB7C,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,SAAS,CAA4B;IAE7C,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,kBAAkB,CAA0B;IAEpD,IAAW,WAAW,qBAErB;gBAGW,YAAY,EAAE,GAAG,CAAC,YAAY,EAC5B,UAAU,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EACT,MAAM,EAAE,gBAAgB,EAC/B,aAAa,EAAE,cAAc,EAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EACX,cAAc,EAAE,4BAA4B,EAC5C,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,EAClC,iBAAiB,EAAE,MAAM,CAAC,oBAAoB,CAAC,EAC/C,wBAAwB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAInF,OAAO,CAAC,sBAAsB,CAAqC;IAE5D,OAAO;IAEd;;;;OAIG;IACU,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAgErE;;;;OAIG;IACU,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAuC/E;;;;OAIG;IACU,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IA2DzF;;OAEG;YACW,gBAAgB;YAahB,oBAAoB;IASlC;;OAEG;IACH,OAAO,CAAC,iCAAiC;CAqB5C"}
1
+ {"version":3,"file":"documentService.d.ts","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAI/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAKtE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,+BAA+B,EAAmC,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAUrD;;;GAGG;AAEH,qBAAa,eAAgB,YAAW,GAAG,CAAC,gBAAgB;IAYpD,OAAO,CAAC,YAAY;IACpB,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,SAAS,CAAC,aAAa,EAAE,cAAc;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,SAAS,CAAC,kBAAkB,EAAE,+BAA+B;IAC7D,OAAO,CAAC,QAAQ,CAAC,8BAA8B;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IAzB7C,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,SAAS,CAA4B;IAE7C,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,qBAAqB,CAAyB;IAEtD,IAAW,WAAW,qBAErB;gBAGW,YAAY,EAAE,GAAG,CAAC,YAAY,EAC5B,UAAU,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EACT,MAAM,EAAE,gBAAgB,EAC/B,aAAa,EAAE,cAAc,EAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,+BAA+B,EAC5C,8BAA8B,EAAE,GAAG,CAAC,+BAA+B,EACnE,cAAc,EAAE,4BAA4B,EAC5C,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,EAClC,iBAAiB,EAAE,MAAM,CAAC,oBAAoB,CAAC,EAC/C,wBAAwB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAInF,OAAO,CAAC,sBAAsB,CAAqC;IAE5D,OAAO;IAEd;;;;OAIG;IACU,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAyDrE;;;;OAIG;IACU,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAsC/E;;;;OAIG;IACU,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IAgEzF;;OAEG;YACW,gBAAgB;YAahB,oBAAoB;IASlC;;OAEG;IACH,OAAO,CAAC,iCAAiC;CAqB5C"}
@@ -3,32 +3,12 @@
3
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
4
  * Licensed under the MIT License.
5
5
  */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
6
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
7
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
8
  };
28
9
  Object.defineProperty(exports, "__esModule", { value: true });
29
10
  exports.DocumentService = void 0;
30
11
  const common_utils_1 = require("@fluidframework/common-utils");
31
- const api = __importStar(require("@fluidframework/driver-definitions"));
32
12
  const driver_utils_1 = require("@fluidframework/driver-utils");
33
13
  const server_services_client_1 = require("@fluidframework/server-services-client");
34
14
  const socket_io_client_1 = __importDefault(require("socket.io-client"));
@@ -51,7 +31,7 @@ const RediscoverAfterTimeSinceDiscoveryMs = 5 * 60000; // 5 minute
51
31
  */
52
32
  // eslint-disable-next-line import/namespace
53
33
  class DocumentService {
54
- constructor(_resolvedUrl, ordererUrl, deltaStorageUrl, deltaStreamUrl, storageUrl, logger, tokenProvider, tenantId, documentId, driverPolicies, blobCache, snapshotTreeCache, discoverFluidResolvedUrl) {
34
+ constructor(_resolvedUrl, ordererUrl, deltaStorageUrl, deltaStreamUrl, storageUrl, logger, tokenProvider, tenantId, documentId, ordererRestWrapper, documentStorageServicePolicies, driverPolicies, blobCache, snapshotTreeCache, discoverFluidResolvedUrl) {
55
35
  this._resolvedUrl = _resolvedUrl;
56
36
  this.ordererUrl = ordererUrl;
57
37
  this.deltaStorageUrl = deltaStorageUrl;
@@ -61,6 +41,8 @@ class DocumentService {
61
41
  this.tokenProvider = tokenProvider;
62
42
  this.tenantId = tenantId;
63
43
  this.documentId = documentId;
44
+ this.ordererRestWrapper = ordererRestWrapper;
45
+ this.documentStorageServicePolicies = documentStorageServicePolicies;
64
46
  this.driverPolicies = driverPolicies;
65
47
  this.blobCache = blobCache;
66
48
  this.snapshotTreeCache = snapshotTreeCache;
@@ -101,13 +83,7 @@ class DocumentService {
101
83
  // Initialize storageManager and noCacheStorageManager
102
84
  const storageManager = await getStorageManager();
103
85
  const noCacheStorageManager = await getStorageManager(true);
104
- const documentStorageServicePolicies = {
105
- caching: this.driverPolicies.enablePrefetch
106
- ? api.LoaderCachingPolicy.Prefetch
107
- : api.LoaderCachingPolicy.NoCaching,
108
- minBlobSize: this.driverPolicies.aggregateBlobsSmallerThanBytes,
109
- };
110
- this.documentStorageService = new documentStorageService_1.DocumentStorageService(this.documentId, storageManager, this.logger, documentStorageServicePolicies, this.driverPolicies, this.blobCache, this.snapshotTreeCache, noCacheStorageManager, getStorageManager);
86
+ this.documentStorageService = new documentStorageService_1.DocumentStorageService(this.documentId, storageManager, this.logger, this.documentStorageServicePolicies, this.driverPolicies, this.blobCache, this.snapshotTreeCache, noCacheStorageManager, getStorageManager);
111
87
  return this.documentStorageService;
112
88
  }
113
89
  /**
@@ -122,8 +98,6 @@ class DocumentService {
122
98
  const shouldUpdateDiscoveredSessionInfo = this.shouldUpdateDiscoveredSessionInfo();
123
99
  if (shouldUpdateDiscoveredSessionInfo) {
124
100
  await this.refreshDiscovery();
125
- }
126
- if (!this.ordererRestWrapper || shouldUpdateDiscoveredSessionInfo) {
127
101
  const rateLimiter = new driver_utils_1.RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);
128
102
  this.ordererRestWrapper = await restWrapper_1.RouterliciousOrdererRestWrapper.load(this.tenantId, this.documentId, this.tokenProvider, this.logger, rateLimiter, this.driverPolicies.enableRestLess);
129
103
  }
@@ -140,18 +114,23 @@ class DocumentService {
140
114
  */
141
115
  async connectToDeltaStream(client) {
142
116
  const connect = async (refreshToken) => {
117
+ let ordererToken = this.ordererRestWrapper.getToken();
143
118
  if (this.shouldUpdateDiscoveredSessionInfo()) {
144
119
  await this.refreshDiscovery();
145
120
  }
146
- const ordererToken = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
147
- eventName: "GetDeltaStreamToken",
148
- docId: this.documentId,
149
- details: JSON.stringify({
150
- refreshToken,
151
- }),
152
- }, async () => {
153
- return this.tokenProvider.fetchOrdererToken(this.tenantId, this.documentId, refreshToken);
154
- });
121
+ if (refreshToken) {
122
+ ordererToken = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
123
+ eventName: "GetDeltaStreamToken",
124
+ docId: this.documentId,
125
+ details: JSON.stringify({
126
+ refreshToken,
127
+ }),
128
+ }, async () => {
129
+ const newOrdererToken = await this.tokenProvider.fetchOrdererToken(this.tenantId, this.documentId, refreshToken);
130
+ this.ordererRestWrapper.setToken(newOrdererToken);
131
+ return newOrdererToken;
132
+ });
133
+ }
155
134
  return telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
156
135
  eventName: "ConnectToDeltaStream",
157
136
  docId: this.documentId,
@@ -1 +1 @@
1
- {"version":3,"file":"documentService.js","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport * as api from \"@fluidframework/driver-definitions\";\nimport { RateLimiter } from \"@fluidframework/driver-utils\";\nimport { IClient } from \"@fluidframework/protocol-definitions\";\nimport { GitManager, Historian, RestWrapper } from \"@fluidframework/server-services-client\";\nimport io from \"socket.io-client\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { DeltaStorageService, DocumentDeltaStorageService } from \"./deltaStorageService\";\nimport { DocumentStorageService } from \"./documentStorageService\";\nimport { R11sDocumentDeltaConnection } from \"./documentDeltaConnection\";\nimport { NullBlobStorageService } from \"./nullBlobStorageService\";\nimport { ITokenProvider } from \"./tokens\";\nimport { RouterliciousOrdererRestWrapper, RouterliciousStorageRestWrapper } from \"./restWrapper\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache } from \"./cache\";\nimport { ISnapshotTreeVersion } from \"./definitions\";\n\n/**\n * Amount of time between discoveries within which we don't need to rediscover on re-connect.\n * Currently, R11s defines session length at 10 minutes. To avoid any weird unknown edge-cases though,\n * we set the limit to 5 minutes here.\n * In the future, we likely want to retrieve this information from service's \"inactive session\" definition.\n */\nconst RediscoverAfterTimeSinceDiscoveryMs = 5 * 60000; // 5 minute\n\n/**\n * The DocumentService manages the Socket.IO connection and manages routing requests to connected\n * clients.\n */\n// eslint-disable-next-line import/namespace\nexport class DocumentService implements api.IDocumentService {\n private lastDiscoveredAt: number = Date.now();\n private discoverP: Promise<void> | undefined;\n\n private storageManager: GitManager | undefined;\n private noCacheStorageManager: GitManager | undefined;\n private ordererRestWrapper: RestWrapper | undefined;\n\n public get resolvedUrl() {\n return this._resolvedUrl;\n }\n\n constructor(\n private _resolvedUrl: api.IResolvedUrl,\n protected ordererUrl: string,\n private deltaStorageUrl: string,\n private deltaStreamUrl: string,\n private storageUrl: string,\n private readonly logger: ITelemetryLogger,\n protected tokenProvider: ITokenProvider,\n protected tenantId: string,\n protected documentId: string,\n private readonly driverPolicies: IRouterliciousDriverPolicies,\n private readonly blobCache: ICache<ArrayBufferLike>,\n private readonly snapshotTreeCache: ICache<ISnapshotTreeVersion>,\n private readonly discoverFluidResolvedUrl: () => Promise<api.IFluidResolvedUrl>,\n ) {\n }\n\n private documentStorageService: DocumentStorageService | undefined;\n\n public dispose() { }\n\n /**\n * Connects to a storage endpoint for snapshot service.\n *\n * @returns returns the document storage service for routerlicious driver.\n */\n public async connectToStorage(): Promise<api.IDocumentStorageService> {\n if (this.documentStorageService !== undefined) {\n return this.documentStorageService;\n }\n\n if (this.storageUrl === undefined) {\n return new NullBlobStorageService();\n }\n\n const getStorageManager = async (disableCache?: boolean): Promise<GitManager> => {\n const shouldUpdateDiscoveredSessionInfo = this.shouldUpdateDiscoveredSessionInfo();\n if (shouldUpdateDiscoveredSessionInfo) {\n await this.refreshDiscovery();\n }\n if (!this.storageManager || !this.noCacheStorageManager || shouldUpdateDiscoveredSessionInfo) {\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentStorageRequests);\n const storageRestWrapper = await RouterliciousStorageRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n this.storageUrl,\n );\n const historian = new Historian(\n this.storageUrl,\n true,\n false,\n storageRestWrapper);\n this.storageManager = new GitManager(historian);\n const noCacheHistorian = new Historian(\n this.storageUrl,\n true,\n true,\n storageRestWrapper);\n this.noCacheStorageManager = new GitManager(noCacheHistorian);\n }\n\n return disableCache ? this.noCacheStorageManager : this.storageManager;\n };\n // Initialize storageManager and noCacheStorageManager\n const storageManager = await getStorageManager();\n const noCacheStorageManager = await getStorageManager(true);\n const documentStorageServicePolicies: api.IDocumentStorageServicePolicies = {\n caching: this.driverPolicies.enablePrefetch\n ? api.LoaderCachingPolicy.Prefetch\n : api.LoaderCachingPolicy.NoCaching,\n minBlobSize: this.driverPolicies.aggregateBlobsSmallerThanBytes,\n };\n\n this.documentStorageService = new DocumentStorageService(\n this.documentId,\n storageManager,\n this.logger,\n documentStorageServicePolicies,\n this.driverPolicies,\n this.blobCache,\n this.snapshotTreeCache,\n noCacheStorageManager,\n getStorageManager);\n return this.documentStorageService;\n }\n\n /**\n * Connects to a delta storage endpoint for getting ops between a range.\n *\n * @returns returns the document delta storage service for routerlicious driver.\n */\n public async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {\n await this.connectToStorage();\n assert(!!this.documentStorageService, 0x0b1 /* \"Storage service not initialized\" */);\n\n const getRestWrapper = async (): Promise<RestWrapper> => {\n const shouldUpdateDiscoveredSessionInfo = this.shouldUpdateDiscoveredSessionInfo();\n if (shouldUpdateDiscoveredSessionInfo) {\n await this.refreshDiscovery();\n }\n if (!this.ordererRestWrapper || shouldUpdateDiscoveredSessionInfo) {\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);\n this.ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n );\n }\n return this.ordererRestWrapper;\n };\n const restWrapper = await getRestWrapper();\n const deltaStorageService = new DeltaStorageService(\n this.deltaStorageUrl,\n restWrapper,\n this.logger,\n getRestWrapper,\n () => this.deltaStorageUrl,\n );\n return new DocumentDeltaStorageService(\n this.tenantId,\n this.documentId,\n deltaStorageService,\n this.documentStorageService,\n this.logger,\n );\n }\n\n /**\n * Connects to a delta stream endpoint for emitting ops.\n *\n * @returns returns the document delta stream service for routerlicious driver.\n */\n public async connectToDeltaStream(client: IClient): Promise<api.IDocumentDeltaConnection> {\n const connect = async (refreshToken?: boolean) => {\n if (this.shouldUpdateDiscoveredSessionInfo()) {\n await this.refreshDiscovery();\n }\n\n const ordererToken = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"GetDeltaStreamToken\",\n docId: this.documentId,\n details: JSON.stringify({\n refreshToken,\n }),\n },\n async () => {\n return this.tokenProvider.fetchOrdererToken(\n this.tenantId,\n this.documentId,\n refreshToken,\n );\n }\n );\n\n return PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"ConnectToDeltaStream\",\n docId: this.documentId,\n },\n async () => {\n return R11sDocumentDeltaConnection.create(\n this.tenantId,\n this.documentId,\n ordererToken.jwt,\n io,\n client,\n this.deltaStreamUrl,\n this.logger,\n );\n }\n );\n };\n\n // Attempt to establish connection.\n // Retry with new token on authorization error; otherwise, allow container layer to handle.\n try {\n const connection = await connect();\n return connection;\n } catch (error: any) {\n if (error?.statusCode === 401) {\n // Fetch new token and retry once,\n // otherwise 401 will be bubbled up as non-retriable AuthorizationError.\n return connect(true /* refreshToken */);\n }\n throw error;\n }\n }\n\n /**\n * Re-discover session URLs if necessary.\n */\n private async refreshDiscovery(): Promise<void> {\n if (!this.discoverP) {\n this.discoverP = PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"RefreshDiscovery\",\n },\n async () => this.refreshDiscoveryCore(),\n );\n }\n return this.discoverP;\n }\n\n private async refreshDiscoveryCore(): Promise<void> {\n const fluidResolvedUrl = await this.discoverFluidResolvedUrl();\n this._resolvedUrl = fluidResolvedUrl;\n this.storageUrl = fluidResolvedUrl.endpoints.storageUrl;\n this.ordererUrl = fluidResolvedUrl.endpoints.ordererUrl;\n this.deltaStorageUrl = fluidResolvedUrl.endpoints.deltaStorageUrl;\n this.deltaStreamUrl = fluidResolvedUrl.endpoints.deltaStreamUrl || this.ordererUrl;\n }\n\n /**\n * Whether enough time has passed since last disconnect to warrant a new discovery call on reconnect.\n */\n private shouldUpdateDiscoveredSessionInfo(): boolean {\n if (!this.driverPolicies.enableDiscovery) {\n return false;\n }\n const now = Date.now();\n // When connection is disconnected, we cannot know if session has moved or document has been deleted\n // without re-doing discovery on the next attempt to connect.\n // Disconnect event is not so reliable in local testing. To ensure re-discovery when necessary,\n // re-discover if enough time has passed since last discovery.\n const pastLastDiscoveryTimeThreshold = (now - this.lastDiscoveredAt) > RediscoverAfterTimeSinceDiscoveryMs;\n if (pastLastDiscoveryTimeThreshold) {\n // Reset discover promise and refresh discovery.\n this.lastDiscoveredAt = Date.now();\n this.discoverP = undefined;\n this.refreshDiscovery().catch(() => {\n // Undo discovery time set on failure, so that next check refreshes.\n this.lastDiscoveredAt = 0;\n });\n }\n return pastLastDiscoveryTimeThreshold;\n }\n}\n"]}
1
+ {"version":3,"file":"documentService.js","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport * as api from \"@fluidframework/driver-definitions\";\nimport { RateLimiter } from \"@fluidframework/driver-utils\";\nimport { IClient } from \"@fluidframework/protocol-definitions\";\nimport { GitManager, Historian, RestWrapper } from \"@fluidframework/server-services-client\";\nimport io from \"socket.io-client\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { DeltaStorageService, DocumentDeltaStorageService } from \"./deltaStorageService\";\nimport { DocumentStorageService } from \"./documentStorageService\";\nimport { R11sDocumentDeltaConnection } from \"./documentDeltaConnection\";\nimport { NullBlobStorageService } from \"./nullBlobStorageService\";\nimport { ITokenProvider } from \"./tokens\";\nimport { RouterliciousOrdererRestWrapper, RouterliciousStorageRestWrapper } from \"./restWrapper\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache } from \"./cache\";\nimport { ISnapshotTreeVersion } from \"./definitions\";\n\n/**\n * Amount of time between discoveries within which we don't need to rediscover on re-connect.\n * Currently, R11s defines session length at 10 minutes. To avoid any weird unknown edge-cases though,\n * we set the limit to 5 minutes here.\n * In the future, we likely want to retrieve this information from service's \"inactive session\" definition.\n */\nconst RediscoverAfterTimeSinceDiscoveryMs = 5 * 60000; // 5 minute\n\n/**\n * The DocumentService manages the Socket.IO connection and manages routing requests to connected\n * clients.\n */\n// eslint-disable-next-line import/namespace\nexport class DocumentService implements api.IDocumentService {\n private lastDiscoveredAt: number = Date.now();\n private discoverP: Promise<void> | undefined;\n\n private storageManager: GitManager | undefined;\n private noCacheStorageManager: GitManager | undefined;\n\n public get resolvedUrl() {\n return this._resolvedUrl;\n }\n\n constructor(\n private _resolvedUrl: api.IResolvedUrl,\n protected ordererUrl: string,\n private deltaStorageUrl: string,\n private deltaStreamUrl: string,\n private storageUrl: string,\n private readonly logger: ITelemetryLogger,\n protected tokenProvider: ITokenProvider,\n protected tenantId: string,\n protected documentId: string,\n protected ordererRestWrapper: RouterliciousOrdererRestWrapper,\n private readonly documentStorageServicePolicies: api.IDocumentStorageServicePolicies,\n private readonly driverPolicies: IRouterliciousDriverPolicies,\n private readonly blobCache: ICache<ArrayBufferLike>,\n private readonly snapshotTreeCache: ICache<ISnapshotTreeVersion>,\n private readonly discoverFluidResolvedUrl: () => Promise<api.IFluidResolvedUrl>,\n ) {\n }\n\n private documentStorageService: DocumentStorageService | undefined;\n\n public dispose() { }\n\n /**\n * Connects to a storage endpoint for snapshot service.\n *\n * @returns returns the document storage service for routerlicious driver.\n */\n public async connectToStorage(): Promise<api.IDocumentStorageService> {\n if (this.documentStorageService !== undefined) {\n return this.documentStorageService;\n }\n\n if (this.storageUrl === undefined) {\n return new NullBlobStorageService();\n }\n\n const getStorageManager = async (disableCache?: boolean): Promise<GitManager> => {\n const shouldUpdateDiscoveredSessionInfo = this.shouldUpdateDiscoveredSessionInfo();\n if (shouldUpdateDiscoveredSessionInfo) {\n await this.refreshDiscovery();\n }\n if (!this.storageManager || !this.noCacheStorageManager || shouldUpdateDiscoveredSessionInfo) {\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentStorageRequests);\n const storageRestWrapper = await RouterliciousStorageRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n this.storageUrl,\n );\n const historian = new Historian(\n this.storageUrl,\n true,\n false,\n storageRestWrapper);\n this.storageManager = new GitManager(historian);\n const noCacheHistorian = new Historian(\n this.storageUrl,\n true,\n true,\n storageRestWrapper);\n this.noCacheStorageManager = new GitManager(noCacheHistorian);\n }\n\n return disableCache ? this.noCacheStorageManager : this.storageManager;\n };\n // Initialize storageManager and noCacheStorageManager\n const storageManager = await getStorageManager();\n const noCacheStorageManager = await getStorageManager(true);\n this.documentStorageService = new DocumentStorageService(\n this.documentId,\n storageManager,\n this.logger,\n this.documentStorageServicePolicies,\n this.driverPolicies,\n this.blobCache,\n this.snapshotTreeCache,\n noCacheStorageManager,\n getStorageManager);\n return this.documentStorageService;\n }\n\n /**\n * Connects to a delta storage endpoint for getting ops between a range.\n *\n * @returns returns the document delta storage service for routerlicious driver.\n */\n public async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {\n await this.connectToStorage();\n assert(!!this.documentStorageService, 0x0b1 /* \"Storage service not initialized\" */);\n\n const getRestWrapper = async (): Promise<RestWrapper> => {\n const shouldUpdateDiscoveredSessionInfo = this.shouldUpdateDiscoveredSessionInfo();\n\n if (shouldUpdateDiscoveredSessionInfo) {\n await this.refreshDiscovery();\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);\n this.ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n );\n }\n return this.ordererRestWrapper;\n };\n const restWrapper = await getRestWrapper();\n const deltaStorageService = new DeltaStorageService(\n this.deltaStorageUrl,\n restWrapper,\n this.logger,\n getRestWrapper,\n () => this.deltaStorageUrl,\n );\n return new DocumentDeltaStorageService(\n this.tenantId,\n this.documentId,\n deltaStorageService,\n this.documentStorageService,\n this.logger,\n );\n }\n\n /**\n * Connects to a delta stream endpoint for emitting ops.\n *\n * @returns returns the document delta stream service for routerlicious driver.\n */\n public async connectToDeltaStream(client: IClient): Promise<api.IDocumentDeltaConnection> {\n const connect = async (refreshToken?: boolean) => {\n let ordererToken = this.ordererRestWrapper.getToken();\n if (this.shouldUpdateDiscoveredSessionInfo()) {\n await this.refreshDiscovery();\n }\n\n if (refreshToken) {\n ordererToken = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"GetDeltaStreamToken\",\n docId: this.documentId,\n details: JSON.stringify({\n refreshToken,\n }),\n },\n async () => {\n const newOrdererToken = await this.tokenProvider.fetchOrdererToken(\n this.tenantId,\n this.documentId,\n refreshToken,\n );\n this.ordererRestWrapper.setToken(newOrdererToken);\n return newOrdererToken;\n }\n );\n }\n\n return PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"ConnectToDeltaStream\",\n docId: this.documentId,\n },\n async () => {\n return R11sDocumentDeltaConnection.create(\n this.tenantId,\n this.documentId,\n ordererToken.jwt,\n io,\n client,\n this.deltaStreamUrl,\n this.logger,\n );\n }\n );\n };\n\n // Attempt to establish connection.\n // Retry with new token on authorization error; otherwise, allow container layer to handle.\n try {\n const connection = await connect();\n return connection;\n } catch (error: any) {\n if (error?.statusCode === 401) {\n // Fetch new token and retry once,\n // otherwise 401 will be bubbled up as non-retriable AuthorizationError.\n return connect(true /* refreshToken */);\n }\n throw error;\n }\n }\n\n /**\n * Re-discover session URLs if necessary.\n */\n private async refreshDiscovery(): Promise<void> {\n if (!this.discoverP) {\n this.discoverP = PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"RefreshDiscovery\",\n },\n async () => this.refreshDiscoveryCore(),\n );\n }\n return this.discoverP;\n }\n\n private async refreshDiscoveryCore(): Promise<void> {\n const fluidResolvedUrl = await this.discoverFluidResolvedUrl();\n this._resolvedUrl = fluidResolvedUrl;\n this.storageUrl = fluidResolvedUrl.endpoints.storageUrl;\n this.ordererUrl = fluidResolvedUrl.endpoints.ordererUrl;\n this.deltaStorageUrl = fluidResolvedUrl.endpoints.deltaStorageUrl;\n this.deltaStreamUrl = fluidResolvedUrl.endpoints.deltaStreamUrl || this.ordererUrl;\n }\n\n /**\n * Whether enough time has passed since last disconnect to warrant a new discovery call on reconnect.\n */\n private shouldUpdateDiscoveredSessionInfo(): boolean {\n if (!this.driverPolicies.enableDiscovery) {\n return false;\n }\n const now = Date.now();\n // When connection is disconnected, we cannot know if session has moved or document has been deleted\n // without re-doing discovery on the next attempt to connect.\n // Disconnect event is not so reliable in local testing. To ensure re-discovery when necessary,\n // re-discover if enough time has passed since last discovery.\n const pastLastDiscoveryTimeThreshold = (now - this.lastDiscoveredAt) > RediscoverAfterTimeSinceDiscoveryMs;\n if (pastLastDiscoveryTimeThreshold) {\n // Reset discover promise and refresh discovery.\n this.lastDiscoveredAt = Date.now();\n this.discoverP = undefined;\n this.refreshDiscovery().catch(() => {\n // Undo discovery time set on failure, so that next check refreshes.\n this.lastDiscoveredAt = 0;\n });\n }\n return pastLastDiscoveryTimeThreshold;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"documentServiceFactory.d.ts","sourceRoot":"","sources":["../src/documentServiceFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACH,gBAAgB,EAChB,uBAAuB,EAEvB,YAAY,EACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAQpE,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAElE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAmB1C;;;GAGG;AACH,qBAAa,mCAAoC,YAAW,uBAAuB;IAO3E,OAAO,CAAC,QAAQ,CAAC,aAAa;IANlC,SAAgB,YAAY,YAAY;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+B;gBAG5C,aAAa,EAAE,cAAc,EAC9C,cAAc,GAAE,OAAO,CAAC,4BAA4B,CAAM;IAY9D;;;;;OAKG;IACU,eAAe,CACxB,gBAAgB,EAAE,YAAY,GAAG,SAAS,EAC1C,WAAW,EAAE,YAAY,EACzB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,kBAAkB,CAAC,EAAE,OAAO,GAC7B,OAAO,CAAC,gBAAgB,CAAC;IAyH5B;;;;OAIG;IACU,qBAAqB,CAC9B,WAAW,EAAE,YAAY,EACzB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,kBAAkB,CAAC,EAAE,OAAO,EAC5B,OAAO,CAAC,EAAE,QAAQ,GACnB,OAAO,CAAC,gBAAgB,CAAC;CAmE/B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAE1C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU;;IAH3B;;OAEG;IACc,UAAU,EAAE,KAAK;IAKtC,SAAgB,IAAI,6BAA6B;IAEjD,IAAW,KAAK,uBAAoC;CACvD"}
1
+ {"version":3,"file":"documentServiceFactory.d.ts","sourceRoot":"","sources":["../src/documentServiceFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAEH,gBAAgB,EAChB,uBAAuB,EAGvB,YAAY,EAEf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAQpE,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAElE,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAqB1C;;;GAGG;AACH,qBAAa,mCAAoC,YAAW,uBAAuB;IAO3E,OAAO,CAAC,QAAQ,CAAC,aAAa;IANlC,SAAgB,YAAY,YAAY;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+B;gBAG5C,aAAa,EAAE,cAAc,EAC9C,cAAc,GAAE,OAAO,CAAC,4BAA4B,CAAM;IAe9D;;;;;OAKG;IACU,eAAe,CACxB,gBAAgB,EAAE,YAAY,GAAG,SAAS,EAC1C,WAAW,EAAE,YAAY,EACzB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,kBAAkB,CAAC,EAAE,OAAO,GAC7B,OAAO,CAAC,gBAAgB,CAAC;IAyH5B;;;;OAIG;IACU,qBAAqB,CAC9B,WAAW,EAAE,YAAY,EACzB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,kBAAkB,CAAC,EAAE,OAAO,EAC5B,OAAO,CAAC,EAAE,QAAQ,GACnB,OAAO,CAAC,gBAAgB,CAAC;CA4E/B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAE1C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU;;IAH3B;;OAEG;IACc,UAAU,EAAE,KAAK;IAKtC,SAAgB,IAAI,6BAA6B;IAEjD,IAAW,KAAK,uBAAoC;CACvD"}
@@ -6,6 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.DocumentPostCreateError = exports.RouterliciousDocumentServiceFactory = void 0;
8
8
  const common_utils_1 = require("@fluidframework/common-utils");
9
+ const driver_definitions_1 = require("@fluidframework/driver-definitions");
9
10
  const driver_utils_1 = require("@fluidframework/driver-utils");
10
11
  const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
11
12
  const documentService_1 = require("./documentService");
@@ -14,6 +15,7 @@ const createNewUtils_1 = require("./createNewUtils");
14
15
  const urlUtils_1 = require("./urlUtils");
15
16
  const cache_1 = require("./cache");
16
17
  const packageVersion_1 = require("./packageVersion");
18
+ const maximumSnapshotCacheDurationMs = 432000000; // 5 days in ms
17
19
  const defaultRouterliciousDriverPolicies = {
18
20
  enablePrefetch: true,
19
21
  maxConcurrentStorageRequests: 100,
@@ -32,10 +34,12 @@ class RouterliciousDocumentServiceFactory {
32
34
  constructor(tokenProvider, driverPolicies = {}) {
33
35
  this.tokenProvider = tokenProvider;
34
36
  this.protocolName = "fluid:";
37
+ // Use the maximum allowed by the policy (IDocumentStorageServicePolicies.maximumCacheDurationMs set below)
38
+ const snapshotCacheExpiryMs = maximumSnapshotCacheDurationMs;
35
39
  this.driverPolicies = Object.assign(Object.assign({}, defaultRouterliciousDriverPolicies), driverPolicies);
36
40
  this.blobCache = new cache_1.InMemoryCache();
37
41
  this.snapshotTreeCache = this.driverPolicies.enableInternalSummaryCaching
38
- ? new cache_1.InMemoryCache()
42
+ ? new cache_1.InMemoryCache(snapshotCacheExpiryMs)
39
43
  : new cache_1.NullCache();
40
44
  }
41
45
  /**
@@ -138,18 +142,18 @@ class RouterliciousDocumentServiceFactory {
138
142
  throw new Error(`Couldn't parse documentId and/or tenantId. [documentId:${documentId}][tenantId:${tenantId}]`);
139
143
  }
140
144
  const logger2 = telemetry_utils_1.ChildLogger.create(logger, "RouterliciousDriver", { all: { driverVersion: packageVersion_1.pkgVersion } });
145
+ const rateLimiter = new driver_utils_1.RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);
146
+ const ordererRestWrapper = await restWrapper_1.RouterliciousOrdererRestWrapper.load(tenantId, documentId, this.tokenProvider, logger2, rateLimiter, this.driverPolicies.enableRestLess);
141
147
  const discoverFluidResolvedUrl = async () => {
142
148
  if (!this.driverPolicies.enableDiscovery) {
143
149
  return resolvedUrl;
144
150
  }
145
- const rateLimiter = new driver_utils_1.RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);
146
- const ordererRestWrapper = await restWrapper_1.RouterliciousOrdererRestWrapper.load(tenantId, documentId, this.tokenProvider, logger2, rateLimiter, this.driverPolicies.enableRestLess, resolvedUrl.endpoints.ordererUrl);
147
151
  const discoveredSession = await telemetry_utils_1.PerformanceEvent.timedExecAsync(logger2, {
148
152
  eventName: "DiscoverSession",
149
153
  docId: documentId,
150
154
  }, async () => {
151
155
  // The service responds with the current document session associated with the container.
152
- return ordererRestWrapper.get(`/documents/${tenantId}/session/${documentId}`);
156
+ return ordererRestWrapper.get(`${resolvedUrl.endpoints.ordererUrl}/documents/${tenantId}/session/${documentId}`);
153
157
  });
154
158
  return (0, urlUtils_1.getDiscoveredFluidResolvedUrl)(resolvedUrl, discoveredSession);
155
159
  };
@@ -163,7 +167,14 @@ class RouterliciousDocumentServiceFactory {
163
167
  if (!ordererUrl || !deltaStorageUrl) {
164
168
  throw new Error(`All endpoints urls must be provided. [ordererUrl:${ordererUrl}][deltaStorageUrl:${deltaStorageUrl}]`);
165
169
  }
166
- return new documentService_1.DocumentService(fluidResolvedUrl, ordererUrl, deltaStorageUrl, deltaStreamUrl, storageUrl, logger2, this.tokenProvider, tenantId, documentId, this.driverPolicies, this.blobCache, this.snapshotTreeCache, discoverFluidResolvedUrl);
170
+ const documentStorageServicePolicies = {
171
+ caching: this.driverPolicies.enablePrefetch
172
+ ? driver_definitions_1.LoaderCachingPolicy.Prefetch
173
+ : driver_definitions_1.LoaderCachingPolicy.NoCaching,
174
+ minBlobSize: this.driverPolicies.aggregateBlobsSmallerThanBytes,
175
+ maximumCacheDurationMs: maximumSnapshotCacheDurationMs,
176
+ };
177
+ return new documentService_1.DocumentService(fluidResolvedUrl, ordererUrl, deltaStorageUrl, deltaStreamUrl, storageUrl, logger2, this.tokenProvider, tenantId, documentId, ordererRestWrapper, documentStorageServicePolicies, this.driverPolicies, this.blobCache, this.snapshotTreeCache, discoverFluidResolvedUrl);
167
178
  }
168
179
  }
169
180
  exports.RouterliciousDocumentServiceFactory = RouterliciousDocumentServiceFactory;
@@ -1 +1 @@
1
- {"version":3,"file":"documentServiceFactory.js","sourceRoot":"","sources":["../src/documentServiceFactory.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport {\n IDocumentService,\n IDocumentServiceFactory,\n IFluidResolvedUrl,\n IResolvedUrl,\n} from \"@fluidframework/driver-definitions\";\nimport { ITelemetryBaseLogger } from \"@fluidframework/common-definitions\";\nimport { ISummaryTree } from \"@fluidframework/protocol-definitions\";\nimport {\n ensureFluidResolvedUrl,\n getDocAttributesFromProtocolSummary,\n getQuorumValuesFromProtocolSummary,\n RateLimiter,\n} from \"@fluidframework/driver-utils\";\nimport { ChildLogger, PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { ISession } from \"@fluidframework/server-services-client\";\nimport { DocumentService } from \"./documentService\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ITokenProvider } from \"./tokens\";\nimport { RouterliciousOrdererRestWrapper } from \"./restWrapper\";\nimport { convertSummaryToCreateNewSummary } from \"./createNewUtils\";\nimport { parseFluidUrl, replaceDocumentIdInPath, getDiscoveredFluidResolvedUrl } from \"./urlUtils\";\nimport { ICache, InMemoryCache, NullCache } from \"./cache\";\nimport { pkgVersion as driverVersion } from \"./packageVersion\";\nimport { ISnapshotTreeVersion } from \"./definitions\";\n\nconst defaultRouterliciousDriverPolicies: IRouterliciousDriverPolicies = {\n enablePrefetch: true,\n maxConcurrentStorageRequests: 100,\n maxConcurrentOrdererRequests: 100,\n aggregateBlobsSmallerThanBytes: undefined,\n enableDiscovery: false,\n enableWholeSummaryUpload: false,\n enableRestLess: true,\n enableInternalSummaryCaching: true,\n};\n\n/**\n * Factory for creating the routerlicious document service. Use this if you want to\n * use the routerlicious implementation.\n */\nexport class RouterliciousDocumentServiceFactory implements IDocumentServiceFactory {\n public readonly protocolName = \"fluid:\";\n private readonly driverPolicies: IRouterliciousDriverPolicies;\n private readonly blobCache: ICache<ArrayBufferLike>;\n private readonly snapshotTreeCache: ICache<ISnapshotTreeVersion>;\n\n constructor(\n private readonly tokenProvider: ITokenProvider,\n driverPolicies: Partial<IRouterliciousDriverPolicies> = {},\n ) {\n this.driverPolicies = {\n ...defaultRouterliciousDriverPolicies,\n ...driverPolicies,\n };\n this.blobCache = new InMemoryCache<ArrayBufferLike>();\n this.snapshotTreeCache = this.driverPolicies.enableInternalSummaryCaching\n ? new InMemoryCache<ISnapshotTreeVersion>()\n : new NullCache<ISnapshotTreeVersion>();\n }\n\n /**\n * {@inheritDoc @fluidframework/driver-definitions#IDocumentServiceFactory.createContainer}\n *\n * @throws {@link DocumentPostCreateError}\n * If an exception is thrown while invoking the provided {@link ITokenProvider.documentPostCreateCallback}.\n */\n public async createContainer(\n createNewSummary: ISummaryTree | undefined,\n resolvedUrl: IResolvedUrl,\n logger?: ITelemetryBaseLogger,\n clientIsSummarizer?: boolean,\n ): Promise<IDocumentService> {\n ensureFluidResolvedUrl(resolvedUrl);\n if (createNewSummary === undefined) {\n throw new Error(\"Empty file summary creation isn't supported in this driver.\");\n }\n assert(!!resolvedUrl.endpoints.ordererUrl, 0x0b2 /* \"Missing orderer URL!\" */);\n let parsedUrl = parseFluidUrl(resolvedUrl.url);\n if (!parsedUrl.pathname) {\n throw new Error(\"Parsed url should contain tenant and doc Id!!\");\n }\n const [, tenantId] = parsedUrl.pathname.split(\"/\");\n\n const protocolSummary = createNewSummary.tree[\".protocol\"] as ISummaryTree;\n const appSummary = createNewSummary.tree[\".app\"] as ISummaryTree;\n if (!(protocolSummary && appSummary)) {\n throw new Error(\"Protocol and App Summary required in the full summary\");\n }\n const documentAttributes = getDocAttributesFromProtocolSummary(protocolSummary);\n const quorumValues = getQuorumValuesFromProtocolSummary(protocolSummary);\n\n const logger2 = ChildLogger.create(logger, \"RouterliciousDriver\");\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);\n const ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n tenantId,\n undefined,\n this.tokenProvider,\n logger2,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n resolvedUrl.endpoints.ordererUrl,\n );\n\n const res = await PerformanceEvent.timedExecAsync(\n logger2,\n {\n eventName: \"CreateNew\",\n details: JSON.stringify({\n enableDiscovery: this.driverPolicies.enableDiscovery,\n sequenceNumber: documentAttributes.sequenceNumber,\n }),\n },\n async (event) => {\n // @TODO: Remove returned \"string\" type when removing back-compat code\n const postRes = await ordererRestWrapper.post<\n { id: string; token?: string; session?: ISession; } | string\n >(`/documents/${tenantId}`, {\n summary: convertSummaryToCreateNewSummary(appSummary),\n sequenceNumber: documentAttributes.sequenceNumber,\n values: quorumValues,\n enableDiscovery: this.driverPolicies.enableDiscovery,\n generateToken:\n this.tokenProvider.documentPostCreateCallback !==\n undefined,\n });\n\n event.end({\n docId: typeof postRes === \"string\" ? postRes : postRes.id,\n });\n return postRes;\n }\n );\n\n // For supporting backward compatibility, when the request has generateToken === true, it will return\n // an object instead of string\n // @TODO: Remove the logic when no need to support back-compat\n\n let documentId: string;\n let token: string | undefined;\n let session: ISession | undefined;\n if (typeof res === \"string\") {\n documentId = res;\n } else {\n documentId = res.id;\n token = res.token;\n session = this.driverPolicies.enableDiscovery ? res.session : undefined;\n }\n parsedUrl = parseFluidUrl(resolvedUrl.url);\n\n // @TODO: Remove token from the condition, checking the documentPostCreateCallback !== undefined\n // is sufficient to determine if the token will be undefined or not.\n try {\n await PerformanceEvent.timedExecAsync(\n logger2,\n {\n eventName: \"DocPostCreateCallback\",\n docId: documentId,\n },\n async () => {\n if (token && this.tokenProvider.documentPostCreateCallback !== undefined) {\n return this.tokenProvider.documentPostCreateCallback(documentId, token);\n }\n });\n } catch (error: any) {\n throw new DocumentPostCreateError(error);\n }\n\n parsedUrl.set(\"pathname\", replaceDocumentIdInPath(parsedUrl.pathname, documentId));\n const deltaStorageUrl = resolvedUrl.endpoints.deltaStorageUrl;\n if (!deltaStorageUrl) {\n throw new Error(\n `All endpoints urls must be provided. [deltaStorageUrl:${deltaStorageUrl}]`);\n }\n const parsedDeltaStorageUrl = new URL(deltaStorageUrl);\n parsedDeltaStorageUrl.pathname = replaceDocumentIdInPath(parsedDeltaStorageUrl.pathname, documentId);\n\n return this.createDocumentService(\n {\n ...resolvedUrl,\n url: parsedUrl.toString(),\n id: documentId,\n endpoints: {\n ...resolvedUrl.endpoints,\n deltaStorageUrl: parsedDeltaStorageUrl.toString(),\n },\n },\n logger,\n clientIsSummarizer,\n session,\n );\n }\n\n /**\n * {@inheritDoc @fluidframework/driver-definitions#IDocumentServiceFactory.createDocumentService}\n *\n * @returns Routerlicious document service.\n */\n public async createDocumentService(\n resolvedUrl: IResolvedUrl,\n logger?: ITelemetryBaseLogger,\n clientIsSummarizer?: boolean,\n session?: ISession,\n ): Promise<IDocumentService> {\n ensureFluidResolvedUrl(resolvedUrl);\n\n const parsedUrl = parseFluidUrl(resolvedUrl.url);\n const [, tenantId, documentId] = parsedUrl.pathname.split(\"/\");\n if (!documentId || !tenantId) {\n throw new Error(\n `Couldn't parse documentId and/or tenantId. [documentId:${documentId}][tenantId:${tenantId}]`);\n }\n const logger2 = ChildLogger.create(logger, \"RouterliciousDriver\", { all: { driverVersion } });\n\n const discoverFluidResolvedUrl = async (): Promise<IFluidResolvedUrl> => {\n if (!this.driverPolicies.enableDiscovery) {\n return resolvedUrl;\n }\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);\n const ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n tenantId,\n documentId,\n this.tokenProvider,\n logger2,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n resolvedUrl.endpoints.ordererUrl,\n );\n\n const discoveredSession = await PerformanceEvent.timedExecAsync(\n logger2,\n {\n eventName: \"DiscoverSession\",\n docId: documentId,\n },\n async () => {\n // The service responds with the current document session associated with the container.\n return ordererRestWrapper.get<ISession>(\n `/documents/${tenantId}/session/${documentId}`);\n });\n return getDiscoveredFluidResolvedUrl(resolvedUrl, discoveredSession);\n };\n const fluidResolvedUrl: IFluidResolvedUrl = session !== undefined\n ? getDiscoveredFluidResolvedUrl(resolvedUrl, session)\n : await discoverFluidResolvedUrl();\n\n const storageUrl = fluidResolvedUrl.endpoints.storageUrl;\n const ordererUrl = fluidResolvedUrl.endpoints.ordererUrl;\n const deltaStorageUrl = fluidResolvedUrl.endpoints.deltaStorageUrl;\n const deltaStreamUrl = fluidResolvedUrl.endpoints.deltaStreamUrl || ordererUrl; // backward compatibility\n if (!ordererUrl || !deltaStorageUrl) {\n throw new Error(\n `All endpoints urls must be provided. [ordererUrl:${ordererUrl}][deltaStorageUrl:${deltaStorageUrl}]`);\n }\n\n return new DocumentService(\n fluidResolvedUrl,\n ordererUrl,\n deltaStorageUrl,\n deltaStreamUrl,\n storageUrl,\n logger2,\n this.tokenProvider,\n tenantId,\n documentId,\n this.driverPolicies,\n this.blobCache,\n this.snapshotTreeCache,\n discoverFluidResolvedUrl);\n }\n}\n\n/**\n * Error returned by {@link RouterliciousDocumentServiceFactory.createContainer} when an error is thrown\n * in {@link ITokenProvider.documentPostCreateCallback}.\n * It is the consumer's responsibility to ensure that any state related to container creation is appropriately\n * cleaned up in the event of failure.\n * This includes the document itself, which will have been created by the time this error was thrown.\n *\n * @remarks TODO: examples of suggested actions for recovery.\n * - How would a user delete the created document?\n * - What would a retry pattern look like here?\n */\nexport class DocumentPostCreateError extends Error {\n public constructor(\n /**\n * Inner error being wrapped.\n */\n private readonly innerError: Error,\n ) {\n super(innerError.message);\n }\n\n public readonly name = \"DocumentPostCreateError\";\n\n public get stack() { return this.innerError.stack; }\n}\n"]}
1
+ {"version":3,"file":"documentServiceFactory.js","sourceRoot":"","sources":["../src/documentServiceFactory.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+DAAsD;AACtD,2EAQ4C;AAG5C,+DAKsC;AACtC,qEAAgF;AAEhF,uDAAoD;AAGpD,+CAAgE;AAChE,qDAAoE;AACpE,yCAAmG;AACnG,mCAA2D;AAC3D,qDAA+D;AAG/D,MAAM,8BAA8B,GAAe,SAAW,CAAC,CAAC,eAAe;AAE/E,MAAM,kCAAkC,GAAiC;IACrE,cAAc,EAAE,IAAI;IACpB,4BAA4B,EAAE,GAAG;IACjC,4BAA4B,EAAE,GAAG;IACjC,8BAA8B,EAAE,SAAS;IACzC,eAAe,EAAE,KAAK;IACtB,wBAAwB,EAAE,KAAK;IAC/B,cAAc,EAAE,IAAI;IACpB,4BAA4B,EAAE,IAAI;CACrC,CAAC;AAEF;;;GAGG;AACH,MAAa,mCAAmC;IAM5C,YACqB,aAA6B,EAC9C,iBAAwD,EAAE;QADzC,kBAAa,GAAb,aAAa,CAAgB;QANlC,iBAAY,GAAG,QAAQ,CAAC;QASpC,2GAA2G;QAC3G,MAAM,qBAAqB,GAAe,8BAA8B,CAAC;QAEzE,IAAI,CAAC,cAAc,mCACZ,kCAAkC,GAClC,cAAc,CACpB,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAa,EAAmB,CAAC;QACtD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,4BAA4B;YACrE,CAAC,CAAC,IAAI,qBAAa,CAAuB,qBAAqB,CAAC;YAChE,CAAC,CAAC,IAAI,iBAAS,EAAwB,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,eAAe,CACxB,gBAA0C,EAC1C,WAAyB,EACzB,MAA6B,EAC7B,kBAA4B;QAE5B,IAAA,qCAAsB,EAAC,WAAW,CAAC,CAAC;QACpC,IAAI,gBAAgB,KAAK,SAAS,EAAE;YAChC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;SAClF;QACD,IAAA,qBAAM,EAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC/E,IAAI,SAAS,GAAG,IAAA,wBAAa,EAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;YACrB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;SACpE;QACD,MAAM,CAAC,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEnD,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAiB,CAAC;QAC3E,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAiB,CAAC;QACjE,IAAI,CAAC,CAAC,eAAe,IAAI,UAAU,CAAC,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;SAC5E;QACD,MAAM,kBAAkB,GAAG,IAAA,kDAAmC,EAAC,eAAe,CAAC,CAAC;QAChF,MAAM,YAAY,GAAG,IAAA,iDAAkC,EAAC,eAAe,CAAC,CAAC;QAEzE,MAAM,OAAO,GAAG,6BAAW,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,cAAc,CAAC,4BAA4B,CAAC,CAAC;QACtF,MAAM,kBAAkB,GAAG,MAAM,6CAA+B,CAAC,IAAI,CACjE,QAAQ,EACR,SAAS,EACT,IAAI,CAAC,aAAa,EAClB,OAAO,EACP,WAAW,EACX,IAAI,CAAC,cAAc,CAAC,cAAc,EAClC,WAAW,CAAC,SAAS,CAAC,UAAU,CACnC,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,kCAAgB,CAAC,cAAc,CAC7C,OAAO,EACP;YACI,SAAS,EAAE,WAAW;YACtB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC;gBACpB,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe;gBACpD,cAAc,EAAE,kBAAkB,CAAC,cAAc;aACpD,CAAC;SACL,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACZ,sEAAsE;YACtE,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAE3C,cAAc,QAAQ,EAAE,EAAE;gBACxB,OAAO,EAAE,IAAA,iDAAgC,EAAC,UAAU,CAAC;gBACrD,cAAc,EAAE,kBAAkB,CAAC,cAAc;gBACjD,MAAM,EAAE,YAAY;gBACpB,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe;gBACpD,aAAa,EACT,IAAI,CAAC,aAAa,CAAC,0BAA0B;oBAC7C,SAAS;aAChB,CAAC,CAAC;YAEH,KAAK,CAAC,GAAG,CAAC;gBACN,KAAK,EAAE,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;aAC5D,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACnB,CAAC,CACJ,CAAC;QAEF,qGAAqG;QACrG,8BAA8B;QAC9B,8DAA8D;QAE9D,IAAI,UAAkB,CAAC;QACvB,IAAI,KAAyB,CAAC;QAC9B,IAAI,OAA6B,CAAC;QAClC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YACzB,UAAU,GAAG,GAAG,CAAC;SACpB;aAAM;YACH,UAAU,GAAG,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YAClB,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;SAC3E;QACD,SAAS,GAAG,IAAA,wBAAa,EAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAE3C,gGAAgG;QAChG,oEAAoE;QACpE,IAAI;YACA,MAAM,kCAAgB,CAAC,cAAc,CACjC,OAAO,EACP;gBACI,SAAS,EAAE,uBAAuB;gBAClC,KAAK,EAAE,UAAU;aACpB,EACD,KAAK,IAAI,EAAE;gBACP,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,0BAA0B,KAAK,SAAS,EAAE;oBACtE,OAAO,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;iBAC3E;YACL,CAAC,CAAC,CAAC;SACV;QAAC,OAAO,KAAU,EAAE;YACjB,MAAM,IAAI,uBAAuB,CAAC,KAAK,CAAC,CAAC;SAC5C;QAED,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,IAAA,kCAAuB,EAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;QACnF,MAAM,eAAe,GAAG,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC;QAC9D,IAAI,CAAC,eAAe,EAAE;YAClB,MAAM,IAAI,KAAK,CACX,yDAAyD,eAAe,GAAG,CAAC,CAAC;SACpF;QACD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;QACvD,qBAAqB,CAAC,QAAQ,GAAG,IAAA,kCAAuB,EAAC,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAErG,OAAO,IAAI,CAAC,qBAAqB,iCAEtB,WAAW,KACd,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAE,EACzB,EAAE,EAAE,UAAU,EACd,SAAS,kCACF,WAAW,CAAC,SAAS,KACxB,eAAe,EAAE,qBAAqB,CAAC,QAAQ,EAAE,QAGzD,MAAM,EACN,kBAAkB,EAClB,OAAO,CACV,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,qBAAqB,CAC9B,WAAyB,EACzB,MAA6B,EAC7B,kBAA4B,EAC5B,OAAkB;QAElB,IAAA,qCAAsB,EAAC,WAAW,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,IAAA,wBAAa,EAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE;YAC1B,MAAM,IAAI,KAAK,CACX,0DAA0D,UAAU,cAAc,QAAQ,GAAG,CAAC,CAAC;SACtG;QACD,MAAM,OAAO,GAAG,6BAAW,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE,EAAE,GAAG,EAAE,EAAE,aAAa,EAAb,2BAAa,EAAE,EAAE,CAAC,CAAC;QAE9F,MAAM,WAAW,GAAG,IAAI,0BAAW,CAAC,IAAI,CAAC,cAAc,CAAC,4BAA4B,CAAC,CAAC;QACtF,MAAM,kBAAkB,GAAG,MAAM,6CAA+B,CAAC,IAAI,CACjE,QAAQ,EACR,UAAU,EACV,IAAI,CAAC,aAAa,EAClB,OAAO,EACP,WAAW,EACX,IAAI,CAAC,cAAc,CAAC,cAAc,CACrC,CAAC;QAEF,MAAM,wBAAwB,GAAG,KAAK,IAAgC,EAAE;YACpE,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE;gBACtC,OAAO,WAAW,CAAC;aACtB;YAED,MAAM,iBAAiB,GAAG,MAAM,kCAAgB,CAAC,cAAc,CAC3D,OAAO,EACP;gBACI,SAAS,EAAE,iBAAiB;gBAC5B,KAAK,EAAE,UAAU;aACpB,EACD,KAAK,IAAI,EAAE;gBACP,wFAAwF;gBACxF,OAAO,kBAAkB,CAAC,GAAG,CACzB,GAAG,WAAW,CAAC,SAAS,CAAC,UAAU,cAAc,QAAQ,YAAY,UAAU,EAAE,CAAC,CAAC;YAC3F,CAAC,CAAC,CAAC;YACP,OAAO,IAAA,wCAA6B,EAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QACzE,CAAC,CAAC;QACF,MAAM,gBAAgB,GAAsB,OAAO,KAAK,SAAS;YAC7D,CAAC,CAAC,IAAA,wCAA6B,EAAC,WAAW,EAAE,OAAO,CAAC;YACrD,CAAC,CAAC,MAAM,wBAAwB,EAAE,CAAC;QAEvC,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC;QACzD,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC;QACzD,MAAM,eAAe,GAAG,gBAAgB,CAAC,SAAS,CAAC,eAAe,CAAC;QACnE,MAAM,cAAc,GAAG,gBAAgB,CAAC,SAAS,CAAC,cAAc,IAAI,UAAU,CAAC,CAAC,yBAAyB;QACzG,IAAI,CAAC,UAAU,IAAI,CAAC,eAAe,EAAE;YACjC,MAAM,IAAI,KAAK,CACX,oDAAoD,UAAU,qBAAqB,eAAe,GAAG,CAAC,CAAC;SAC9G;QAED,MAAM,8BAA8B,GAAoC;YACpE,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,cAAc;gBACvC,CAAC,CAAC,wCAAmB,CAAC,QAAQ;gBAC9B,CAAC,CAAC,wCAAmB,CAAC,SAAS;YACnC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,8BAA8B;YAC/D,sBAAsB,EAAE,8BAA8B;SACzD,CAAC;QAEF,OAAO,IAAI,iCAAe,CACtB,gBAAgB,EAChB,UAAU,EACV,eAAe,EACf,cAAc,EACd,UAAU,EACV,OAAO,EACP,IAAI,CAAC,aAAa,EAClB,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,8BAA8B,EAC9B,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,iBAAiB,EACtB,wBAAwB,CAAC,CAAC;IAClC,CAAC;CACJ;AAjPD,kFAiPC;AAED;;;;;;;;;;GAUG;AACH,MAAa,uBAAwB,SAAQ,KAAK;IAC9C;IACI;;OAEG;IACc,UAAiB;QAElC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAFT,eAAU,GAAV,UAAU,CAAO;QAKtB,SAAI,GAAG,yBAAyB,CAAC;IAFjD,CAAC;IAID,IAAW,KAAK,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;CACvD;AAbD,0DAaC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport {\n FiveDaysMs,\n IDocumentService,\n IDocumentServiceFactory,\n IDocumentStorageServicePolicies,\n IFluidResolvedUrl,\n IResolvedUrl,\n LoaderCachingPolicy,\n} from \"@fluidframework/driver-definitions\";\nimport { ITelemetryBaseLogger } from \"@fluidframework/common-definitions\";\nimport { ISummaryTree } from \"@fluidframework/protocol-definitions\";\nimport {\n ensureFluidResolvedUrl,\n getDocAttributesFromProtocolSummary,\n getQuorumValuesFromProtocolSummary,\n RateLimiter,\n} from \"@fluidframework/driver-utils\";\nimport { ChildLogger, PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { ISession } from \"@fluidframework/server-services-client\";\nimport { DocumentService } from \"./documentService\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ITokenProvider } from \"./tokens\";\nimport { RouterliciousOrdererRestWrapper } from \"./restWrapper\";\nimport { convertSummaryToCreateNewSummary } from \"./createNewUtils\";\nimport { parseFluidUrl, replaceDocumentIdInPath, getDiscoveredFluidResolvedUrl } from \"./urlUtils\";\nimport { ICache, InMemoryCache, NullCache } from \"./cache\";\nimport { pkgVersion as driverVersion } from \"./packageVersion\";\nimport { ISnapshotTreeVersion } from \"./definitions\";\n\nconst maximumSnapshotCacheDurationMs: FiveDaysMs = 432_000_000; // 5 days in ms\n\nconst defaultRouterliciousDriverPolicies: IRouterliciousDriverPolicies = {\n enablePrefetch: true,\n maxConcurrentStorageRequests: 100,\n maxConcurrentOrdererRequests: 100,\n aggregateBlobsSmallerThanBytes: undefined,\n enableDiscovery: false,\n enableWholeSummaryUpload: false,\n enableRestLess: true,\n enableInternalSummaryCaching: true,\n};\n\n/**\n * Factory for creating the routerlicious document service. Use this if you want to\n * use the routerlicious implementation.\n */\nexport class RouterliciousDocumentServiceFactory implements IDocumentServiceFactory {\n public readonly protocolName = \"fluid:\";\n private readonly driverPolicies: IRouterliciousDriverPolicies;\n private readonly blobCache: ICache<ArrayBufferLike>;\n private readonly snapshotTreeCache: ICache<ISnapshotTreeVersion>;\n\n constructor(\n private readonly tokenProvider: ITokenProvider,\n driverPolicies: Partial<IRouterliciousDriverPolicies> = {},\n ) {\n // Use the maximum allowed by the policy (IDocumentStorageServicePolicies.maximumCacheDurationMs set below)\n const snapshotCacheExpiryMs: FiveDaysMs = maximumSnapshotCacheDurationMs;\n\n this.driverPolicies = {\n ...defaultRouterliciousDriverPolicies,\n ...driverPolicies,\n };\n this.blobCache = new InMemoryCache<ArrayBufferLike>();\n this.snapshotTreeCache = this.driverPolicies.enableInternalSummaryCaching\n ? new InMemoryCache<ISnapshotTreeVersion>(snapshotCacheExpiryMs)\n : new NullCache<ISnapshotTreeVersion>();\n }\n\n /**\n * {@inheritDoc @fluidframework/driver-definitions#IDocumentServiceFactory.createContainer}\n *\n * @throws {@link DocumentPostCreateError}\n * If an exception is thrown while invoking the provided {@link ITokenProvider.documentPostCreateCallback}.\n */\n public async createContainer(\n createNewSummary: ISummaryTree | undefined,\n resolvedUrl: IResolvedUrl,\n logger?: ITelemetryBaseLogger,\n clientIsSummarizer?: boolean,\n ): Promise<IDocumentService> {\n ensureFluidResolvedUrl(resolvedUrl);\n if (createNewSummary === undefined) {\n throw new Error(\"Empty file summary creation isn't supported in this driver.\");\n }\n assert(!!resolvedUrl.endpoints.ordererUrl, 0x0b2 /* \"Missing orderer URL!\" */);\n let parsedUrl = parseFluidUrl(resolvedUrl.url);\n if (!parsedUrl.pathname) {\n throw new Error(\"Parsed url should contain tenant and doc Id!!\");\n }\n const [, tenantId] = parsedUrl.pathname.split(\"/\");\n\n const protocolSummary = createNewSummary.tree[\".protocol\"] as ISummaryTree;\n const appSummary = createNewSummary.tree[\".app\"] as ISummaryTree;\n if (!(protocolSummary && appSummary)) {\n throw new Error(\"Protocol and App Summary required in the full summary\");\n }\n const documentAttributes = getDocAttributesFromProtocolSummary(protocolSummary);\n const quorumValues = getQuorumValuesFromProtocolSummary(protocolSummary);\n\n const logger2 = ChildLogger.create(logger, \"RouterliciousDriver\");\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);\n const ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n tenantId,\n undefined,\n this.tokenProvider,\n logger2,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n resolvedUrl.endpoints.ordererUrl,\n );\n\n const res = await PerformanceEvent.timedExecAsync(\n logger2,\n {\n eventName: \"CreateNew\",\n details: JSON.stringify({\n enableDiscovery: this.driverPolicies.enableDiscovery,\n sequenceNumber: documentAttributes.sequenceNumber,\n }),\n },\n async (event) => {\n // @TODO: Remove returned \"string\" type when removing back-compat code\n const postRes = await ordererRestWrapper.post<\n { id: string; token?: string; session?: ISession; } | string\n >(`/documents/${tenantId}`, {\n summary: convertSummaryToCreateNewSummary(appSummary),\n sequenceNumber: documentAttributes.sequenceNumber,\n values: quorumValues,\n enableDiscovery: this.driverPolicies.enableDiscovery,\n generateToken:\n this.tokenProvider.documentPostCreateCallback !==\n undefined,\n });\n\n event.end({\n docId: typeof postRes === \"string\" ? postRes : postRes.id,\n });\n return postRes;\n }\n );\n\n // For supporting backward compatibility, when the request has generateToken === true, it will return\n // an object instead of string\n // @TODO: Remove the logic when no need to support back-compat\n\n let documentId: string;\n let token: string | undefined;\n let session: ISession | undefined;\n if (typeof res === \"string\") {\n documentId = res;\n } else {\n documentId = res.id;\n token = res.token;\n session = this.driverPolicies.enableDiscovery ? res.session : undefined;\n }\n parsedUrl = parseFluidUrl(resolvedUrl.url);\n\n // @TODO: Remove token from the condition, checking the documentPostCreateCallback !== undefined\n // is sufficient to determine if the token will be undefined or not.\n try {\n await PerformanceEvent.timedExecAsync(\n logger2,\n {\n eventName: \"DocPostCreateCallback\",\n docId: documentId,\n },\n async () => {\n if (token && this.tokenProvider.documentPostCreateCallback !== undefined) {\n return this.tokenProvider.documentPostCreateCallback(documentId, token);\n }\n });\n } catch (error: any) {\n throw new DocumentPostCreateError(error);\n }\n\n parsedUrl.set(\"pathname\", replaceDocumentIdInPath(parsedUrl.pathname, documentId));\n const deltaStorageUrl = resolvedUrl.endpoints.deltaStorageUrl;\n if (!deltaStorageUrl) {\n throw new Error(\n `All endpoints urls must be provided. [deltaStorageUrl:${deltaStorageUrl}]`);\n }\n const parsedDeltaStorageUrl = new URL(deltaStorageUrl);\n parsedDeltaStorageUrl.pathname = replaceDocumentIdInPath(parsedDeltaStorageUrl.pathname, documentId);\n\n return this.createDocumentService(\n {\n ...resolvedUrl,\n url: parsedUrl.toString(),\n id: documentId,\n endpoints: {\n ...resolvedUrl.endpoints,\n deltaStorageUrl: parsedDeltaStorageUrl.toString(),\n },\n },\n logger,\n clientIsSummarizer,\n session,\n );\n }\n\n /**\n * {@inheritDoc @fluidframework/driver-definitions#IDocumentServiceFactory.createDocumentService}\n *\n * @returns Routerlicious document service.\n */\n public async createDocumentService(\n resolvedUrl: IResolvedUrl,\n logger?: ITelemetryBaseLogger,\n clientIsSummarizer?: boolean,\n session?: ISession,\n ): Promise<IDocumentService> {\n ensureFluidResolvedUrl(resolvedUrl);\n const parsedUrl = parseFluidUrl(resolvedUrl.url);\n const [, tenantId, documentId] = parsedUrl.pathname.split(\"/\");\n if (!documentId || !tenantId) {\n throw new Error(\n `Couldn't parse documentId and/or tenantId. [documentId:${documentId}][tenantId:${tenantId}]`);\n }\n const logger2 = ChildLogger.create(logger, \"RouterliciousDriver\", { all: { driverVersion } });\n\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);\n const ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n tenantId,\n documentId,\n this.tokenProvider,\n logger2,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n );\n\n const discoverFluidResolvedUrl = async (): Promise<IFluidResolvedUrl> => {\n if (!this.driverPolicies.enableDiscovery) {\n return resolvedUrl;\n }\n\n const discoveredSession = await PerformanceEvent.timedExecAsync(\n logger2,\n {\n eventName: \"DiscoverSession\",\n docId: documentId,\n },\n async () => {\n // The service responds with the current document session associated with the container.\n return ordererRestWrapper.get<ISession>(\n `${resolvedUrl.endpoints.ordererUrl}/documents/${tenantId}/session/${documentId}`);\n });\n return getDiscoveredFluidResolvedUrl(resolvedUrl, discoveredSession);\n };\n const fluidResolvedUrl: IFluidResolvedUrl = session !== undefined\n ? getDiscoveredFluidResolvedUrl(resolvedUrl, session)\n : await discoverFluidResolvedUrl();\n\n const storageUrl = fluidResolvedUrl.endpoints.storageUrl;\n const ordererUrl = fluidResolvedUrl.endpoints.ordererUrl;\n const deltaStorageUrl = fluidResolvedUrl.endpoints.deltaStorageUrl;\n const deltaStreamUrl = fluidResolvedUrl.endpoints.deltaStreamUrl || ordererUrl; // backward compatibility\n if (!ordererUrl || !deltaStorageUrl) {\n throw new Error(\n `All endpoints urls must be provided. [ordererUrl:${ordererUrl}][deltaStorageUrl:${deltaStorageUrl}]`);\n }\n\n const documentStorageServicePolicies: IDocumentStorageServicePolicies = {\n caching: this.driverPolicies.enablePrefetch\n ? LoaderCachingPolicy.Prefetch\n : LoaderCachingPolicy.NoCaching,\n minBlobSize: this.driverPolicies.aggregateBlobsSmallerThanBytes,\n maximumCacheDurationMs: maximumSnapshotCacheDurationMs,\n };\n\n return new DocumentService(\n fluidResolvedUrl,\n ordererUrl,\n deltaStorageUrl,\n deltaStreamUrl,\n storageUrl,\n logger2,\n this.tokenProvider,\n tenantId,\n documentId,\n ordererRestWrapper,\n documentStorageServicePolicies,\n this.driverPolicies,\n this.blobCache,\n this.snapshotTreeCache,\n discoverFluidResolvedUrl);\n }\n}\n\n/**\n * Error returned by {@link RouterliciousDocumentServiceFactory.createContainer} when an error is thrown\n * in {@link ITokenProvider.documentPostCreateCallback}.\n * It is the consumer's responsibility to ensure that any state related to container creation is appropriately\n * cleaned up in the event of failure.\n * This includes the document itself, which will have been created by the time this error was thrown.\n *\n * @remarks TODO: examples of suggested actions for recovery.\n * - How would a user delete the created document?\n * - What would a retry pattern look like here?\n */\nexport class DocumentPostCreateError extends Error {\n public constructor(\n /**\n * Inner error being wrapped.\n */\n private readonly innerError: Error,\n ) {\n super(innerError.message);\n }\n\n public readonly name = \"DocumentPostCreateError\";\n\n public get stack() { return this.innerError.stack; }\n}\n"]}
@@ -17,7 +17,7 @@ export declare class DocumentStorageService extends DocumentStorageServiceProxy
17
17
  private _logTailSha;
18
18
  get logTailSha(): string | undefined;
19
19
  private static loadInternalDocumentStorageService;
20
- constructor(id: string, manager: GitManager, logger: ITelemetryLogger, policies?: IDocumentStorageServicePolicies, driverPolicies?: IRouterliciousDriverPolicies, blobCache?: ICache<ArrayBufferLike>, snapshotTreeCache?: ICache<ISnapshotTreeVersion>, noCacheGitManager?: GitManager | undefined, getStorageManager?: (disableCache?: boolean) => Promise<GitManager>);
20
+ constructor(id: string, manager: GitManager, logger: ITelemetryLogger, policies: IDocumentStorageServicePolicies, driverPolicies?: IRouterliciousDriverPolicies, blobCache?: ICache<ArrayBufferLike>, snapshotTreeCache?: ICache<ISnapshotTreeVersion>, noCacheGitManager?: GitManager | undefined, getStorageManager?: (disableCache?: boolean) => Promise<GitManager>);
21
21
  getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null>;
22
22
  }
23
23
  //# sourceMappingURL=documentStorageService.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"documentStorageService.d.ts","sourceRoot":"","sources":["../src/documentStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAEH,+BAA+B,EAElC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,aAAa,EACb,QAAQ,EACX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACH,UAAU,EACb,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,2BAA2B,EAAkC,MAAM,8BAA8B,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,qBAAa,sBAAuB,SAAQ,2BAA2B;aAgD/C,EAAE,EAAE,MAAM;IACnB,OAAO,EAAE,UAAU;IAMnB,iBAAiB,CAAC;IAtD7B,OAAO,CAAC,WAAW,CAAiC;IAEpD,IAAW,UAAU,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,OAAO,CAAC,MAAM,CAAC,kCAAkC;gBAyC7B,EAAE,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,EAC1B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,GAAE,+BAAoC,EAC9C,cAAc,CAAC,EAAE,4BAA4B,EAC7C,SAAS,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC,EACzC,iBAAiB,CAAC,wBAAY,EACrC,iBAAiB,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC;IAe1D,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAOlF"}
1
+ {"version":3,"file":"documentStorageService.d.ts","sourceRoot":"","sources":["../src/documentStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAEH,+BAA+B,EAElC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACH,aAAa,EACb,QAAQ,EACX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACH,UAAU,EACb,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,2BAA2B,EAAkC,MAAM,8BAA8B,CAAC;AAC3G,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,qBAAa,sBAAuB,SAAQ,2BAA2B;aAgD/C,EAAE,EAAE,MAAM;IACnB,OAAO,EAAE,UAAU;IAMnB,iBAAiB,CAAC;IAtD7B,OAAO,CAAC,WAAW,CAAiC;IAEpD,IAAW,UAAU,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,OAAO,CAAC,MAAM,CAAC,kCAAkC;gBAyC7B,EAAE,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,EAC1B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,+BAA+B,EACzC,cAAc,CAAC,EAAE,4BAA4B,EAC7C,SAAS,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC,EACzC,iBAAiB,CAAC,wBAAY,EACrC,iBAAiB,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC;IAe1D,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAOlF"}
@@ -10,7 +10,7 @@ const driver_utils_1 = require("@fluidframework/driver-utils");
10
10
  const wholeSummaryDocumentStorageService_1 = require("./wholeSummaryDocumentStorageService");
11
11
  const shreddedSummaryDocumentStorageService_1 = require("./shreddedSummaryDocumentStorageService");
12
12
  class DocumentStorageService extends driver_utils_1.DocumentStorageServiceProxy {
13
- constructor(id, manager, logger, policies = {}, driverPolicies, blobCache, snapshotTreeCache, noCacheGitManager, getStorageManager) {
13
+ constructor(id, manager, logger, policies, driverPolicies, blobCache, snapshotTreeCache, noCacheGitManager, getStorageManager) {
14
14
  super(DocumentStorageService.loadInternalDocumentStorageService(id, manager, logger, policies, driverPolicies, blobCache, snapshotTreeCache, noCacheGitManager, getStorageManager));
15
15
  this.id = id;
16
16
  this.manager = manager;
@@ -1 +1 @@
1
- {"version":3,"file":"documentStorageService.js","sourceRoot":"","sources":["../src/documentStorageService.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,2EAI4C;AAQ5C,+DAA2G;AAG3G,6FAA0F;AAC1F,mGAAgG;AAGhG,MAAa,sBAAuB,SAAQ,0CAA2B;IA+CnE,YACoB,EAAU,EACnB,OAAmB,EAC1B,MAAwB,EACxB,WAA4C,EAAE,EAC9C,cAA6C,EAC7C,SAAmC,EACnC,iBAAgD,EACzC,iBAA8B,EACrC,iBAAmE;QAEnE,KAAK,CAAC,sBAAsB,CAAC,kCAAkC,CAC3D,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,CACpB,CAAC,CAAC;QApBa,OAAE,GAAF,EAAE,CAAQ;QACnB,YAAO,GAAP,OAAO,CAAY;QAMnB,sBAAiB,GAAjB,iBAAiB,CAAa;QAtDjC,gBAAW,GAAuB,SAAS,CAAC;IAoEpD,CAAC;IAlED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAEO,MAAM,CAAC,kCAAkC,CAC7C,EAAU,EACV,OAAmB,EACnB,MAAwB,EACxB,QAAyC,EACzC,cAA6C,EAC7C,SAAmC,EACnC,iBAAgD,EAChD,iBAA8B,EAC9B,iBAAmE;QAEnE,MAAM,cAAc,GAAG,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,wBAAwB,EAAC,CAAC;YAC7D,IAAI,uEAAkC,CAClC,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,CACpB,CAAC,CAAC;YACH,IAAI,6EAAqC,CACrC,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,CACpB,CAAC;QACN,mGAAmG;QACnG,IAAI,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,wBAAwB,CAAA,IAAI,QAAQ,CAAC,OAAO,KAAK,wCAAmB,CAAC,QAAQ,EAAE;YAChG,OAAO,IAAI,6CAA8B,CAAC,cAAc,CAAC,CAAC;SAC7D;QACD,OAAO,cAAc,CAAC;IAC1B,CAAC;IA0BM,KAAK,CAAC,eAAe,CAAC,OAAkB;QAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,IAAI,KAAK,IAAI,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;SAClG;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA9ED,wDA8EC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport {\n IDocumentStorageService,\n IDocumentStorageServicePolicies,\n LoaderCachingPolicy,\n} from \"@fluidframework/driver-definitions\";\nimport {\n ISnapshotTree,\n IVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n GitManager,\n} from \"@fluidframework/server-services-client\";\nimport { DocumentStorageServiceProxy, PrefetchDocumentStorageService } from \"@fluidframework/driver-utils\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache } from \"./cache\";\nimport { WholeSummaryDocumentStorageService } from \"./wholeSummaryDocumentStorageService\";\nimport { ShreddedSummaryDocumentStorageService } from \"./shreddedSummaryDocumentStorageService\";\nimport { ISnapshotTreeVersion } from \"./definitions\";\n\nexport class DocumentStorageService extends DocumentStorageServiceProxy {\n private _logTailSha: string | undefined = undefined;\n\n public get logTailSha(): string | undefined {\n return this._logTailSha;\n }\n\n private static loadInternalDocumentStorageService(\n id: string,\n manager: GitManager,\n logger: ITelemetryLogger,\n policies: IDocumentStorageServicePolicies,\n driverPolicies?: IRouterliciousDriverPolicies,\n blobCache?: ICache<ArrayBufferLike>,\n snapshotTreeCache?: ICache<ISnapshotTreeVersion>,\n noCacheGitManager?: GitManager,\n getStorageManager?: (disableCache?: boolean) => Promise<GitManager>,\n ): IDocumentStorageService {\n const storageService = driverPolicies?.enableWholeSummaryUpload ?\n new WholeSummaryDocumentStorageService(\n id,\n manager,\n logger,\n policies,\n driverPolicies,\n blobCache,\n snapshotTreeCache,\n noCacheGitManager,\n getStorageManager,\n ) :\n new ShreddedSummaryDocumentStorageService(\n id,\n manager,\n logger,\n policies,\n driverPolicies,\n blobCache,\n snapshotTreeCache,\n getStorageManager,\n );\n // TODO: worth prefetching latest summary making version + snapshot call with WholeSummary storage?\n if (!driverPolicies?.enableWholeSummaryUpload && policies.caching === LoaderCachingPolicy.Prefetch) {\n return new PrefetchDocumentStorageService(storageService);\n }\n return storageService;\n }\n\n constructor(\n public readonly id: string,\n public manager: GitManager,\n logger: ITelemetryLogger,\n policies: IDocumentStorageServicePolicies = {},\n driverPolicies?: IRouterliciousDriverPolicies,\n blobCache?: ICache<ArrayBufferLike>,\n snapshotTreeCache?: ICache<ISnapshotTreeVersion>,\n public noCacheGitManager?: GitManager,\n getStorageManager?: (disableCache?: boolean) => Promise<GitManager>,\n ) {\n super(DocumentStorageService.loadInternalDocumentStorageService(\n id,\n manager,\n logger,\n policies,\n driverPolicies,\n blobCache,\n snapshotTreeCache,\n noCacheGitManager,\n getStorageManager,\n ));\n }\n\n public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {\n const tree = await this.internalStorageService.getSnapshotTree(version);\n if (tree !== null) {\n this._logTailSha = \".logTail\" in tree.trees ? tree.trees[\".logTail\"].blobs.logTail : undefined;\n }\n return tree;\n }\n}\n"]}
1
+ {"version":3,"file":"documentStorageService.js","sourceRoot":"","sources":["../src/documentStorageService.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,2EAI4C;AAQ5C,+DAA2G;AAG3G,6FAA0F;AAC1F,mGAAgG;AAGhG,MAAa,sBAAuB,SAAQ,0CAA2B;IA+CnE,YACoB,EAAU,EACnB,OAAmB,EAC1B,MAAwB,EACxB,QAAyC,EACzC,cAA6C,EAC7C,SAAmC,EACnC,iBAAgD,EACzC,iBAA8B,EACrC,iBAAmE;QAEnE,KAAK,CAAC,sBAAsB,CAAC,kCAAkC,CAC3D,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,CACpB,CAAC,CAAC;QApBa,OAAE,GAAF,EAAE,CAAQ;QACnB,YAAO,GAAP,OAAO,CAAY;QAMnB,sBAAiB,GAAjB,iBAAiB,CAAa;QAtDjC,gBAAW,GAAuB,SAAS,CAAC;IAoEpD,CAAC;IAlED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAEO,MAAM,CAAC,kCAAkC,CAC7C,EAAU,EACV,OAAmB,EACnB,MAAwB,EACxB,QAAyC,EACzC,cAA6C,EAC7C,SAAmC,EACnC,iBAAgD,EAChD,iBAA8B,EAC9B,iBAAmE;QAEnE,MAAM,cAAc,GAAG,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,wBAAwB,EAAC,CAAC;YAC7D,IAAI,uEAAkC,CAClC,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,CACpB,CAAC,CAAC;YACH,IAAI,6EAAqC,CACrC,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,CACpB,CAAC;QACN,mGAAmG;QACnG,IAAI,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,wBAAwB,CAAA,IAAI,QAAQ,CAAC,OAAO,KAAK,wCAAmB,CAAC,QAAQ,EAAE;YAChG,OAAO,IAAI,6CAA8B,CAAC,cAAc,CAAC,CAAC;SAC7D;QACD,OAAO,cAAc,CAAC;IAC1B,CAAC;IA0BM,KAAK,CAAC,eAAe,CAAC,OAAkB;QAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,IAAI,KAAK,IAAI,EAAE;YACf,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;SAClG;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA9ED,wDA8EC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport {\n IDocumentStorageService,\n IDocumentStorageServicePolicies,\n LoaderCachingPolicy,\n} from \"@fluidframework/driver-definitions\";\nimport {\n ISnapshotTree,\n IVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n GitManager,\n} from \"@fluidframework/server-services-client\";\nimport { DocumentStorageServiceProxy, PrefetchDocumentStorageService } from \"@fluidframework/driver-utils\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache } from \"./cache\";\nimport { WholeSummaryDocumentStorageService } from \"./wholeSummaryDocumentStorageService\";\nimport { ShreddedSummaryDocumentStorageService } from \"./shreddedSummaryDocumentStorageService\";\nimport { ISnapshotTreeVersion } from \"./definitions\";\n\nexport class DocumentStorageService extends DocumentStorageServiceProxy {\n private _logTailSha: string | undefined = undefined;\n\n public get logTailSha(): string | undefined {\n return this._logTailSha;\n }\n\n private static loadInternalDocumentStorageService(\n id: string,\n manager: GitManager,\n logger: ITelemetryLogger,\n policies: IDocumentStorageServicePolicies,\n driverPolicies?: IRouterliciousDriverPolicies,\n blobCache?: ICache<ArrayBufferLike>,\n snapshotTreeCache?: ICache<ISnapshotTreeVersion>,\n noCacheGitManager?: GitManager,\n getStorageManager?: (disableCache?: boolean) => Promise<GitManager>,\n ): IDocumentStorageService {\n const storageService = driverPolicies?.enableWholeSummaryUpload ?\n new WholeSummaryDocumentStorageService(\n id,\n manager,\n logger,\n policies,\n driverPolicies,\n blobCache,\n snapshotTreeCache,\n noCacheGitManager,\n getStorageManager,\n ) :\n new ShreddedSummaryDocumentStorageService(\n id,\n manager,\n logger,\n policies,\n driverPolicies,\n blobCache,\n snapshotTreeCache,\n getStorageManager,\n );\n // TODO: worth prefetching latest summary making version + snapshot call with WholeSummary storage?\n if (!driverPolicies?.enableWholeSummaryUpload && policies.caching === LoaderCachingPolicy.Prefetch) {\n return new PrefetchDocumentStorageService(storageService);\n }\n return storageService;\n }\n\n constructor(\n public readonly id: string,\n public manager: GitManager,\n logger: ITelemetryLogger,\n policies: IDocumentStorageServicePolicies,\n driverPolicies?: IRouterliciousDriverPolicies,\n blobCache?: ICache<ArrayBufferLike>,\n snapshotTreeCache?: ICache<ISnapshotTreeVersion>,\n public noCacheGitManager?: GitManager,\n getStorageManager?: (disableCache?: boolean) => Promise<GitManager>,\n ) {\n super(DocumentStorageService.loadInternalDocumentStorageService(\n id,\n manager,\n logger,\n policies,\n driverPolicies,\n blobCache,\n snapshotTreeCache,\n noCacheGitManager,\n getStorageManager,\n ));\n }\n\n public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {\n const tree = await this.internalStorageService.getSnapshotTree(version);\n if (tree !== null) {\n this._logTailSha = \".logTail\" in tree.trees ? tree.trees[\".logTail\"].blobs.logTail : undefined;\n }\n return tree;\n }\n}\n"]}
@@ -4,7 +4,8 @@
4
4
  */
5
5
  import { DriverError } from "@fluidframework/driver-definitions";
6
6
  export declare enum R11sErrorType {
7
- fileNotFoundOrAccessDeniedError = "fileNotFoundOrAccessDeniedError"
7
+ fileNotFoundOrAccessDeniedError = "fileNotFoundOrAccessDeniedError",
8
+ sslCertError = "sslCertError"
8
9
  }
9
10
  /**
10
11
  * Interface for error responses for the WebSocket connection
@@ -1 +1 @@
1
- {"version":3,"file":"errorUtils.d.ts","sourceRoot":"","sources":["../src/errorUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AASjE,oBAAY,aAAa;IACrB,+BAA+B,oCAAoC;CACtE;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,oBAAY,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAEjD,wBAAgB,sBAAsB,CAClC,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACtB,SAAS,CA4BX;AAED,wBAAgB,qBAAqB,CACjC,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACtB,KAAK,CAQP;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAQpG"}
1
+ {"version":3,"file":"errorUtils.d.ts","sourceRoot":"","sources":["../src/errorUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AASjE,oBAAY,aAAa;IACrB,+BAA+B,oCAAoC;IACnE,YAAY,iBAAiB;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,oBAAY,SAAS,GAAG,WAAW,GAAG,UAAU,CAAC;AAEjD,wBAAgB,sBAAsB,CAClC,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACtB,SAAS,CAgCX;AAED,wBAAgB,qBAAqB,CACjC,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,GACtB,KAAK,CAQP;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAQpG"}
@@ -10,6 +10,7 @@ const packageVersion_1 = require("./packageVersion");
10
10
  var R11sErrorType;
11
11
  (function (R11sErrorType) {
12
12
  R11sErrorType["fileNotFoundOrAccessDeniedError"] = "fileNotFoundOrAccessDeniedError";
13
+ R11sErrorType["sslCertError"] = "sslCertError";
13
14
  })(R11sErrorType = exports.R11sErrorType || (exports.R11sErrorType = {}));
14
15
  function createR11sNetworkError(errorMessage, statusCode, retryAfterMs) {
15
16
  const props = { statusCode, driverVersion: packageVersion_1.pkgVersion };
@@ -18,6 +19,11 @@ function createR11sNetworkError(errorMessage, statusCode, retryAfterMs) {
18
19
  // If a service is temporarily down or a browser resource limit is reached, RestWrapper will throw
19
20
  // a network error with no status code (e.g. err:ERR_CONN_REFUSED or err:ERR_FAILED) and
20
21
  // the error message will start with NetworkError as defined in restWrapper.ts
22
+ // If there exists a self-signed SSL certificates error, throw a NonRetryableError
23
+ // TODO: instead of relying on string matching, filter error based on the error code like we do for websocket connections
24
+ if (errorMessage.includes("failed, reason: self signed certificate")) {
25
+ return new driver_utils_1.NonRetryableError(errorMessage, R11sErrorType.sslCertError, props);
26
+ }
21
27
  return new driver_utils_1.GenericNetworkError(errorMessage, errorMessage.startsWith("NetworkError"), props);
22
28
  case 401:
23
29
  // The first 401 is manually retried in RouterliciousRestWrapper with a refreshed token,