@fluidframework/odsp-driver 2.117.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (258) hide show
  1. package/CHANGELOG.md +92 -2
  2. package/README.md +53 -50
  3. package/api-extractor/api-extractor-lint-pointInTime.cjs.json +5 -0
  4. package/api-extractor/api-extractor-lint-pointInTime.esm.json +5 -0
  5. package/{api-extractor.json → api-extractor/api-extractor-model.json} +1 -1
  6. package/api-extractor/api-extractor-report.pointInTime.json +9 -0
  7. package/api-report/odsp-driver.legacy.alpha.api.md +28 -3
  8. package/api-report/odsp-driver.legacy.beta.api.md +28 -3
  9. package/api-report/odsp-driver.point-in-time.legacy.beta.api.md +117 -0
  10. package/dist/ReadBufferUtils.js +2 -1
  11. package/dist/ReadBufferUtils.js.map +1 -1
  12. package/dist/WriteBufferUtils.js +4 -6
  13. package/dist/WriteBufferUtils.js.map +1 -1
  14. package/dist/checkUrl.js +1 -2
  15. package/dist/checkUrl.js.map +1 -1
  16. package/dist/compactSnapshotParser.d.ts.map +1 -1
  17. package/dist/compactSnapshotParser.js +5 -4
  18. package/dist/compactSnapshotParser.js.map +1 -1
  19. package/dist/compactSnapshotWriter.js +1 -2
  20. package/dist/compactSnapshotWriter.js.map +1 -1
  21. package/dist/createFile/createFile.js +4 -5
  22. package/dist/createFile/createFile.js.map +1 -1
  23. package/dist/createFile/createNewContainerOnExistingFile.js +1 -2
  24. package/dist/createFile/createNewContainerOnExistingFile.js.map +1 -1
  25. package/dist/createFile/createNewUtils.d.ts.map +1 -1
  26. package/dist/createFile/createNewUtils.js +4 -5
  27. package/dist/createFile/createNewUtils.js.map +1 -1
  28. package/dist/createFile/index.js +1 -2
  29. package/dist/createFile/index.js.map +1 -1
  30. package/dist/createOdspCreateContainerRequest.js +1 -2
  31. package/dist/createOdspCreateContainerRequest.js.map +1 -1
  32. package/dist/createOdspUrl.js +1 -2
  33. package/dist/createOdspUrl.js.map +1 -1
  34. package/dist/epochTracker.d.ts.map +1 -1
  35. package/dist/epochTracker.js +17 -6
  36. package/dist/epochTracker.js.map +1 -1
  37. package/dist/fetchSnapshot.d.ts.map +1 -1
  38. package/dist/fetchSnapshot.js +5 -5
  39. package/dist/fetchSnapshot.js.map +1 -1
  40. package/dist/getFileLink.d.ts.map +1 -1
  41. package/dist/getQueryString.js +1 -2
  42. package/dist/getQueryString.js.map +1 -1
  43. package/dist/getUrlAndHeadersWithAuth.js +1 -2
  44. package/dist/getUrlAndHeadersWithAuth.js.map +1 -1
  45. package/dist/index.d.ts +3 -4
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +3 -5
  48. package/dist/index.js.map +1 -1
  49. package/dist/legacy.d.ts +4 -1
  50. package/dist/legacyAlpha.d.ts +4 -1
  51. package/dist/localOdspDriver/localOdspDeltaStorageService.js +2 -0
  52. package/dist/localOdspDriver/localOdspDeltaStorageService.js.map +1 -1
  53. package/dist/localOdspDriver/localOdspDocumentService.js +5 -1
  54. package/dist/localOdspDriver/localOdspDocumentService.js.map +1 -1
  55. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js +2 -1
  56. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -1
  57. package/dist/localOdspDriver/localOdspDocumentStorageManager.js +4 -1
  58. package/dist/localOdspDriver/localOdspDocumentStorageManager.js.map +1 -1
  59. package/dist/mockify.js +2 -2
  60. package/dist/mockify.js.map +1 -1
  61. package/dist/odspCache.js +7 -8
  62. package/dist/odspCache.js.map +1 -1
  63. package/dist/odspDelayLoadedDeltaStream.d.ts.map +1 -1
  64. package/dist/odspDelayLoadedDeltaStream.js +42 -26
  65. package/dist/odspDelayLoadedDeltaStream.js.map +1 -1
  66. package/dist/odspDeltaStorageService.js +14 -1
  67. package/dist/odspDeltaStorageService.js.map +1 -1
  68. package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
  69. package/dist/odspDocumentDeltaConnection.js +58 -41
  70. package/dist/odspDocumentDeltaConnection.js.map +1 -1
  71. package/dist/odspDocumentService.js +16 -1
  72. package/dist/odspDocumentService.js.map +1 -1
  73. package/dist/odspDocumentServiceFactory.d.ts +30 -1
  74. package/dist/odspDocumentServiceFactory.d.ts.map +1 -1
  75. package/dist/odspDocumentServiceFactory.js +30 -2
  76. package/dist/odspDocumentServiceFactory.js.map +1 -1
  77. package/dist/odspDocumentServiceFactoryCore.d.ts +83 -3
  78. package/dist/odspDocumentServiceFactoryCore.d.ts.map +1 -1
  79. package/dist/odspDocumentServiceFactoryCore.js +38 -12
  80. package/dist/odspDocumentServiceFactoryCore.js.map +1 -1
  81. package/dist/odspDocumentStorageManager.d.ts.map +1 -1
  82. package/dist/odspDocumentStorageManager.js +31 -13
  83. package/dist/odspDocumentStorageManager.js.map +1 -1
  84. package/dist/odspDocumentStorageServiceBase.js +23 -20
  85. package/dist/odspDocumentStorageServiceBase.js.map +1 -1
  86. package/dist/odspDriverUrlResolver.js +2 -2
  87. package/dist/odspDriverUrlResolver.js.map +1 -1
  88. package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
  89. package/dist/odspDriverUrlResolverForShareLink.js +6 -1
  90. package/dist/odspDriverUrlResolverForShareLink.js.map +1 -1
  91. package/dist/odspError.js +1 -2
  92. package/dist/odspError.js.map +1 -1
  93. package/dist/odspFluidFileLink.js +4 -4
  94. package/dist/odspFluidFileLink.js.map +1 -1
  95. package/dist/odspLayerCompatState.d.ts +8 -1
  96. package/dist/odspLayerCompatState.d.ts.map +1 -1
  97. package/dist/odspLayerCompatState.js +20 -1
  98. package/dist/odspLayerCompatState.js.map +1 -1
  99. package/dist/odspLocationRedirection.js +1 -2
  100. package/dist/odspLocationRedirection.js.map +1 -1
  101. package/dist/odspPublicUtils.js +1 -2
  102. package/dist/odspPublicUtils.js.map +1 -1
  103. package/dist/odspSnapshotParser.js +1 -2
  104. package/dist/odspSnapshotParser.js.map +1 -1
  105. package/dist/odspSummaryUploadManager.js +7 -0
  106. package/dist/odspSummaryUploadManager.js.map +1 -1
  107. package/dist/odspUrlHelper.js +6 -7
  108. package/dist/odspUrlHelper.js.map +1 -1
  109. package/dist/odspUtils.d.ts.map +1 -1
  110. package/dist/odspUtils.js +21 -21
  111. package/dist/odspUtils.js.map +1 -1
  112. package/dist/odspVersionManager/odspFileVersionFetcher.js +1 -2
  113. package/dist/odspVersionManager/odspFileVersionFetcher.js.map +1 -1
  114. package/dist/odspVersionManager/odspVersionManager.js +9 -8
  115. package/dist/odspVersionManager/odspVersionManager.js.map +1 -1
  116. package/dist/opsCaching.js +7 -1
  117. package/dist/opsCaching.js.map +1 -1
  118. package/dist/packageVersion.d.ts +1 -1
  119. package/dist/packageVersion.d.ts.map +1 -1
  120. package/dist/packageVersion.js +1 -1
  121. package/dist/packageVersion.js.map +1 -1
  122. package/dist/pointInTime.d.ts +15 -0
  123. package/dist/pointInTime.d.ts.map +1 -0
  124. package/dist/pointInTime.js +16 -0
  125. package/dist/pointInTime.js.map +1 -0
  126. package/dist/pointInTimeDriver/createPointInTimeDocumentService.d.ts +34 -0
  127. package/dist/pointInTimeDriver/createPointInTimeDocumentService.d.ts.map +1 -0
  128. package/dist/pointInTimeDriver/createPointInTimeDocumentService.js +101 -0
  129. package/dist/pointInTimeDriver/createPointInTimeDocumentService.js.map +1 -0
  130. package/dist/pointInTimeDriver/odspPointInTimeDocumentService.js +10 -6
  131. package/dist/pointInTimeDriver/odspPointInTimeDocumentService.js.map +1 -1
  132. package/dist/prefetchLatestSnapshot.js +1 -2
  133. package/dist/prefetchLatestSnapshot.js.map +1 -1
  134. package/dist/retryErrorsStorageAdapter.js +3 -1
  135. package/dist/retryErrorsStorageAdapter.js.map +1 -1
  136. package/dist/retryUtils.js +1 -2
  137. package/dist/retryUtils.js.map +1 -1
  138. package/dist/vroom.d.ts.map +1 -1
  139. package/dist/zipItDataRepresentationUtils.d.ts.map +1 -1
  140. package/dist/zipItDataRepresentationUtils.js +20 -15
  141. package/dist/zipItDataRepresentationUtils.js.map +1 -1
  142. package/lib/ReadBufferUtils.js +2 -1
  143. package/lib/ReadBufferUtils.js.map +1 -1
  144. package/lib/WriteBufferUtils.js +2 -4
  145. package/lib/WriteBufferUtils.js.map +1 -1
  146. package/lib/compactSnapshotParser.d.ts.map +1 -1
  147. package/lib/compactSnapshotParser.js +3 -2
  148. package/lib/compactSnapshotParser.js.map +1 -1
  149. package/lib/createFile/createNewUtils.d.ts.map +1 -1
  150. package/lib/createFile/createNewUtils.js +2 -2
  151. package/lib/createFile/createNewUtils.js.map +1 -1
  152. package/lib/epochTracker.d.ts.map +1 -1
  153. package/lib/epochTracker.js +15 -4
  154. package/lib/epochTracker.js.map +1 -1
  155. package/lib/fetchSnapshot.d.ts.map +1 -1
  156. package/lib/getFileLink.d.ts.map +1 -1
  157. package/lib/index.d.ts +3 -4
  158. package/lib/index.d.ts.map +1 -1
  159. package/lib/index.js +3 -6
  160. package/lib/index.js.map +1 -1
  161. package/lib/legacy.d.ts +5 -2
  162. package/lib/legacyAlpha.d.ts +5 -2
  163. package/lib/localOdspDriver/localOdspDeltaStorageService.js +2 -0
  164. package/lib/localOdspDriver/localOdspDeltaStorageService.js.map +1 -1
  165. package/lib/localOdspDriver/localOdspDocumentService.js +5 -1
  166. package/lib/localOdspDriver/localOdspDocumentService.js.map +1 -1
  167. package/lib/localOdspDriver/localOdspDocumentServiceFactory.js +2 -1
  168. package/lib/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -1
  169. package/lib/localOdspDriver/localOdspDocumentStorageManager.js +4 -1
  170. package/lib/localOdspDriver/localOdspDocumentStorageManager.js.map +1 -1
  171. package/lib/odspCache.js +7 -8
  172. package/lib/odspCache.js.map +1 -1
  173. package/lib/odspDelayLoadedDeltaStream.d.ts.map +1 -1
  174. package/lib/odspDelayLoadedDeltaStream.js +42 -26
  175. package/lib/odspDelayLoadedDeltaStream.js.map +1 -1
  176. package/lib/odspDeltaStorageService.js +14 -1
  177. package/lib/odspDeltaStorageService.js.map +1 -1
  178. package/lib/odspDocumentDeltaConnection.d.ts.map +1 -1
  179. package/lib/odspDocumentDeltaConnection.js +58 -41
  180. package/lib/odspDocumentDeltaConnection.js.map +1 -1
  181. package/lib/odspDocumentService.js +16 -1
  182. package/lib/odspDocumentService.js.map +1 -1
  183. package/lib/odspDocumentServiceFactory.d.ts +30 -1
  184. package/lib/odspDocumentServiceFactory.d.ts.map +1 -1
  185. package/lib/odspDocumentServiceFactory.js +28 -1
  186. package/lib/odspDocumentServiceFactory.js.map +1 -1
  187. package/lib/odspDocumentServiceFactoryCore.d.ts +83 -3
  188. package/lib/odspDocumentServiceFactoryCore.d.ts.map +1 -1
  189. package/lib/odspDocumentServiceFactoryCore.js +39 -13
  190. package/lib/odspDocumentServiceFactoryCore.js.map +1 -1
  191. package/lib/odspDocumentStorageManager.d.ts.map +1 -1
  192. package/lib/odspDocumentStorageManager.js +32 -14
  193. package/lib/odspDocumentStorageManager.js.map +1 -1
  194. package/lib/odspDocumentStorageServiceBase.js +23 -20
  195. package/lib/odspDocumentStorageServiceBase.js.map +1 -1
  196. package/lib/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
  197. package/lib/odspDriverUrlResolverForShareLink.js +6 -1
  198. package/lib/odspDriverUrlResolverForShareLink.js.map +1 -1
  199. package/lib/odspLayerCompatState.d.ts +8 -1
  200. package/lib/odspLayerCompatState.d.ts.map +1 -1
  201. package/lib/odspLayerCompatState.js +20 -1
  202. package/lib/odspLayerCompatState.js.map +1 -1
  203. package/lib/odspSummaryUploadManager.js +7 -0
  204. package/lib/odspSummaryUploadManager.js.map +1 -1
  205. package/lib/odspUtils.d.ts.map +1 -1
  206. package/lib/odspVersionManager/odspVersionManager.js +7 -6
  207. package/lib/odspVersionManager/odspVersionManager.js.map +1 -1
  208. package/lib/opsCaching.js +7 -1
  209. package/lib/opsCaching.js.map +1 -1
  210. package/lib/packageVersion.d.ts +1 -1
  211. package/lib/packageVersion.d.ts.map +1 -1
  212. package/lib/packageVersion.js +1 -1
  213. package/lib/packageVersion.js.map +1 -1
  214. package/lib/pointInTime.d.ts +15 -0
  215. package/lib/pointInTime.d.ts.map +1 -0
  216. package/lib/pointInTime.js +12 -0
  217. package/lib/pointInTime.js.map +1 -0
  218. package/lib/pointInTimeDriver/createPointInTimeDocumentService.d.ts +34 -0
  219. package/lib/pointInTimeDriver/createPointInTimeDocumentService.d.ts.map +1 -0
  220. package/lib/pointInTimeDriver/createPointInTimeDocumentService.js +99 -0
  221. package/lib/pointInTimeDriver/createPointInTimeDocumentService.js.map +1 -0
  222. package/lib/pointInTimeDriver/odspPointInTimeDocumentService.js +10 -6
  223. package/lib/pointInTimeDriver/odspPointInTimeDocumentService.js.map +1 -1
  224. package/lib/public.d.ts +1 -1
  225. package/lib/retryErrorsStorageAdapter.js +3 -1
  226. package/lib/retryErrorsStorageAdapter.js.map +1 -1
  227. package/lib/vroom.d.ts.map +1 -1
  228. package/lib/zipItDataRepresentationUtils.d.ts.map +1 -1
  229. package/lib/zipItDataRepresentationUtils.js +10 -5
  230. package/lib/zipItDataRepresentationUtils.js.map +1 -1
  231. package/package.json +49 -54
  232. package/src/compactSnapshotParser.ts +6 -2
  233. package/src/createFile/createNewUtils.ts +6 -2
  234. package/src/index.ts +10 -6
  235. package/src/odspDocumentServiceFactory.ts +69 -1
  236. package/src/odspDocumentServiceFactoryCore.ts +105 -4
  237. package/src/odspDocumentStorageManager.ts +2 -2
  238. package/src/odspLayerCompatState.ts +29 -1
  239. package/src/odspVersionManager/DEV.md +9 -8
  240. package/src/packageVersion.ts +1 -1
  241. package/src/pointInTime.ts +30 -0
  242. package/src/pointInTimeDriver/createPointInTimeDocumentService.ts +193 -0
  243. package/src/zipItDataRepresentationUtils.ts +3 -3
  244. package/tsconfig.json +1 -1
  245. package/dist/pointInTimeDriver/odspPointInTimeDocumentServiceFactory.d.ts +0 -41
  246. package/dist/pointInTimeDriver/odspPointInTimeDocumentServiceFactory.d.ts.map +0 -1
  247. package/dist/pointInTimeDriver/odspPointInTimeDocumentServiceFactory.js +0 -132
  248. package/dist/pointInTimeDriver/odspPointInTimeDocumentServiceFactory.js.map +0 -1
  249. package/internal.d.ts +0 -11
  250. package/legacy/alpha.d.ts +0 -11
  251. package/legacy.d.ts +0 -11
  252. package/lib/pointInTimeDriver/odspPointInTimeDocumentServiceFactory.d.ts +0 -41
  253. package/lib/pointInTimeDriver/odspPointInTimeDocumentServiceFactory.d.ts.map +0 -1
  254. package/lib/pointInTimeDriver/odspPointInTimeDocumentServiceFactory.js +0 -128
  255. package/lib/pointInTimeDriver/odspPointInTimeDocumentServiceFactory.js.map +0 -1
  256. package/src/pointInTimeDriver/odspPointInTimeDocumentServiceFactory.ts +0 -260
  257. /package/api-extractor/{api-extractor.current.json → api-extractor-report.current.json} +0 -0
  258. /package/api-extractor/{api-extractor.legacy.json → api-extractor-report.legacy.json} +0 -0
@@ -4,10 +4,13 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.createLocalOdspDocumentServiceFactory = exports.OdspDocumentServiceFactory = void 0;
7
+ exports.OdspDocumentServiceFactory = void 0;
8
+ exports.createOdspDocumentServiceFactory = createOdspDocumentServiceFactory;
9
+ exports.createLocalOdspDocumentServiceFactory = createLocalOdspDocumentServiceFactory;
8
10
  // eslint-disable-next-line import-x/no-internal-modules
9
11
  const localOdspDocumentServiceFactory_js_1 = require("./localOdspDriver/localOdspDocumentServiceFactory.js");
10
12
  const odspDocumentServiceFactoryCore_js_1 = require("./odspDocumentServiceFactoryCore.js");
13
+ const odspCache_js_1 = require("./odspCache.js");
11
14
  /**
12
15
  * Factory for creating the sharepoint document service. Use this if you want to
13
16
  * use the sharepoint implementation.
@@ -20,6 +23,32 @@ class OdspDocumentServiceFactory extends odspDocumentServiceFactoryCore_js_1.Ods
20
23
  }
21
24
  }
22
25
  exports.OdspDocumentServiceFactory = OdspDocumentServiceFactory;
26
+ /**
27
+ * Creates an ODSP document service factory with optional consumer-provided features.
28
+ *
29
+ * @param options - Tokens, cache, host policy, and optional feature implementations.
30
+ * @returns The configured ODSP document service factory.
31
+ *
32
+ * @legacy @beta
33
+ */
34
+ function createOdspDocumentServiceFactory(options) {
35
+ const persistedCache = options.persistedCache ?? new odspCache_js_1.LocalPersistentCache();
36
+ const pointInTimeImplementation = options.pointInTimeDocumentServiceImplementation;
37
+ class ConfiguredOdspDocumentServiceFactory extends OdspDocumentServiceFactory {
38
+ createPointInTimeDocumentService = pointInTimeImplementation === undefined
39
+ ? undefined
40
+ : async (resolvedUrl, targetSequenceNumber, logger, clientIsSummarizer) => pointInTimeImplementation({
41
+ resolvedUrl,
42
+ targetSequenceNumber,
43
+ logger,
44
+ clientIsSummarizer,
45
+ persistedCache,
46
+ getStorageToken: options.getStorageToken,
47
+ createDocumentService: async (url, odspLogger, cacheAndTracker, isSummarizer) => this.createDocumentServiceCore(url, odspLogger, cacheAndTracker, isSummarizer),
48
+ });
49
+ }
50
+ return new ConfiguredOdspDocumentServiceFactory(options.getStorageToken, options.getWebsocketToken, persistedCache, options.hostPolicy);
51
+ }
23
52
  /**
24
53
  * Creates a factory instance for creating a sharepoint document service from a provided snapshot.
25
54
  *
@@ -32,5 +61,4 @@ exports.OdspDocumentServiceFactory = OdspDocumentServiceFactory;
32
61
  function createLocalOdspDocumentServiceFactory(localSnapshot) {
33
62
  return new localOdspDocumentServiceFactory_js_1.LocalOdspDocumentServiceFactory(localSnapshot);
34
63
  }
35
- exports.createLocalOdspDocumentServiceFactory = createLocalOdspDocumentServiceFactory;
36
64
  //# sourceMappingURL=odspDocumentServiceFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"odspDocumentServiceFactory.js","sourceRoot":"","sources":["../src/odspDocumentServiceFactory.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAYH,wDAAwD;AACxD,6GAAuG;AACvG,2FAAqF;AAErF;;;;;GAKG;AACH,MAAa,0BAA2B,SAAQ,kEAA8B;IAC7E,YACC,eAA4D,EAC5D,iBAA0E,EAC1E,cAAgC,EAChC,UAA8B;QAE9B,KAAK,CAAC,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC;CACD;AATD,gEASC;AAED;;;;;;;;GAQG;AACH,SAAgB,qCAAqC,CACpD,aAAkC;IAElC,OAAO,IAAI,oEAA+B,CAAC,aAAa,CAAC,CAAC;AAC3D,CAAC;AAJD,sFAIC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type {\n\tIDocumentServiceFactory,\n\tIPersistedCache,\n} from \"@fluidframework/driver-definitions/internal\";\nimport type {\n\tHostStoragePolicy,\n\tOdspResourceTokenFetchOptions,\n\tTokenFetcher,\n} from \"@fluidframework/odsp-driver-definitions/internal\";\n\n// eslint-disable-next-line import-x/no-internal-modules\nimport { LocalOdspDocumentServiceFactory } from \"./localOdspDriver/localOdspDocumentServiceFactory.js\";\nimport { OdspDocumentServiceFactoryCore } from \"./odspDocumentServiceFactoryCore.js\";\n\n/**\n * Factory for creating the sharepoint document service. Use this if you want to\n * use the sharepoint implementation.\n * @legacy\n * @beta\n */\nexport class OdspDocumentServiceFactory extends OdspDocumentServiceFactoryCore {\n\tconstructor(\n\t\tgetStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>,\n\t\tgetWebsocketToken: TokenFetcher<OdspResourceTokenFetchOptions> | undefined,\n\t\tpersistedCache?: IPersistedCache,\n\t\thostPolicy?: HostStoragePolicy,\n\t) {\n\t\tsuper(getStorageToken, getWebsocketToken, persistedCache, hostPolicy);\n\t}\n}\n\n/**\n * Creates a factory instance for creating a sharepoint document service from a provided snapshot.\n *\n * @remarks Use if you don't want to connect to any kind of external/internal storages and want to provide\n * content directly.\n *\n * @legacy\n * @beta\n */\nexport function createLocalOdspDocumentServiceFactory(\n\tlocalSnapshot: Uint8Array | string,\n): IDocumentServiceFactory {\n\treturn new LocalOdspDocumentServiceFactory(localSnapshot);\n}\n"]}
1
+ {"version":3,"file":"odspDocumentServiceFactory.js","sourceRoot":"","sources":["../src/odspDocumentServiceFactory.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAqEH,4EA+BC;AAUD,sFAIC;AAtGD,wDAAwD;AACxD,6GAAuG;AACvG,2FAI6C;AAC7C,iDAAsD;AAyBtD;;;;;GAKG;AACH,MAAa,0BAA2B,SAAQ,kEAA8B;IAC7E,YACC,eAA4D,EAC5D,iBAA0E,EAC1E,cAAgC,EAChC,UAA8B;QAE9B,KAAK,CAAC,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC;CACD;AATD,gEASC;AAED;;;;;;;GAOG;AACH,SAAgB,gCAAgC,CAC/C,OAA2C;IAE3C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,mCAAoB,EAAE,CAAC;IAC5E,MAAM,yBAAyB,GAAG,OAAO,CAAC,wCAAwC,CAAC;IAEnF,MAAM,oCAAqC,SAAQ,0BAA0B;QACnD,gCAAgC,GAGxD,yBAAyB,KAAK,SAAS;YACtC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CACxE,yBAAyB,CAAC;gBACzB,WAAW;gBACX,oBAAoB;gBACpB,MAAM;gBACN,kBAAkB;gBAClB,cAAc;gBACd,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,qBAAqB,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,CAC/E,IAAI,CAAC,yBAAyB,CAAC,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,YAAY,CAAC;aAC/E,CAAC,CAAC;KACP;IAED,OAAO,IAAI,oCAAoC,CAC9C,OAAO,CAAC,eAAe,EACvB,OAAO,CAAC,iBAAiB,EACzB,cAAc,EACd,OAAO,CAAC,UAAU,CAClB,CAAC;AACH,CAAC;AACD;;;;;;;;GAQG;AACH,SAAgB,qCAAqC,CACpD,aAAkC;IAElC,OAAO,IAAI,oEAA+B,CAAC,aAAa,CAAC,CAAC;AAC3D,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type {\n\tIDocumentServiceFactory,\n\tIPersistedCache,\n} from \"@fluidframework/driver-definitions/internal\";\nimport type {\n\tHostStoragePolicy,\n\tOdspResourceTokenFetchOptions,\n\tTokenFetcher,\n} from \"@fluidframework/odsp-driver-definitions/internal\";\n\n// eslint-disable-next-line import-x/no-internal-modules\nimport { LocalOdspDocumentServiceFactory } from \"./localOdspDriver/localOdspDocumentServiceFactory.js\";\nimport {\n\ttype IPointInTimeDocumentServiceFactory,\n\ttype OdspPointInTimeDocumentServiceImplementation,\n\tOdspDocumentServiceFactoryCore,\n} from \"./odspDocumentServiceFactoryCore.js\";\nimport { LocalPersistentCache } from \"./odspCache.js\";\n\n/**\n * Options for creating an ODSP document service factory.\n *\n * @legacy @beta\n */\nexport interface IOdspDocumentServiceFactoryOptions {\n\t/** Fetches storage access tokens. */\n\treadonly getStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>;\n\t/** Fetches websocket access tokens, or `undefined` when unavailable. */\n\treadonly getWebsocketToken: TokenFetcher<OdspResourceTokenFetchOptions> | undefined;\n\t/** Persisted ODSP cache. When omitted, a local in-memory cache is used. */\n\treadonly persistedCache?: IPersistedCache | undefined;\n\t/** Host storage policy. When omitted, the default driver policies are used. */\n\treadonly hostPolicy?: HostStoragePolicy | undefined;\n\t/**\n\t * Enables point-in-time loading. Consumers that omit this implementation do not include the\n\t * feature code in their dependency graph.\n\t */\n\treadonly pointInTimeDocumentServiceImplementation?:\n\t\t| OdspPointInTimeDocumentServiceImplementation\n\t\t| undefined;\n}\n\n/**\n * Factory for creating the sharepoint document service. Use this if you want to\n * use the sharepoint implementation.\n * @legacy\n * @beta\n */\nexport class OdspDocumentServiceFactory extends OdspDocumentServiceFactoryCore {\n\tconstructor(\n\t\tgetStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>,\n\t\tgetWebsocketToken: TokenFetcher<OdspResourceTokenFetchOptions> | undefined,\n\t\tpersistedCache?: IPersistedCache,\n\t\thostPolicy?: HostStoragePolicy,\n\t) {\n\t\tsuper(getStorageToken, getWebsocketToken, persistedCache, hostPolicy);\n\t}\n}\n\n/**\n * Creates an ODSP document service factory with optional consumer-provided features.\n *\n * @param options - Tokens, cache, host policy, and optional feature implementations.\n * @returns The configured ODSP document service factory.\n *\n * @legacy @beta\n */\nexport function createOdspDocumentServiceFactory(\n\toptions: IOdspDocumentServiceFactoryOptions,\n): OdspDocumentServiceFactory {\n\tconst persistedCache = options.persistedCache ?? new LocalPersistentCache();\n\tconst pointInTimeImplementation = options.pointInTimeDocumentServiceImplementation;\n\n\tclass ConfiguredOdspDocumentServiceFactory extends OdspDocumentServiceFactory {\n\t\tpublic override readonly createPointInTimeDocumentService:\n\t\t\t| IPointInTimeDocumentServiceFactory[\"createPointInTimeDocumentService\"]\n\t\t\t| undefined =\n\t\t\tpointInTimeImplementation === undefined\n\t\t\t\t? undefined\n\t\t\t\t: async (resolvedUrl, targetSequenceNumber, logger, clientIsSummarizer) =>\n\t\t\t\t\t\tpointInTimeImplementation({\n\t\t\t\t\t\t\tresolvedUrl,\n\t\t\t\t\t\t\ttargetSequenceNumber,\n\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\tclientIsSummarizer,\n\t\t\t\t\t\t\tpersistedCache,\n\t\t\t\t\t\t\tgetStorageToken: options.getStorageToken,\n\t\t\t\t\t\t\tcreateDocumentService: async (url, odspLogger, cacheAndTracker, isSummarizer) =>\n\t\t\t\t\t\t\t\tthis.createDocumentServiceCore(url, odspLogger, cacheAndTracker, isSummarizer),\n\t\t\t\t\t\t});\n\t}\n\n\treturn new ConfiguredOdspDocumentServiceFactory(\n\t\toptions.getStorageToken,\n\t\toptions.getWebsocketToken,\n\t\tpersistedCache,\n\t\toptions.hostPolicy,\n\t);\n}\n/**\n * Creates a factory instance for creating a sharepoint document service from a provided snapshot.\n *\n * @remarks Use if you don't want to connect to any kind of external/internal storages and want to provide\n * content directly.\n *\n * @legacy\n * @beta\n */\nexport function createLocalOdspDocumentServiceFactory(\n\tlocalSnapshot: Uint8Array | string,\n): IDocumentServiceFactory {\n\treturn new LocalOdspDocumentServiceFactory(localSnapshot);\n}\n"]}
@@ -9,12 +9,68 @@ import type { IDocumentService, IDocumentServiceFactory, IPersistedCache, IResol
9
9
  import { type HostStoragePolicy, type IRelaySessionAwareDriverFactory, type ISocketStorageDiscovery, type OdspResourceTokenFetchOptions, type TokenFetcher } from "@fluidframework/odsp-driver-definitions/internal";
10
10
  import { type ICacheAndTracker } from "./epochTracker.js";
11
11
  import { type IPrefetchSnapshotContents } from "./odspCache.js";
12
+ /**
13
+ * An ODSP document service factory that supports point-in-time (sequence-number-based) loading.
14
+ *
15
+ * @remarks
16
+ * The loader detects this capability structurally, so hosts can pass this factory directly to
17
+ * {@link @fluidframework/container-loader#loadContainerToSequenceNumber}.
18
+ *
19
+ * @legacy @beta
20
+ */
21
+ export interface IPointInTimeDocumentServiceFactory extends IDocumentServiceFactory {
22
+ /**
23
+ * Creates a document service that materializes the document at the requested sequence number.
24
+ *
25
+ * @param resolvedUrl - The resolved ODSP {@link @fluidframework/driver-definitions#IResolvedUrl}.
26
+ * @param targetSequenceNumber - The sequence number at which to materialize the document. See
27
+ * {@link @fluidframework/container-loader#ILoadContainerToSequenceNumberProps.loadToSequenceNumber}.
28
+ * @param logger - Optional {@link @fluidframework/core-interfaces#ITelemetryBaseLogger}.
29
+ * @param clientIsSummarizer - Whether to apply summarizer policies and telemetry to the
30
+ * underlying document services. Defaults to `false`.
31
+ * @returns A read-only {@link @fluidframework/driver-definitions#IDocumentService} materialized
32
+ * at the requested sequence number.
33
+ */
34
+ createPointInTimeDocumentService(resolvedUrl: IResolvedUrl, targetSequenceNumber: number, logger?: ITelemetryBaseLogger, clientIsSummarizer?: boolean): Promise<IDocumentService>;
35
+ }
36
+ /**
37
+ * Inputs supplied by the ODSP document service factory to an injected point-in-time implementation.
38
+ *
39
+ * @legacy @beta
40
+ */
41
+ export interface IOdspPointInTimeDocumentServiceImplementationProps {
42
+ /** The resolved ODSP URL for the document to materialize. */
43
+ readonly resolvedUrl: IResolvedUrl;
44
+ /** The sequence number at which to materialize the document. */
45
+ readonly targetSequenceNumber: number;
46
+ /** Optional telemetry logger for the point-in-time load. */
47
+ readonly logger?: ITelemetryBaseLogger;
48
+ /** Whether to apply summarizer policies and telemetry. Defaults to `false`. */
49
+ readonly clientIsSummarizer?: boolean;
50
+ /** The persisted ODSP cache supplied to the document service factory. */
51
+ readonly persistedCache: IPersistedCache;
52
+ /** Fetches storage access tokens for ODSP requests. */
53
+ readonly getStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>;
54
+ /**
55
+ * Creates an ODSP document service for a resolved URL.
56
+ *
57
+ * @param resolvedUrl - The resolved URL for the document or file version to load.
58
+ * @param logger - The telemetry logger for the document service.
59
+ * @param cacheAndTracker - The cache and epoch tracker shared by the point-in-time load.
60
+ * @param clientIsSummarizer - Whether to apply summarizer policies and telemetry.
61
+ * @returns The document service for the resolved URL.
62
+ */
63
+ readonly createDocumentService: (resolvedUrl: IResolvedUrl, logger: ITelemetryBaseLogger, cacheAndTracker: ICacheAndTracker, clientIsSummarizer?: boolean) => Promise<IDocumentService>;
64
+ }
65
+ /**
66
+ * Consumer-provided implementation of ODSP point-in-time loading.
67
+ *
68
+ * @legacy @beta
69
+ */
70
+ export type OdspPointInTimeDocumentServiceImplementation = (props: IOdspPointInTimeDocumentServiceImplementationProps) => Promise<IDocumentService>;
12
71
  /**
13
72
  * Factory for creating the sharepoint document service. Use this if you want to
14
73
  * use the sharepoint implementation.
15
- *
16
- * This constructor should be used by environments that support dynamic imports and that wish
17
- * to leverage code splitting as a means to keep bundles as small as possible.
18
74
  * @legacy
19
75
  * @beta
20
76
  */
@@ -53,7 +109,31 @@ export declare class OdspDocumentServiceFactoryCore implements IDocumentServiceF
53
109
  * is currently marked as legacy alpha. So, using unknown here.
54
110
  */
55
111
  readonly ILayerCompatDetails?: unknown;
112
+ /**
113
+ * The requirements that the Loader layer must meet to be compatible with this ODSP Driver. This is exposed to
114
+ * the Loader layer so that it can validate Loader / Driver compatibility on this Driver's behalf (the Driver has
115
+ * no reference to the Loader to validate it directly).
116
+ * @remarks This is for internal use only.
117
+ * The type of this should be ILayerCompatSupportRequirements. However, ILayerCompatSupportRequirements is
118
+ * internal and this class is currently marked as legacy alpha. So, using unknown here.
119
+ */
120
+ readonly ILayerCompatSupportRequirements?: unknown;
56
121
  createDocumentService(resolvedUrl: IResolvedUrl, logger?: ITelemetryBaseLogger, clientIsSummarizer?: boolean): Promise<IDocumentService>;
122
+ /**
123
+ * Creates a document service that reads its snapshot from the closest file version at or before
124
+ * the target and its deltas from the live document, materializing a requested sequence number
125
+ * through replay.
126
+ *
127
+ * @param resolvedUrl - The resolved ODSP {@link @fluidframework/driver-definitions#IResolvedUrl}.
128
+ * @param targetSequenceNumber - The sequence number at which to materialize the document. See
129
+ * {@link @fluidframework/container-loader#ILoadContainerToSequenceNumberProps.loadToSequenceNumber}.
130
+ * @param logger - Optional {@link @fluidframework/core-interfaces#ITelemetryBaseLogger}.
131
+ * @param clientIsSummarizer - Whether to apply summarizer policies and telemetry to the
132
+ * underlying document services. Defaults to `false`.
133
+ * @returns A read-only {@link @fluidframework/driver-definitions#IDocumentService} materialized
134
+ * at the requested sequence number.
135
+ */
136
+ readonly createPointInTimeDocumentService?: IPointInTimeDocumentServiceFactory["createPointInTimeDocumentService"];
57
137
  protected createDocumentServiceCore(resolvedUrl: IResolvedUrl, odspLogger: ITelemetryBaseLogger, cacheAndTrackerArg?: ICacheAndTracker, clientIsSummarizer?: boolean): Promise<IDocumentService>;
58
138
  }
59
139
  //# sourceMappingURL=odspDocumentServiceFactoryCore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"odspDocumentServiceFactoryCore.d.ts","sourceRoot":"","sources":["../src/odspDocumentServiceFactoryCore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC5E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,KAAK,EACX,gBAAgB,EAChB,uBAAuB,EAEvB,eAAe,EACf,YAAY,EACZ,MAAM,6CAA6C,CAAC;AAKrD,OAAO,EACN,KAAK,iBAAiB,EAEtB,KAAK,+BAA+B,EAEpC,KAAK,uBAAuB,EAC5B,KAAK,6BAA6B,EAIlC,KAAK,YAAY,EACjB,MAAM,kDAAkD,CAAC;AAK1D,OAAO,EAAE,KAAK,gBAAgB,EAA6B,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAEN,KAAK,yBAAyB,EAG9B,MAAM,gBAAgB,CAAC;AAcxB;;;;;;;;GAQG;AACH,qBAAa,8BACZ,YAAW,uBAAuB,EAAE,+BAA+B;IAqKlE,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAGlC,SAAS,CAAC,cAAc,EAAE,eAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAxK5B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiD;IACpF,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAS;IAEnD,IAAW,2BAA2B,IAAI,YAAY,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAExF;IAGD,IAAW,+BAA+B,IAAI,IAAI,CAEjD;IAED;;;;;OAKG;IACU,0BAA0B,CACtC,WAAW,EAAE,YAAY,GACvB,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC;IAQlC,eAAe,CAC3B,gBAAgB,EAAE,YAAY,GAAG,SAAS,EAC1C,oBAAoB,EAAE,YAAY,EAClC,MAAM,CAAC,EAAE,oBAAoB,EAC7B,kBAAkB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,gBAAgB,CAAC;IAwH5B;;;;;;;;OAQG;gBAEe,eAAe,EAAE,YAAY,CAAC,6BAA6B,CAAC,EAC5D,iBAAiB,EAC/B,YAAY,CAAC,6BAA6B,CAAC,GAC3C,SAAS,EACF,cAAc,GAAE,eAA4C,EACrD,UAAU,GAAE,iBAAsB;IAcpD;;;;;;OAMG;IACH,SAAgB,mBAAmB,CAAC,EAAE,OAAO,CAAoC;IAEpE,qBAAqB,CACjC,WAAW,EAAE,YAAY,EACzB,MAAM,CAAC,EAAE,oBAAoB,EAC7B,kBAAkB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,gBAAgB,CAAC;cASZ,yBAAyB,CACxC,WAAW,EAAE,YAAY,EACzB,UAAU,EAAE,oBAAoB,EAChC,kBAAkB,CAAC,EAAE,gBAAgB,EACrC,kBAAkB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,gBAAgB,CAAC;CAsD5B"}
1
+ {"version":3,"file":"odspDocumentServiceFactoryCore.d.ts","sourceRoot":"","sources":["../src/odspDocumentServiceFactoryCore.ts"],"names":[],"mappings":"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"}
@@ -18,13 +18,16 @@ const odspUtils_js_1 = require("./odspUtils.js");
18
18
  /**
19
19
  * Factory for creating the sharepoint document service. Use this if you want to
20
20
  * use the sharepoint implementation.
21
- *
22
- * This constructor should be used by environments that support dynamic imports and that wish
23
- * to leverage code splitting as a means to keep bundles as small as possible.
24
21
  * @legacy
25
22
  * @beta
26
23
  */
27
24
  class OdspDocumentServiceFactoryCore {
25
+ getStorageToken;
26
+ getWebsocketToken;
27
+ persistedCache;
28
+ hostPolicy;
29
+ nonPersistentCache = new odspCache_js_1.NonPersistentCache();
30
+ socketReferenceKeyPrefix;
28
31
  get snapshotPrefetchResultCache() {
29
32
  return this.nonPersistentCache.snapshotPrefetchResultCache;
30
33
  }
@@ -128,15 +131,6 @@ class OdspDocumentServiceFactoryCore {
128
131
  this.getWebsocketToken = getWebsocketToken;
129
132
  this.persistedCache = persistedCache;
130
133
  this.hostPolicy = hostPolicy;
131
- this.nonPersistentCache = new odspCache_js_1.NonPersistentCache();
132
- /**
133
- * The compatibility details of the ODSP Driver layer that is exposed to the Loader layer
134
- * for validating Loader-Driver compatibility.
135
- * @remarks This is for internal use only.
136
- * The type of this should be ILayerCompatDetails. However, ILayerCompatDetails is internal and this class
137
- * is currently marked as legacy alpha. So, using unknown here.
138
- */
139
- this.ILayerCompatDetails = odspLayerCompatState_js_1.odspDriverCompatDetailsForLoader;
140
134
  if (this.hostPolicy.isolateSocketCache === true) {
141
135
  // create the key to separate the socket reuse cache
142
136
  this.socketReferenceKeyPrefix = (0, uuid_1.v4)();
@@ -148,9 +142,41 @@ class OdspDocumentServiceFactoryCore {
148
142
  ...this.hostPolicy.sessionOptions,
149
143
  };
150
144
  }
145
+ /**
146
+ * The compatibility details of the ODSP Driver layer that is exposed to the Loader layer
147
+ * for validating Loader-Driver compatibility.
148
+ * @remarks This is for internal use only.
149
+ * The type of this should be ILayerCompatDetails. However, ILayerCompatDetails is internal and this class
150
+ * is currently marked as legacy alpha. So, using unknown here.
151
+ */
152
+ ILayerCompatDetails = odspLayerCompatState_js_1.odspDriverCompatDetailsForLoader;
153
+ /**
154
+ * The requirements that the Loader layer must meet to be compatible with this ODSP Driver. This is exposed to
155
+ * the Loader layer so that it can validate Loader / Driver compatibility on this Driver's behalf (the Driver has
156
+ * no reference to the Loader to validate it directly).
157
+ * @remarks This is for internal use only.
158
+ * The type of this should be ILayerCompatSupportRequirements. However, ILayerCompatSupportRequirements is
159
+ * internal and this class is currently marked as legacy alpha. So, using unknown here.
160
+ */
161
+ ILayerCompatSupportRequirements = odspLayerCompatState_js_1.odspDriverCompatRequirementsForLoader;
151
162
  async createDocumentService(resolvedUrl, logger, clientIsSummarizer) {
152
163
  return this.createDocumentServiceCore(resolvedUrl, (0, odspUtils_js_1.createOdspLogger)(logger), undefined, clientIsSummarizer);
153
164
  }
165
+ /**
166
+ * Creates a document service that reads its snapshot from the closest file version at or before
167
+ * the target and its deltas from the live document, materializing a requested sequence number
168
+ * through replay.
169
+ *
170
+ * @param resolvedUrl - The resolved ODSP {@link @fluidframework/driver-definitions#IResolvedUrl}.
171
+ * @param targetSequenceNumber - The sequence number at which to materialize the document. See
172
+ * {@link @fluidframework/container-loader#ILoadContainerToSequenceNumberProps.loadToSequenceNumber}.
173
+ * @param logger - Optional {@link @fluidframework/core-interfaces#ITelemetryBaseLogger}.
174
+ * @param clientIsSummarizer - Whether to apply summarizer policies and telemetry to the
175
+ * underlying document services. Defaults to `false`.
176
+ * @returns A read-only {@link @fluidframework/driver-definitions#IDocumentService} materialized
177
+ * at the requested sequence number.
178
+ */
179
+ createPointInTimeDocumentService;
154
180
  async createDocumentServiceCore(resolvedUrl, odspLogger, cacheAndTrackerArg, clientIsSummarizer) {
155
181
  const extLogger = (0, internal_3.createChildLogger)({ logger: odspLogger });
156
182
  const odspResolvedUrl = (0, odspUtils_js_1.getOdspResolvedUrl)(resolvedUrl);
@@ -1 +1 @@
1
- {"version":3,"file":"odspDocumentServiceFactoryCore.js","sourceRoot":"","sources":["../src/odspDocumentServiceFactoryCore.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 type { ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport type { PromiseCache } from \"@fluidframework/core-utils/internal\";\nimport type { ISummaryTree } from \"@fluidframework/driver-definitions\";\nimport type {\n\tIDocumentService,\n\tIDocumentServiceFactory,\n\tIFileEntry,\n\tIPersistedCache,\n\tIResolvedUrl,\n} from \"@fluidframework/driver-definitions/internal\";\nimport {\n\tgetDocAttributesFromProtocolSummary,\n\tisCombinedAppAndProtocolSummary,\n} from \"@fluidframework/driver-utils/internal\";\nimport {\n\ttype HostStoragePolicy,\n\ttype IOdspUrlParts,\n\ttype IRelaySessionAwareDriverFactory,\n\ttype ISharingLinkKind,\n\ttype ISocketStorageDiscovery,\n\ttype OdspResourceTokenFetchOptions,\n\tSharingLinkRole,\n\tSharingLinkScope,\n\ttype TokenFetchOptions,\n\ttype TokenFetcher,\n} from \"@fluidframework/odsp-driver-definitions/internal\";\nimport { PerformanceEvent, createChildLogger } from \"@fluidframework/telemetry-utils/internal\";\nimport { v4 as uuid } from \"uuid\";\n\nimport { useCreateNewModule } from \"./createFile/index.js\";\nimport { type ICacheAndTracker, createOdspCacheAndTracker } from \"./epochTracker.js\";\nimport {\n\ttype INonPersistentCache,\n\ttype IPrefetchSnapshotContents,\n\tLocalPersistentCache,\n\tNonPersistentCache,\n} from \"./odspCache.js\";\nimport { OdspDocumentService } from \"./odspDocumentService.js\";\nimport { odspDriverCompatDetailsForLoader } from \"./odspLayerCompatState.js\";\nimport {\n\ttype IExistingFileInfo,\n\ttype INewFileInfo,\n\tcreateOdspLogger,\n\tgetJoinSessionCacheKey,\n\tgetOdspResolvedUrl,\n\tisNewFileInfo,\n\ttoInstrumentedOdspStorageTokenFetcher,\n\ttoInstrumentedOdspTokenFetcher,\n} from \"./odspUtils.js\";\n\n/**\n * Factory for creating the sharepoint document service. Use this if you want to\n * use the sharepoint implementation.\n *\n * This constructor should be used by environments that support dynamic imports and that wish\n * to leverage code splitting as a means to keep bundles as small as possible.\n * @legacy\n * @beta\n */\nexport class OdspDocumentServiceFactoryCore\n\timplements IDocumentServiceFactory, IRelaySessionAwareDriverFactory\n{\n\tprivate readonly nonPersistentCache: INonPersistentCache = new NonPersistentCache();\n\tprivate readonly socketReferenceKeyPrefix?: string;\n\n\tpublic get snapshotPrefetchResultCache(): PromiseCache<string, IPrefetchSnapshotContents> {\n\t\treturn this.nonPersistentCache.snapshotPrefetchResultCache;\n\t}\n\n\t// TODO: return `IRelaySessionAwareDriverFactory` instead of `this` (breaking change)\n\tpublic get IRelaySessionAwareDriverFactory(): this {\n\t\treturn this;\n\t}\n\n\t/**\n\t * This function would return info about relay service session only if this factory established (or attempted to\n\t * establish) connection very recently. Otherwise, it will return undefined.\n\t * @param resolvedUrl - resolved url for container\n\t * @returns The current join session response stored in cache. `undefined` if not present.\n\t */\n\tpublic async getRelayServiceSessionInfo(\n\t\tresolvedUrl: IResolvedUrl,\n\t): Promise<ISocketStorageDiscovery | undefined> {\n\t\tconst odspResolvedUrl = getOdspResolvedUrl(resolvedUrl);\n\t\tconst joinSessionResponse = await this.nonPersistentCache.sessionJoinCache.get(\n\t\t\tgetJoinSessionCacheKey(odspResolvedUrl),\n\t\t);\n\t\treturn joinSessionResponse?.joinSessionResponse;\n\t}\n\n\tpublic async createContainer(\n\t\tcreateNewSummary: ISummaryTree | undefined,\n\t\tcreateNewResolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\tconst odspResolvedUrl = getOdspResolvedUrl(createNewResolvedUrl);\n\t\tconst resolvedUrlData: IOdspUrlParts = {\n\t\t\tsiteUrl: odspResolvedUrl.siteUrl,\n\t\t\tdriveId: odspResolvedUrl.driveId,\n\t\t\titemId: odspResolvedUrl.itemId,\n\t\t};\n\n\t\tlet fileInfo: INewFileInfo | IExistingFileInfo;\n\t\tlet createShareLinkParam: ISharingLinkKind | undefined;\n\t\tif (odspResolvedUrl.itemId) {\n\t\t\tfileInfo = {\n\t\t\t\ttype: \"Existing\",\n\t\t\t\tdriveId: odspResolvedUrl.driveId,\n\t\t\t\tsiteUrl: odspResolvedUrl.siteUrl,\n\t\t\t\titemId: odspResolvedUrl.itemId,\n\t\t\t};\n\t\t} else if (odspResolvedUrl.fileName) {\n\t\t\tconst [, queryString] = odspResolvedUrl.url.split(\"?\");\n\t\t\tconst searchParams = new URLSearchParams(queryString);\n\t\t\tconst filePath = searchParams.get(\"path\");\n\t\t\tif (filePath === undefined || filePath === null) {\n\t\t\t\tthrow new Error(\"File path should be provided!!\");\n\t\t\t}\n\t\t\tcreateShareLinkParam = getSharingLinkParams(this.hostPolicy, searchParams);\n\t\t\tfileInfo = {\n\t\t\t\ttype: \"New\",\n\t\t\t\tdriveId: odspResolvedUrl.driveId,\n\t\t\t\tsiteUrl: odspResolvedUrl.siteUrl,\n\t\t\t\tfilePath,\n\t\t\t\tfilename: odspResolvedUrl.fileName,\n\t\t\t\tcreateLinkType: createShareLinkParam,\n\t\t\t};\n\t\t} else {\n\t\t\tthrow new Error(\"A new or existing file must be specified to create container!\");\n\t\t}\n\n\t\tif (isCombinedAppAndProtocolSummary(createNewSummary)) {\n\t\t\tconst documentAttributes = getDocAttributesFromProtocolSummary(\n\t\t\t\tcreateNewSummary.tree[\".protocol\"],\n\t\t\t);\n\t\t\tif (documentAttributes?.sequenceNumber !== 0) {\n\t\t\t\tthrow new Error(\"Seq number in detached ODSP container should be 0\");\n\t\t\t}\n\t\t}\n\n\t\tconst odspLogger = createOdspLogger(logger);\n\n\t\tconst fileEntry: IFileEntry = {\n\t\t\tresolvedUrl: odspResolvedUrl,\n\t\t\tdocId: odspResolvedUrl.hashedDocumentId,\n\t\t\tfileVersion: undefined,\n\t\t};\n\t\tconst cacheAndTracker = createOdspCacheAndTracker(\n\t\t\tthis.persistedCache,\n\t\t\tthis.nonPersistentCache,\n\t\t\tfileEntry,\n\t\t\todspLogger,\n\t\t\tclientIsSummarizer,\n\t\t);\n\n\t\treturn PerformanceEvent.timedExecAsync(\n\t\t\todspLogger,\n\t\t\t{\n\t\t\t\teventName: \"CreateNew\",\n\t\t\t\tisWithSummaryUpload: true,\n\t\t\t\tcreateShareLinkParam: createShareLinkParam\n\t\t\t\t\t? JSON.stringify(createShareLinkParam)\n\t\t\t\t\t: undefined,\n\t\t\t\tenableSingleRequestForShareLinkWithCreate:\n\t\t\t\t\tthis.hostPolicy.enableSingleRequestForShareLinkWithCreate,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst getAuthHeader = toInstrumentedOdspStorageTokenFetcher(\n\t\t\t\t\todspLogger,\n\t\t\t\t\tresolvedUrlData,\n\t\t\t\t\tthis.getStorageToken,\n\t\t\t\t);\n\t\t\t\tconst _odspResolvedUrl = await useCreateNewModule(odspLogger, async (module) => {\n\t\t\t\t\treturn isNewFileInfo(fileInfo)\n\t\t\t\t\t\t? module.createNewFluidFile(\n\t\t\t\t\t\t\t\tgetAuthHeader,\n\t\t\t\t\t\t\t\tfileInfo,\n\t\t\t\t\t\t\t\todspLogger,\n\t\t\t\t\t\t\t\tcreateNewSummary,\n\t\t\t\t\t\t\t\tcacheAndTracker.epochTracker,\n\t\t\t\t\t\t\t\tfileEntry,\n\t\t\t\t\t\t\t\tthis.hostPolicy.cacheCreateNewSummary ?? true,\n\t\t\t\t\t\t\t\t!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,\n\t\t\t\t\t\t\t\todspResolvedUrl.isClpCompliantApp,\n\t\t\t\t\t\t\t\tthis.hostPolicy.enableSingleRequestForShareLinkWithCreate,\n\t\t\t\t\t\t\t\todspResolvedUrl,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: module.createNewContainerOnExistingFile(\n\t\t\t\t\t\t\t\tgetAuthHeader,\n\t\t\t\t\t\t\t\tfileInfo,\n\t\t\t\t\t\t\t\todspLogger,\n\t\t\t\t\t\t\t\tcreateNewSummary,\n\t\t\t\t\t\t\t\tcacheAndTracker.epochTracker,\n\t\t\t\t\t\t\t\tfileEntry,\n\t\t\t\t\t\t\t\tthis.hostPolicy.cacheCreateNewSummary ?? true,\n\t\t\t\t\t\t\t\t!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,\n\t\t\t\t\t\t\t\todspResolvedUrl.isClpCompliantApp,\n\t\t\t\t\t\t\t\todspResolvedUrl.fileMetadata?.eTag,\n\t\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\tconst docService = this.createDocumentServiceCore(\n\t\t\t\t\t_odspResolvedUrl,\n\t\t\t\t\todspLogger,\n\t\t\t\t\tcacheAndTracker,\n\t\t\t\t\tclientIsSummarizer,\n\t\t\t\t);\n\t\t\t\tevent.end({\n\t\t\t\t\tdocId: _odspResolvedUrl.hashedDocumentId,\n\t\t\t\t});\n\t\t\t\treturn docService;\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * @param getStorageToken - function that can provide the storage token for a given site. This is\n\t * is also referred to as the \"Vroom\" token in SPO.\n\t * @param getWebsocketToken - function that can provide a token for accessing the web socket. This is also\n\t * to as the \"Push\" token in SPO. If undefined then websocket token is expected to be returned with joinSession\n\t * response payload.\n\t * @param persistedCache - PersistedCache provided by host for use in this session.\n\t * @param hostPolicy - Policy for storage provided by host.\n\t */\n\tconstructor(\n\t\tprivate readonly getStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>,\n\t\tprivate readonly getWebsocketToken:\n\t\t\t| TokenFetcher<OdspResourceTokenFetchOptions>\n\t\t\t| undefined,\n\t\tprotected persistedCache: IPersistedCache = new LocalPersistentCache(),\n\t\tprivate readonly hostPolicy: HostStoragePolicy = {},\n\t) {\n\t\tif (this.hostPolicy.isolateSocketCache === true) {\n\t\t\t// create the key to separate the socket reuse cache\n\t\t\tthis.socketReferenceKeyPrefix = uuid();\n\t\t}\n\t\t// Set enableRedeemFallback by default as true.\n\t\tthis.hostPolicy.enableRedeemFallback = this.hostPolicy.enableRedeemFallback ?? true;\n\t\tthis.hostPolicy.sessionOptions = {\n\t\t\tforceAccessTokenViaAuthorizationHeader: true,\n\t\t\t...this.hostPolicy.sessionOptions,\n\t\t};\n\t}\n\n\t/**\n\t * The compatibility details of the ODSP Driver layer that is exposed to the Loader layer\n\t * for validating Loader-Driver compatibility.\n\t * @remarks This is for internal use only.\n\t * The type of this should be ILayerCompatDetails. However, ILayerCompatDetails is internal and this class\n\t * is currently marked as legacy alpha. So, using unknown here.\n\t */\n\tpublic readonly ILayerCompatDetails?: unknown = odspDriverCompatDetailsForLoader;\n\n\tpublic async createDocumentService(\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\treturn this.createDocumentServiceCore(\n\t\t\tresolvedUrl,\n\t\t\tcreateOdspLogger(logger),\n\t\t\tundefined,\n\t\t\tclientIsSummarizer,\n\t\t);\n\t}\n\n\tprotected async createDocumentServiceCore(\n\t\tresolvedUrl: IResolvedUrl,\n\t\todspLogger: ITelemetryBaseLogger,\n\t\tcacheAndTrackerArg?: ICacheAndTracker,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\tconst extLogger = createChildLogger({ logger: odspLogger });\n\t\tconst odspResolvedUrl = getOdspResolvedUrl(resolvedUrl);\n\t\tconst resolvedUrlData: IOdspUrlParts = {\n\t\t\tsiteUrl: odspResolvedUrl.siteUrl,\n\t\t\tdriveId: odspResolvedUrl.driveId,\n\t\t\titemId: odspResolvedUrl.itemId,\n\t\t};\n\n\t\tconst cacheAndTracker =\n\t\t\tcacheAndTrackerArg ??\n\t\t\tcreateOdspCacheAndTracker(\n\t\t\t\tthis.persistedCache,\n\t\t\t\tthis.nonPersistentCache,\n\t\t\t\t{\n\t\t\t\t\tresolvedUrl: odspResolvedUrl,\n\t\t\t\t\tdocId: odspResolvedUrl.hashedDocumentId,\n\t\t\t\t\tfileVersion: odspResolvedUrl.fileVersion,\n\t\t\t\t},\n\t\t\t\textLogger,\n\t\t\t\tclientIsSummarizer,\n\t\t\t);\n\n\t\tconst storageTokenFetcher = toInstrumentedOdspStorageTokenFetcher(\n\t\t\textLogger,\n\t\t\tresolvedUrlData,\n\t\t\tthis.getStorageToken,\n\t\t);\n\n\t\tconst webSocketTokenFetcher =\n\t\t\tthis.getWebsocketToken === undefined\n\t\t\t\t? undefined\n\t\t\t\t: async (options: TokenFetchOptions): Promise<string | null> =>\n\t\t\t\t\t\t// websocket expects a plain token\n\t\t\t\t\t\ttoInstrumentedOdspTokenFetcher(\n\t\t\t\t\t\t\textLogger,\n\t\t\t\t\t\t\tresolvedUrlData,\n\t\t\t\t\t\t\tthis.getWebsocketToken!,\n\t\t\t\t\t\t\tfalse /* throwOnNullToken */,\n\t\t\t\t\t\t\ttrue /* returnPlainToken */,\n\t\t\t\t\t\t)(options, \"GetWebsocketToken\");\n\n\t\treturn OdspDocumentService.create(\n\t\t\tresolvedUrl,\n\t\t\tstorageTokenFetcher,\n\t\t\twebSocketTokenFetcher,\n\t\t\textLogger,\n\t\t\tcacheAndTracker.cache,\n\t\t\tthis.hostPolicy,\n\t\t\tcacheAndTracker.epochTracker,\n\t\t\tthis.socketReferenceKeyPrefix,\n\t\t\tclientIsSummarizer,\n\t\t);\n\t}\n}\n\n/**\n * Extract the sharing link kind from the resolved URL's query paramerters\n */\nfunction getSharingLinkParams(\n\thostPolicy: HostStoragePolicy,\n\tsearchParams: URLSearchParams,\n): ISharingLinkKind | undefined {\n\t// extract request parameters for creation of sharing link (if provided) if the feature is enabled\n\tlet createShareLinkParam: ISharingLinkKind | undefined;\n\tif (hostPolicy.enableSingleRequestForShareLinkWithCreate) {\n\t\tconst createLinkScope = searchParams.get(\"createLinkScope\");\n\t\tconst createLinkRole = searchParams.get(\"createLinkRole\");\n\t\tif (createLinkScope && SharingLinkScope[createLinkScope]) {\n\t\t\tcreateShareLinkParam = {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tscope: SharingLinkScope[createLinkScope],\n\t\t\t\t...(createLinkRole && SharingLinkRole[createLinkRole]\n\t\t\t\t\t? // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\t\t{ role: SharingLinkRole[createLinkRole] }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t}\n\t}\n\treturn createShareLinkParam;\n}\n"]}
1
+ {"version":3,"file":"odspDocumentServiceFactoryCore.js","sourceRoot":"","sources":["../src/odspDocumentServiceFactoryCore.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 type { ITelemetryBaseLogger } from \"@fluidframework/core-interfaces\";\nimport type { PromiseCache } from \"@fluidframework/core-utils/internal\";\nimport type { ISummaryTree } from \"@fluidframework/driver-definitions\";\nimport type {\n\tIDocumentService,\n\tIDocumentServiceFactory,\n\tIFileEntry,\n\tIPersistedCache,\n\tIResolvedUrl,\n} from \"@fluidframework/driver-definitions/internal\";\nimport {\n\tgetDocAttributesFromProtocolSummary,\n\tisCombinedAppAndProtocolSummary,\n} from \"@fluidframework/driver-utils/internal\";\nimport {\n\ttype HostStoragePolicy,\n\ttype IOdspUrlParts,\n\ttype IRelaySessionAwareDriverFactory,\n\ttype ISharingLinkKind,\n\ttype ISocketStorageDiscovery,\n\ttype OdspResourceTokenFetchOptions,\n\tSharingLinkRole,\n\tSharingLinkScope,\n\ttype TokenFetchOptions,\n\ttype TokenFetcher,\n} from \"@fluidframework/odsp-driver-definitions/internal\";\nimport { PerformanceEvent, createChildLogger } from \"@fluidframework/telemetry-utils/internal\";\nimport { v4 as uuid } from \"uuid\";\n\nimport { useCreateNewModule } from \"./createFile/index.js\";\nimport { type ICacheAndTracker, createOdspCacheAndTracker } from \"./epochTracker.js\";\nimport {\n\ttype INonPersistentCache,\n\ttype IPrefetchSnapshotContents,\n\tLocalPersistentCache,\n\tNonPersistentCache,\n} from \"./odspCache.js\";\nimport { OdspDocumentService } from \"./odspDocumentService.js\";\nimport {\n\todspDriverCompatDetailsForLoader,\n\todspDriverCompatRequirementsForLoader,\n} from \"./odspLayerCompatState.js\";\nimport {\n\ttype IExistingFileInfo,\n\ttype INewFileInfo,\n\tcreateOdspLogger,\n\tgetJoinSessionCacheKey,\n\tgetOdspResolvedUrl,\n\tisNewFileInfo,\n\ttoInstrumentedOdspStorageTokenFetcher,\n\ttoInstrumentedOdspTokenFetcher,\n} from \"./odspUtils.js\";\n\n/**\n * An ODSP document service factory that supports point-in-time (sequence-number-based) loading.\n *\n * @remarks\n * The loader detects this capability structurally, so hosts can pass this factory directly to\n * {@link @fluidframework/container-loader#loadContainerToSequenceNumber}.\n *\n * @legacy @beta\n */\nexport interface IPointInTimeDocumentServiceFactory extends IDocumentServiceFactory {\n\t/**\n\t * Creates a document service that materializes the document at the requested sequence number.\n\t *\n\t * @param resolvedUrl - The resolved ODSP {@link @fluidframework/driver-definitions#IResolvedUrl}.\n\t * @param targetSequenceNumber - The sequence number at which to materialize the document. See\n\t * {@link @fluidframework/container-loader#ILoadContainerToSequenceNumberProps.loadToSequenceNumber}.\n\t * @param logger - Optional {@link @fluidframework/core-interfaces#ITelemetryBaseLogger}.\n\t * @param clientIsSummarizer - Whether to apply summarizer policies and telemetry to the\n\t * underlying document services. Defaults to `false`.\n\t * @returns A read-only {@link @fluidframework/driver-definitions#IDocumentService} materialized\n\t * at the requested sequence number.\n\t */\n\tcreatePointInTimeDocumentService(\n\t\tresolvedUrl: IResolvedUrl,\n\t\ttargetSequenceNumber: number,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService>;\n}\n\n/**\n * Inputs supplied by the ODSP document service factory to an injected point-in-time implementation.\n *\n * @legacy @beta\n */\nexport interface IOdspPointInTimeDocumentServiceImplementationProps {\n\t/** The resolved ODSP URL for the document to materialize. */\n\treadonly resolvedUrl: IResolvedUrl;\n\t/** The sequence number at which to materialize the document. */\n\treadonly targetSequenceNumber: number;\n\t/** Optional telemetry logger for the point-in-time load. */\n\treadonly logger?: ITelemetryBaseLogger;\n\t/** Whether to apply summarizer policies and telemetry. Defaults to `false`. */\n\treadonly clientIsSummarizer?: boolean;\n\t/** The persisted ODSP cache supplied to the document service factory. */\n\treadonly persistedCache: IPersistedCache;\n\t/** Fetches storage access tokens for ODSP requests. */\n\treadonly getStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>;\n\t/**\n\t * Creates an ODSP document service for a resolved URL.\n\t *\n\t * @param resolvedUrl - The resolved URL for the document or file version to load.\n\t * @param logger - The telemetry logger for the document service.\n\t * @param cacheAndTracker - The cache and epoch tracker shared by the point-in-time load.\n\t * @param clientIsSummarizer - Whether to apply summarizer policies and telemetry.\n\t * @returns The document service for the resolved URL.\n\t */\n\treadonly createDocumentService: (\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger: ITelemetryBaseLogger,\n\t\tcacheAndTracker: ICacheAndTracker,\n\t\tclientIsSummarizer?: boolean,\n\t) => Promise<IDocumentService>;\n}\n\n/**\n * Consumer-provided implementation of ODSP point-in-time loading.\n *\n * @legacy @beta\n */\nexport type OdspPointInTimeDocumentServiceImplementation = (\n\tprops: IOdspPointInTimeDocumentServiceImplementationProps,\n) => Promise<IDocumentService>;\n\n/**\n * Factory for creating the sharepoint document service. Use this if you want to\n * use the sharepoint implementation.\n * @legacy\n * @beta\n */\nexport class OdspDocumentServiceFactoryCore\n\timplements IDocumentServiceFactory, IRelaySessionAwareDriverFactory\n{\n\tprivate readonly nonPersistentCache: INonPersistentCache = new NonPersistentCache();\n\tprivate readonly socketReferenceKeyPrefix?: string;\n\n\tpublic get snapshotPrefetchResultCache(): PromiseCache<string, IPrefetchSnapshotContents> {\n\t\treturn this.nonPersistentCache.snapshotPrefetchResultCache;\n\t}\n\n\t// TODO: return `IRelaySessionAwareDriverFactory` instead of `this` (breaking change)\n\tpublic get IRelaySessionAwareDriverFactory(): this {\n\t\treturn this;\n\t}\n\n\t/**\n\t * This function would return info about relay service session only if this factory established (or attempted to\n\t * establish) connection very recently. Otherwise, it will return undefined.\n\t * @param resolvedUrl - resolved url for container\n\t * @returns The current join session response stored in cache. `undefined` if not present.\n\t */\n\tpublic async getRelayServiceSessionInfo(\n\t\tresolvedUrl: IResolvedUrl,\n\t): Promise<ISocketStorageDiscovery | undefined> {\n\t\tconst odspResolvedUrl = getOdspResolvedUrl(resolvedUrl);\n\t\tconst joinSessionResponse = await this.nonPersistentCache.sessionJoinCache.get(\n\t\t\tgetJoinSessionCacheKey(odspResolvedUrl),\n\t\t);\n\t\treturn joinSessionResponse?.joinSessionResponse;\n\t}\n\n\tpublic async createContainer(\n\t\tcreateNewSummary: ISummaryTree | undefined,\n\t\tcreateNewResolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\tconst odspResolvedUrl = getOdspResolvedUrl(createNewResolvedUrl);\n\t\tconst resolvedUrlData: IOdspUrlParts = {\n\t\t\tsiteUrl: odspResolvedUrl.siteUrl,\n\t\t\tdriveId: odspResolvedUrl.driveId,\n\t\t\titemId: odspResolvedUrl.itemId,\n\t\t};\n\n\t\tlet fileInfo: INewFileInfo | IExistingFileInfo;\n\t\tlet createShareLinkParam: ISharingLinkKind | undefined;\n\t\tif (odspResolvedUrl.itemId) {\n\t\t\tfileInfo = {\n\t\t\t\ttype: \"Existing\",\n\t\t\t\tdriveId: odspResolvedUrl.driveId,\n\t\t\t\tsiteUrl: odspResolvedUrl.siteUrl,\n\t\t\t\titemId: odspResolvedUrl.itemId,\n\t\t\t};\n\t\t} else if (odspResolvedUrl.fileName) {\n\t\t\tconst [, queryString] = odspResolvedUrl.url.split(\"?\");\n\t\t\tconst searchParams = new URLSearchParams(queryString);\n\t\t\tconst filePath = searchParams.get(\"path\");\n\t\t\tif (filePath === undefined || filePath === null) {\n\t\t\t\tthrow new Error(\"File path should be provided!!\");\n\t\t\t}\n\t\t\tcreateShareLinkParam = getSharingLinkParams(this.hostPolicy, searchParams);\n\t\t\tfileInfo = {\n\t\t\t\ttype: \"New\",\n\t\t\t\tdriveId: odspResolvedUrl.driveId,\n\t\t\t\tsiteUrl: odspResolvedUrl.siteUrl,\n\t\t\t\tfilePath,\n\t\t\t\tfilename: odspResolvedUrl.fileName,\n\t\t\t\tcreateLinkType: createShareLinkParam,\n\t\t\t};\n\t\t} else {\n\t\t\tthrow new Error(\"A new or existing file must be specified to create container!\");\n\t\t}\n\n\t\tif (isCombinedAppAndProtocolSummary(createNewSummary)) {\n\t\t\tconst documentAttributes = getDocAttributesFromProtocolSummary(\n\t\t\t\tcreateNewSummary.tree[\".protocol\"],\n\t\t\t);\n\t\t\tif (documentAttributes?.sequenceNumber !== 0) {\n\t\t\t\tthrow new Error(\"Seq number in detached ODSP container should be 0\");\n\t\t\t}\n\t\t}\n\n\t\tconst odspLogger = createOdspLogger(logger);\n\n\t\tconst fileEntry: IFileEntry = {\n\t\t\tresolvedUrl: odspResolvedUrl,\n\t\t\tdocId: odspResolvedUrl.hashedDocumentId,\n\t\t\tfileVersion: undefined,\n\t\t};\n\t\tconst cacheAndTracker = createOdspCacheAndTracker(\n\t\t\tthis.persistedCache,\n\t\t\tthis.nonPersistentCache,\n\t\t\tfileEntry,\n\t\t\todspLogger,\n\t\t\tclientIsSummarizer,\n\t\t);\n\n\t\treturn PerformanceEvent.timedExecAsync(\n\t\t\todspLogger,\n\t\t\t{\n\t\t\t\teventName: \"CreateNew\",\n\t\t\t\tisWithSummaryUpload: true,\n\t\t\t\tcreateShareLinkParam: createShareLinkParam\n\t\t\t\t\t? JSON.stringify(createShareLinkParam)\n\t\t\t\t\t: undefined,\n\t\t\t\tenableSingleRequestForShareLinkWithCreate:\n\t\t\t\t\tthis.hostPolicy.enableSingleRequestForShareLinkWithCreate,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst getAuthHeader = toInstrumentedOdspStorageTokenFetcher(\n\t\t\t\t\todspLogger,\n\t\t\t\t\tresolvedUrlData,\n\t\t\t\t\tthis.getStorageToken,\n\t\t\t\t);\n\t\t\t\tconst _odspResolvedUrl = await useCreateNewModule(odspLogger, async (module) => {\n\t\t\t\t\treturn isNewFileInfo(fileInfo)\n\t\t\t\t\t\t? module.createNewFluidFile(\n\t\t\t\t\t\t\t\tgetAuthHeader,\n\t\t\t\t\t\t\t\tfileInfo,\n\t\t\t\t\t\t\t\todspLogger,\n\t\t\t\t\t\t\t\tcreateNewSummary,\n\t\t\t\t\t\t\t\tcacheAndTracker.epochTracker,\n\t\t\t\t\t\t\t\tfileEntry,\n\t\t\t\t\t\t\t\tthis.hostPolicy.cacheCreateNewSummary ?? true,\n\t\t\t\t\t\t\t\t!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,\n\t\t\t\t\t\t\t\todspResolvedUrl.isClpCompliantApp,\n\t\t\t\t\t\t\t\tthis.hostPolicy.enableSingleRequestForShareLinkWithCreate,\n\t\t\t\t\t\t\t\todspResolvedUrl,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: module.createNewContainerOnExistingFile(\n\t\t\t\t\t\t\t\tgetAuthHeader,\n\t\t\t\t\t\t\t\tfileInfo,\n\t\t\t\t\t\t\t\todspLogger,\n\t\t\t\t\t\t\t\tcreateNewSummary,\n\t\t\t\t\t\t\t\tcacheAndTracker.epochTracker,\n\t\t\t\t\t\t\t\tfileEntry,\n\t\t\t\t\t\t\t\tthis.hostPolicy.cacheCreateNewSummary ?? true,\n\t\t\t\t\t\t\t\t!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,\n\t\t\t\t\t\t\t\todspResolvedUrl.isClpCompliantApp,\n\t\t\t\t\t\t\t\todspResolvedUrl.fileMetadata?.eTag,\n\t\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\tconst docService = this.createDocumentServiceCore(\n\t\t\t\t\t_odspResolvedUrl,\n\t\t\t\t\todspLogger,\n\t\t\t\t\tcacheAndTracker,\n\t\t\t\t\tclientIsSummarizer,\n\t\t\t\t);\n\t\t\t\tevent.end({\n\t\t\t\t\tdocId: _odspResolvedUrl.hashedDocumentId,\n\t\t\t\t});\n\t\t\t\treturn docService;\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * @param getStorageToken - function that can provide the storage token for a given site. This is\n\t * is also referred to as the \"Vroom\" token in SPO.\n\t * @param getWebsocketToken - function that can provide a token for accessing the web socket. This is also\n\t * to as the \"Push\" token in SPO. If undefined then websocket token is expected to be returned with joinSession\n\t * response payload.\n\t * @param persistedCache - PersistedCache provided by host for use in this session.\n\t * @param hostPolicy - Policy for storage provided by host.\n\t */\n\tconstructor(\n\t\tprivate readonly getStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>,\n\t\tprivate readonly getWebsocketToken:\n\t\t\t| TokenFetcher<OdspResourceTokenFetchOptions>\n\t\t\t| undefined,\n\t\tprotected persistedCache: IPersistedCache = new LocalPersistentCache(),\n\t\tprivate readonly hostPolicy: HostStoragePolicy = {},\n\t) {\n\t\tif (this.hostPolicy.isolateSocketCache === true) {\n\t\t\t// create the key to separate the socket reuse cache\n\t\t\tthis.socketReferenceKeyPrefix = uuid();\n\t\t}\n\t\t// Set enableRedeemFallback by default as true.\n\t\tthis.hostPolicy.enableRedeemFallback = this.hostPolicy.enableRedeemFallback ?? true;\n\t\tthis.hostPolicy.sessionOptions = {\n\t\t\tforceAccessTokenViaAuthorizationHeader: true,\n\t\t\t...this.hostPolicy.sessionOptions,\n\t\t};\n\t}\n\n\t/**\n\t * The compatibility details of the ODSP Driver layer that is exposed to the Loader layer\n\t * for validating Loader-Driver compatibility.\n\t * @remarks This is for internal use only.\n\t * The type of this should be ILayerCompatDetails. However, ILayerCompatDetails is internal and this class\n\t * is currently marked as legacy alpha. So, using unknown here.\n\t */\n\tpublic readonly ILayerCompatDetails?: unknown = odspDriverCompatDetailsForLoader;\n\n\t/**\n\t * The requirements that the Loader layer must meet to be compatible with this ODSP Driver. This is exposed to\n\t * the Loader layer so that it can validate Loader / Driver compatibility on this Driver's behalf (the Driver has\n\t * no reference to the Loader to validate it directly).\n\t * @remarks This is for internal use only.\n\t * The type of this should be ILayerCompatSupportRequirements. However, ILayerCompatSupportRequirements is\n\t * internal and this class is currently marked as legacy alpha. So, using unknown here.\n\t */\n\tpublic readonly ILayerCompatSupportRequirements?: unknown =\n\t\todspDriverCompatRequirementsForLoader;\n\n\tpublic async createDocumentService(\n\t\tresolvedUrl: IResolvedUrl,\n\t\tlogger?: ITelemetryBaseLogger,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\treturn this.createDocumentServiceCore(\n\t\t\tresolvedUrl,\n\t\t\tcreateOdspLogger(logger),\n\t\t\tundefined,\n\t\t\tclientIsSummarizer,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a document service that reads its snapshot from the closest file version at or before\n\t * the target and its deltas from the live document, materializing a requested sequence number\n\t * through replay.\n\t *\n\t * @param resolvedUrl - The resolved ODSP {@link @fluidframework/driver-definitions#IResolvedUrl}.\n\t * @param targetSequenceNumber - The sequence number at which to materialize the document. See\n\t * {@link @fluidframework/container-loader#ILoadContainerToSequenceNumberProps.loadToSequenceNumber}.\n\t * @param logger - Optional {@link @fluidframework/core-interfaces#ITelemetryBaseLogger}.\n\t * @param clientIsSummarizer - Whether to apply summarizer policies and telemetry to the\n\t * underlying document services. Defaults to `false`.\n\t * @returns A read-only {@link @fluidframework/driver-definitions#IDocumentService} materialized\n\t * at the requested sequence number.\n\t */\n\tpublic readonly createPointInTimeDocumentService?: IPointInTimeDocumentServiceFactory[\"createPointInTimeDocumentService\"];\n\n\tprotected async createDocumentServiceCore(\n\t\tresolvedUrl: IResolvedUrl,\n\t\todspLogger: ITelemetryBaseLogger,\n\t\tcacheAndTrackerArg?: ICacheAndTracker,\n\t\tclientIsSummarizer?: boolean,\n\t): Promise<IDocumentService> {\n\t\tconst extLogger = createChildLogger({ logger: odspLogger });\n\t\tconst odspResolvedUrl = getOdspResolvedUrl(resolvedUrl);\n\t\tconst resolvedUrlData: IOdspUrlParts = {\n\t\t\tsiteUrl: odspResolvedUrl.siteUrl,\n\t\t\tdriveId: odspResolvedUrl.driveId,\n\t\t\titemId: odspResolvedUrl.itemId,\n\t\t};\n\n\t\tconst cacheAndTracker =\n\t\t\tcacheAndTrackerArg ??\n\t\t\tcreateOdspCacheAndTracker(\n\t\t\t\tthis.persistedCache,\n\t\t\t\tthis.nonPersistentCache,\n\t\t\t\t{\n\t\t\t\t\tresolvedUrl: odspResolvedUrl,\n\t\t\t\t\tdocId: odspResolvedUrl.hashedDocumentId,\n\t\t\t\t\tfileVersion: odspResolvedUrl.fileVersion,\n\t\t\t\t},\n\t\t\t\textLogger,\n\t\t\t\tclientIsSummarizer,\n\t\t\t);\n\n\t\tconst storageTokenFetcher = toInstrumentedOdspStorageTokenFetcher(\n\t\t\textLogger,\n\t\t\tresolvedUrlData,\n\t\t\tthis.getStorageToken,\n\t\t);\n\n\t\tconst webSocketTokenFetcher =\n\t\t\tthis.getWebsocketToken === undefined\n\t\t\t\t? undefined\n\t\t\t\t: async (options: TokenFetchOptions): Promise<string | null> =>\n\t\t\t\t\t\t// websocket expects a plain token\n\t\t\t\t\t\ttoInstrumentedOdspTokenFetcher(\n\t\t\t\t\t\t\textLogger,\n\t\t\t\t\t\t\tresolvedUrlData,\n\t\t\t\t\t\t\tthis.getWebsocketToken!,\n\t\t\t\t\t\t\tfalse /* throwOnNullToken */,\n\t\t\t\t\t\t\ttrue /* returnPlainToken */,\n\t\t\t\t\t\t)(options, \"GetWebsocketToken\");\n\n\t\treturn OdspDocumentService.create(\n\t\t\tresolvedUrl,\n\t\t\tstorageTokenFetcher,\n\t\t\twebSocketTokenFetcher,\n\t\t\textLogger,\n\t\t\tcacheAndTracker.cache,\n\t\t\tthis.hostPolicy,\n\t\t\tcacheAndTracker.epochTracker,\n\t\t\tthis.socketReferenceKeyPrefix,\n\t\t\tclientIsSummarizer,\n\t\t);\n\t}\n}\n\n/**\n * Extract the sharing link kind from the resolved URL's query paramerters\n */\nfunction getSharingLinkParams(\n\thostPolicy: HostStoragePolicy,\n\tsearchParams: URLSearchParams,\n): ISharingLinkKind | undefined {\n\t// extract request parameters for creation of sharing link (if provided) if the feature is enabled\n\tlet createShareLinkParam: ISharingLinkKind | undefined;\n\tif (hostPolicy.enableSingleRequestForShareLinkWithCreate) {\n\t\tconst createLinkScope = searchParams.get(\"createLinkScope\");\n\t\tconst createLinkRole = searchParams.get(\"createLinkRole\");\n\t\tif (createLinkScope && SharingLinkScope[createLinkScope]) {\n\t\t\tcreateShareLinkParam = {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\tscope: SharingLinkScope[createLinkScope],\n\t\t\t\t...(createLinkRole && SharingLinkRole[createLinkRole]\n\t\t\t\t\t? // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\t\t{ role: SharingLinkRole[createLinkRole] }\n\t\t\t\t\t: {}),\n\t\t\t};\n\t\t}\n\t}\n\treturn createShareLinkParam;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"odspDocumentStorageManager.d.ts","sourceRoot":"","sources":["../src/odspDocumentStorageManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"odspDocumentStorageManager.d.ts","sourceRoot":"","sources":["../src/odspDocumentStorageManager.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,36 @@ const odspUtils_js_1 = require("./odspUtils.js");
21
21
  const packageVersion_js_1 = require("./packageVersion.js");
22
22
  exports.defaultSummarizerCacheExpiryTimeout = 60 * 1000; // 60 seconds.
23
23
  class OdspDocumentStorageService extends odspDocumentStorageServiceBase_js_1.OdspDocumentStorageServiceBase {
24
+ odspResolvedUrl;
25
+ getAuthHeader;
26
+ logger;
27
+ fetchFullSnapshot;
28
+ cache;
29
+ hostPolicy;
30
+ epochTracker;
31
+ flushCallback;
32
+ relayServiceTenantAndSessionId;
33
+ snapshotFormatFetchType;
34
+ odspSummaryModuleLoaded = false;
35
+ summaryModuleP;
36
+ odspSummaryUploadManager;
37
+ firstSnapshotFetchCall = true;
38
+ _isFirstSnapshotFromNetwork;
39
+ documentId;
40
+ snapshotUrl;
41
+ attachmentPOSTUrl;
42
+ attachmentGETUrl;
43
+ config;
44
+ // Driver specified limits for snapshot size and time.
45
+ /**
46
+ * NOTE: While commit cfff6e3 added restrictions to prevent large payloads, snapshot failures will continue to
47
+ * happen until blob request throttling is implemented. Until then, as a temporary fix we set arbitrarily large
48
+ * snapshot size and timeout limits so that such failures are unlikely to occur.
49
+ */
50
+ maxSnapshotSizeLimit = 500000000; // 500 MB
51
+ maxSnapshotFetchTimeout = 120000; // 2 min
52
+ // limits the amount of parallel "attachment" blob uploads
53
+ createBlobRateLimiter = new internal_4.RateLimiter(1);
24
54
  constructor(odspResolvedUrl, getAuthHeader, logger, fetchFullSnapshot, cache, hostPolicy, epochTracker, flushCallback, relayServiceTenantAndSessionId, snapshotFormatFetchType) {
25
55
  super((0, internal_6.loggerToMonitoringContext)(logger).config);
26
56
  this.odspResolvedUrl = odspResolvedUrl;
@@ -33,18 +63,6 @@ class OdspDocumentStorageService extends odspDocumentStorageServiceBase_js_1.Ods
33
63
  this.flushCallback = flushCallback;
34
64
  this.relayServiceTenantAndSessionId = relayServiceTenantAndSessionId;
35
65
  this.snapshotFormatFetchType = snapshotFormatFetchType;
36
- this.odspSummaryModuleLoaded = false;
37
- this.firstSnapshotFetchCall = true;
38
- // Driver specified limits for snapshot size and time.
39
- /**
40
- * NOTE: While commit cfff6e3 added restrictions to prevent large payloads, snapshot failures will continue to
41
- * happen until blob request throttling is implemented. Until then, as a temporary fix we set arbitrarily large
42
- * snapshot size and timeout limits so that such failures are unlikely to occur.
43
- */
44
- this.maxSnapshotSizeLimit = 500000000; // 500 MB
45
- this.maxSnapshotFetchTimeout = 120000; // 2 min
46
- // limits the amount of parallel "attachment" blob uploads
47
- this.createBlobRateLimiter = new internal_4.RateLimiter(1);
48
66
  this.documentId = this.odspResolvedUrl.hashedDocumentId;
49
67
  this.snapshotUrl = this.odspResolvedUrl.endpoints.snapshotStorageUrl;
50
68
  this.attachmentPOSTUrl = this.odspResolvedUrl.endpoints.attachmentPOSTStorageUrl;
@@ -72,7 +90,7 @@ class OdspDocumentStorageService extends odspDocumentStorageServiceBase_js_1.Ods
72
90
  waitQueueLength: this.createBlobRateLimiter.waitQueueLength,
73
91
  }, async (event) => {
74
92
  const res = await this.createBlobRateLimiter.schedule(async () => this.epochTracker.fetchAndParseAsJSON(url, {
75
- body: file,
93
+ body: (0, client_utils_1.ArrayBufferLikeToArrayBuffer)(file),
76
94
  headers,
77
95
  method,
78
96
  }, "createBlob"));