@fluidframework/odsp-driver 0.55.0 → 0.56.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/checkUrl.d.ts.map +1 -1
- package/dist/checkUrl.js +0 -1
- package/dist/checkUrl.js.map +1 -1
- package/dist/contractsPublic.d.ts +7 -1
- package/dist/contractsPublic.d.ts.map +1 -1
- package/dist/contractsPublic.js +7 -1
- package/dist/contractsPublic.js.map +1 -1
- package/dist/createFile.d.ts +3 -3
- package/dist/createFile.d.ts.map +1 -1
- package/dist/createFile.js +7 -7
- package/dist/createFile.js.map +1 -1
- package/dist/epochTracker.d.ts +3 -3
- package/dist/epochTracker.d.ts.map +1 -1
- package/dist/epochTracker.js +20 -8
- package/dist/epochTracker.js.map +1 -1
- package/dist/fetchSnapshot.d.ts +3 -2
- package/dist/fetchSnapshot.d.ts.map +1 -1
- package/dist/fetchSnapshot.js +28 -16
- package/dist/fetchSnapshot.js.map +1 -1
- package/dist/getFileLink.js +4 -4
- package/dist/getFileLink.js.map +1 -1
- package/dist/getUrlAndHeadersWithAuth.d.ts +1 -1
- package/dist/getUrlAndHeadersWithAuth.d.ts.map +1 -1
- package/dist/getUrlAndHeadersWithAuth.js +20 -33
- package/dist/getUrlAndHeadersWithAuth.js.map +1 -1
- package/dist/odspDeltaStorageService.d.ts.map +1 -1
- package/dist/odspDeltaStorageService.js +1 -4
- package/dist/odspDeltaStorageService.js.map +1 -1
- package/dist/odspDocumentServiceFactoryCore.d.ts.map +1 -1
- package/dist/odspDocumentServiceFactoryCore.js +2 -2
- package/dist/odspDocumentServiceFactoryCore.js.map +1 -1
- package/dist/odspDocumentStorageManager.d.ts +1 -0
- package/dist/odspDocumentStorageManager.d.ts.map +1 -1
- package/dist/odspDocumentStorageManager.js +16 -9
- package/dist/odspDocumentStorageManager.js.map +1 -1
- package/dist/odspDriverUrlResolver.d.ts.map +1 -1
- package/dist/odspDriverUrlResolver.js +5 -2
- package/dist/odspDriverUrlResolver.js.map +1 -1
- package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
- package/dist/odspDriverUrlResolverForShareLink.js +1 -2
- package/dist/odspDriverUrlResolverForShareLink.js.map +1 -1
- package/dist/odspSummaryUploadManager.d.ts +2 -1
- package/dist/odspSummaryUploadManager.d.ts.map +1 -1
- package/dist/odspSummaryUploadManager.js +3 -2
- package/dist/odspSummaryUploadManager.js.map +1 -1
- package/dist/odspUtils.d.ts.map +1 -1
- package/dist/odspUtils.js +4 -1
- package/dist/odspUtils.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/prefetchLatestSnapshot.d.ts +2 -1
- package/dist/prefetchLatestSnapshot.d.ts.map +1 -1
- package/dist/prefetchLatestSnapshot.js +3 -2
- package/dist/prefetchLatestSnapshot.js.map +1 -1
- package/dist/retryErrorsStorageAdapter.d.ts +1 -1
- package/dist/retryErrorsStorageAdapter.d.ts.map +1 -1
- package/dist/retryErrorsStorageAdapter.js.map +1 -1
- package/lib/checkUrl.d.ts.map +1 -1
- package/lib/checkUrl.js +0 -1
- package/lib/checkUrl.js.map +1 -1
- package/lib/contractsPublic.d.ts +7 -1
- package/lib/contractsPublic.d.ts.map +1 -1
- package/lib/contractsPublic.js +6 -0
- package/lib/contractsPublic.js.map +1 -1
- package/lib/createFile.d.ts +3 -3
- package/lib/createFile.d.ts.map +1 -1
- package/lib/createFile.js +7 -7
- package/lib/createFile.js.map +1 -1
- package/lib/epochTracker.d.ts +3 -3
- package/lib/epochTracker.d.ts.map +1 -1
- package/lib/epochTracker.js +21 -9
- package/lib/epochTracker.js.map +1 -1
- package/lib/fetchSnapshot.d.ts +3 -2
- package/lib/fetchSnapshot.d.ts.map +1 -1
- package/lib/fetchSnapshot.js +28 -16
- package/lib/fetchSnapshot.js.map +1 -1
- package/lib/getFileLink.js +4 -4
- package/lib/getFileLink.js.map +1 -1
- package/lib/getUrlAndHeadersWithAuth.d.ts +1 -1
- package/lib/getUrlAndHeadersWithAuth.d.ts.map +1 -1
- package/lib/getUrlAndHeadersWithAuth.js +20 -33
- package/lib/getUrlAndHeadersWithAuth.js.map +1 -1
- package/lib/odspDeltaStorageService.d.ts.map +1 -1
- package/lib/odspDeltaStorageService.js +1 -4
- package/lib/odspDeltaStorageService.js.map +1 -1
- package/lib/odspDocumentServiceFactoryCore.d.ts.map +1 -1
- package/lib/odspDocumentServiceFactoryCore.js +2 -2
- package/lib/odspDocumentServiceFactoryCore.js.map +1 -1
- package/lib/odspDocumentStorageManager.d.ts +1 -0
- package/lib/odspDocumentStorageManager.d.ts.map +1 -1
- package/lib/odspDocumentStorageManager.js +16 -9
- package/lib/odspDocumentStorageManager.js.map +1 -1
- package/lib/odspDriverUrlResolver.d.ts.map +1 -1
- package/lib/odspDriverUrlResolver.js +5 -2
- package/lib/odspDriverUrlResolver.js.map +1 -1
- package/lib/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
- package/lib/odspDriverUrlResolverForShareLink.js +1 -2
- package/lib/odspDriverUrlResolverForShareLink.js.map +1 -1
- package/lib/odspSummaryUploadManager.d.ts +2 -1
- package/lib/odspSummaryUploadManager.d.ts.map +1 -1
- package/lib/odspSummaryUploadManager.js +3 -2
- package/lib/odspSummaryUploadManager.js.map +1 -1
- package/lib/odspUtils.d.ts.map +1 -1
- package/lib/odspUtils.js +5 -2
- package/lib/odspUtils.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/prefetchLatestSnapshot.d.ts +2 -1
- package/lib/prefetchLatestSnapshot.d.ts.map +1 -1
- package/lib/prefetchLatestSnapshot.js +3 -2
- package/lib/prefetchLatestSnapshot.js.map +1 -1
- package/lib/retryErrorsStorageAdapter.d.ts +1 -1
- package/lib/retryErrorsStorageAdapter.d.ts.map +1 -1
- package/lib/retryErrorsStorageAdapter.js.map +1 -1
- package/package.json +9 -9
- package/src/checkUrl.ts +0 -1
- package/src/contractsPublic.ts +11 -1
- package/src/createFile.ts +16 -4
- package/src/epochTracker.ts +21 -6
- package/src/fetchSnapshot.ts +33 -16
- package/src/getFileLink.ts +7 -2
- package/src/getUrlAndHeadersWithAuth.ts +24 -38
- package/src/odspDeltaStorageService.ts +1 -3
- package/src/odspDocumentServiceFactoryCore.ts +1 -0
- package/src/odspDocumentStorageManager.ts +39 -8
- package/src/odspDriverUrlResolver.ts +3 -0
- package/src/odspDriverUrlResolverForShareLink.ts +1 -2
- package/src/odspSummaryUploadManager.ts +6 -1
- package/src/odspUtils.ts +13 -3
- package/src/packageVersion.ts +1 -1
- package/src/prefetchLatestSnapshot.ts +3 -0
- package/src/retryErrorsStorageAdapter.ts +1 -1
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
getWithRetryForTokenRefresh,
|
|
41
41
|
ISnapshotContents,
|
|
42
42
|
} from "./odspUtils";
|
|
43
|
-
import { EpochTracker } from "./epochTracker";
|
|
43
|
+
import { defaultCacheExpiryTimeoutMs, EpochTracker } from "./epochTracker";
|
|
44
44
|
import { OdspSummaryUploadManager } from "./odspSummaryUploadManager";
|
|
45
45
|
import { FlushResult } from "./odspDocumentDeltaConnection";
|
|
46
46
|
|
|
@@ -167,6 +167,7 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
167
167
|
// Note that duplication of content should not have significant impact for bytes over wire as
|
|
168
168
|
// compression of http payload mostly takes care of it, but it does impact storage size and in-memory sizes.
|
|
169
169
|
minBlobSize: 2048,
|
|
170
|
+
maximumCacheDurationMs: defaultCacheExpiryTimeoutMs,
|
|
170
171
|
};
|
|
171
172
|
|
|
172
173
|
private readonly commitCache: Map<string, api.ISnapshotTree> = new Map();
|
|
@@ -224,7 +225,13 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
224
225
|
this.snapshotUrl = this.odspResolvedUrl.endpoints.snapshotStorageUrl;
|
|
225
226
|
this.attachmentPOSTUrl = this.odspResolvedUrl.endpoints.attachmentPOSTStorageUrl;
|
|
226
227
|
this.attachmentGETUrl = this.odspResolvedUrl.endpoints.attachmentGETStorageUrl;
|
|
227
|
-
this.odspSummaryUploadManager = new OdspSummaryUploadManager(
|
|
228
|
+
this.odspSummaryUploadManager = new OdspSummaryUploadManager(
|
|
229
|
+
this.snapshotUrl,
|
|
230
|
+
getStorageToken,
|
|
231
|
+
logger,
|
|
232
|
+
epochTracker,
|
|
233
|
+
!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,
|
|
234
|
+
);
|
|
228
235
|
}
|
|
229
236
|
|
|
230
237
|
public get repositoryUrl(): string {
|
|
@@ -236,7 +243,11 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
236
243
|
|
|
237
244
|
const response = await getWithRetryForTokenRefresh(async (options) => {
|
|
238
245
|
const storageToken = await this.getStorageToken(options, "CreateBlob");
|
|
239
|
-
const { url, headers } = getUrlAndHeadersWithAuth(
|
|
246
|
+
const { url, headers } = getUrlAndHeadersWithAuth(
|
|
247
|
+
`${this.attachmentPOSTUrl}/content`,
|
|
248
|
+
storageToken,
|
|
249
|
+
!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,
|
|
250
|
+
);
|
|
240
251
|
headers["Content-Type"] = "application/octet-stream";
|
|
241
252
|
|
|
242
253
|
return PerformanceEvent.timedExecAsync(
|
|
@@ -279,7 +290,11 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
279
290
|
blob = await getWithRetryForTokenRefresh(async (options) => {
|
|
280
291
|
const storageToken = await this.getStorageToken(options, "GetBlob");
|
|
281
292
|
const unAuthedUrl = `${this.attachmentGETUrl}/${encodeURIComponent(blobId)}/content`;
|
|
282
|
-
const { url, headers } = getUrlAndHeadersWithAuth(
|
|
293
|
+
const { url, headers } = getUrlAndHeadersWithAuth(
|
|
294
|
+
unAuthedUrl,
|
|
295
|
+
storageToken,
|
|
296
|
+
!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,
|
|
297
|
+
);
|
|
283
298
|
|
|
284
299
|
return PerformanceEvent.timedExecAsync(
|
|
285
300
|
this.logger,
|
|
@@ -495,7 +510,11 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
495
510
|
|
|
496
511
|
return getWithRetryForTokenRefresh(async (options) => {
|
|
497
512
|
const storageToken = await this.getStorageToken(options, "GetVersions");
|
|
498
|
-
const { url, headers } = getUrlAndHeadersWithAuth(
|
|
513
|
+
const { url, headers } = getUrlAndHeadersWithAuth(
|
|
514
|
+
`${this.snapshotUrl}/versions?count=${count}`,
|
|
515
|
+
storageToken,
|
|
516
|
+
!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,
|
|
517
|
+
);
|
|
499
518
|
|
|
500
519
|
// Fetch the latest snapshot versions for the document
|
|
501
520
|
const response = await PerformanceEvent.timedExecAsync(
|
|
@@ -594,11 +613,13 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
594
613
|
this.odspResolvedUrl,
|
|
595
614
|
this.getStorageToken,
|
|
596
615
|
snapshotOptions,
|
|
616
|
+
!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,
|
|
597
617
|
this.logger,
|
|
598
618
|
snapshotDownloader,
|
|
599
619
|
putInCache,
|
|
600
620
|
removeEntries,
|
|
601
|
-
this.hostPolicy.enableRedeemFallback
|
|
621
|
+
this.hostPolicy.enableRedeemFallback,
|
|
622
|
+
);
|
|
602
623
|
return odspSnapshot;
|
|
603
624
|
} catch (error) {
|
|
604
625
|
const errorType = error.errorType;
|
|
@@ -617,11 +638,13 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
617
638
|
this.odspResolvedUrl,
|
|
618
639
|
this.getStorageToken,
|
|
619
640
|
snapshotOptionsWithoutBlobs,
|
|
641
|
+
!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,
|
|
620
642
|
this.logger,
|
|
621
643
|
snapshotDownloader,
|
|
622
644
|
putInCache,
|
|
623
645
|
removeEntries,
|
|
624
|
-
this.hostPolicy.enableRedeemFallback
|
|
646
|
+
this.hostPolicy.enableRedeemFallback,
|
|
647
|
+
);
|
|
625
648
|
return odspSnapshot;
|
|
626
649
|
}
|
|
627
650
|
throw error;
|
|
@@ -729,7 +752,15 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
729
752
|
"snapshotTree",
|
|
730
753
|
);
|
|
731
754
|
};
|
|
732
|
-
const snapshot = await fetchSnapshot(
|
|
755
|
+
const snapshot = await fetchSnapshot(
|
|
756
|
+
this.snapshotUrl!,
|
|
757
|
+
storageToken,
|
|
758
|
+
id,
|
|
759
|
+
this.fetchFullSnapshot,
|
|
760
|
+
!!this.hostPolicy.sessionOptions?.forceAccessTokenViaAuthorizationHeader,
|
|
761
|
+
this.logger,
|
|
762
|
+
snapshotDownloader,
|
|
763
|
+
);
|
|
733
764
|
let treeId = "";
|
|
734
765
|
if (snapshot.snapshotTree) {
|
|
735
766
|
assert(snapshot.snapshotTree.id !== undefined, 0x222 /* "Root tree should contain the id!!" */);
|
|
@@ -11,6 +11,7 @@ import { createOdspUrl } from "./createOdspUrl";
|
|
|
11
11
|
import { getApiRoot } from "./odspUrlHelper";
|
|
12
12
|
import { getOdspResolvedUrl } from "./odspUtils";
|
|
13
13
|
import { getHashedDocumentId } from "./odspPublicUtils";
|
|
14
|
+
import { ClpCompliantAppHeader } from "./contractsPublic";
|
|
14
15
|
|
|
15
16
|
function getUrlBase(siteUrl: string, driveId: string, itemId: string, fileVersion?: string) {
|
|
16
17
|
const siteOrigin = new URL(siteUrl).origin;
|
|
@@ -101,6 +102,7 @@ export class OdspDriverUrlResolver implements IUrlResolver {
|
|
|
101
102
|
},
|
|
102
103
|
fileVersion: undefined,
|
|
103
104
|
shareLinkInfo,
|
|
105
|
+
isClpCompliantApp: request.headers?.[ClpCompliantAppHeader.isClpCompliantApp],
|
|
104
106
|
};
|
|
105
107
|
}
|
|
106
108
|
const { siteUrl, driveId, itemId, path, containerPackageName, fileVersion } = decodeOdspUrl(request.url);
|
|
@@ -142,6 +144,7 @@ export class OdspDriverUrlResolver implements IUrlResolver {
|
|
|
142
144
|
containerPackageName,
|
|
143
145
|
},
|
|
144
146
|
fileVersion,
|
|
147
|
+
isClpCompliantApp: request.headers?.[ClpCompliantAppHeader.isClpCompliantApp],
|
|
145
148
|
};
|
|
146
149
|
}
|
|
147
150
|
|
|
@@ -133,9 +133,8 @@ export class OdspDriverUrlResolverForShareLink implements IUrlResolver {
|
|
|
133
133
|
// We need to remove the nav param if set by host when setting the sharelink as otherwise the shareLinkId
|
|
134
134
|
// when redeeming the share link during the redeem fallback for trees latest call becomes greater than
|
|
135
135
|
// the eligible length.
|
|
136
|
-
odspResolvedUrl.sharingLinkToRedeem = this.removeNavParam(request.url);
|
|
137
136
|
odspResolvedUrl.shareLinkInfo = Object.assign(odspResolvedUrl.shareLinkInfo || {},
|
|
138
|
-
{sharingLinkToRedeem:
|
|
137
|
+
{sharingLinkToRedeem: this.removeNavParam(request.url)});
|
|
139
138
|
}
|
|
140
139
|
if (odspResolvedUrl.itemId) {
|
|
141
140
|
// Kick start the sharing link request if we don't have it already as a performance optimization.
|
|
@@ -38,6 +38,7 @@ export class OdspSummaryUploadManager {
|
|
|
38
38
|
private readonly getStorageToken: InstrumentedStorageTokenFetcher,
|
|
39
39
|
logger: ITelemetryLogger,
|
|
40
40
|
private readonly epochTracker: EpochTracker,
|
|
41
|
+
private readonly forceAccessTokenViaAuthorizationHeader: boolean,
|
|
41
42
|
) {
|
|
42
43
|
this.mc = loggerToMonitoringContext(logger);
|
|
43
44
|
}
|
|
@@ -84,7 +85,11 @@ export class OdspSummaryUploadManager {
|
|
|
84
85
|
return getWithRetryForTokenRefresh(async (options) => {
|
|
85
86
|
const storageToken = await this.getStorageToken(options, "WriteSummaryTree");
|
|
86
87
|
|
|
87
|
-
const { url, headers } = getUrlAndHeadersWithAuth(
|
|
88
|
+
const { url, headers } = getUrlAndHeadersWithAuth(
|
|
89
|
+
`${this.snapshotUrl}/snapshot`,
|
|
90
|
+
storageToken,
|
|
91
|
+
this.forceAccessTokenViaAuthorizationHeader,
|
|
92
|
+
);
|
|
88
93
|
headers["Content-Type"] = "application/json";
|
|
89
94
|
if (parentHandle) {
|
|
90
95
|
headers["If-Match"] = `fluid:containerid=${parentHandle}`;
|
package/src/odspUtils.ts
CHANGED
|
@@ -5,7 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
import { ITelemetryProperties, ITelemetryBaseLogger, ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
7
7
|
import { IResolvedUrl, DriverErrorType } from "@fluidframework/driver-definitions";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
isOnline,
|
|
10
|
+
OnlineStatus,
|
|
11
|
+
RetryableError,
|
|
12
|
+
NonRetryableError,
|
|
13
|
+
NetworkErrorBasic,
|
|
14
|
+
} from "@fluidframework/driver-utils";
|
|
9
15
|
import { assert, performance } from "@fluidframework/common-utils";
|
|
10
16
|
import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
|
|
11
17
|
import { ChildLogger, PerformanceEvent, wrapError } from "@fluidframework/telemetry-utils";
|
|
@@ -302,13 +308,17 @@ export function toInstrumentedOdspTokenFetcher(
|
|
|
302
308
|
}
|
|
303
309
|
return token;
|
|
304
310
|
}, (error) => {
|
|
311
|
+
// There is an important but unofficial contract here where token providers can set canRetry: true
|
|
312
|
+
// to hook into the driver's retry logic (e.g. the retry loop when initiating a connection)
|
|
313
|
+
const rawCanRetry = error?.canRetry;
|
|
305
314
|
const tokenError = wrapError(
|
|
306
315
|
error,
|
|
307
|
-
(errorMessage) => new
|
|
316
|
+
(errorMessage) => new NetworkErrorBasic(
|
|
308
317
|
"tokenFetcherFailed",
|
|
309
318
|
errorMessage,
|
|
310
319
|
OdspErrorType.fetchTokenError,
|
|
311
|
-
|
|
320
|
+
typeof rawCanRetry === "boolean" ? rawCanRetry : false /* canRetry */,
|
|
321
|
+
{ method: name, driverVersion: pkgVersion }));
|
|
312
322
|
throw tokenError;
|
|
313
323
|
}),
|
|
314
324
|
{ cancel: "generic" });
|
package/src/packageVersion.ts
CHANGED
|
@@ -31,6 +31,7 @@ import { IVersionedValueWithEpoch } from "./contracts";
|
|
|
31
31
|
* @param getStorageToken - function that can provide the storage token for a given site. This is
|
|
32
32
|
* is also referred to as the "VROOM" token in SPO.
|
|
33
33
|
* @param persistedCache - Cache to store the fetched snapshot.
|
|
34
|
+
* @param forceAccessTokenViaAuthorizationHeader - whether to force passing given token via authorization header.
|
|
34
35
|
* @param logger - Logger to have telemetry events.
|
|
35
36
|
* @param hostSnapshotFetchOptions - Options to fetch the snapshot if any. Otherwise default will be used.
|
|
36
37
|
* @param enableRedeemFallback - True to have the sharing link redeem fallback in case the Trees Latest/Redeem
|
|
@@ -42,6 +43,7 @@ export async function prefetchLatestSnapshot(
|
|
|
42
43
|
resolvedUrl: IResolvedUrl,
|
|
43
44
|
getStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>,
|
|
44
45
|
persistedCache: IPersistedCache,
|
|
46
|
+
forceAccessTokenViaAuthorizationHeader: boolean,
|
|
45
47
|
logger: ITelemetryBaseLogger,
|
|
46
48
|
hostSnapshotFetchOptions: ISnapshotOptions | undefined,
|
|
47
49
|
enableRedeemFallback?: boolean,
|
|
@@ -84,6 +86,7 @@ export async function prefetchLatestSnapshot(
|
|
|
84
86
|
odspResolvedUrl,
|
|
85
87
|
storageTokenFetcher,
|
|
86
88
|
hostSnapshotFetchOptions,
|
|
89
|
+
forceAccessTokenViaAuthorizationHeader,
|
|
87
90
|
odspLogger,
|
|
88
91
|
snapshotDownloader,
|
|
89
92
|
putInCache,
|
|
@@ -54,7 +54,7 @@ export class RetryErrorsStorageAdapter implements IDocumentStorageService, IDisp
|
|
|
54
54
|
);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
public async getVersions(versionId: string, count: number): Promise<IVersion[]> {
|
|
57
|
+
public async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {
|
|
58
58
|
return this.runWithRetry(
|
|
59
59
|
async () => this.internalStorageService.getVersions(versionId, count),
|
|
60
60
|
"storage_getVersions",
|