@fluidframework/routerlicious-driver 2.0.0-dev.4.1.0.148229 → 2.0.0-dev.4.2.0.153917
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 +5 -0
- package/README.md +38 -0
- package/dist/deltaStorageService.d.ts +1 -1
- package/dist/deltaStorageService.d.ts.map +1 -1
- package/dist/deltaStorageService.js +7 -4
- package/dist/deltaStorageService.js.map +1 -1
- package/dist/documentService.d.ts +4 -2
- package/dist/documentService.d.ts.map +1 -1
- package/dist/documentService.js +11 -9
- package/dist/documentService.js.map +1 -1
- package/dist/documentServiceFactory.d.ts +2 -1
- package/dist/documentServiceFactory.d.ts.map +1 -1
- package/dist/documentServiceFactory.js +18 -8
- package/dist/documentServiceFactory.js.map +1 -1
- package/dist/documentStorageService.d.ts +3 -2
- package/dist/documentStorageService.d.ts.map +1 -1
- package/dist/documentStorageService.js +4 -4
- package/dist/documentStorageService.js.map +1 -1
- package/dist/gitManager.d.ts +30 -0
- package/dist/gitManager.d.ts.map +1 -0
- package/dist/gitManager.js +89 -0
- package/dist/gitManager.js.map +1 -0
- package/dist/historian.d.ts +33 -0
- package/dist/historian.d.ts.map +1 -0
- package/dist/historian.js +65 -0
- package/dist/historian.js.map +1 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/restWrapper.d.ts +21 -8
- package/dist/restWrapper.d.ts.map +1 -1
- package/dist/restWrapper.js +93 -25
- package/dist/restWrapper.js.map +1 -1
- package/dist/restWrapperBase.d.ts +26 -0
- package/dist/restWrapperBase.d.ts.map +1 -0
- package/dist/restWrapperBase.js +55 -0
- package/dist/restWrapperBase.js.map +1 -0
- package/dist/retriableGitManager.d.ts +10 -21
- package/dist/retriableGitManager.d.ts.map +1 -1
- package/dist/retriableGitManager.js +0 -36
- package/dist/retriableGitManager.js.map +1 -1
- package/dist/shreddedSummaryDocumentStorageService.d.ts +1 -1
- package/dist/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
- package/dist/shreddedSummaryDocumentStorageService.js +6 -6
- package/dist/shreddedSummaryDocumentStorageService.js.map +1 -1
- package/dist/storageContracts.d.ts +44 -0
- package/dist/storageContracts.d.ts.map +1 -0
- package/dist/storageContracts.js +7 -0
- package/dist/storageContracts.js.map +1 -0
- package/dist/summaryTreeUploadManager.d.ts +23 -0
- package/dist/summaryTreeUploadManager.d.ts.map +1 -0
- package/dist/summaryTreeUploadManager.js +110 -0
- package/dist/summaryTreeUploadManager.js.map +1 -0
- package/dist/treeUtils.d.ts +7 -0
- package/dist/treeUtils.d.ts.map +1 -1
- package/dist/treeUtils.js +23 -1
- package/dist/treeUtils.js.map +1 -1
- package/dist/wholeSummaryDocumentStorageService.d.ts +5 -4
- package/dist/wholeSummaryDocumentStorageService.d.ts.map +1 -1
- package/dist/wholeSummaryDocumentStorageService.js +68 -35
- package/dist/wholeSummaryDocumentStorageService.js.map +1 -1
- package/dist/wholeSummaryUploadManager.d.ts +16 -0
- package/dist/wholeSummaryUploadManager.d.ts.map +1 -0
- package/dist/wholeSummaryUploadManager.js +38 -0
- package/dist/wholeSummaryUploadManager.js.map +1 -0
- package/lib/deltaStorageService.d.ts +1 -1
- package/lib/deltaStorageService.d.ts.map +1 -1
- package/lib/deltaStorageService.js +7 -4
- package/lib/deltaStorageService.js.map +1 -1
- package/lib/documentService.d.ts +4 -2
- package/lib/documentService.d.ts.map +1 -1
- package/lib/documentService.js +9 -7
- package/lib/documentService.js.map +1 -1
- package/lib/documentServiceFactory.d.ts +2 -1
- package/lib/documentServiceFactory.d.ts.map +1 -1
- package/lib/documentServiceFactory.js +18 -8
- package/lib/documentServiceFactory.js.map +1 -1
- package/lib/documentStorageService.d.ts +3 -2
- package/lib/documentStorageService.d.ts.map +1 -1
- package/lib/documentStorageService.js +4 -4
- package/lib/documentStorageService.js.map +1 -1
- package/lib/gitManager.d.ts +30 -0
- package/lib/gitManager.d.ts.map +1 -0
- package/lib/gitManager.js +85 -0
- package/lib/gitManager.js.map +1 -0
- package/lib/historian.d.ts +33 -0
- package/lib/historian.d.ts.map +1 -0
- package/lib/historian.js +60 -0
- package/lib/historian.js.map +1 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/restWrapper.d.ts +21 -8
- package/lib/restWrapper.d.ts.map +1 -1
- package/lib/restWrapper.js +92 -26
- package/lib/restWrapper.js.map +1 -1
- package/lib/restWrapperBase.d.ts +26 -0
- package/lib/restWrapperBase.d.ts.map +1 -0
- package/lib/restWrapperBase.js +50 -0
- package/lib/restWrapperBase.js.map +1 -0
- package/lib/retriableGitManager.d.ts +10 -21
- package/lib/retriableGitManager.d.ts.map +1 -1
- package/lib/retriableGitManager.js +0 -36
- package/lib/retriableGitManager.js.map +1 -1
- package/lib/shreddedSummaryDocumentStorageService.d.ts +1 -1
- package/lib/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
- package/lib/shreddedSummaryDocumentStorageService.js +5 -5
- package/lib/shreddedSummaryDocumentStorageService.js.map +1 -1
- package/lib/storageContracts.d.ts +44 -0
- package/lib/storageContracts.d.ts.map +1 -0
- package/lib/storageContracts.js +6 -0
- package/lib/storageContracts.js.map +1 -0
- package/lib/summaryTreeUploadManager.d.ts +23 -0
- package/lib/summaryTreeUploadManager.d.ts.map +1 -0
- package/lib/summaryTreeUploadManager.js +106 -0
- package/lib/summaryTreeUploadManager.js.map +1 -0
- package/lib/treeUtils.d.ts +7 -0
- package/lib/treeUtils.d.ts.map +1 -1
- package/lib/treeUtils.js +20 -0
- package/lib/treeUtils.js.map +1 -1
- package/lib/wholeSummaryDocumentStorageService.d.ts +5 -4
- package/lib/wholeSummaryDocumentStorageService.d.ts.map +1 -1
- package/lib/wholeSummaryDocumentStorageService.js +70 -37
- package/lib/wholeSummaryDocumentStorageService.js.map +1 -1
- package/lib/wholeSummaryUploadManager.d.ts +16 -0
- package/lib/wholeSummaryUploadManager.d.ts.map +1 -0
- package/lib/wholeSummaryUploadManager.js +34 -0
- package/lib/wholeSummaryUploadManager.js.map +1 -0
- package/package.json +8 -9
- package/src/deltaStorageService.ts +11 -3
- package/src/documentService.ts +11 -11
- package/src/documentServiceFactory.ts +35 -17
- package/src/documentStorageService.ts +8 -4
- package/src/gitManager.ts +116 -0
- package/src/historian.ts +121 -0
- package/src/packageVersion.ts +1 -1
- package/src/restWrapper.ts +114 -38
- package/src/restWrapperBase.ts +146 -0
- package/src/retriableGitManager.ts +17 -95
- package/src/shreddedSummaryDocumentStorageService.ts +7 -9
- package/src/storageContracts.ts +63 -0
- package/src/summaryTreeUploadManager.ts +160 -0
- package/src/treeUtils.ts +30 -0
- package/src/wholeSummaryDocumentStorageService.ts +118 -48
- package/src/wholeSummaryUploadManager.ts +64 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentStorageService.js","sourceRoot":"","sources":["../src/documentStorageService.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,2EAI4C;
|
|
1
|
+
{"version":3,"file":"documentStorageService.js","sourceRoot":"","sources":["../src/documentStorageService.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,2EAI4C;AAE5C,+DAGsC;AAItC,6FAA0F;AAC1F,mGAAgG;AAIhG,MAAa,sBAAuB,SAAQ,0CAA2B;IAmDtE,YACiB,EAAU,EACnB,OAAmB,EAC1B,MAAwB,EACxB,QAAyC,EACzC,cAA6C,EAC7C,SAAmC,EACnC,iBAAmD,EACnD,wBAAuD,EAChD,iBAA8B,EACrC,iBAAmE;QAEnE,KAAK,CACJ,sBAAsB,CAAC,kCAAkC,CACxD,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,EACjB,iBAAiB,CACjB,CACD,CAAC;QAxBc,OAAE,GAAF,EAAE,CAAQ;QACnB,YAAO,GAAP,OAAO,CAAY;QAOnB,sBAAiB,GAAjB,iBAAiB,CAAa;QA3D9B,gBAAW,GAAuB,SAAS,CAAC;IA4EpD,CAAC;IA1ED,IAAW,UAAU;QACpB,OAAO,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,kCAAkC,CAChD,EAAU,EACV,OAAmB,EACnB,MAAwB,EACxB,QAAyC,EACzC,cAA6C,EAC7C,SAAmC,EACnC,iBAAmD,EACnD,wBAAuD,EACvD,iBAA8B,EAC9B,iBAAmE;QAEnE,MAAM,cAAc,GAAG,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,wBAAwB;YAC9D,CAAC,CAAC,IAAI,uEAAkC,CACtC,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,CAChB;YACH,CAAC,CAAC,IAAI,6EAAqC,CACzC,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,cAAc,EACd,SAAS,EACT,wBAAwB,EACxB,iBAAiB,CAChB,CAAC;QACL,mGAAmG;QACnG,IACC,CAAC,CAAA,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,wBAAwB,CAAA;YACzC,QAAQ,CAAC,OAAO,KAAK,wCAAmB,CAAC,QAAQ,EAChD;YACD,OAAO,IAAI,6CAA8B,CAAC,cAAc,CAAC,CAAC;SAC1D;QACD,OAAO,cAAc,CAAC;IACvB,CAAC;IA8BM,KAAK,CAAC,eAAe,CAAC,OAAkB;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,IAAI,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,WAAW;gBACf,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;SAC7E;QACD,OAAO,IAAI,CAAC;IACb,CAAC;CACD;AAvFD,wDAuFC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport {\n\tIDocumentStorageService,\n\tIDocumentStorageServicePolicies,\n\tLoaderCachingPolicy,\n} from \"@fluidframework/driver-definitions\";\nimport { ISnapshotTree, IVersion } from \"@fluidframework/protocol-definitions\";\nimport {\n\tDocumentStorageServiceProxy,\n\tPrefetchDocumentStorageService,\n} from \"@fluidframework/driver-utils\";\nimport { INormalizedWholeSummary } from \"@fluidframework/server-services-client\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache } from \"./cache\";\nimport { WholeSummaryDocumentStorageService } from \"./wholeSummaryDocumentStorageService\";\nimport { ShreddedSummaryDocumentStorageService } from \"./shreddedSummaryDocumentStorageService\";\nimport { GitManager } from \"./gitManager\";\nimport { ISnapshotTreeVersion } from \"./definitions\";\n\nexport class DocumentStorageService extends DocumentStorageServiceProxy {\n\tprivate _logTailSha: string | undefined = undefined;\n\n\tpublic get logTailSha(): string | undefined {\n\t\treturn this._logTailSha;\n\t}\n\n\tprivate static loadInternalDocumentStorageService(\n\t\tid: string,\n\t\tmanager: GitManager,\n\t\tlogger: ITelemetryLogger,\n\t\tpolicies: IDocumentStorageServicePolicies,\n\t\tdriverPolicies?: IRouterliciousDriverPolicies,\n\t\tblobCache?: ICache<ArrayBufferLike>,\n\t\tsnapshotTreeCache?: ICache<INormalizedWholeSummary>,\n\t\tshreddedSummaryTreeCache?: ICache<ISnapshotTreeVersion>,\n\t\tnoCacheGitManager?: GitManager,\n\t\tgetStorageManager?: (disableCache?: boolean) => Promise<GitManager>,\n\t): IDocumentStorageService {\n\t\tconst storageService = driverPolicies?.enableWholeSummaryUpload\n\t\t\t? new WholeSummaryDocumentStorageService(\n\t\t\t\t\tid,\n\t\t\t\t\tmanager,\n\t\t\t\t\tlogger,\n\t\t\t\t\tpolicies,\n\t\t\t\t\tdriverPolicies,\n\t\t\t\t\tblobCache,\n\t\t\t\t\tsnapshotTreeCache,\n\t\t\t\t\tnoCacheGitManager,\n\t\t\t\t\tgetStorageManager,\n\t\t\t )\n\t\t\t: new ShreddedSummaryDocumentStorageService(\n\t\t\t\t\tid,\n\t\t\t\t\tmanager,\n\t\t\t\t\tlogger,\n\t\t\t\t\tpolicies,\n\t\t\t\t\tdriverPolicies,\n\t\t\t\t\tblobCache,\n\t\t\t\t\tshreddedSummaryTreeCache,\n\t\t\t\t\tgetStorageManager,\n\t\t\t );\n\t\t// TODO: worth prefetching latest summary making version + snapshot call with WholeSummary storage?\n\t\tif (\n\t\t\t!driverPolicies?.enableWholeSummaryUpload &&\n\t\t\tpolicies.caching === LoaderCachingPolicy.Prefetch\n\t\t) {\n\t\t\treturn new PrefetchDocumentStorageService(storageService);\n\t\t}\n\t\treturn storageService;\n\t}\n\n\tconstructor(\n\t\tpublic readonly id: string,\n\t\tpublic manager: GitManager,\n\t\tlogger: ITelemetryLogger,\n\t\tpolicies: IDocumentStorageServicePolicies,\n\t\tdriverPolicies?: IRouterliciousDriverPolicies,\n\t\tblobCache?: ICache<ArrayBufferLike>,\n\t\tsnapshotTreeCache?: ICache<INormalizedWholeSummary>,\n\t\tshreddedSummaryTreeCache?: ICache<ISnapshotTreeVersion>,\n\t\tpublic noCacheGitManager?: GitManager,\n\t\tgetStorageManager?: (disableCache?: boolean) => Promise<GitManager>,\n\t) {\n\t\tsuper(\n\t\t\tDocumentStorageService.loadInternalDocumentStorageService(\n\t\t\t\tid,\n\t\t\t\tmanager,\n\t\t\t\tlogger,\n\t\t\t\tpolicies,\n\t\t\t\tdriverPolicies,\n\t\t\t\tblobCache,\n\t\t\t\tsnapshotTreeCache,\n\t\t\t\tshreddedSummaryTreeCache,\n\t\t\t\tnoCacheGitManager,\n\t\t\t\tgetStorageManager,\n\t\t\t),\n\t\t);\n\t}\n\n\tpublic async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | null> {\n\t\tconst tree = await this.internalStorageService.getSnapshotTree(version);\n\t\tif (tree !== null) {\n\t\t\tthis._logTailSha =\n\t\t\t\t\".logTail\" in tree.trees ? tree.trees[\".logTail\"].blobs.logTail : undefined;\n\t\t}\n\t\treturn tree;\n\t}\n}\n"]}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import * as resources from "@fluidframework/gitresources";
|
|
6
|
+
import { IWholeFlatSummary, IWholeSummaryPayload, IWriteSummaryResponse } from "@fluidframework/server-services-client";
|
|
7
|
+
import { IGitManager, IHistorian } from "./storageContracts";
|
|
8
|
+
import { IR11sResponse } from "./restWrapper";
|
|
9
|
+
export declare class GitManager implements IGitManager {
|
|
10
|
+
private readonly historian;
|
|
11
|
+
private readonly blobCache;
|
|
12
|
+
private readonly commitCache;
|
|
13
|
+
private readonly treeCache;
|
|
14
|
+
private readonly refCache;
|
|
15
|
+
constructor(historian: IHistorian);
|
|
16
|
+
/**
|
|
17
|
+
* Reads the object with the given ID. We defer to the client implementation to do the actual read.
|
|
18
|
+
*/
|
|
19
|
+
getCommits(shaOrRef: string, count: number): Promise<IR11sResponse<resources.ICommitDetails[]>>;
|
|
20
|
+
/**
|
|
21
|
+
* Reads the object with the given ID. We defer to the client implementation to do the actual read.
|
|
22
|
+
*/
|
|
23
|
+
getTree(root: string, recursive?: boolean): Promise<IR11sResponse<resources.ITree>>;
|
|
24
|
+
getBlob(sha: string): Promise<IR11sResponse<resources.IBlob>>;
|
|
25
|
+
createBlob(content: string, encoding: "utf-8" | "base64"): Promise<IR11sResponse<resources.ICreateBlobResponse>>;
|
|
26
|
+
createGitTree(params: resources.ICreateTreeParams): Promise<IR11sResponse<resources.ITree>>;
|
|
27
|
+
createSummary(summary: IWholeSummaryPayload, initial?: boolean): Promise<IR11sResponse<IWriteSummaryResponse>>;
|
|
28
|
+
getSummary(sha: string): Promise<IR11sResponse<IWholeFlatSummary>>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=gitManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitManager.d.ts","sourceRoot":"","sources":["../src/gitManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EACN,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAiC,MAAM,eAAe,CAAC;AAE7E,qBAAa,UAAW,YAAW,WAAW;IAMjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IALtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;IACpE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;gBAEzB,SAAS,EAAE,UAAU;IAElD;;OAEG;IACU,UAAU,CACtB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC;IAuCrD;;OAEG;IACU,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAShF,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAQ7D,UAAU,CACtB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAC1B,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAQ3C,aAAa,CACzB,MAAM,EAAE,SAAS,CAAC,iBAAiB,GACjC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAK7B,aAAa,CACzB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,GAAE,OAAe,GACtB,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAInC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;CAG/E"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.GitManager = void 0;
|
|
8
|
+
const restWrapper_1 = require("./restWrapper");
|
|
9
|
+
class GitManager {
|
|
10
|
+
constructor(historian) {
|
|
11
|
+
this.historian = historian;
|
|
12
|
+
this.blobCache = new Map();
|
|
13
|
+
this.commitCache = new Map();
|
|
14
|
+
this.treeCache = new Map();
|
|
15
|
+
this.refCache = new Map();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Reads the object with the given ID. We defer to the client implementation to do the actual read.
|
|
19
|
+
*/
|
|
20
|
+
async getCommits(shaOrRef, count) {
|
|
21
|
+
let sha = shaOrRef;
|
|
22
|
+
// See if the sha is really a ref and convert
|
|
23
|
+
if (this.refCache.has(shaOrRef)) {
|
|
24
|
+
sha = this.refCache.get(shaOrRef);
|
|
25
|
+
// Delete refcache after first use
|
|
26
|
+
this.refCache.delete(shaOrRef);
|
|
27
|
+
// If null is stored for the ref then there are no commits - return an empty array
|
|
28
|
+
if (!sha) {
|
|
29
|
+
return (0, restWrapper_1.createR11sResponseFromContent)([]);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// See if the commit sha is hashed and return it if so
|
|
33
|
+
const commit = this.commitCache.get(sha);
|
|
34
|
+
if (commit !== undefined) {
|
|
35
|
+
return (0, restWrapper_1.createR11sResponseFromContent)([
|
|
36
|
+
{
|
|
37
|
+
commit: {
|
|
38
|
+
author: commit.author,
|
|
39
|
+
committer: commit.committer,
|
|
40
|
+
message: commit.message,
|
|
41
|
+
tree: commit.tree,
|
|
42
|
+
url: commit.url,
|
|
43
|
+
},
|
|
44
|
+
parents: commit.parents,
|
|
45
|
+
sha: commit.sha,
|
|
46
|
+
url: commit.url,
|
|
47
|
+
},
|
|
48
|
+
]);
|
|
49
|
+
}
|
|
50
|
+
// Otherwise fall back to the historian
|
|
51
|
+
return this.historian.getCommits(sha, count);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Reads the object with the given ID. We defer to the client implementation to do the actual read.
|
|
55
|
+
*/
|
|
56
|
+
async getTree(root, recursive = true) {
|
|
57
|
+
const tree = this.treeCache.get(root);
|
|
58
|
+
if (tree !== undefined) {
|
|
59
|
+
return (0, restWrapper_1.createR11sResponseFromContent)(tree);
|
|
60
|
+
}
|
|
61
|
+
return this.historian.getTree(root, recursive);
|
|
62
|
+
}
|
|
63
|
+
async getBlob(sha) {
|
|
64
|
+
const blob = this.blobCache.get(sha);
|
|
65
|
+
if (blob !== undefined) {
|
|
66
|
+
return (0, restWrapper_1.createR11sResponseFromContent)(blob);
|
|
67
|
+
}
|
|
68
|
+
return this.historian.getBlob(sha);
|
|
69
|
+
}
|
|
70
|
+
async createBlob(content, encoding) {
|
|
71
|
+
const blob = {
|
|
72
|
+
content,
|
|
73
|
+
encoding,
|
|
74
|
+
};
|
|
75
|
+
return this.historian.createBlob(blob);
|
|
76
|
+
}
|
|
77
|
+
async createGitTree(params) {
|
|
78
|
+
const treeP = this.historian.createTree(params);
|
|
79
|
+
return treeP;
|
|
80
|
+
}
|
|
81
|
+
async createSummary(summary, initial = false) {
|
|
82
|
+
return this.historian.createSummary(summary, initial);
|
|
83
|
+
}
|
|
84
|
+
async getSummary(sha) {
|
|
85
|
+
return this.historian.getSummary(sha);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.GitManager = GitManager;
|
|
89
|
+
//# sourceMappingURL=gitManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitManager.js","sourceRoot":"","sources":["../src/gitManager.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 * as resources from \"@fluidframework/gitresources\";\nimport {\n\tIWholeFlatSummary,\n\tIWholeSummaryPayload,\n\tIWriteSummaryResponse,\n} from \"@fluidframework/server-services-client\";\nimport { IGitManager, IHistorian } from \"./storageContracts\";\nimport { IR11sResponse, createR11sResponseFromContent } from \"./restWrapper\";\n\nexport class GitManager implements IGitManager {\n\tprivate readonly blobCache = new Map<string, resources.IBlob>();\n\tprivate readonly commitCache = new Map<string, resources.ICommit>();\n\tprivate readonly treeCache = new Map<string, resources.ITree>();\n\tprivate readonly refCache = new Map<string, string>();\n\n\tconstructor(private readonly historian: IHistorian) {}\n\n\t/**\n\t * Reads the object with the given ID. We defer to the client implementation to do the actual read.\n\t */\n\tpublic async getCommits(\n\t\tshaOrRef: string,\n\t\tcount: number,\n\t): Promise<IR11sResponse<resources.ICommitDetails[]>> {\n\t\tlet sha: string | undefined = shaOrRef;\n\n\t\t// See if the sha is really a ref and convert\n\t\tif (this.refCache.has(shaOrRef)) {\n\t\t\tsha = this.refCache.get(shaOrRef);\n\n\t\t\t// Delete refcache after first use\n\t\t\tthis.refCache.delete(shaOrRef);\n\n\t\t\t// If null is stored for the ref then there are no commits - return an empty array\n\t\t\tif (!sha) {\n\t\t\t\treturn createR11sResponseFromContent([]);\n\t\t\t}\n\t\t}\n\n\t\t// See if the commit sha is hashed and return it if so\n\t\tconst commit = this.commitCache.get(sha);\n\t\tif (commit !== undefined) {\n\t\t\treturn createR11sResponseFromContent([\n\t\t\t\t{\n\t\t\t\t\tcommit: {\n\t\t\t\t\t\tauthor: commit.author,\n\t\t\t\t\t\tcommitter: commit.committer,\n\t\t\t\t\t\tmessage: commit.message,\n\t\t\t\t\t\ttree: commit.tree,\n\t\t\t\t\t\turl: commit.url,\n\t\t\t\t\t},\n\t\t\t\t\tparents: commit.parents,\n\t\t\t\t\tsha: commit.sha,\n\t\t\t\t\turl: commit.url,\n\t\t\t\t},\n\t\t\t]);\n\t\t}\n\n\t\t// Otherwise fall back to the historian\n\t\treturn this.historian.getCommits(sha, count);\n\t}\n\n\t/**\n\t * Reads the object with the given ID. We defer to the client implementation to do the actual read.\n\t */\n\tpublic async getTree(root: string, recursive = true): Promise<IR11sResponse<resources.ITree>> {\n\t\tconst tree = this.treeCache.get(root);\n\t\tif (tree !== undefined) {\n\t\t\treturn createR11sResponseFromContent(tree);\n\t\t}\n\n\t\treturn this.historian.getTree(root, recursive);\n\t}\n\n\tpublic async getBlob(sha: string): Promise<IR11sResponse<resources.IBlob>> {\n\t\tconst blob = this.blobCache.get(sha);\n\t\tif (blob !== undefined) {\n\t\t\treturn createR11sResponseFromContent(blob);\n\t\t}\n\t\treturn this.historian.getBlob(sha);\n\t}\n\n\tpublic async createBlob(\n\t\tcontent: string,\n\t\tencoding: \"utf-8\" | \"base64\",\n\t): Promise<IR11sResponse<resources.ICreateBlobResponse>> {\n\t\tconst blob: resources.ICreateBlobParams = {\n\t\t\tcontent,\n\t\t\tencoding,\n\t\t};\n\t\treturn this.historian.createBlob(blob);\n\t}\n\n\tpublic async createGitTree(\n\t\tparams: resources.ICreateTreeParams,\n\t): Promise<IR11sResponse<resources.ITree>> {\n\t\tconst treeP = this.historian.createTree(params);\n\t\treturn treeP;\n\t}\n\n\tpublic async createSummary(\n\t\tsummary: IWholeSummaryPayload,\n\t\tinitial: boolean = false,\n\t): Promise<IR11sResponse<IWriteSummaryResponse>> {\n\t\treturn this.historian.createSummary(summary, initial);\n\t}\n\n\tpublic async getSummary(sha: string): Promise<IR11sResponse<IWholeFlatSummary>> {\n\t\treturn this.historian.getSummary(sha);\n\t}\n}\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import * as git from "@fluidframework/gitresources";
|
|
6
|
+
import { IWholeFlatSummary, IWholeSummaryPayload, IWriteSummaryResponse } from "@fluidframework/server-services-client";
|
|
7
|
+
import { RestWrapper } from "./restWrapperBase";
|
|
8
|
+
import { IR11sResponse } from "./restWrapper";
|
|
9
|
+
import { IHistorian } from "./storageContracts";
|
|
10
|
+
export interface ICredentials {
|
|
11
|
+
user: string;
|
|
12
|
+
password: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const getAuthorizationTokenFromCredentials: (credentials: ICredentials) => string;
|
|
15
|
+
/**
|
|
16
|
+
* Implementation of the IHistorian interface that calls out to a REST interface
|
|
17
|
+
*/
|
|
18
|
+
export declare class Historian implements IHistorian {
|
|
19
|
+
private readonly historianApi;
|
|
20
|
+
private readonly restWrapper;
|
|
21
|
+
private readonly defaultQueryString;
|
|
22
|
+
private readonly cacheBust;
|
|
23
|
+
constructor(historianApi: boolean, disableCache: boolean, restWrapper: RestWrapper);
|
|
24
|
+
getBlob(sha: string): Promise<IR11sResponse<git.IBlob>>;
|
|
25
|
+
createBlob(blob: git.ICreateBlobParams): Promise<IR11sResponse<git.ICreateBlobResponse>>;
|
|
26
|
+
getCommits(sha: string, count: number): Promise<IR11sResponse<git.ICommitDetails[]>>;
|
|
27
|
+
createTree(tree: git.ICreateTreeParams): Promise<IR11sResponse<git.ITree>>;
|
|
28
|
+
getTree(sha: string, recursive: boolean): Promise<IR11sResponse<git.ITree>>;
|
|
29
|
+
createSummary(summary: IWholeSummaryPayload, initial?: boolean): Promise<IR11sResponse<IWriteSummaryResponse>>;
|
|
30
|
+
getSummary(sha: string): Promise<IR11sResponse<IWholeFlatSummary>>;
|
|
31
|
+
private getQueryString;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=historian.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historian.d.ts","sourceRoot":"","sources":["../src/historian.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,GAAG,MAAM,8BAA8B,CAAC;AACpD,OAAO,EACN,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAmB,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,oCAAoC,gBAAiB,YAAY,KAAG,MACN,CAAC;AAE5E;;GAEG;AACH,qBAAa,SAAU,YAAW,UAAU;IAK1C,OAAO,CAAC,QAAQ,CAAC,YAAY;IAE7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAN7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuB;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;gBAGlB,YAAY,EAAE,OAAO,EACtC,YAAY,EAAE,OAAO,EACJ,WAAW,EAAE,WAAW;IAU7B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAOvD,UAAU,CACtB,IAAI,EAAE,GAAG,CAAC,iBAAiB,GACzB,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAQrC,UAAU,CACtB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;IAelC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAI1E,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAM3E,aAAa,CACzB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAQnC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAO/E,OAAO,CAAC,cAAc;CAatB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.Historian = exports.getAuthorizationTokenFromCredentials = void 0;
|
|
8
|
+
const common_utils_1 = require("@fluidframework/common-utils");
|
|
9
|
+
const getAuthorizationTokenFromCredentials = (credentials) => `Basic ${(0, common_utils_1.fromUtf8ToBase64)(`${credentials.user}:${credentials.password}`)}`;
|
|
10
|
+
exports.getAuthorizationTokenFromCredentials = getAuthorizationTokenFromCredentials;
|
|
11
|
+
/**
|
|
12
|
+
* Implementation of the IHistorian interface that calls out to a REST interface
|
|
13
|
+
*/
|
|
14
|
+
class Historian {
|
|
15
|
+
constructor(historianApi, disableCache, restWrapper) {
|
|
16
|
+
this.historianApi = historianApi;
|
|
17
|
+
this.restWrapper = restWrapper;
|
|
18
|
+
this.defaultQueryString = {};
|
|
19
|
+
if (disableCache && this.historianApi) {
|
|
20
|
+
this.defaultQueryString.disableCache = disableCache;
|
|
21
|
+
this.cacheBust = false;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
this.cacheBust = disableCache;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async getBlob(sha) {
|
|
28
|
+
return this.restWrapper.get(`/git/blobs/${encodeURIComponent(sha)}`, this.getQueryString());
|
|
29
|
+
}
|
|
30
|
+
async createBlob(blob) {
|
|
31
|
+
return this.restWrapper.post(`/git/blobs`, blob, this.getQueryString());
|
|
32
|
+
}
|
|
33
|
+
async getCommits(sha, count) {
|
|
34
|
+
return this.restWrapper
|
|
35
|
+
.get(`/commits`, this.getQueryString({ count, sha }))
|
|
36
|
+
.catch((error) => error.statusCode === 400 || error.statusCode === 404
|
|
37
|
+
? {
|
|
38
|
+
content: [],
|
|
39
|
+
headers: new Map(),
|
|
40
|
+
propsToLog: {},
|
|
41
|
+
requestUrl: "",
|
|
42
|
+
}
|
|
43
|
+
: Promise.reject(error));
|
|
44
|
+
}
|
|
45
|
+
async createTree(tree) {
|
|
46
|
+
return this.restWrapper.post(`/git/trees`, tree, this.getQueryString());
|
|
47
|
+
}
|
|
48
|
+
async getTree(sha, recursive) {
|
|
49
|
+
return this.restWrapper.get(`/git/trees/${encodeURIComponent(sha)}`, this.getQueryString({ recursive: recursive ? 1 : 0 }));
|
|
50
|
+
}
|
|
51
|
+
async createSummary(summary, initial) {
|
|
52
|
+
return this.restWrapper.post(`/git/summaries`, summary, this.getQueryString(initial !== undefined ? { initial } : undefined));
|
|
53
|
+
}
|
|
54
|
+
async getSummary(sha) {
|
|
55
|
+
return this.restWrapper.get(`/git/summaries/${sha}`, this.getQueryString());
|
|
56
|
+
}
|
|
57
|
+
getQueryString(queryString) {
|
|
58
|
+
if (this.cacheBust) {
|
|
59
|
+
return Object.assign(Object.assign({ cacheBust: Date.now() }, this.defaultQueryString), queryString);
|
|
60
|
+
}
|
|
61
|
+
return Object.assign(Object.assign({}, this.defaultQueryString), queryString);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.Historian = Historian;
|
|
65
|
+
//# sourceMappingURL=historian.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"historian.js","sourceRoot":"","sources":["../src/historian.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 { fromUtf8ToBase64 } from \"@fluidframework/common-utils\";\nimport * as git from \"@fluidframework/gitresources\";\nimport {\n\tIWholeFlatSummary,\n\tIWholeSummaryPayload,\n\tIWriteSummaryResponse,\n} from \"@fluidframework/server-services-client\";\nimport { QueryStringType, RestWrapper } from \"./restWrapperBase\";\nimport { IR11sResponse } from \"./restWrapper\";\nimport { IHistorian } from \"./storageContracts\";\n\nexport interface ICredentials {\n\tuser: string;\n\tpassword: string;\n}\n\nexport const getAuthorizationTokenFromCredentials = (credentials: ICredentials): string =>\n\t`Basic ${fromUtf8ToBase64(`${credentials.user}:${credentials.password}`)}`;\n\n/**\n * Implementation of the IHistorian interface that calls out to a REST interface\n */\nexport class Historian implements IHistorian {\n\tprivate readonly defaultQueryString: QueryStringType = {};\n\tprivate readonly cacheBust: boolean;\n\n\tconstructor(\n\t\tprivate readonly historianApi: boolean,\n\t\tdisableCache: boolean,\n\t\tprivate readonly restWrapper: RestWrapper,\n\t) {\n\t\tif (disableCache && this.historianApi) {\n\t\t\tthis.defaultQueryString.disableCache = disableCache;\n\t\t\tthis.cacheBust = false;\n\t\t} else {\n\t\t\tthis.cacheBust = disableCache;\n\t\t}\n\t}\n\n\tpublic async getBlob(sha: string): Promise<IR11sResponse<git.IBlob>> {\n\t\treturn this.restWrapper.get<git.IBlob>(\n\t\t\t`/git/blobs/${encodeURIComponent(sha)}`,\n\t\t\tthis.getQueryString(),\n\t\t);\n\t}\n\n\tpublic async createBlob(\n\t\tblob: git.ICreateBlobParams,\n\t): Promise<IR11sResponse<git.ICreateBlobResponse>> {\n\t\treturn this.restWrapper.post<git.ICreateBlobResponse>(\n\t\t\t`/git/blobs`,\n\t\t\tblob,\n\t\t\tthis.getQueryString(),\n\t\t);\n\t}\n\n\tpublic async getCommits(\n\t\tsha: string,\n\t\tcount: number,\n\t): Promise<IR11sResponse<git.ICommitDetails[]>> {\n\t\treturn this.restWrapper\n\t\t\t.get<git.ICommitDetails[]>(`/commits`, this.getQueryString({ count, sha }))\n\t\t\t.catch((error) =>\n\t\t\t\terror.statusCode === 400 || error.statusCode === 404\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tcontent: [],\n\t\t\t\t\t\t\theaders: new Map(),\n\t\t\t\t\t\t\tpropsToLog: {},\n\t\t\t\t\t\t\trequestUrl: \"\",\n\t\t\t\t\t }\n\t\t\t\t\t: Promise.reject<IR11sResponse<git.ICommitDetails[]>>(error),\n\t\t\t);\n\t}\n\n\tpublic async createTree(tree: git.ICreateTreeParams): Promise<IR11sResponse<git.ITree>> {\n\t\treturn this.restWrapper.post<git.ITree>(`/git/trees`, tree, this.getQueryString());\n\t}\n\n\tpublic async getTree(sha: string, recursive: boolean): Promise<IR11sResponse<git.ITree>> {\n\t\treturn this.restWrapper.get<git.ITree>(\n\t\t\t`/git/trees/${encodeURIComponent(sha)}`,\n\t\t\tthis.getQueryString({ recursive: recursive ? 1 : 0 }),\n\t\t);\n\t}\n\tpublic async createSummary(\n\t\tsummary: IWholeSummaryPayload,\n\t\tinitial?: boolean,\n\t): Promise<IR11sResponse<IWriteSummaryResponse>> {\n\t\treturn this.restWrapper.post<IWriteSummaryResponse>(\n\t\t\t`/git/summaries`,\n\t\t\tsummary,\n\t\t\tthis.getQueryString(initial !== undefined ? { initial } : undefined),\n\t\t);\n\t}\n\n\tpublic async getSummary(sha: string): Promise<IR11sResponse<IWholeFlatSummary>> {\n\t\treturn this.restWrapper.get<IWholeFlatSummary>(\n\t\t\t`/git/summaries/${sha}`,\n\t\t\tthis.getQueryString(),\n\t\t);\n\t}\n\n\tprivate getQueryString(queryString?: QueryStringType): QueryStringType {\n\t\tif (this.cacheBust) {\n\t\t\treturn {\n\t\t\t\tcacheBust: Date.now(),\n\t\t\t\t...this.defaultQueryString,\n\t\t\t\t...queryString,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...this.defaultQueryString,\n\t\t\t...queryString,\n\t\t};\n\t}\n}\n"]}
|
package/dist/packageVersion.d.ts
CHANGED
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
|
|
6
6
|
*/
|
|
7
7
|
export declare const pkgName = "@fluidframework/routerlicious-driver";
|
|
8
|
-
export declare const pkgVersion = "2.0.0-dev.4.
|
|
8
|
+
export declare const pkgVersion = "2.0.0-dev.4.2.0.153917";
|
|
9
9
|
//# sourceMappingURL=packageVersion.d.ts.map
|
package/dist/packageVersion.js
CHANGED
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.pkgVersion = exports.pkgName = void 0;
|
|
10
10
|
exports.pkgName = "@fluidframework/routerlicious-driver";
|
|
11
|
-
exports.pkgVersion = "2.0.0-dev.4.
|
|
11
|
+
exports.pkgVersion = "2.0.0-dev.4.2.0.153917";
|
|
12
12
|
//# sourceMappingURL=packageVersion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,sCAAsC,CAAC;AACjD,QAAA,UAAU,GAAG,wBAAwB,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/routerlicious-driver\";\nexport const pkgVersion = \"2.0.0-dev.4.
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,sCAAsC,CAAC;AACjD,QAAA,UAAU,GAAG,wBAAwB,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/routerlicious-driver\";\nexport const pkgVersion = \"2.0.0-dev.4.2.0.153917\";\n"]}
|
package/dist/restWrapper.d.ts
CHANGED
|
@@ -2,26 +2,39 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
import type { ParsedUrlQueryInput } from "querystring";
|
|
7
|
-
import { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
5
|
+
import { ITelemetryLogger, ITelemetryProperties } from "@fluidframework/common-definitions";
|
|
8
6
|
import { RateLimiter } from "@fluidframework/driver-utils";
|
|
9
|
-
import { RestWrapper } from "@fluidframework/server-services-client";
|
|
10
7
|
import type { AxiosRequestConfig } from "axios";
|
|
11
8
|
import { ITokenProvider, ITokenResponse } from "./tokens";
|
|
9
|
+
import { QueryStringType, RestWrapper } from "./restWrapperBase";
|
|
12
10
|
declare type AuthorizationHeaderGetter = (token: ITokenResponse) => string;
|
|
13
11
|
declare type TokenFetcher = (refresh?: boolean) => Promise<ITokenResponse>;
|
|
12
|
+
export interface IR11sResponse<T> {
|
|
13
|
+
content: T;
|
|
14
|
+
headers: Map<string, string>;
|
|
15
|
+
propsToLog: ITelemetryProperties;
|
|
16
|
+
requestUrl: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A utility function to create a r11s response without any additional props as we might not have them always.
|
|
20
|
+
* @param content - response which is equivalent to content.
|
|
21
|
+
* @returns - a r11s response without any extra props.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createR11sResponseFromContent<T>(content: T): IR11sResponse<T>;
|
|
24
|
+
export declare function getPropsToLogFromResponse(headers: {
|
|
25
|
+
get: (id: string) => string | undefined | null;
|
|
26
|
+
}): ITelemetryProperties;
|
|
14
27
|
export declare class RouterliciousRestWrapper extends RestWrapper {
|
|
15
28
|
private readonly rateLimiter;
|
|
16
|
-
private token;
|
|
17
29
|
private readonly fetchRefreshedToken;
|
|
18
30
|
private readonly getAuthorizationHeader;
|
|
19
31
|
private readonly useRestLess;
|
|
20
32
|
private readonly restLess;
|
|
21
|
-
|
|
22
|
-
|
|
33
|
+
private token;
|
|
34
|
+
constructor(logger: ITelemetryLogger, rateLimiter: RateLimiter, fetchRefreshedToken: TokenFetcher, getAuthorizationHeader: AuthorizationHeaderGetter, useRestLess: boolean, baseurl?: string, defaultQueryString?: QueryStringType);
|
|
35
|
+
protected request<T>(requestConfig: AxiosRequestConfig, statusCode: number, canRetry?: boolean): Promise<IR11sResponse<T>>;
|
|
23
36
|
private generateHeaders;
|
|
24
|
-
getToken(): ITokenResponse
|
|
37
|
+
getToken(): Promise<ITokenResponse>;
|
|
25
38
|
setToken(token: ITokenResponse): void;
|
|
26
39
|
}
|
|
27
40
|
export declare class RouterliciousStorageRestWrapper extends RouterliciousRestWrapper {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restWrapper.d.ts","sourceRoot":"","sources":["../src/restWrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG
|
|
1
|
+
{"version":3,"file":"restWrapper.d.ts","sourceRoot":"","sources":["../src/restWrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE5F,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAO3D,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,OAAO,CAAC;AAIrE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1D,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,aAAK,yBAAyB,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,MAAM,CAAC;AACnE,aAAK,YAAY,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAmBnE,MAAM,WAAW,aAAa,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,UAAU,EAAE,oBAAoB,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAO7E;AAUD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAClD,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAC/C,wBAwBA;AAED,qBAAa,wBAAyB,SAAQ,WAAW;IAMvD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAR7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,KAAK,CAA6B;gBAGzC,MAAM,EAAE,gBAAgB,EACP,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,YAAY,EACjC,sBAAsB,EAAE,yBAAyB,EACjD,WAAW,EAAE,OAAO,EACrC,OAAO,CAAC,EAAE,MAAM,EAChB,kBAAkB,GAAE,eAAoB;cAKzB,OAAO,CAAC,CAAC,EACxB,aAAa,EAAE,kBAAkB,EACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,UAAO,GACb,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAkFd,eAAe;IAkBhB,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IASzC,QAAQ,CAAC,KAAK,EAAE,cAAc;CAGrC;AAED,qBAAa,+BAAgC,SAAQ,wBAAwB;IAC5E,OAAO;WAoBa,IAAI,CACvB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,cAAc,EAC7B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,+BAA+B,CAAC;CA+C3C;AAED,qBAAa,+BAAgC,SAAQ,wBAAwB;IAC5E,OAAO;WAoBa,IAAI,CACvB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,cAAc,EAC7B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,+BAA+B,CAAC;CAqC3C"}
|
package/dist/restWrapper.js
CHANGED
|
@@ -7,7 +7,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
7
7
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
8
|
};
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.RouterliciousOrdererRestWrapper = exports.RouterliciousStorageRestWrapper = exports.RouterliciousRestWrapper = void 0;
|
|
10
|
+
exports.RouterliciousOrdererRestWrapper = exports.RouterliciousStorageRestWrapper = exports.RouterliciousRestWrapper = exports.getPropsToLogFromResponse = exports.createR11sResponseFromContent = void 0;
|
|
11
11
|
const common_utils_1 = require("@fluidframework/common-utils");
|
|
12
12
|
const server_services_client_1 = require("@fluidframework/server-services-client");
|
|
13
13
|
const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
|
|
@@ -16,6 +16,7 @@ const json_stringify_safe_1 = __importDefault(require("json-stringify-safe"));
|
|
|
16
16
|
const uuid_1 = require("uuid");
|
|
17
17
|
const errorUtils_1 = require("./errorUtils");
|
|
18
18
|
const packageVersion_1 = require("./packageVersion");
|
|
19
|
+
const restWrapperBase_1 = require("./restWrapperBase");
|
|
19
20
|
const axiosRequestConfigToFetchRequestConfig = (requestConfig) => {
|
|
20
21
|
var _a, _b;
|
|
21
22
|
const requestInfo = requestConfig.baseURL !== undefined
|
|
@@ -30,11 +31,51 @@ const axiosRequestConfigToFetchRequestConfig = (requestConfig) => {
|
|
|
30
31
|
};
|
|
31
32
|
return [requestInfo, requestInit];
|
|
32
33
|
};
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
/**
|
|
35
|
+
* A utility function to create a r11s response without any additional props as we might not have them always.
|
|
36
|
+
* @param content - response which is equivalent to content.
|
|
37
|
+
* @returns - a r11s response without any extra props.
|
|
38
|
+
*/
|
|
39
|
+
function createR11sResponseFromContent(content) {
|
|
40
|
+
return {
|
|
41
|
+
content,
|
|
42
|
+
headers: new Map(),
|
|
43
|
+
propsToLog: {},
|
|
44
|
+
requestUrl: "",
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
exports.createR11sResponseFromContent = createR11sResponseFromContent;
|
|
48
|
+
function headersToMap(headers) {
|
|
49
|
+
const newHeaders = new Map();
|
|
50
|
+
for (const [key, value] of headers.entries()) {
|
|
51
|
+
newHeaders.set(key, value);
|
|
52
|
+
}
|
|
53
|
+
return newHeaders;
|
|
54
|
+
}
|
|
55
|
+
function getPropsToLogFromResponse(headers) {
|
|
56
|
+
// We rename headers so that otel doesn't scrub them away. Otel doesn't allow
|
|
57
|
+
// certain characters in headers including '-'
|
|
58
|
+
const headersToLog = [
|
|
59
|
+
{ headerName: "x-correlation-id", logName: "requestCorrelationId" },
|
|
60
|
+
{ headerName: "content-encoding", logName: "contentEncoding" },
|
|
61
|
+
{ headerName: "content-type", logName: "contentType" },
|
|
62
|
+
];
|
|
63
|
+
const additionalProps = {
|
|
64
|
+
contentsize: telemetry_utils_1.TelemetryLogger.numberFromString(headers.get("content-length")),
|
|
65
|
+
};
|
|
66
|
+
headersToLog.forEach((header) => {
|
|
67
|
+
const headerValue = headers.get(header.headerName);
|
|
68
|
+
if (headerValue !== undefined && headerValue !== null) {
|
|
69
|
+
additionalProps[header.logName] = headerValue;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return additionalProps;
|
|
73
|
+
}
|
|
74
|
+
exports.getPropsToLogFromResponse = getPropsToLogFromResponse;
|
|
75
|
+
class RouterliciousRestWrapper extends restWrapperBase_1.RestWrapper {
|
|
76
|
+
constructor(logger, rateLimiter, fetchRefreshedToken, getAuthorizationHeader, useRestLess, baseurl, defaultQueryString = {}) {
|
|
35
77
|
super(baseurl, defaultQueryString);
|
|
36
78
|
this.rateLimiter = rateLimiter;
|
|
37
|
-
this.token = token;
|
|
38
79
|
this.fetchRefreshedToken = fetchRefreshedToken;
|
|
39
80
|
this.getAuthorizationHeader = getAuthorizationHeader;
|
|
40
81
|
this.useRestLess = useRestLess;
|
|
@@ -42,21 +83,43 @@ class RouterliciousRestWrapper extends server_services_client_1.RestWrapper {
|
|
|
42
83
|
}
|
|
43
84
|
async request(requestConfig, statusCode, canRetry = true) {
|
|
44
85
|
var _a;
|
|
45
|
-
const config = Object.assign(Object.assign({}, requestConfig), { headers: this.generateHeaders(requestConfig.headers) });
|
|
86
|
+
const config = Object.assign(Object.assign({}, requestConfig), { headers: await this.generateHeaders(requestConfig.headers) });
|
|
46
87
|
const translatedConfig = this.useRestLess ? this.restLess.translate(config) : config;
|
|
47
88
|
const fetchRequestConfig = axiosRequestConfigToFetchRequestConfig(translatedConfig);
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
89
|
+
const res = await this.rateLimiter.schedule(async () => {
|
|
90
|
+
const perfStart = common_utils_1.performance.now();
|
|
91
|
+
const result = await (0, cross_fetch_1.default)(...fetchRequestConfig).catch(async (error) => {
|
|
92
|
+
// Browser Fetch throws a TypeError on network error, `node-fetch` throws a FetchError
|
|
93
|
+
const isNetworkError = ["TypeError", "FetchError"].includes(error === null || error === void 0 ? void 0 : error.name);
|
|
94
|
+
(0, errorUtils_1.throwR11sNetworkError)(isNetworkError ? `NetworkError: ${error.message}` : (0, json_stringify_safe_1.default)(error));
|
|
95
|
+
});
|
|
96
|
+
return {
|
|
97
|
+
response: result,
|
|
98
|
+
duration: common_utils_1.performance.now() - perfStart,
|
|
99
|
+
};
|
|
100
|
+
});
|
|
101
|
+
const response = res.response;
|
|
102
|
+
let start = common_utils_1.performance.now();
|
|
103
|
+
const text = await response.text();
|
|
104
|
+
const receiveContentTime = common_utils_1.performance.now() - start;
|
|
105
|
+
const bodySize = text.length;
|
|
106
|
+
start = common_utils_1.performance.now();
|
|
53
107
|
const responseBody = ((_a = response.headers.get("content-type")) === null || _a === void 0 ? void 0 : _a.includes("application/json"))
|
|
54
|
-
?
|
|
55
|
-
:
|
|
108
|
+
? JSON.parse(text)
|
|
109
|
+
: text;
|
|
110
|
+
const parseTime = common_utils_1.performance.now() - start;
|
|
56
111
|
// Success
|
|
57
112
|
if (response.ok || response.status === statusCode) {
|
|
58
113
|
const result = responseBody;
|
|
59
|
-
|
|
114
|
+
const headers = headersToMap(response.headers);
|
|
115
|
+
return {
|
|
116
|
+
content: result,
|
|
117
|
+
headers,
|
|
118
|
+
requestUrl: fetchRequestConfig[0].toString(),
|
|
119
|
+
propsToLog: Object.assign(Object.assign({}, getPropsToLogFromResponse(headers)), { bodySize,
|
|
120
|
+
receiveContentTime,
|
|
121
|
+
parseTime, fetchTime: res.duration }),
|
|
122
|
+
};
|
|
60
123
|
}
|
|
61
124
|
// Failure
|
|
62
125
|
if (response.status === 401 && canRetry) {
|
|
@@ -77,18 +140,25 @@ class RouterliciousRestWrapper extends server_services_client_1.RestWrapper {
|
|
|
77
140
|
: response.statusText;
|
|
78
141
|
(0, errorUtils_1.throwR11sNetworkError)(`R11s fetch error: ${responseSummary}`, response.status, responseBody === null || responseBody === void 0 ? void 0 : responseBody.retryAfter);
|
|
79
142
|
}
|
|
80
|
-
generateHeaders(requestHeaders) {
|
|
143
|
+
async generateHeaders(requestHeaders) {
|
|
81
144
|
var _a;
|
|
145
|
+
const token = await this.getToken();
|
|
146
|
+
(0, common_utils_1.assert)(token !== undefined, "token should be present");
|
|
82
147
|
const correlationId = (_a = requestHeaders === null || requestHeaders === void 0 ? void 0 : requestHeaders["x-correlation-id"]) !== null && _a !== void 0 ? _a : (0, uuid_1.v4)();
|
|
83
148
|
return Object.assign(Object.assign({}, requestHeaders), {
|
|
84
149
|
// TODO: replace header names with CorrelationIdHeaderName and DriverVersionHeaderName from services-client
|
|
85
150
|
// NOTE: Can correlationId actually be number | true?
|
|
86
151
|
"x-correlation-id": correlationId, "x-driver-version": packageVersion_1.pkgVersion,
|
|
87
152
|
// NOTE: If this.authorizationHeader is undefined, should "Authorization" be removed entirely?
|
|
88
|
-
"Authorization": this.getAuthorizationHeader(
|
|
153
|
+
"Authorization": this.getAuthorizationHeader(token) });
|
|
89
154
|
}
|
|
90
|
-
getToken() {
|
|
91
|
-
|
|
155
|
+
async getToken() {
|
|
156
|
+
if (this.token !== undefined) {
|
|
157
|
+
return this.token;
|
|
158
|
+
}
|
|
159
|
+
const token = await this.fetchRefreshedToken();
|
|
160
|
+
this.setToken(token);
|
|
161
|
+
return token;
|
|
92
162
|
}
|
|
93
163
|
setToken(token) {
|
|
94
164
|
this.token = token;
|
|
@@ -96,8 +166,8 @@ class RouterliciousRestWrapper extends server_services_client_1.RestWrapper {
|
|
|
96
166
|
}
|
|
97
167
|
exports.RouterliciousRestWrapper = RouterliciousRestWrapper;
|
|
98
168
|
class RouterliciousStorageRestWrapper extends RouterliciousRestWrapper {
|
|
99
|
-
constructor(logger, rateLimiter,
|
|
100
|
-
super(logger, rateLimiter,
|
|
169
|
+
constructor(logger, rateLimiter, fetchToken, getAuthorizationHeader, useRestLess, baseurl, defaultQueryString = {}) {
|
|
170
|
+
super(logger, rateLimiter, fetchToken, getAuthorizationHeader, useRestLess, baseurl, defaultQueryString);
|
|
101
171
|
}
|
|
102
172
|
static async load(tenantId, documentId, tokenProvider, logger, rateLimiter, useRestLess, baseurl) {
|
|
103
173
|
const defaultQueryString = {
|
|
@@ -120,15 +190,14 @@ class RouterliciousStorageRestWrapper extends RouterliciousRestWrapper {
|
|
|
120
190
|
};
|
|
121
191
|
return (0, server_services_client_1.getAuthorizationTokenFromCredentials)(credentials);
|
|
122
192
|
};
|
|
123
|
-
const
|
|
124
|
-
const restWrapper = new RouterliciousStorageRestWrapper(logger, rateLimiter, storagetoken, fetchStorageToken, getAuthorizationHeader, useRestLess, baseurl, defaultQueryString);
|
|
193
|
+
const restWrapper = new RouterliciousStorageRestWrapper(logger, rateLimiter, fetchStorageToken, getAuthorizationHeader, useRestLess, baseurl, defaultQueryString);
|
|
125
194
|
return restWrapper;
|
|
126
195
|
}
|
|
127
196
|
}
|
|
128
197
|
exports.RouterliciousStorageRestWrapper = RouterliciousStorageRestWrapper;
|
|
129
198
|
class RouterliciousOrdererRestWrapper extends RouterliciousRestWrapper {
|
|
130
|
-
constructor(logger, rateLimiter,
|
|
131
|
-
super(logger, rateLimiter,
|
|
199
|
+
constructor(logger, rateLimiter, fetchToken, getAuthorizationHeader, useRestLess, baseurl, defaultQueryString = {}) {
|
|
200
|
+
super(logger, rateLimiter, fetchToken, getAuthorizationHeader, useRestLess, baseurl, defaultQueryString);
|
|
132
201
|
}
|
|
133
202
|
static async load(tenantId, documentId, tokenProvider, logger, rateLimiter, useRestLess, baseurl) {
|
|
134
203
|
const getAuthorizationHeader = (token) => {
|
|
@@ -143,8 +212,7 @@ class RouterliciousOrdererRestWrapper extends RouterliciousRestWrapper {
|
|
|
143
212
|
return ordererToken;
|
|
144
213
|
});
|
|
145
214
|
};
|
|
146
|
-
const
|
|
147
|
-
const restWrapper = new RouterliciousOrdererRestWrapper(logger, rateLimiter, newtoken, fetchOrdererToken, getAuthorizationHeader, useRestLess, baseurl);
|
|
215
|
+
const restWrapper = new RouterliciousOrdererRestWrapper(logger, rateLimiter, fetchOrdererToken, getAuthorizationHeader, useRestLess, baseurl);
|
|
148
216
|
return restWrapper;
|
|
149
217
|
}
|
|
150
218
|
}
|