@fluidframework/odsp-driver 1.1.0 → 1.2.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/dist/checkUrl.d.ts +1 -1
- package/dist/checkUrl.js +1 -1
- package/dist/checkUrl.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/contractsPublic.d.ts +1 -0
- package/dist/contractsPublic.d.ts.map +1 -1
- package/dist/contractsPublic.js.map +1 -1
- package/dist/getFileLink.js +0 -4
- package/dist/getFileLink.js.map +1 -1
- package/dist/localOdspDriver/localOdspDocumentService.d.ts +26 -0
- package/dist/localOdspDriver/localOdspDocumentService.d.ts.map +1 -0
- package/dist/localOdspDriver/localOdspDocumentService.js +39 -0
- package/dist/localOdspDriver/localOdspDocumentService.js.map +1 -0
- package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts +24 -0
- package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -0
- package/dist/localOdspDriver/localOdspDocumentServiceFactory.js +45 -0
- package/dist/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -0
- package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts +27 -0
- package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +1 -0
- package/dist/localOdspDriver/localOdspDocumentStorageManager.js +66 -0
- package/dist/localOdspDriver/localOdspDocumentStorageManager.js.map +1 -0
- package/dist/odspDeltaStorageService.js.map +1 -1
- package/dist/odspDocumentService.d.ts.map +1 -1
- package/dist/odspDocumentService.js.map +1 -1
- package/dist/odspDocumentServiceFactory.d.ts +2 -1
- package/dist/odspDocumentServiceFactory.d.ts.map +1 -1
- package/dist/odspDocumentServiceFactory.js +7 -1
- package/dist/odspDocumentServiceFactory.js.map +1 -1
- package/dist/odspDocumentServiceFactoryCore.d.ts +3 -1
- package/dist/odspDocumentServiceFactoryCore.d.ts.map +1 -1
- package/dist/odspDocumentServiceFactoryCore.js.map +1 -1
- package/dist/odspDocumentStorageManager.d.ts +5 -23
- package/dist/odspDocumentStorageManager.d.ts.map +1 -1
- package/dist/odspDocumentStorageManager.js +52 -245
- package/dist/odspDocumentStorageManager.js.map +1 -1
- package/dist/odspDocumentStorageServiceBase.d.ts +58 -0
- package/dist/odspDocumentStorageServiceBase.d.ts.map +1 -0
- package/dist/odspDocumentStorageServiceBase.js +216 -0
- package/dist/odspDocumentStorageServiceBase.js.map +1 -0
- package/dist/odspDriverUrlResolver.js +1 -1
- package/dist/odspDriverUrlResolver.js.map +1 -1
- package/dist/odspDriverUrlResolverForShareLink.d.ts +8 -2
- package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
- package/dist/odspDriverUrlResolverForShareLink.js +11 -3
- package/dist/odspDriverUrlResolverForShareLink.js.map +1 -1
- package/dist/odspFluidFileLink.d.ts.map +1 -1
- package/dist/odspFluidFileLink.js +27 -21
- package/dist/odspFluidFileLink.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/lib/checkUrl.d.ts +1 -1
- package/lib/checkUrl.js +1 -1
- package/lib/checkUrl.js.map +1 -1
- package/lib/constants.d.ts +1 -1
- package/lib/constants.d.ts.map +1 -1
- package/lib/constants.js +1 -1
- package/lib/constants.js.map +1 -1
- package/lib/contractsPublic.d.ts +1 -0
- package/lib/contractsPublic.d.ts.map +1 -1
- package/lib/contractsPublic.js.map +1 -1
- package/lib/getFileLink.js +0 -4
- package/lib/getFileLink.js.map +1 -1
- package/lib/localOdspDriver/localOdspDocumentService.d.ts +26 -0
- package/lib/localOdspDriver/localOdspDocumentService.d.ts.map +1 -0
- package/lib/localOdspDriver/localOdspDocumentService.js +35 -0
- package/lib/localOdspDriver/localOdspDocumentService.js.map +1 -0
- package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.ts +24 -0
- package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -0
- package/lib/localOdspDriver/localOdspDocumentServiceFactory.js +41 -0
- package/lib/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -0
- package/lib/localOdspDriver/localOdspDocumentStorageManager.d.ts +27 -0
- package/lib/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +1 -0
- package/lib/localOdspDriver/localOdspDocumentStorageManager.js +62 -0
- package/lib/localOdspDriver/localOdspDocumentStorageManager.js.map +1 -0
- package/lib/odspDeltaStorageService.js.map +1 -1
- package/lib/odspDocumentService.d.ts.map +1 -1
- package/lib/odspDocumentService.js +1 -1
- package/lib/odspDocumentService.js.map +1 -1
- package/lib/odspDocumentServiceFactory.d.ts +2 -1
- package/lib/odspDocumentServiceFactory.d.ts.map +1 -1
- package/lib/odspDocumentServiceFactory.js +5 -0
- package/lib/odspDocumentServiceFactory.js.map +1 -1
- package/lib/odspDocumentServiceFactoryCore.d.ts +3 -1
- package/lib/odspDocumentServiceFactoryCore.d.ts.map +1 -1
- package/lib/odspDocumentServiceFactoryCore.js.map +1 -1
- package/lib/odspDocumentStorageManager.d.ts +5 -23
- package/lib/odspDocumentStorageManager.d.ts.map +1 -1
- package/lib/odspDocumentStorageManager.js +53 -246
- package/lib/odspDocumentStorageManager.js.map +1 -1
- package/lib/odspDocumentStorageServiceBase.d.ts +58 -0
- package/lib/odspDocumentStorageServiceBase.d.ts.map +1 -0
- package/lib/odspDocumentStorageServiceBase.js +212 -0
- package/lib/odspDocumentStorageServiceBase.js.map +1 -0
- package/lib/odspDriverUrlResolver.js +1 -1
- package/lib/odspDriverUrlResolver.js.map +1 -1
- package/lib/odspDriverUrlResolverForShareLink.d.ts +8 -2
- package/lib/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
- package/lib/odspDriverUrlResolverForShareLink.js +11 -3
- package/lib/odspDriverUrlResolverForShareLink.js.map +1 -1
- package/lib/odspFluidFileLink.d.ts.map +1 -1
- package/lib/odspFluidFileLink.js +27 -21
- package/lib/odspFluidFileLink.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/package.json +17 -12
- package/src/checkUrl.ts +1 -1
- package/src/constants.ts +1 -1
- package/src/contractsPublic.ts +1 -0
- package/src/getFileLink.ts +0 -5
- package/src/localOdspDriver/localOdspDocumentService.ts +54 -0
- package/src/localOdspDriver/localOdspDocumentServiceFactory.ts +67 -0
- package/src/localOdspDriver/localOdspDocumentStorageManager.ts +83 -0
- package/src/odspDeltaStorageService.ts +1 -1
- package/src/odspDocumentService.ts +5 -1
- package/src/odspDocumentServiceFactory.ts +7 -3
- package/src/odspDocumentServiceFactoryCore.ts +1 -1
- package/src/odspDocumentStorageManager.ts +81 -312
- package/src/odspDocumentStorageServiceBase.ts +268 -0
- package/src/odspDriverUrlResolver.ts +1 -1
- package/src/odspDriverUrlResolverForShareLink.ts +13 -1
- package/src/odspFluidFileLink.ts +26 -22
- package/src/packageVersion.ts +1 -1
package/lib/odspFluidFileLink.js
CHANGED
|
@@ -6,13 +6,14 @@ import { fromBase64ToUtf8, fromUtf8ToBase64 } from "@fluidframework/common-utils
|
|
|
6
6
|
import { OdcFileSiteOrigin, OdcApiSiteOrigin } from "./constants";
|
|
7
7
|
const fluidSignature = "1";
|
|
8
8
|
const fluidSignatureParamName = "fluid";
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
9
|
+
const sitePathParamName = "s";
|
|
10
|
+
const driveIdParamName = "d";
|
|
11
|
+
const itemIdParamName = "f";
|
|
12
|
+
const dataStorePathParamName = "c";
|
|
13
|
+
const appNameParamName = "a";
|
|
14
|
+
const containerPackageNameParamName = "p";
|
|
15
|
+
const fileVersionParamName = "v";
|
|
16
|
+
const additionalContextParamName = "x";
|
|
16
17
|
/**
|
|
17
18
|
* Transforms given Fluid data store locator into string that can be embedded into url
|
|
18
19
|
* @param locator - describes Fluid data store locator info to be encoded
|
|
@@ -24,15 +25,18 @@ export function encodeOdspFluidDataStoreLocator(locator) {
|
|
|
24
25
|
const driveId = encodeURIComponent(locator.driveId);
|
|
25
26
|
const itemId = encodeURIComponent(locator.itemId);
|
|
26
27
|
const dataStorePath = encodeURIComponent(locator.dataStorePath);
|
|
27
|
-
let locatorSerialized = `${
|
|
28
|
+
let locatorSerialized = `${sitePathParamName}=${sitePath}&${driveIdParamName}=${driveId}&${itemIdParamName}=${itemId}&${dataStorePathParamName}=${dataStorePath}&${fluidSignatureParamName}=${fluidSignature}`;
|
|
28
29
|
if (locator.appName) {
|
|
29
|
-
locatorSerialized += `&${
|
|
30
|
+
locatorSerialized += `&${appNameParamName}=${encodeURIComponent(locator.appName)}`;
|
|
30
31
|
}
|
|
31
32
|
if (locator.containerPackageName) {
|
|
32
|
-
locatorSerialized += `&${
|
|
33
|
+
locatorSerialized += `&${containerPackageNameParamName}=${encodeURIComponent(locator.containerPackageName)}`;
|
|
33
34
|
}
|
|
34
35
|
if (locator.fileVersion) {
|
|
35
|
-
locatorSerialized += `&${
|
|
36
|
+
locatorSerialized += `&${fileVersionParamName}=${encodeURIComponent(locator.fileVersion)}`;
|
|
37
|
+
}
|
|
38
|
+
if (locator.context) {
|
|
39
|
+
locatorSerialized += `&${additionalContextParamName}=${encodeURIComponent(locator.context)}`;
|
|
36
40
|
}
|
|
37
41
|
return fromUtf8ToBase64(locatorSerialized);
|
|
38
42
|
}
|
|
@@ -44,21 +48,22 @@ export function encodeOdspFluidDataStoreLocator(locator) {
|
|
|
44
48
|
* @returns object representing Fluid data store location in ODSP terms
|
|
45
49
|
*/
|
|
46
50
|
function decodeOdspFluidDataStoreLocator(encodedLocatorValue, siteOriginUrl) {
|
|
47
|
-
var _a, _b, _c;
|
|
51
|
+
var _a, _b, _c, _d;
|
|
48
52
|
const locatorInfo = new URLSearchParams(fromBase64ToUtf8(encodedLocatorValue));
|
|
49
53
|
const signatureValue = locatorInfo.get(fluidSignatureParamName);
|
|
50
54
|
if (signatureValue !== "1") {
|
|
51
55
|
return undefined;
|
|
52
56
|
}
|
|
53
|
-
const sitePath = locatorInfo.get(
|
|
54
|
-
const driveId = locatorInfo.get(
|
|
55
|
-
const itemId = locatorInfo.get(
|
|
56
|
-
const dataStorePath = locatorInfo.get(
|
|
57
|
-
const appName = (_a = locatorInfo.get(
|
|
58
|
-
const containerPackageName = (_b = locatorInfo.get(
|
|
59
|
-
const fileVersion = (_c = locatorInfo.get(
|
|
57
|
+
const sitePath = locatorInfo.get(sitePathParamName);
|
|
58
|
+
const driveId = locatorInfo.get(driveIdParamName);
|
|
59
|
+
const itemId = locatorInfo.get(itemIdParamName);
|
|
60
|
+
const dataStorePath = locatorInfo.get(dataStorePathParamName);
|
|
61
|
+
const appName = (_a = locatorInfo.get(appNameParamName)) !== null && _a !== void 0 ? _a : undefined;
|
|
62
|
+
const containerPackageName = (_b = locatorInfo.get(containerPackageNameParamName)) !== null && _b !== void 0 ? _b : undefined;
|
|
63
|
+
const fileVersion = (_c = locatorInfo.get(fileVersionParamName)) !== null && _c !== void 0 ? _c : undefined;
|
|
64
|
+
const context = (_d = locatorInfo.get(additionalContextParamName)) !== null && _d !== void 0 ? _d : undefined;
|
|
60
65
|
// "" is a valid value for dataStorePath so simply check for absence of the param;
|
|
61
|
-
//
|
|
66
|
+
// file storage locator params must be present and non-empty
|
|
62
67
|
if (!sitePath || !driveId || !itemId || dataStorePath === null) {
|
|
63
68
|
return undefined;
|
|
64
69
|
}
|
|
@@ -66,7 +71,7 @@ function decodeOdspFluidDataStoreLocator(encodedLocatorValue, siteOriginUrl) {
|
|
|
66
71
|
try {
|
|
67
72
|
siteUrl = new URL(sitePath, siteOriginUrl);
|
|
68
73
|
}
|
|
69
|
-
catch (
|
|
74
|
+
catch (_e) {
|
|
70
75
|
// Ignore failure to parse url as input might be malformed
|
|
71
76
|
}
|
|
72
77
|
if (!siteUrl) {
|
|
@@ -80,6 +85,7 @@ function decodeOdspFluidDataStoreLocator(encodedLocatorValue, siteOriginUrl) {
|
|
|
80
85
|
appName,
|
|
81
86
|
containerPackageName,
|
|
82
87
|
fileVersion,
|
|
88
|
+
context,
|
|
83
89
|
};
|
|
84
90
|
}
|
|
85
91
|
// This parameter is provided by host in the resolve request and it contains information about the file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odspFluidFileLink.js","sourceRoot":"","sources":["../src/odspFluidFileLink.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAElF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAElE,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,uBAAuB,GAAG,OAAO,CAAC;AACxC,MAAM,
|
|
1
|
+
{"version":3,"file":"odspFluidFileLink.js","sourceRoot":"","sources":["../src/odspFluidFileLink.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 { fromBase64ToUtf8, fromUtf8ToBase64 } from \"@fluidframework/common-utils\";\nimport { OdspFluidDataStoreLocator } from \"./contractsPublic\";\nimport { OdcFileSiteOrigin, OdcApiSiteOrigin } from \"./constants\";\n\nconst fluidSignature = \"1\";\nconst fluidSignatureParamName = \"fluid\";\nconst sitePathParamName = \"s\";\nconst driveIdParamName = \"d\";\nconst itemIdParamName = \"f\";\nconst dataStorePathParamName = \"c\";\nconst appNameParamName = \"a\";\nconst containerPackageNameParamName = \"p\";\nconst fileVersionParamName = \"v\";\nconst additionalContextParamName = \"x\";\n\n/**\n * Transforms given Fluid data store locator into string that can be embedded into url\n * @param locator - describes Fluid data store locator info to be encoded\n * @returns string representing encoded Fluid data store locator info\n */\nexport function encodeOdspFluidDataStoreLocator(locator: OdspFluidDataStoreLocator): string {\n const siteUrl = new URL(locator.siteUrl);\n const sitePath = encodeURIComponent(siteUrl.pathname);\n const driveId = encodeURIComponent(locator.driveId);\n const itemId = encodeURIComponent(locator.itemId);\n const dataStorePath = encodeURIComponent(locator.dataStorePath);\n\n let locatorSerialized = `${sitePathParamName}=${sitePath}&${driveIdParamName}=${driveId}&${\n itemIdParamName}=${itemId}&${dataStorePathParamName}=${dataStorePath}&${\n fluidSignatureParamName}=${fluidSignature}`;\n if (locator.appName) {\n locatorSerialized += `&${appNameParamName}=${encodeURIComponent(locator.appName)}`;\n }\n if (locator.containerPackageName) {\n locatorSerialized += `&${containerPackageNameParamName}=${encodeURIComponent(locator.containerPackageName)}`;\n }\n if (locator.fileVersion) {\n locatorSerialized += `&${fileVersionParamName}=${encodeURIComponent(locator.fileVersion)}`;\n }\n if (locator.context) {\n locatorSerialized += `&${additionalContextParamName}=${encodeURIComponent(locator.context)}`;\n }\n\n return fromUtf8ToBase64(locatorSerialized);\n}\n\n/**\n * Decodes given encoded value representing Fluid data store locator extracted from ODSP Fluid file link\n * @param encodedLocatorValue - encoded Fluid data store locator value which was produced by\n * encodeOdspFluidDataStoreLocator method\n * @param siteOriginUrl - site origin that will be appended to encoded relative path to form absolute file url\n * @returns object representing Fluid data store location in ODSP terms\n */\nfunction decodeOdspFluidDataStoreLocator(\n encodedLocatorValue: string,\n siteOriginUrl: string,\n): OdspFluidDataStoreLocator | undefined {\n const locatorInfo = new URLSearchParams(fromBase64ToUtf8(encodedLocatorValue));\n\n const signatureValue = locatorInfo.get(fluidSignatureParamName);\n if (signatureValue !== \"1\") {\n return undefined;\n }\n\n const sitePath = locatorInfo.get(sitePathParamName);\n const driveId = locatorInfo.get(driveIdParamName);\n const itemId = locatorInfo.get(itemIdParamName);\n const dataStorePath = locatorInfo.get(dataStorePathParamName);\n const appName = locatorInfo.get(appNameParamName) ?? undefined;\n const containerPackageName = locatorInfo.get(containerPackageNameParamName) ?? undefined;\n const fileVersion = locatorInfo.get(fileVersionParamName) ?? undefined;\n const context = locatorInfo.get(additionalContextParamName) ?? undefined;\n // \"\" is a valid value for dataStorePath so simply check for absence of the param;\n // file storage locator params must be present and non-empty\n if (!sitePath || !driveId || !itemId || dataStorePath === null) {\n return undefined;\n }\n\n let siteUrl: URL | undefined;\n try {\n siteUrl = new URL(sitePath, siteOriginUrl);\n } catch {\n // Ignore failure to parse url as input might be malformed\n }\n\n if (!siteUrl) {\n return undefined;\n }\n\n return {\n siteUrl: siteUrl.href,\n driveId,\n itemId,\n dataStorePath,\n appName,\n containerPackageName,\n fileVersion,\n context,\n };\n}\n\n// This parameter is provided by host in the resolve request and it contains information about the file\n// like driveId, itemId, siteUrl, datastorePath, packageName etc.\nexport const locatorQueryParamName = \"nav\";\n\n/**\n * Embeds Fluid data store locator data into given ODSP url\n * @param url - file url in ODSP format (can be either canonical or share link)\n * @param locator - object representing Fluid data store location in ODSP terms\n */\nexport function storeLocatorInOdspUrl(url: URL, locator: OdspFluidDataStoreLocator) {\n const encodedLocatorValue = encodeOdspFluidDataStoreLocator(locator);\n // IMPORTANT: Do not apply encodeURIComponent to encodedLocatorValue, param value is automatically encoded\n // when set via URLSearchParams class\n url.searchParams.set(locatorQueryParamName, encodedLocatorValue);\n}\n\n/**\n * Extract ODSP Fluid data store locator object from given ODSP url. This extracts things like\n * driveId, ItemId, siteUrl etc from a url where these are encoded in nav query param.\n * @param url - ODSP url representing Fluid file link\n * @returns object representing Fluid data store location in ODSP terms\n */\nexport function getLocatorFromOdspUrl(url: URL): OdspFluidDataStoreLocator | undefined {\n // NOTE: No need to apply decodeURIComponent when accessing query params via URLSearchParams class.\n const encodedLocatorValue = url.searchParams.get(locatorQueryParamName);\n if (!encodedLocatorValue) {\n return undefined;\n }\n\n // IMPORTANT: ODC deviates from ODSP in that its file link origin is different from vroom api origin.\n // The following code passes vroom api origin as site origin instead of file origin.\n const siteOriginUrl = url.origin.toLowerCase() === OdcFileSiteOrigin ? OdcApiSiteOrigin : url.origin;\n\n return decodeOdspFluidDataStoreLocator(encodedLocatorValue, siteOriginUrl);\n}\n"]}
|
package/lib/packageVersion.d.ts
CHANGED
package/lib/packageVersion.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,6BAA6B,CAAC;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/odsp-driver\";\nexport const pkgVersion = \"1.
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,6BAA6B,CAAC;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/odsp-driver\";\nexport const pkgVersion = \"1.2.0\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/odsp-driver",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Socket storage implementation for SPO and ODC",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -62,16 +62,16 @@
|
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"@fluidframework/common-definitions": "^0.20.1",
|
|
64
64
|
"@fluidframework/common-utils": "^0.32.1",
|
|
65
|
-
"@fluidframework/core-interfaces": "^1.
|
|
66
|
-
"@fluidframework/driver-base": "^1.
|
|
67
|
-
"@fluidframework/driver-definitions": "^1.
|
|
68
|
-
"@fluidframework/driver-utils": "^1.
|
|
65
|
+
"@fluidframework/core-interfaces": "^1.2.0",
|
|
66
|
+
"@fluidframework/driver-base": "^1.2.0",
|
|
67
|
+
"@fluidframework/driver-definitions": "^1.2.0",
|
|
68
|
+
"@fluidframework/driver-utils": "^1.2.0",
|
|
69
69
|
"@fluidframework/gitresources": "^0.1036.5000",
|
|
70
|
-
"@fluidframework/odsp-doclib-utils": "^1.
|
|
71
|
-
"@fluidframework/odsp-driver-definitions": "^1.
|
|
70
|
+
"@fluidframework/odsp-doclib-utils": "^1.2.0",
|
|
71
|
+
"@fluidframework/odsp-driver-definitions": "^1.2.0",
|
|
72
72
|
"@fluidframework/protocol-base": "^0.1036.5000",
|
|
73
73
|
"@fluidframework/protocol-definitions": "^0.1028.2000",
|
|
74
|
-
"@fluidframework/telemetry-utils": "^1.
|
|
74
|
+
"@fluidframework/telemetry-utils": "^1.2.0",
|
|
75
75
|
"abort-controller": "^3.0.0",
|
|
76
76
|
"node-fetch": "^2.6.1",
|
|
77
77
|
"socket.io-client": "^4.4.1",
|
|
@@ -81,8 +81,8 @@
|
|
|
81
81
|
"@fluidframework/build-common": "^0.24.0",
|
|
82
82
|
"@fluidframework/build-tools": "^0.2.74327",
|
|
83
83
|
"@fluidframework/eslint-config-fluid": "^0.28.2000",
|
|
84
|
-
"@fluidframework/mocha-test-setup": "^1.
|
|
85
|
-
"@fluidframework/odsp-driver-previous": "npm:@fluidframework/odsp-driver
|
|
84
|
+
"@fluidframework/mocha-test-setup": "^1.2.0",
|
|
85
|
+
"@fluidframework/odsp-driver-previous": "npm:@fluidframework/odsp-driver@1.1.0",
|
|
86
86
|
"@microsoft/api-extractor": "^7.22.2",
|
|
87
87
|
"@rushstack/eslint-config": "^2.5.1",
|
|
88
88
|
"@types/mocha": "^9.1.1",
|
|
@@ -100,7 +100,12 @@
|
|
|
100
100
|
"typescript-formatter": "7.1.0"
|
|
101
101
|
},
|
|
102
102
|
"typeValidation": {
|
|
103
|
-
"version": "1.
|
|
104
|
-
"broken": {
|
|
103
|
+
"version": "1.2.0",
|
|
104
|
+
"broken": {
|
|
105
|
+
"VariableDeclaration_OdcApiSiteOrigin": {
|
|
106
|
+
"forwardCompat": false,
|
|
107
|
+
"backCompat": false
|
|
108
|
+
}
|
|
109
|
+
}
|
|
105
110
|
}
|
|
106
111
|
}
|
package/src/checkUrl.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { getLocatorFromOdspUrl } from "./odspFluidFileLink";
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* A check that returns DriverPreCheckInfo if the URL format is likely supported by this driver.
|
|
11
|
-
* Note that returning information here is NOT a full
|
|
11
|
+
* Note that returning information here is NOT a full guarantee that resolve will ultimately be successful.
|
|
12
12
|
* Instead, this should be used as a lightweight check that can filter out easily detectable unsupported URLs
|
|
13
13
|
* before the entire Fluid loading process needs to be kicked off.
|
|
14
14
|
*/
|
package/src/constants.ts
CHANGED
package/src/contractsPublic.ts
CHANGED
package/src/getFileLink.ts
CHANGED
|
@@ -86,11 +86,6 @@ async function getFileLinkCore(
|
|
|
86
86
|
): Promise<string> {
|
|
87
87
|
const fileItem = await getFileItemLite(getToken, odspUrlParts, logger, identityType === "Consumer");
|
|
88
88
|
|
|
89
|
-
// ODC canonical link does not require any additional processing
|
|
90
|
-
if (identityType === "Consumer") {
|
|
91
|
-
return fileItem.webUrl;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
89
|
// ODSP link requires extra call to return link that is resistant to file being renamed or moved to different folder
|
|
95
90
|
return PerformanceEvent.timedExecAsync(
|
|
96
91
|
logger,
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
7
|
+
import {
|
|
8
|
+
IDocumentDeltaStorageService,
|
|
9
|
+
IDocumentService,
|
|
10
|
+
IDocumentStorageService,
|
|
11
|
+
IResolvedUrl,
|
|
12
|
+
} from "@fluidframework/driver-definitions";
|
|
13
|
+
import { UsageError, EmptyDocumentDeltaStorageService } from "@fluidframework/driver-utils";
|
|
14
|
+
import { IOdspResolvedUrl } from "@fluidframework/odsp-driver-definitions";
|
|
15
|
+
import { IClient } from "@fluidframework/protocol-definitions";
|
|
16
|
+
import { LocalOdspDocumentStorageService } from "./localOdspDocumentStorageManager";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* IDocumentService implementation that provides explicit snapshot to the document storage service.
|
|
20
|
+
*/
|
|
21
|
+
export class LocalOdspDocumentService implements IDocumentService {
|
|
22
|
+
public policies = { storageOnly: true };
|
|
23
|
+
|
|
24
|
+
constructor(
|
|
25
|
+
private readonly odspResolvedUrl: IOdspResolvedUrl,
|
|
26
|
+
private readonly logger: ITelemetryLogger,
|
|
27
|
+
private readonly localSnapshot: Uint8Array | string,
|
|
28
|
+
) { }
|
|
29
|
+
|
|
30
|
+
public get resolvedUrl(): IResolvedUrl {
|
|
31
|
+
return this.odspResolvedUrl;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public async connectToStorage(): Promise<IDocumentStorageService> {
|
|
35
|
+
return new LocalOdspDocumentStorageService(
|
|
36
|
+
this.logger,
|
|
37
|
+
this.localSnapshot,
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public async connectToDeltaStorage(): Promise<IDocumentDeltaStorageService> {
|
|
42
|
+
return new EmptyDocumentDeltaStorageService();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public connectToDeltaStream(_client: IClient): never {
|
|
46
|
+
const toThrow = new UsageError("\"connectToDeltaStream\" is not supported by LocalOdspDocumentService");
|
|
47
|
+
this.logger.sendErrorEvent({ eventName: "UnsupportedUsage" }, toThrow);
|
|
48
|
+
throw toThrow;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
public dispose(_error?: any): void {
|
|
52
|
+
// Do nothing
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { IDocumentService, IResolvedUrl } from "@fluidframework/driver-definitions";
|
|
7
|
+
import { UsageError } from "@fluidframework/driver-utils";
|
|
8
|
+
import { TelemetryLogger } from "@fluidframework/telemetry-utils";
|
|
9
|
+
import { ISummaryTree } from "@fluidframework/protocol-definitions";
|
|
10
|
+
import { ITelemetryBaseLogger } from "@fluidframework/common-definitions";
|
|
11
|
+
import { createOdspLogger, getOdspResolvedUrl } from "../odspUtils";
|
|
12
|
+
import { ICacheAndTracker } from "../epochTracker";
|
|
13
|
+
import { OdspDocumentServiceFactoryCore } from "../odspDocumentServiceFactoryCore";
|
|
14
|
+
import { LocalOdspDocumentService } from "./localOdspDocumentService";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Factory for creating sharepoint document service with a provided snapshot.
|
|
18
|
+
* Use if you don't want to connect to any kind of external/internal storages and want to provide
|
|
19
|
+
* content directly.
|
|
20
|
+
*/
|
|
21
|
+
export class LocalOdspDocumentServiceFactory extends OdspDocumentServiceFactoryCore {
|
|
22
|
+
private logger: TelemetryLogger | undefined;
|
|
23
|
+
|
|
24
|
+
constructor(
|
|
25
|
+
private readonly localSnapshot: Uint8Array | string,
|
|
26
|
+
) {
|
|
27
|
+
super(
|
|
28
|
+
(_options) => this.throwUnsupportedUsageError("Getting storage token"),
|
|
29
|
+
(_options) => this.throwUnsupportedUsageError("Getting websocket token"),
|
|
30
|
+
() => this.throwUnsupportedUsageError("Getting SocketIO Client"),
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
private throwUnsupportedUsageError(unsupportedFuncName: string): never {
|
|
35
|
+
const toThrow = new UsageError(
|
|
36
|
+
`${unsupportedFuncName} is not supported by LocalOdspDocumentServiceFactory`);
|
|
37
|
+
this.logger?.sendErrorEvent({ eventName: "UnsupportedUsage" }, toThrow);
|
|
38
|
+
throw toThrow;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public createContainer(
|
|
42
|
+
_createNewSummary: ISummaryTree | undefined,
|
|
43
|
+
_createNewResolvedUrl: IResolvedUrl,
|
|
44
|
+
logger?: ITelemetryBaseLogger,
|
|
45
|
+
_clientIsSummarizer?: boolean,
|
|
46
|
+
): never {
|
|
47
|
+
const toThrow = new UsageError("\"createContainer\" is not supported by LocalOdspDocumentServiceFactory");
|
|
48
|
+
createOdspLogger(logger).sendErrorEvent({ eventName: "UnsupportedUsage" }, toThrow);
|
|
49
|
+
throw toThrow;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
protected async createDocumentServiceCore(
|
|
53
|
+
resolvedUrl: IResolvedUrl,
|
|
54
|
+
odspLogger: TelemetryLogger,
|
|
55
|
+
_cacheAndTrackerArg?: ICacheAndTracker,
|
|
56
|
+
_clientIsSummarizer?: boolean,
|
|
57
|
+
): Promise<IDocumentService> {
|
|
58
|
+
if (_cacheAndTrackerArg !== undefined) {
|
|
59
|
+
throw new UsageError("Invalid usage. \"_cacheAndTrackerArg\" should not be provided");
|
|
60
|
+
}
|
|
61
|
+
if (_clientIsSummarizer) {
|
|
62
|
+
throw new UsageError("Invalid usage. \"_clientIsSummarizer\" should not be provided");
|
|
63
|
+
}
|
|
64
|
+
this.logger = odspLogger;
|
|
65
|
+
return new LocalOdspDocumentService(getOdspResolvedUrl(resolvedUrl), odspLogger, this.localSnapshot);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { assert } from "@fluidframework/common-utils";
|
|
7
|
+
import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
8
|
+
import { ISummaryContext } from "@fluidframework/driver-definitions";
|
|
9
|
+
import { UsageError } from "@fluidframework/driver-utils";
|
|
10
|
+
import * as api from "@fluidframework/protocol-definitions";
|
|
11
|
+
import { OdspDocumentStorageServiceBase } from "../odspDocumentStorageServiceBase";
|
|
12
|
+
import { ISnapshotContents } from "../odspPublicUtils";
|
|
13
|
+
import { IOdspSnapshot } from "../contracts";
|
|
14
|
+
import { convertOdspSnapshotToSnapshotTreeAndBlobs } from "../odspSnapshotParser";
|
|
15
|
+
import { parseCompactSnapshotResponse } from "../compactSnapshotParser";
|
|
16
|
+
import { ReadBuffer } from "../ReadBufferUtils";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* ODSP document storage service that works on a provided snapshot for all its processing.
|
|
20
|
+
* Attempting to use unsupported actions/methods will result in errors being thrown.
|
|
21
|
+
*/
|
|
22
|
+
export class LocalOdspDocumentStorageService extends OdspDocumentStorageServiceBase {
|
|
23
|
+
private snapshotTreeId: string | undefined;
|
|
24
|
+
|
|
25
|
+
constructor(
|
|
26
|
+
private readonly logger: ITelemetryLogger,
|
|
27
|
+
private readonly localSnapshot: Uint8Array | string,
|
|
28
|
+
) {
|
|
29
|
+
super();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
private calledGetVersions = false;
|
|
33
|
+
|
|
34
|
+
public async getVersions(blobid: string | null, count: number, _scenarioName?: string): Promise<api.IVersion[]> {
|
|
35
|
+
assert(blobid === null, 0x342 /* Invalid usage. "blobid" should always be null */);
|
|
36
|
+
assert(count === 1, 0x343 /* Invalid usage. "count" should always be 1 */);
|
|
37
|
+
|
|
38
|
+
// No reason to re-parse the data since it will never change
|
|
39
|
+
if (this.calledGetVersions) {
|
|
40
|
+
return this.getSnapshotVersion();
|
|
41
|
+
}
|
|
42
|
+
this.calledGetVersions = true;
|
|
43
|
+
|
|
44
|
+
let snapshotContents: ISnapshotContents;
|
|
45
|
+
|
|
46
|
+
if (typeof this.localSnapshot === "string") {
|
|
47
|
+
const content: IOdspSnapshot = JSON.parse(this.localSnapshot);
|
|
48
|
+
snapshotContents = convertOdspSnapshotToSnapshotTreeAndBlobs(content);
|
|
49
|
+
} else {
|
|
50
|
+
snapshotContents = parseCompactSnapshotResponse(
|
|
51
|
+
new ReadBuffer(this.localSnapshot));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
this.snapshotTreeId = this.initializeFromSnapshot(snapshotContents);
|
|
55
|
+
return this.getSnapshotVersion();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private getSnapshotVersion(): api.IVersion[] {
|
|
59
|
+
return this.snapshotTreeId ? [{ id: this.snapshotTreeId, treeId: undefined! }] : [];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
protected fetchTreeFromSnapshot(_id: string, _scenarioName?: string): never {
|
|
63
|
+
this.throwUsageError("fetchTreeFromSnapshot");
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
protected fetchBlobFromStorage(_blobId: string, _evicted: boolean): never {
|
|
67
|
+
this.throwUsageError("fetchBlobFromStorage");
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public uploadSummaryWithContext(_summary: api.ISummaryTree, _context: ISummaryContext): never {
|
|
71
|
+
this.throwUsageError("uploadSummaryWithContext");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public createBlob(_file: ArrayBufferLike): never {
|
|
75
|
+
this.throwUsageError("createBlob");
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
private throwUsageError(methodName: string): never {
|
|
79
|
+
const toThrow = new UsageError(`"${methodName}" is not supported by LocalOdspDocumentStorageService`);
|
|
80
|
+
this.logger.sendErrorEvent({ eventName: "UnsupportedUsage" }, toThrow);
|
|
81
|
+
throw toThrow;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -21,7 +21,11 @@ import {
|
|
|
21
21
|
IDocumentServicePolicies,
|
|
22
22
|
DriverErrorType,
|
|
23
23
|
} from "@fluidframework/driver-definitions";
|
|
24
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
canRetryOnError,
|
|
26
|
+
DeltaStreamConnectionForbiddenError,
|
|
27
|
+
NonRetryableError,
|
|
28
|
+
} from "@fluidframework/driver-utils";
|
|
25
29
|
import { IFacetCodes } from "@fluidframework/odsp-doclib-utils";
|
|
26
30
|
import {
|
|
27
31
|
IClient,
|
|
@@ -12,14 +12,14 @@ import {
|
|
|
12
12
|
} from "@fluidframework/odsp-driver-definitions";
|
|
13
13
|
import { OdspDocumentServiceFactoryCore } from "./odspDocumentServiceFactoryCore";
|
|
14
14
|
import { getSocketIo } from "./getSocketIo";
|
|
15
|
+
// eslint-disable-next-line import/no-internal-modules
|
|
16
|
+
import { LocalOdspDocumentServiceFactory } from "./localOdspDriver/localOdspDocumentServiceFactory";
|
|
15
17
|
|
|
16
18
|
/**
|
|
17
19
|
* Factory for creating the sharepoint document service. Use this if you want to
|
|
18
20
|
* use the sharepoint implementation.
|
|
19
21
|
*/
|
|
20
|
-
export class OdspDocumentServiceFactory
|
|
21
|
-
extends OdspDocumentServiceFactoryCore
|
|
22
|
-
implements IDocumentServiceFactory {
|
|
22
|
+
export class OdspDocumentServiceFactory extends OdspDocumentServiceFactoryCore {
|
|
23
23
|
constructor(
|
|
24
24
|
getStorageToken: TokenFetcher<OdspResourceTokenFetchOptions>,
|
|
25
25
|
getWebsocketToken: TokenFetcher<OdspResourceTokenFetchOptions> | undefined,
|
|
@@ -35,3 +35,7 @@ export class OdspDocumentServiceFactory
|
|
|
35
35
|
);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
+
|
|
39
|
+
export function createLocalOdspDocumentServiceFactory(localSnapshot: Uint8Array | string): IDocumentServiceFactory {
|
|
40
|
+
return new LocalOdspDocumentServiceFactory(localSnapshot);
|
|
41
|
+
}
|
|
@@ -174,7 +174,7 @@ export class OdspDocumentServiceFactoryCore implements IDocumentServiceFactory {
|
|
|
174
174
|
return this.createDocumentServiceCore(resolvedUrl, createOdspLogger(logger), undefined, clientIsSummarizer);
|
|
175
175
|
}
|
|
176
176
|
|
|
177
|
-
|
|
177
|
+
protected async createDocumentServiceCore(
|
|
178
178
|
resolvedUrl: IResolvedUrl,
|
|
179
179
|
odspLogger: TelemetryLogger,
|
|
180
180
|
cacheAndTrackerArg?: ICacheAndTracker,
|