@fluidframework/odsp-driver 3.0.2 → 3.1.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.
- package/CHANGELOG.md +10 -0
- package/README.md +30 -34
- package/api-report/odsp-driver.legacy.alpha.api.md +5 -1
- package/api-report/odsp-driver.legacy.beta.api.md +5 -1
- package/api-report/odsp-driver.point-in-time.legacy.beta.api.md +2 -1
- package/dist/epochTracker.d.ts +4 -3
- package/dist/epochTracker.d.ts.map +1 -1
- package/dist/epochTracker.js +9 -5
- package/dist/epochTracker.js.map +1 -1
- package/dist/fetchSnapshot.d.ts +2 -2
- package/dist/fetchSnapshot.d.ts.map +1 -1
- package/dist/fetchSnapshot.js +12 -7
- package/dist/fetchSnapshot.js.map +1 -1
- package/dist/getFileLink.d.ts +1 -1
- package/dist/getFileLink.d.ts.map +1 -1
- package/dist/getFileLink.js +16 -11
- package/dist/getFileLink.js.map +1 -1
- package/dist/odspDelayLoadedDeltaStream.d.ts.map +1 -1
- package/dist/odspDelayLoadedDeltaStream.js +1 -1
- package/dist/odspDelayLoadedDeltaStream.js.map +1 -1
- package/dist/odspDocumentDeltaConnection.d.ts +1 -1
- package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
- package/dist/odspDocumentDeltaConnection.js +6 -3
- package/dist/odspDocumentDeltaConnection.js.map +1 -1
- package/dist/odspDocumentServiceFactory.d.ts.map +1 -1
- package/dist/odspDocumentServiceFactory.js +1 -0
- package/dist/odspDocumentServiceFactory.js.map +1 -1
- package/dist/odspDocumentServiceFactoryCore.d.ts +4 -1
- package/dist/odspDocumentServiceFactoryCore.d.ts.map +1 -1
- package/dist/odspDocumentServiceFactoryCore.js +11 -5
- package/dist/odspDocumentServiceFactoryCore.js.map +1 -1
- package/dist/odspDocumentStorageManager.d.ts.map +1 -1
- package/dist/odspDocumentStorageManager.js +11 -11
- package/dist/odspDocumentStorageManager.js.map +1 -1
- package/dist/odspDriverUrlResolverForShareLink.d.ts +5 -0
- package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
- package/dist/odspDriverUrlResolverForShareLink.js +3 -1
- package/dist/odspDriverUrlResolverForShareLink.js.map +1 -1
- package/dist/odspVersionManager/odspFileVersionFetcher.d.ts +1 -0
- package/dist/odspVersionManager/odspFileVersionFetcher.d.ts.map +1 -1
- package/dist/odspVersionManager/odspFileVersionFetcher.js +6 -2
- package/dist/odspVersionManager/odspFileVersionFetcher.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pointInTimeDriver/createPointInTimeDocumentService.d.ts +1 -1
- package/dist/pointInTimeDriver/createPointInTimeDocumentService.d.ts.map +1 -1
- package/dist/pointInTimeDriver/createPointInTimeDocumentService.js +5 -4
- package/dist/pointInTimeDriver/createPointInTimeDocumentService.js.map +1 -1
- package/dist/pointInTimeDriver/odspPointInTimeDocumentService.d.ts +1 -1
- package/dist/pointInTimeDriver/odspPointInTimeDocumentService.d.ts.map +1 -1
- package/dist/pointInTimeDriver/odspPointInTimeDocumentService.js +21 -1
- package/dist/pointInTimeDriver/odspPointInTimeDocumentService.js.map +1 -1
- package/dist/prefetchLatestSnapshot.d.ts.map +1 -1
- package/dist/prefetchLatestSnapshot.js +2 -2
- package/dist/prefetchLatestSnapshot.js.map +1 -1
- package/dist/requestHeaders.d.ts +19 -0
- package/dist/requestHeaders.d.ts.map +1 -0
- package/dist/requestHeaders.js +48 -0
- package/dist/requestHeaders.js.map +1 -0
- package/lib/epochTracker.d.ts +4 -3
- package/lib/epochTracker.d.ts.map +1 -1
- package/lib/epochTracker.js +9 -5
- package/lib/epochTracker.js.map +1 -1
- package/lib/fetchSnapshot.d.ts +2 -2
- package/lib/fetchSnapshot.d.ts.map +1 -1
- package/lib/fetchSnapshot.js +12 -7
- package/lib/fetchSnapshot.js.map +1 -1
- package/lib/getFileLink.d.ts +1 -1
- package/lib/getFileLink.d.ts.map +1 -1
- package/lib/getFileLink.js +16 -11
- package/lib/getFileLink.js.map +1 -1
- package/lib/odspDelayLoadedDeltaStream.d.ts.map +1 -1
- package/lib/odspDelayLoadedDeltaStream.js +1 -1
- package/lib/odspDelayLoadedDeltaStream.js.map +1 -1
- package/lib/odspDocumentDeltaConnection.d.ts +1 -1
- package/lib/odspDocumentDeltaConnection.d.ts.map +1 -1
- package/lib/odspDocumentDeltaConnection.js +6 -3
- package/lib/odspDocumentDeltaConnection.js.map +1 -1
- package/lib/odspDocumentServiceFactory.d.ts.map +1 -1
- package/lib/odspDocumentServiceFactory.js +1 -0
- package/lib/odspDocumentServiceFactory.js.map +1 -1
- package/lib/odspDocumentServiceFactoryCore.d.ts +4 -1
- package/lib/odspDocumentServiceFactoryCore.d.ts.map +1 -1
- package/lib/odspDocumentServiceFactoryCore.js +11 -5
- package/lib/odspDocumentServiceFactoryCore.js.map +1 -1
- package/lib/odspDocumentStorageManager.d.ts.map +1 -1
- package/lib/odspDocumentStorageManager.js +11 -11
- package/lib/odspDocumentStorageManager.js.map +1 -1
- package/lib/odspDriverUrlResolverForShareLink.d.ts +5 -0
- package/lib/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
- package/lib/odspDriverUrlResolverForShareLink.js +3 -1
- package/lib/odspDriverUrlResolverForShareLink.js.map +1 -1
- package/lib/odspVersionManager/odspFileVersionFetcher.d.ts +1 -0
- package/lib/odspVersionManager/odspFileVersionFetcher.d.ts.map +1 -1
- package/lib/odspVersionManager/odspFileVersionFetcher.js +6 -2
- package/lib/odspVersionManager/odspFileVersionFetcher.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pointInTimeDriver/createPointInTimeDocumentService.d.ts +1 -1
- package/lib/pointInTimeDriver/createPointInTimeDocumentService.d.ts.map +1 -1
- package/lib/pointInTimeDriver/createPointInTimeDocumentService.js +5 -4
- package/lib/pointInTimeDriver/createPointInTimeDocumentService.js.map +1 -1
- package/lib/pointInTimeDriver/odspPointInTimeDocumentService.d.ts +1 -1
- package/lib/pointInTimeDriver/odspPointInTimeDocumentService.d.ts.map +1 -1
- package/lib/pointInTimeDriver/odspPointInTimeDocumentService.js +21 -1
- package/lib/pointInTimeDriver/odspPointInTimeDocumentService.js.map +1 -1
- package/lib/prefetchLatestSnapshot.d.ts.map +1 -1
- package/lib/prefetchLatestSnapshot.js +2 -2
- package/lib/prefetchLatestSnapshot.js.map +1 -1
- package/lib/requestHeaders.d.ts +19 -0
- package/lib/requestHeaders.d.ts.map +1 -0
- package/lib/requestHeaders.js +44 -0
- package/lib/requestHeaders.js.map +1 -0
- package/package.json +11 -11
- package/src/epochTracker.ts +9 -1
- package/src/fetchSnapshot.ts +17 -4
- package/src/getFileLink.ts +21 -7
- package/src/odspDelayLoadedDeltaStream.ts +1 -0
- package/src/odspDocumentDeltaConnection.ts +6 -0
- package/src/odspDocumentServiceFactory.ts +1 -0
- package/src/odspDocumentServiceFactoryCore.ts +14 -2
- package/src/odspDocumentStorageManager.ts +13 -3
- package/src/odspDriverUrlResolverForShareLink.ts +8 -0
- package/src/odspVersionManager/DEV.md +5 -1
- package/src/odspVersionManager/odspFileVersionFetcher.ts +7 -2
- package/src/packageVersion.ts +1 -1
- package/src/pointInTimeDriver/createPointInTimeDocumentService.ts +5 -1
- package/src/pointInTimeDriver/odspPointInTimeDocumentService.ts +40 -10
- package/src/prefetchLatestSnapshot.ts +4 -0
- package/src/requestHeaders.ts +56 -0
|
@@ -4,16 +4,45 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { TypedEventEmitter } from "@fluid-internal/client-utils";
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
import {
|
|
8
|
+
FetchSource,
|
|
9
|
+
type IClient,
|
|
10
|
+
type IDocumentDeltaConnection,
|
|
11
|
+
type IDocumentDeltaStorageService,
|
|
12
|
+
type IDocumentService,
|
|
13
|
+
type IDocumentServiceEvents,
|
|
14
|
+
type IDocumentServicePolicies,
|
|
15
|
+
type IDocumentStorageService,
|
|
16
|
+
type IResolvedUrl,
|
|
17
|
+
type ISnapshot,
|
|
18
|
+
type ISnapshotFetchOptions,
|
|
19
|
+
type IVersion,
|
|
16
20
|
} from "@fluidframework/driver-definitions/internal";
|
|
21
|
+
import { DocumentStorageServiceProxy } from "@fluidframework/driver-utils/internal";
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Forces point-in-time snapshot reads to bypass caches while forwarding all other storage operations
|
|
25
|
+
* to the selected historical document service.
|
|
26
|
+
*/
|
|
27
|
+
class PointInTimeDocumentStorageService extends DocumentStorageServiceProxy {
|
|
28
|
+
public override async getSnapshot(
|
|
29
|
+
snapshotFetchOptions?: ISnapshotFetchOptions,
|
|
30
|
+
): Promise<ISnapshot> {
|
|
31
|
+
return super.getSnapshot({
|
|
32
|
+
...snapshotFetchOptions,
|
|
33
|
+
fetchSource: FetchSource.noCache,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public override async getVersions(
|
|
38
|
+
// eslint-disable-next-line @rushstack/no-new-null -- IDocumentStorageService is a legacy API that requires null.
|
|
39
|
+
versionId: string | null,
|
|
40
|
+
count: number,
|
|
41
|
+
scenarioName?: string,
|
|
42
|
+
): Promise<IVersion[]> {
|
|
43
|
+
return super.getVersions(versionId, count, scenarioName, FetchSource.noCache);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
17
46
|
|
|
18
47
|
/**
|
|
19
48
|
* A read-only document service that materializes a document at a target sequence number by combining
|
|
@@ -64,7 +93,8 @@ export class OdspPointInTimeDocumentService
|
|
|
64
93
|
}
|
|
65
94
|
|
|
66
95
|
public async connectToStorage(): Promise<IDocumentStorageService> {
|
|
67
|
-
|
|
96
|
+
const storage = await this.recoverableDocumentService.connectToStorage();
|
|
97
|
+
return new PointInTimeDocumentStorageService(storage);
|
|
68
98
|
}
|
|
69
99
|
|
|
70
100
|
public async connectToDeltaStorage(): Promise<IDocumentDeltaStorageService> {
|
|
@@ -113,6 +113,9 @@ export async function prefetchLatestSnapshot(
|
|
|
113
113
|
odspLogger,
|
|
114
114
|
undefined,
|
|
115
115
|
controller,
|
|
116
|
+
undefined,
|
|
117
|
+
undefined,
|
|
118
|
+
odspDocumentServiceFactory?.requestHeaders,
|
|
116
119
|
);
|
|
117
120
|
};
|
|
118
121
|
const snapshotKey = createCacheSnapshotKey(odspResolvedUrl, useGroupIdsForSnapshotFetch);
|
|
@@ -150,6 +153,7 @@ export async function prefetchLatestSnapshot(
|
|
|
150
153
|
removeEntries,
|
|
151
154
|
loadingGroupIds,
|
|
152
155
|
enableRedeemFallback,
|
|
156
|
+
odspDocumentServiceFactory?.requestHeaders,
|
|
153
157
|
)
|
|
154
158
|
.then(async (value) => {
|
|
155
159
|
assert(!!snapshotEpoch, 0x585 /* prefetched snapshot should have a valid epoch */);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const driverOwnedHeaderNames = new Set([
|
|
7
|
+
"authorization",
|
|
8
|
+
"content-type",
|
|
9
|
+
"x-fluid-epoch",
|
|
10
|
+
"x-http-method-override",
|
|
11
|
+
"x-requeststats",
|
|
12
|
+
]);
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Creates an immutable snapshot of host-provided per-session headers after removing names owned by
|
|
16
|
+
* the ODSP driver. The factory, URL resolver, epoch tracker, and Socket.IO connection use the
|
|
17
|
+
* returned value so later host mutations cannot change an active document session or override
|
|
18
|
+
* authentication and protocol headers.
|
|
19
|
+
*/
|
|
20
|
+
export function copyRequestHeaders(
|
|
21
|
+
requestHeaders: Readonly<Record<string, string>> | undefined,
|
|
22
|
+
): Readonly<Record<string, string>> | undefined {
|
|
23
|
+
if (requestHeaders === undefined || Object.keys(requestHeaders).length === 0) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
const copiedHeaders = Object.fromEntries(
|
|
27
|
+
Object.entries(requestHeaders).filter(
|
|
28
|
+
([name]) => !driverOwnedHeaderNames.has(name.toLowerCase()),
|
|
29
|
+
),
|
|
30
|
+
);
|
|
31
|
+
return Object.keys(copiedHeaders).length === 0 ? undefined : Object.freeze(copiedHeaders);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Adds sanitized host headers to one ODSP request. Request-specific headers are applied last, so
|
|
36
|
+
* driver-generated values win case-insensitive collisions. ODSP fetch paths use this helper for
|
|
37
|
+
* snapshot, delta, blob, share-link, file-link, and version requests; Socket.IO applies the copied
|
|
38
|
+
* headers separately as Node.js `extraHeaders`.
|
|
39
|
+
*/
|
|
40
|
+
export function mergeRequestHeaders(
|
|
41
|
+
hostHeaders: Readonly<Record<string, string>> | undefined,
|
|
42
|
+
requestHeaders: HeadersInit | undefined,
|
|
43
|
+
): HeadersInit | undefined {
|
|
44
|
+
const safeHostHeaders = copyRequestHeaders(hostHeaders);
|
|
45
|
+
if (safeHostHeaders === undefined) {
|
|
46
|
+
return requestHeaders;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const merged = new Headers(safeHostHeaders);
|
|
50
|
+
if (requestHeaders !== undefined) {
|
|
51
|
+
for (const [key, value] of new Headers(requestHeaders)) {
|
|
52
|
+
merged.set(key, value);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return Object.fromEntries(merged);
|
|
56
|
+
}
|