@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
@@ -1,260 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
-
6
- import type { ITelemetryBaseLogger } from "@fluidframework/core-interfaces";
7
- import type {
8
- IDocumentService,
9
- IDocumentServiceFactory,
10
- IPersistedCache,
11
- IResolvedUrl,
12
- } from "@fluidframework/driver-definitions/internal";
13
- import type {
14
- HostStoragePolicy,
15
- IOdspResolvedUrl,
16
- IOdspUrlParts,
17
- OdspResourceTokenFetchOptions,
18
- TokenFetcher,
19
- } from "@fluidframework/odsp-driver-definitions/internal";
20
- import {
21
- UsageError,
22
- createChildLogger,
23
- type TelemetryLoggerExt,
24
- } from "@fluidframework/telemetry-utils/internal";
25
-
26
- import { createOdspCacheAndTracker, type EpochTracker } from "../epochTracker.js";
27
- import { NonPersistentCache } from "../odspCache.js";
28
- import { OdspDocumentServiceFactoryCore } from "../odspDocumentServiceFactoryCore.js";
29
- import { OdspDriverUrlResolver } from "../odspDriverUrlResolver.js";
30
- import {
31
- createOdspLogger,
32
- getOdspResolvedUrl,
33
- toInstrumentedOdspStorageTokenFetcher,
34
- } from "../odspUtils.js";
35
- import {
36
- createOdspVersionManager,
37
- type IOdspVersionManager,
38
- } from "../odspVersionManager/index.js";
39
-
40
- import { OdspPointInTimeDocumentService } from "./odspPointInTimeDocumentService.js";
41
-
42
- /**
43
- * An ODSP document service factory that supports point-in-time (sequence-number-based) loading.
44
- *
45
- * @remarks
46
- * The loader detects this capability structurally, so hosts can pass this factory directly to
47
- * `loadContainerToSequenceNumber`.
48
- *
49
- * @legacy @beta
50
- */
51
- export interface IPointInTimeDocumentServiceFactory extends IDocumentServiceFactory {
52
- /**
53
- * Creates a document service that materializes the document at the requested sequence number.
54
- *
55
- * @param resolvedUrl - The resolved ODSP document URL.
56
- * @param targetSequenceNumber - The sequence number at which to materialize the document.
57
- * @param logger - Optional telemetry logger.
58
- * @param clientIsSummarizer - Whether the requesting client is a summarizer.
59
- * @returns A read-only document service materialized at the requested sequence number.
60
- */
61
- createPointInTimeDocumentService(
62
- resolvedUrl: IResolvedUrl,
63
- targetSequenceNumber: number,
64
- logger?: ITelemetryBaseLogger,
65
- clientIsSummarizer?: boolean,
66
- ): Promise<IDocumentService>;
67
- }
68
-
69
- class OdspPointInTimeDocumentServiceFactory
70
- extends OdspDocumentServiceFactoryCore
71
- implements IPointInTimeDocumentServiceFactory
72
- {
73
- /**
74
- * The storage token fetcher, captured here because the base class keeps it private.
75
- */
76
- private readonly getStorageTokenForVersions: TokenFetcher<OdspResourceTokenFetchOptions>;
77
-
78
- /**
79
- * Creates a point-in-time-capable ODSP document service factory.
80
- *
81
- * @param getStorageToken - Fetches storage access tokens.
82
- * @param getWebsocketToken - Fetches websocket access tokens, or `undefined` when unavailable.
83
- * @param persistedCache - Optional persisted ODSP cache.
84
- * @param hostPolicy - Optional host storage policy.
85
- */
86
- constructor(
87
- getStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>,
88
- getWebsocketToken: TokenFetcher<OdspResourceTokenFetchOptions> | undefined,
89
- persistedCache?: IPersistedCache,
90
- hostPolicy?: HostStoragePolicy,
91
- ) {
92
- super(getStorageToken, getWebsocketToken, persistedCache, hostPolicy);
93
- this.getStorageTokenForVersions = getStorageToken;
94
- }
95
-
96
- /**
97
- * Creates a document service that reads its snapshot from the closest file version at or before
98
- * the target and its deltas from the live document, materializing a requested sequence number
99
- * through replay.
100
- *
101
- * @param resolvedUrl - The resolved ODSP document URL.
102
- * @param targetSequenceNumber - The sequence number at which to materialize the document.
103
- * @param logger - Optional telemetry logger.
104
- * @param clientIsSummarizer - Whether the requesting client is a summarizer.
105
- * @returns A read-only document service materialized at the requested sequence number.
106
- */
107
- public async createPointInTimeDocumentService(
108
- resolvedUrl: IResolvedUrl,
109
- targetSequenceNumber: number,
110
- logger?: ITelemetryBaseLogger,
111
- clientIsSummarizer?: boolean,
112
- ): Promise<IDocumentService> {
113
- const odspLogger = createOdspLogger(logger);
114
- const extLogger = createChildLogger({ logger: odspLogger });
115
- const odspResolvedUrl = getOdspResolvedUrl(resolvedUrl);
116
-
117
- // Build ONE cache-and-tracker and thread its EpochTracker through every read this method
118
- // makes: the version-history reads that pick the base, the recoverable base snapshot, and the
119
- // live op stream. This shared tracker IS the lineage guard.
120
- //
121
- // ODSP stamps each response with the file's epoch; an EpochTracker instance pins itself to the
122
- // first epoch it sees and throws on any later divergence (see setEpoch / checkForEpochError in
123
- // epochTracker.ts).
124
- //
125
- // A fresh NonPersistentCache keeps this read-only historical load isolated from the factory's
126
- // shared cache, so a base file version's snapshot can never leak into a normal live load.
127
- const cacheAndTracker = createOdspCacheAndTracker(
128
- this.persistedCache,
129
- new NonPersistentCache(),
130
- {
131
- resolvedUrl: odspResolvedUrl,
132
- docId: odspResolvedUrl.hashedDocumentId,
133
- fileVersion: odspResolvedUrl.fileVersion,
134
- },
135
- extLogger,
136
- clientIsSummarizer,
137
- );
138
-
139
- const versionManager = this.createVersionManager(
140
- odspResolvedUrl,
141
- extLogger,
142
- cacheAndTracker.epochTracker,
143
- );
144
- const baseResult = await versionManager.findBaseForSeq(targetSequenceNumber);
145
- if (baseResult.kind === "noBaseVersion") {
146
- const oldestResolvedSequenceDetail =
147
- baseResult.oldestResolvedSeq === undefined
148
- ? ""
149
- : ` The oldest resolved file version is at sequence number ${baseResult.oldestResolvedSeq}.`;
150
- throw new UsageError(
151
- `No ODSP file version is available at or before sequence number ${targetSequenceNumber}.${oldestResolvedSequenceDetail}`,
152
- );
153
- }
154
-
155
- const recoverableResolvedUrl = await this.resolveFileVersion(
156
- resolvedUrl,
157
- baseResult.base.versionId,
158
- );
159
- // Both services are created via createDocumentServiceCore with the shared cacheAndTracker, so
160
- // their reads validate against the same epoch - see the lineage-guard note above.
161
- const recoverableDocumentService = await this.createDocumentServiceCore(
162
- recoverableResolvedUrl,
163
- odspLogger,
164
- cacheAndTracker,
165
- clientIsSummarizer,
166
- );
167
- const liveDocumentService = await this.createDocumentServiceCore(
168
- resolvedUrl,
169
- odspLogger,
170
- cacheAndTracker,
171
- clientIsSummarizer,
172
- );
173
- return new OdspPointInTimeDocumentService(
174
- recoverableResolvedUrl,
175
- recoverableDocumentService,
176
- liveDocumentService,
177
- targetSequenceNumber,
178
- );
179
- }
180
-
181
- /**
182
- * Builds an IOdspVersionManager for the given file, which enumerates the file's stored
183
- * versions and resolves the closest version at or before a target sequence number.
184
- *
185
- * @remarks
186
- * The caller passes in the shared {@link EpochTracker} so the version-history reads validate
187
- * against the same epoch as the recoverable and live document services - this is the lineage
188
- * guard used by `createPointInTimeDocumentService`.
189
- * The manager itself only needs the URL parts and an instrumented storage-token/auth-header
190
- * fetcher wired to that tracker.
191
- */
192
- private createVersionManager(
193
- odspResolvedUrl: IOdspResolvedUrl,
194
- logger: TelemetryLoggerExt,
195
- epochTracker: EpochTracker,
196
- ): IOdspVersionManager {
197
- const urlParts: IOdspUrlParts = {
198
- siteUrl: odspResolvedUrl.siteUrl,
199
- driveId: odspResolvedUrl.driveId,
200
- itemId: odspResolvedUrl.itemId,
201
- };
202
- const getAuthHeader = toInstrumentedOdspStorageTokenFetcher(
203
- logger,
204
- urlParts,
205
- this.getStorageTokenForVersions,
206
- );
207
- return createOdspVersionManager({
208
- urlParts,
209
- getAuthHeader,
210
- epochTracker,
211
- logger,
212
- });
213
- }
214
-
215
- private async resolveFileVersion(
216
- resolvedUrl: IResolvedUrl,
217
- fileVersion: string,
218
- ): Promise<IResolvedUrl> {
219
- const odspResolvedUrl = getOdspResolvedUrl(resolvedUrl);
220
- const query = new URLSearchParams({
221
- driveId: odspResolvedUrl.driveId,
222
- itemId: odspResolvedUrl.itemId,
223
- fileVersion,
224
- });
225
- if (odspResolvedUrl.dataStorePath !== undefined) {
226
- query.set("path", odspResolvedUrl.dataStorePath);
227
- }
228
- if (odspResolvedUrl.codeHint?.containerPackageName !== undefined) {
229
- query.set("containerPackageName", odspResolvedUrl.codeHint.containerPackageName);
230
- }
231
- return new OdspDriverUrlResolver().resolve({
232
- url: `${odspResolvedUrl.siteUrl}?${query.toString()}`,
233
- });
234
- }
235
- }
236
-
237
- /**
238
- * Creates an ODSP document service factory that supports point-in-time loading.
239
- *
240
- * @param getStorageToken - Fetches storage access tokens.
241
- * @param getWebsocketToken - Fetches websocket access tokens, or `undefined` when unavailable.
242
- * @param persistedCache - Optional persisted ODSP cache.
243
- * @param hostPolicy - Optional host storage policy.
244
- * @returns An ODSP document service factory with point-in-time loading capability.
245
- *
246
- * @legacy @beta
247
- */
248
- export function getOdspPointInTimeDocumentServiceFactory(
249
- getStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>,
250
- getWebsocketToken: TokenFetcher<OdspResourceTokenFetchOptions> | undefined,
251
- persistedCache?: IPersistedCache,
252
- hostPolicy?: HostStoragePolicy,
253
- ): IPointInTimeDocumentServiceFactory {
254
- return new OdspPointInTimeDocumentServiceFactory(
255
- getStorageToken,
256
- getWebsocketToken,
257
- persistedCache,
258
- hostPolicy,
259
- );
260
- }