@fluidframework/odsp-driver 0.56.0 → 0.56.4
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/createFile.js +2 -2
- package/dist/createFile.js.map +1 -1
- package/dist/epochTracker.d.ts.map +1 -1
- package/dist/epochTracker.js +2 -2
- package/dist/epochTracker.js.map +1 -1
- package/dist/fetchSnapshot.js +1 -1
- package/dist/fetchSnapshot.js.map +1 -1
- package/dist/getFileLink.js +2 -2
- package/dist/getFileLink.js.map +1 -1
- package/dist/odspDeltaStorageService.js +1 -1
- package/dist/odspDeltaStorageService.js.map +1 -1
- package/dist/odspDocumentStorageManager.js +3 -3
- package/dist/odspDocumentStorageManager.js.map +1 -1
- package/dist/odspUtils.d.ts +1 -1
- package/dist/odspUtils.d.ts.map +1 -1
- package/dist/odspUtils.js +11 -8
- 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/vroom.js +1 -1
- package/dist/vroom.js.map +1 -1
- package/lib/createFile.js +2 -2
- package/lib/createFile.js.map +1 -1
- package/lib/epochTracker.d.ts.map +1 -1
- package/lib/epochTracker.js +2 -2
- package/lib/epochTracker.js.map +1 -1
- package/lib/fetchSnapshot.js +1 -1
- package/lib/fetchSnapshot.js.map +1 -1
- package/lib/getFileLink.js +2 -2
- package/lib/getFileLink.js.map +1 -1
- package/lib/odspDeltaStorageService.js +1 -1
- package/lib/odspDeltaStorageService.js.map +1 -1
- package/lib/odspDocumentStorageManager.js +3 -3
- package/lib/odspDocumentStorageManager.js.map +1 -1
- package/lib/odspUtils.d.ts +1 -1
- package/lib/odspUtils.d.ts.map +1 -1
- package/lib/odspUtils.js +12 -9
- 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/vroom.js +1 -1
- package/lib/vroom.js.map +1 -1
- package/package.json +7 -7
- package/src/createFile.ts +2 -2
- package/src/epochTracker.ts +2 -8
- package/src/fetchSnapshot.ts +1 -1
- package/src/getFileLink.ts +2 -2
- package/src/odspDeltaStorageService.ts +1 -1
- package/src/odspDocumentStorageManager.ts +3 -3
- package/src/odspUtils.ts +21 -11
- package/src/packageVersion.ts +1 -1
- package/src/vroom.ts +1 -1
package/src/createFile.ts
CHANGED
|
@@ -159,7 +159,7 @@ export async function createNewEmptyFluidFile(
|
|
|
159
159
|
}
|
|
160
160
|
event.end({
|
|
161
161
|
headers: Object.keys(headers).length !== 0 ? true : undefined,
|
|
162
|
-
...fetchResponse.
|
|
162
|
+
...fetchResponse.propsToLog,
|
|
163
163
|
});
|
|
164
164
|
return content.id;
|
|
165
165
|
},
|
|
@@ -220,7 +220,7 @@ export async function createNewFluidFileFromSummary(
|
|
|
220
220
|
event.end({
|
|
221
221
|
headers: Object.keys(headers).length !== 0 ? true : undefined,
|
|
222
222
|
attempts: options.refresh ? 2 : 1,
|
|
223
|
-
...fetchResponse.
|
|
223
|
+
...fetchResponse.propsToLog,
|
|
224
224
|
});
|
|
225
225
|
return content;
|
|
226
226
|
},
|
package/src/epochTracker.ts
CHANGED
|
@@ -182,10 +182,7 @@ export class EpochTracker implements IPersistedFileCache {
|
|
|
182
182
|
).then((response) => {
|
|
183
183
|
epochFromResponse = response.headers.get("x-fluid-epoch");
|
|
184
184
|
this.validateEpochFromResponse(epochFromResponse, fetchType);
|
|
185
|
-
response.
|
|
186
|
-
...response.commonSpoHeaders,
|
|
187
|
-
"X-RequestStats": clientCorrelationId,
|
|
188
|
-
};
|
|
185
|
+
response.propsToLog.XRequestStatsHeader = clientCorrelationId;
|
|
189
186
|
return response;
|
|
190
187
|
}).catch(async (error) => {
|
|
191
188
|
// Get the server epoch from error in case we don't have it as if undefined we won't be able
|
|
@@ -224,10 +221,7 @@ export class EpochTracker implements IPersistedFileCache {
|
|
|
224
221
|
).then((response) => {
|
|
225
222
|
epochFromResponse = response.headers.get("x-fluid-epoch");
|
|
226
223
|
this.validateEpochFromResponse(epochFromResponse, fetchType);
|
|
227
|
-
response.
|
|
228
|
-
...response.commonSpoHeaders,
|
|
229
|
-
"X-RequestStats": clientCorrelationId,
|
|
230
|
-
};
|
|
224
|
+
response.propsToLog.XRequestStatsHeader = clientCorrelationId;
|
|
231
225
|
return response;
|
|
232
226
|
}).catch(async (error) => {
|
|
233
227
|
// Get the server epoch from error in case we don't have it as if undefined we won't be able
|
package/src/fetchSnapshot.ts
CHANGED
|
@@ -317,7 +317,7 @@ async function fetchLatestSnapshotCore(
|
|
|
317
317
|
// Azure Fluid Relay service is the redeem status (S means success), and FRP is a flag to indicate
|
|
318
318
|
// if the permission has changed.
|
|
319
319
|
sltelemetry: response.odspSnapshotResponse.headers.get("x-fluid-sltelemetry"),
|
|
320
|
-
...response.odspSnapshotResponse.
|
|
320
|
+
...response.odspSnapshotResponse.propsToLog,
|
|
321
321
|
});
|
|
322
322
|
return snapshot;
|
|
323
323
|
},
|
package/src/getFileLink.ts
CHANGED
|
@@ -117,7 +117,7 @@ async function getFileLinkCore(
|
|
|
117
117
|
},
|
|
118
118
|
};
|
|
119
119
|
const response = await fetchHelper(url, requestInit);
|
|
120
|
-
additionalProps = response.
|
|
120
|
+
additionalProps = response.propsToLog;
|
|
121
121
|
|
|
122
122
|
const sharingInfo = await response.content.json();
|
|
123
123
|
const directUrl = sharingInfo?.d?.directUrl;
|
|
@@ -174,7 +174,7 @@ async function getFileItemLite(
|
|
|
174
174
|
);
|
|
175
175
|
const requestInit = { method: "GET", headers };
|
|
176
176
|
const response = await fetchHelper(url, requestInit);
|
|
177
|
-
additionalProps = response.
|
|
177
|
+
additionalProps = response.propsToLog;
|
|
178
178
|
|
|
179
179
|
const responseJson = await response.content.json();
|
|
180
180
|
if (!isFileItemLite(responseJson)) {
|
|
@@ -94,7 +94,7 @@ export class OdspDeltaStorageService {
|
|
|
94
94
|
headers: Object.keys(headers).length !== 0 ? true : undefined,
|
|
95
95
|
length: messages.length,
|
|
96
96
|
duration: response.duration, // this duration for single attempt!
|
|
97
|
-
...response.
|
|
97
|
+
...response.propsToLog,
|
|
98
98
|
attempts: options.refresh ? 2 : 1,
|
|
99
99
|
from,
|
|
100
100
|
to,
|
|
@@ -270,7 +270,7 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
270
270
|
));
|
|
271
271
|
event.end({
|
|
272
272
|
blobId: res.content.id,
|
|
273
|
-
...res.
|
|
273
|
+
...res.propsToLog,
|
|
274
274
|
});
|
|
275
275
|
return res;
|
|
276
276
|
},
|
|
@@ -309,7 +309,7 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
309
309
|
const res = await this.epochTracker.fetchArray(url, { headers }, "blob");
|
|
310
310
|
event.end({
|
|
311
311
|
waitQueueLength: this.epochTracker.rateLimiter.waitQueueLength,
|
|
312
|
-
...res.
|
|
312
|
+
...res.propsToLog,
|
|
313
313
|
attempts: options.refresh ? 2 : 1,
|
|
314
314
|
});
|
|
315
315
|
const cacheControl = res.headers.get("cache-control");
|
|
@@ -318,7 +318,7 @@ export class OdspDocumentStorageService implements IDocumentStorageService {
|
|
|
318
318
|
eventName: "NonCacheableBlob",
|
|
319
319
|
cacheControl,
|
|
320
320
|
blobId,
|
|
321
|
-
...res.
|
|
321
|
+
...res.propsToLog,
|
|
322
322
|
});
|
|
323
323
|
}
|
|
324
324
|
return res.content;
|
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";
|
|
@@ -46,7 +52,7 @@ export interface ISnapshotContents {
|
|
|
46
52
|
export interface IOdspResponse<T> {
|
|
47
53
|
content: T;
|
|
48
54
|
headers: Map<string, string>;
|
|
49
|
-
|
|
55
|
+
propsToLog: ITelemetryProperties;
|
|
50
56
|
duration: number,
|
|
51
57
|
}
|
|
52
58
|
|
|
@@ -116,7 +122,7 @@ export async function fetchHelper(
|
|
|
116
122
|
return {
|
|
117
123
|
content: response,
|
|
118
124
|
headers,
|
|
119
|
-
|
|
125
|
+
propsToLog: getSPOAndGraphRequestIdsFromResponse(headers),
|
|
120
126
|
duration: performance.now() - start,
|
|
121
127
|
};
|
|
122
128
|
}, (error) => {
|
|
@@ -159,14 +165,14 @@ export async function fetchArray(
|
|
|
159
165
|
requestInfo: RequestInfo,
|
|
160
166
|
requestInit: RequestInit | undefined,
|
|
161
167
|
): Promise<IOdspResponse<ArrayBuffer>> {
|
|
162
|
-
const { content, headers,
|
|
168
|
+
const { content, headers, propsToLog, duration } = await fetchHelper(requestInfo, requestInit);
|
|
163
169
|
|
|
164
170
|
const arrayBuffer = await content.arrayBuffer();
|
|
165
|
-
|
|
171
|
+
propsToLog.bodySize = arrayBuffer.byteLength;
|
|
166
172
|
return {
|
|
167
173
|
headers,
|
|
168
174
|
content: arrayBuffer,
|
|
169
|
-
|
|
175
|
+
propsToLog,
|
|
170
176
|
duration,
|
|
171
177
|
};
|
|
172
178
|
}
|
|
@@ -180,7 +186,7 @@ export async function fetchAndParseAsJSONHelper<T>(
|
|
|
180
186
|
requestInfo: RequestInfo,
|
|
181
187
|
requestInit: RequestInit | undefined,
|
|
182
188
|
): Promise<IOdspResponse<T>> {
|
|
183
|
-
const { content, headers,
|
|
189
|
+
const { content, headers, propsToLog, duration } = await fetchHelper(requestInfo, requestInit);
|
|
184
190
|
let text: string | undefined;
|
|
185
191
|
try {
|
|
186
192
|
text = await content.text();
|
|
@@ -198,11 +204,11 @@ export async function fetchAndParseAsJSONHelper<T>(
|
|
|
198
204
|
);
|
|
199
205
|
}
|
|
200
206
|
|
|
201
|
-
|
|
207
|
+
propsToLog.bodySize = text.length;
|
|
202
208
|
const res = {
|
|
203
209
|
headers,
|
|
204
210
|
content: JSON.parse(text),
|
|
205
|
-
|
|
211
|
+
propsToLog,
|
|
206
212
|
duration,
|
|
207
213
|
};
|
|
208
214
|
return res;
|
|
@@ -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
package/src/vroom.ts
CHANGED
|
@@ -94,7 +94,7 @@ export async function fetchJoinSession(
|
|
|
94
94
|
|
|
95
95
|
// TODO SPO-specific telemetry
|
|
96
96
|
event.end({
|
|
97
|
-
...response.
|
|
97
|
+
...response.propsToLog,
|
|
98
98
|
// pushV2 websocket urls will contain pushf
|
|
99
99
|
pushv2: socketUrl.includes("pushf"),
|
|
100
100
|
webSocketHostName,
|