@fluidframework/routerlicious-urlresolver 2.0.0-rc.1.0.4 → 2.0.0-rc.2.0.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/{.eslintrc.js → .eslintrc.cjs} +5 -2
- package/{.mocharc.js → .mocharc.cjs} +1 -1
- package/CHANGELOG.md +8 -0
- package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
- package/api-extractor-lint.json +1 -1
- package/api-extractor.json +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/nconf.cjs +13 -0
- package/dist/nconf.cjs.map +1 -0
- package/{lib/index.mjs → dist/nconf.d.cts} +3 -2
- package/dist/nconf.d.cts.map +1 -0
- package/dist/package.json +3 -0
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/urlResolver.d.ts +1 -1
- package/dist/urlResolver.d.ts.map +1 -1
- package/dist/urlResolver.js +3 -4
- package/dist/urlResolver.js.map +1 -1
- package/lib/{index.d.mts → index.d.ts} +2 -2
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -0
- package/lib/nconf.cjs +13 -0
- package/lib/nconf.cjs.map +1 -0
- package/lib/nconf.d.cts +7 -0
- package/lib/nconf.d.cts.map +1 -0
- package/lib/test/routerlicious-urlResolver.spec.js +144 -0
- package/lib/test/routerlicious-urlResolver.spec.js.map +1 -0
- package/lib/test/types/validateRouterliciousUrlresolverPrevious.generated.js +8 -0
- package/lib/test/types/validateRouterliciousUrlresolverPrevious.generated.js.map +1 -0
- package/lib/{urlResolver.d.mts → urlResolver.d.ts} +2 -2
- package/lib/urlResolver.d.ts.map +1 -0
- package/lib/{urlResolver.mjs → urlResolver.js} +4 -5
- package/lib/urlResolver.js.map +1 -0
- package/package.json +31 -49
- package/src/index.ts +1 -1
- package/src/nconf.cts +12 -0
- package/src/urlResolver.ts +4 -5
- package/tsconfig.cjs.json +7 -0
- package/tsconfig.json +2 -5
- package/lib/index.d.mts.map +0 -1
- package/lib/index.mjs.map +0 -1
- package/lib/urlResolver.d.mts.map +0 -1
- package/lib/urlResolver.mjs.map +0 -1
- /package/lib/{routerlicious-urlresolver-alpha.d.mts → routerlicious-urlresolver-alpha.d.ts} +0 -0
- /package/lib/{routerlicious-urlresolver-beta.d.mts → routerlicious-urlresolver-beta.d.ts} +0 -0
- /package/lib/{routerlicious-urlresolver-public.d.mts → routerlicious-urlresolver-public.d.ts} +0 -0
- /package/lib/{routerlicious-urlresolver-untrimmed.d.mts → routerlicious-urlresolver-untrimmed.d.ts} +0 -0
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
module.exports = {
|
|
7
|
-
extends: [
|
|
7
|
+
extends: [
|
|
8
|
+
require.resolve("@fluidframework/eslint-config-fluid/minimal-deprecated"),
|
|
9
|
+
"prettier",
|
|
10
|
+
],
|
|
8
11
|
parserOptions: {
|
|
9
12
|
project: ["./tsconfig.json", "./src/test/tsconfig.json"],
|
|
10
13
|
},
|
|
@@ -22,7 +25,7 @@ module.exports = {
|
|
|
22
25
|
],
|
|
23
26
|
|
|
24
27
|
// This library is used in the browser, so we don't want dependencies on most node libraries.
|
|
25
|
-
"import/no-nodejs-modules": ["error"
|
|
28
|
+
"import/no-nodejs-modules": ["error"],
|
|
26
29
|
},
|
|
27
30
|
overrides: [
|
|
28
31
|
{
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const getFluidTestMochaConfig = require("@
|
|
8
|
+
const getFluidTestMochaConfig = require("@fluid-internal/mocha-test-setup/mocharc-common");
|
|
9
9
|
|
|
10
10
|
const packageDir = __dirname;
|
|
11
11
|
const config = getFluidTestMochaConfig(packageDir);
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @fluidframework/routerlicious-urlresolver
|
|
2
2
|
|
|
3
|
+
## 2.0.0-rc.2.0.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Resolved URLs no longer use non-standard protocols ([#19840](https://github.com/microsoft/FluidFramework/issues/19840)) [9d3d185183](https://github.com/microsoft/FluidFramework/commits/9d3d1851830d953792a6dfad60dde6f1c59480de)
|
|
8
|
+
|
|
9
|
+
Previously, `IResolvedUrl.url` could use a non-standard protocol like `fluid://`, `fluid-odsp://`, or `fluid-test://`. These have been replaced with `https://` to permit standards-compliant URL parsing.
|
|
10
|
+
|
|
3
11
|
## 2.0.0-rc.1.0.0
|
|
4
12
|
|
|
5
13
|
### Minor Changes
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
|
|
3
|
-
"extends": "../../../common/build/build-common/api-extractor-base
|
|
3
|
+
"extends": "../../../common/build/build-common/api-extractor-base.cjs.primary.json",
|
|
4
|
+
// CJS is actually secondary; so, no report.
|
|
5
|
+
"apiReport": {
|
|
6
|
+
"enabled": false
|
|
7
|
+
}
|
|
4
8
|
}
|
package/api-extractor-lint.json
CHANGED
package/api-extractor.json
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
export { IAlfredUser, IConfig, RouterliciousUrlResolver } from "./urlResolver";
|
|
5
|
+
export { IAlfredUser, IConfig, RouterliciousUrlResolver } from "./urlResolver.js";
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.RouterliciousUrlResolver = void 0;
|
|
8
|
-
var
|
|
9
|
-
Object.defineProperty(exports, "RouterliciousUrlResolver", { enumerable: true, get: function () { return
|
|
8
|
+
var urlResolver_js_1 = require("./urlResolver.js");
|
|
9
|
+
Object.defineProperty(exports, "RouterliciousUrlResolver", { enumerable: true, get: function () { return urlResolver_js_1.RouterliciousUrlResolver; } });
|
|
10
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mDAAkF;AAAnD,0HAAA,wBAAwB,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { IAlfredUser, IConfig, RouterliciousUrlResolver } from \"./urlResolver.js\";\n"]}
|
package/dist/nconf.cjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
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.Provider = void 0;
|
|
8
|
+
// This file serves as an intermediary module to export the 'Provider' named export from the 'nconf' module.
|
|
9
|
+
// It is written using ESM module syntax, making it compatible with both ESM and CJS module.
|
|
10
|
+
// This compatibility allows for flexible usage of the 'Provider' named export from the 'nconf' module across different module systems without modification.
|
|
11
|
+
const nconf_1 = require("nconf");
|
|
12
|
+
Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return nconf_1.Provider; } });
|
|
13
|
+
//# sourceMappingURL=nconf.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nconf.cjs","sourceRoot":"","sources":["../src/nconf.cts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4GAA4G;AAC5G,4FAA4F;AAC5F,4JAA4J;AAE5J,iCAAiC;AAExB,yFAFA,gBAAQ,OAEA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// This file serves as an intermediary module to export the 'Provider' named export from the 'nconf' module.\n// It is written using ESM module syntax, making it compatible with both ESM and CJS module.\n// This compatibility allows for flexible usage of the 'Provider' named export from the 'nconf' module across different module systems without modification.\n\nimport { Provider } from \"nconf\";\n\nexport { Provider };\n"]}
|
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { Provider } from "nconf";
|
|
6
|
+
export { Provider };
|
|
7
|
+
//# sourceMappingURL=nconf.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nconf.d.cts","sourceRoot":"","sources":["../src/nconf.cts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/tsdoc-metadata.json
CHANGED
package/dist/urlResolver.d.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { IRequest } from "@fluidframework/core-interfaces";
|
|
6
6
|
import { IResolvedUrl, IUrlResolver } from "@fluidframework/driver-definitions";
|
|
7
7
|
import { IUser } from "@fluidframework/protocol-definitions";
|
|
8
|
-
import { Provider } from "nconf";
|
|
8
|
+
import { Provider } from "./nconf.cjs";
|
|
9
9
|
/**
|
|
10
10
|
* @internal
|
|
11
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urlResolver.d.ts","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"urlResolver.d.ts","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC;;GAEG;AACH,qBAAa,wBAAyB,YAAW,YAAY;IAE3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAGvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAJP,MAAM,EACpB;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAC5D,SAAS,EACK,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE,MAAM;IAGjC;;OAEG;IACU,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA8G7D,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgB5F;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACnB"}
|
package/dist/urlResolver.js
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.RouterliciousUrlResolver = void 0;
|
|
8
|
-
const url_1 = require("url");
|
|
9
8
|
const core_utils_1 = require("@fluidframework/core-utils");
|
|
10
9
|
const r11sServers = [
|
|
11
10
|
"www.wu2-ppe.prague.office-int.com",
|
|
@@ -59,9 +58,9 @@ class RouterliciousUrlResolver {
|
|
|
59
58
|
const isLocalHost = server === "localhost";
|
|
60
59
|
const isInternalRequest = server.includes("gateway"); // e.g. gateway:3000 || fierce-dog-gateway:3000
|
|
61
60
|
const serverSuffix = isLocalHost ? `${server}:3003` : server.substring(4);
|
|
62
|
-
let fluidUrl = "
|
|
61
|
+
let fluidUrl = "https://" +
|
|
63
62
|
`${this.config
|
|
64
|
-
?
|
|
63
|
+
? new URL(this.config.provider.get("worker:serverUrl")).host
|
|
65
64
|
: serverSuffix}/` +
|
|
66
65
|
`${encodeURIComponent(tenantId)}/` +
|
|
67
66
|
`${encodeURIComponent(documentId)}`;
|
|
@@ -115,7 +114,7 @@ class RouterliciousUrlResolver {
|
|
|
115
114
|
return resolved;
|
|
116
115
|
}
|
|
117
116
|
async getAbsoluteUrl(resolvedUrl, relativeUrl) {
|
|
118
|
-
const parsedUrl =
|
|
117
|
+
const parsedUrl = new URL(resolvedUrl.url);
|
|
119
118
|
(0, core_utils_1.assert)(!!parsedUrl.pathname, 0x0b9 /* "PathName should exist" */);
|
|
120
119
|
const [, tenantId, documentId] = parsedUrl.pathname.split("/");
|
|
121
120
|
(0, core_utils_1.assert)(!!tenantId, 0x0ba /* "Tenant id should exist" */);
|
package/dist/urlResolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urlResolver.js","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"urlResolver.js","sourceRoot":"","sources":["../src/urlResolver.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 { assert } from \"@fluidframework/core-utils\";\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport { IResolvedUrl, IUrlResolver } from \"@fluidframework/driver-definitions\";\nimport { IUser } from \"@fluidframework/protocol-definitions\";\nimport { Provider } from \"./nconf.cjs\";\n\nconst r11sServers = [\n\t\"www.wu2-ppe.prague.office-int.com\",\n\t\"www.wu2.prague.office-int.com\",\n\t\"www.eu.prague.office-int.com\",\n];\n\n/**\n * @internal\n */\nexport class RouterliciousUrlResolver implements IUrlResolver {\n\tconstructor(\n\t\tprivate readonly config:\n\t\t\t| { provider: Provider; tenantId: string; documentId: string }\n\t\t\t| undefined,\n\t\tprivate readonly getToken: () => Promise<string>,\n\t\tprivate readonly hostUrl: string,\n\t) {}\n\n\t/**\n\t * Handles a request and returns the relevant endpoints for the environment\n\t */\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tlet requestedUrl = request.url;\n\n\t\t// If we know the original hostname, reinsert it\n\t\tif (this.config && request.url.startsWith(\"/\")) {\n\t\t\trequestedUrl = `http://dummy:3000${request.url}`;\n\t\t}\n\n\t\tconst reqUrl = new URL(requestedUrl);\n\t\tconst server = reqUrl.hostname.toLowerCase();\n\n\t\t// If we don't have a valid server or a prescriptive config, we cannot resolve the URL\n\t\tif (\n\t\t\t!(\n\t\t\t\tr11sServers.includes(server) ||\n\t\t\t\t(server === \"localhost\" && reqUrl.port === \"3000\") ||\n\t\t\t\tthis.config\n\t\t\t)\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst path = reqUrl.pathname.split(\"/\");\n\t\tlet tenantId: string;\n\t\tlet documentId: string;\n\t\tlet provider: Provider | undefined;\n\t\tif (this.config) {\n\t\t\ttenantId = this.config.tenantId;\n\t\t\tdocumentId = this.config.documentId;\n\t\t\tprovider = this.config.provider;\n\t\t} else if (path.length >= 4) {\n\t\t\ttenantId = path[2];\n\t\t\tdocumentId = path[3];\n\t\t} else {\n\t\t\ttenantId = \"fluid\";\n\t\t\tdocumentId = path[2];\n\t\t}\n\n\t\tconst token = await this.getToken();\n\n\t\tconst isLocalHost = server === \"localhost\";\n\t\tconst isInternalRequest = server.includes(\"gateway\"); // e.g. gateway:3000 || fierce-dog-gateway:3000\n\n\t\tconst serverSuffix = isLocalHost ? `${server}:3003` : server.substring(4);\n\n\t\tlet fluidUrl =\n\t\t\t\"https://\" +\n\t\t\t`${\n\t\t\t\tthis.config\n\t\t\t\t\t? new URL(this.config.provider.get(\"worker:serverUrl\")).host\n\t\t\t\t\t: serverSuffix\n\t\t\t}/` +\n\t\t\t`${encodeURIComponent(tenantId)}/` +\n\t\t\t`${encodeURIComponent(documentId)}`;\n\n\t\t// In case of any additional parameters add them back to the url\n\t\tif (reqUrl.search) {\n\t\t\tconst searchParams = reqUrl.search;\n\t\t\tif (searchParams) {\n\t\t\t\tfluidUrl += searchParams;\n\t\t\t}\n\t\t}\n\n\t\tlet storageUrl = \"\";\n\t\tlet ordererUrl = \"\";\n\t\tlet deltaStorageUrl = \"\";\n\n\t\t// There is no provider when using debugging tooling\n\t\tif (provider && isInternalRequest) {\n\t\t\tstorageUrl = provider.get(\"worker:internalBlobStorageUrl\");\n\t\t\tordererUrl = provider.get(\"worker:alfredUrl\");\n\t\t\tdeltaStorageUrl = `${provider.get(\"worker:alfredUrl\")}/deltas/${encodeURIComponent(\n\t\t\t\ttenantId,\n\t\t\t)}/${encodeURIComponent(documentId)}`;\n\t\t} else if (provider) {\n\t\t\tstorageUrl = provider\n\t\t\t\t.get(\"worker:blobStorageUrl\")\n\t\t\t\t.replace(\"historian:3000\", \"localhost:3001\");\n\t\t\tordererUrl = provider.get(\"worker:serverUrl\");\n\t\t\tdeltaStorageUrl = `${ordererUrl}/deltas/${encodeURIComponent(\n\t\t\t\ttenantId,\n\t\t\t)}/${encodeURIComponent(documentId)}`;\n\t\t} else if (isLocalHost) {\n\t\t\tstorageUrl = `http://localhost:3001`;\n\t\t\tordererUrl = `http://localhost:3003`;\n\t\t\tdeltaStorageUrl = `http://localhost:3003/deltas/${tenantId}/${documentId}`;\n\t\t} else {\n\t\t\tstorageUrl = `https://historian.${serverSuffix}`;\n\t\t\tordererUrl = `https://alfred.${serverSuffix}`;\n\t\t\tdeltaStorageUrl = `https://alfred.${serverSuffix}/deltas/${tenantId}/${documentId}`;\n\t\t}\n\n\t\tstorageUrl += `/repos/${tenantId}`;\n\t\tordererUrl += ``;\n\t\tdeltaStorageUrl += ``;\n\n\t\tconst resolved: IResolvedUrl = {\n\t\t\tendpoints: {\n\t\t\t\tstorageUrl,\n\t\t\t\tdeltaStorageUrl,\n\t\t\t\tordererUrl,\n\t\t\t},\n\t\t\tid: documentId,\n\t\t\ttokens: { jwt: token },\n\t\t\ttype: \"fluid\",\n\t\t\turl: fluidUrl,\n\t\t};\n\t\treturn resolved;\n\t}\n\n\tpublic async getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string> {\n\t\tconst parsedUrl = new URL(resolvedUrl.url);\n\t\tassert(!!parsedUrl.pathname, 0x0b9 /* \"PathName should exist\" */);\n\t\tconst [, tenantId, documentId] = parsedUrl.pathname.split(\"/\");\n\t\tassert(!!tenantId, 0x0ba /* \"Tenant id should exist\" */);\n\t\tassert(!!documentId, 0x0bb /* \"Document id should exist\" */);\n\n\t\tlet url = relativeUrl;\n\t\tif (url.startsWith(\"/\")) {\n\t\t\turl = url.substr(1);\n\t\t}\n\n\t\treturn `${this.hostUrl}/${encodeURIComponent(tenantId)}/${encodeURIComponent(\n\t\t\tdocumentId,\n\t\t)}/${url}`;\n\t}\n}\n\n/**\n * @internal\n */\nexport interface IAlfredUser extends IUser {\n\tdisplayName: string;\n\tname: string;\n}\n\n/**\n * @internal\n */\nexport interface IConfig {\n\tserverUrl: string;\n\tblobStorageUrl: string;\n\ttenantId: string;\n\tdocumentId: string;\n}\n"]}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
export { IAlfredUser, IConfig, RouterliciousUrlResolver } from "./urlResolver.
|
|
6
|
-
//# sourceMappingURL=index.d.
|
|
5
|
+
export { IAlfredUser, IConfig, RouterliciousUrlResolver } from "./urlResolver.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAwB,wBAAwB,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { IAlfredUser, IConfig, RouterliciousUrlResolver } from \"./urlResolver.js\";\n"]}
|
package/lib/nconf.cjs
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
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.Provider = void 0;
|
|
8
|
+
// This file serves as an intermediary module to export the 'Provider' named export from the 'nconf' module.
|
|
9
|
+
// It is written using ESM module syntax, making it compatible with both ESM and CJS module.
|
|
10
|
+
// This compatibility allows for flexible usage of the 'Provider' named export from the 'nconf' module across different module systems without modification.
|
|
11
|
+
const nconf_1 = require("nconf");
|
|
12
|
+
Object.defineProperty(exports, "Provider", { enumerable: true, get: function () { return nconf_1.Provider; } });
|
|
13
|
+
//# sourceMappingURL=nconf.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nconf.cjs","sourceRoot":"","sources":["../src/nconf.cts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,4GAA4G;AAC5G,4FAA4F;AAC5F,4JAA4J;AAE5J,iCAAiC;AAExB,yFAFA,gBAAQ,OAEA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// This file serves as an intermediary module to export the 'Provider' named export from the 'nconf' module.\n// It is written using ESM module syntax, making it compatible with both ESM and CJS module.\n// This compatibility allows for flexible usage of the 'Provider' named export from the 'nconf' module across different module systems without modification.\n\nimport { Provider } from \"nconf\";\n\nexport { Provider };\n"]}
|
package/lib/nconf.d.cts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nconf.d.cts","sourceRoot":"","sources":["../src/nconf.cts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { strict as assert } from "assert";
|
|
6
|
+
import { Provider } from "../nconf.cjs";
|
|
7
|
+
import { RouterliciousUrlResolver } from "../urlResolver.js";
|
|
8
|
+
describe("Routerlicious Url Resolver", () => {
|
|
9
|
+
const token = "dummy";
|
|
10
|
+
const hostUrl = "https://dummy.com";
|
|
11
|
+
it("Should resolve the Routerlicious urls correctly", async () => {
|
|
12
|
+
const urlResolver = new RouterliciousUrlResolver(undefined, async () => Promise.resolve(token), hostUrl);
|
|
13
|
+
const url = "https://www.wu2.prague.office-int.com/loader/fluid/thinkable-list?chaincode=@fluid-example/shared-text@0.11.14146";
|
|
14
|
+
const resolved = (await urlResolver.resolve({ url }));
|
|
15
|
+
assert.equal(resolved.tokens.jwt, token, "Token does not match");
|
|
16
|
+
assert.equal(resolved.endpoints.storageUrl, "https://historian.wu2.prague.office-int.com/repos/fluid", "Storage url does not match");
|
|
17
|
+
assert.equal(resolved.endpoints.deltaStorageUrl, "https://alfred.wu2.prague.office-int.com/deltas/fluid/thinkable-list", "Delta storage url does not match");
|
|
18
|
+
assert.equal(resolved.endpoints.ordererUrl, "https://alfred.wu2.prague.office-int.com", "Orderer url does not match");
|
|
19
|
+
assert.equal(resolved.url, "https://wu2.prague.office-int.com/fluid/thinkable-list?chaincode=@fluid-example/shared-text@0.11.14146", "FluidUrl does not match");
|
|
20
|
+
});
|
|
21
|
+
it("Should resolve the localhost urls correctly", async () => {
|
|
22
|
+
const urlResolver = new RouterliciousUrlResolver(undefined, async () => Promise.resolve(token), hostUrl);
|
|
23
|
+
const url = "http://localhost:3000/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0";
|
|
24
|
+
const resolved = (await urlResolver.resolve({ url }));
|
|
25
|
+
assert.equal(resolved.tokens.jwt, token, "Token does not match");
|
|
26
|
+
assert.equal(resolved.endpoints.storageUrl, "http://localhost:3001/repos/fluid", "Storage url does not match");
|
|
27
|
+
assert.equal(resolved.endpoints.deltaStorageUrl, "http://localhost:3003/deltas/fluid/damp-competition", "Delta storage url does not match");
|
|
28
|
+
assert.equal(resolved.endpoints.ordererUrl, "http://localhost:3003", "Orderer url does not match");
|
|
29
|
+
assert.equal(resolved.url, "https://localhost:3003/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0", "FluidUrl does not match");
|
|
30
|
+
});
|
|
31
|
+
it("Should handle local External request", async () => {
|
|
32
|
+
const request = {
|
|
33
|
+
url: "/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0",
|
|
34
|
+
};
|
|
35
|
+
const provider = new Provider({})
|
|
36
|
+
.defaults({
|
|
37
|
+
a: "hell",
|
|
38
|
+
worker: {
|
|
39
|
+
serverUrl: "http://localhost:3003",
|
|
40
|
+
alfredUrl: "http://alfred:3000",
|
|
41
|
+
blobStorageUrl: "http://historian:3000",
|
|
42
|
+
internalBlobStorageUrl: "http://historian:3000",
|
|
43
|
+
},
|
|
44
|
+
})
|
|
45
|
+
.use("memory");
|
|
46
|
+
const config = {
|
|
47
|
+
provider,
|
|
48
|
+
tenantId: "fluid",
|
|
49
|
+
documentId: "damp-competition",
|
|
50
|
+
};
|
|
51
|
+
const urlResolver = new RouterliciousUrlResolver(config, async () => Promise.resolve(token), hostUrl);
|
|
52
|
+
const { endpoints, url } = (await urlResolver.resolve(request));
|
|
53
|
+
assert.equal(endpoints.storageUrl, "http://localhost:3001/repos/fluid", "Improperly Formed storageUrl");
|
|
54
|
+
assert.equal(endpoints.deltaStorageUrl, "http://localhost:3003/deltas/fluid/damp-competition", "Improperly Formed deltaStorageUrl");
|
|
55
|
+
assert.equal(endpoints.ordererUrl, "http://localhost:3003", "Improperly Formed OrdererUrl");
|
|
56
|
+
assert.equal(url, "https://localhost:3003/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0", "Improperly formed FluidURL");
|
|
57
|
+
});
|
|
58
|
+
it("Should handle local Internal request", async () => {
|
|
59
|
+
const request = {
|
|
60
|
+
url: "http://gateway:3000/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0",
|
|
61
|
+
};
|
|
62
|
+
const provider = new Provider({})
|
|
63
|
+
.defaults({
|
|
64
|
+
worker: {
|
|
65
|
+
serverUrl: "http://localhost:3003",
|
|
66
|
+
alfredUrl: "http://alfred:3000",
|
|
67
|
+
blobStorageUrl: "http://historian:3000",
|
|
68
|
+
internalBlobStorageUrl: "http://historian:3000",
|
|
69
|
+
},
|
|
70
|
+
})
|
|
71
|
+
.use("memory");
|
|
72
|
+
const config = {
|
|
73
|
+
provider,
|
|
74
|
+
tenantId: "fluid",
|
|
75
|
+
documentId: "damp-competition",
|
|
76
|
+
};
|
|
77
|
+
const urlResolver = new RouterliciousUrlResolver(config, async () => Promise.resolve(token), hostUrl);
|
|
78
|
+
const { endpoints, url } = (await urlResolver.resolve(request));
|
|
79
|
+
assert.equal(endpoints.storageUrl, "http://historian:3000/repos/fluid", "Improperly Formed storageUrl");
|
|
80
|
+
assert.equal(endpoints.deltaStorageUrl, "http://alfred:3000/deltas/fluid/damp-competition", "Improperly Formed deltaStorageUrl");
|
|
81
|
+
assert.equal(endpoints.ordererUrl, "http://alfred:3000", "Improperly Formed OrdererUrl");
|
|
82
|
+
assert.equal(url, "https://localhost:3003/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0", "Improperly formed FluidURL");
|
|
83
|
+
});
|
|
84
|
+
it("Should handle Deployed Internal request", async () => {
|
|
85
|
+
const request = {
|
|
86
|
+
url: "http://angry-dog-gateway:3000/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0",
|
|
87
|
+
};
|
|
88
|
+
const provider = new Provider({})
|
|
89
|
+
.defaults({
|
|
90
|
+
worker: {
|
|
91
|
+
serverUrl: "http://localhost:3003",
|
|
92
|
+
alfredUrl: "http://wiggly-wombat-alfred:3000",
|
|
93
|
+
blobStorageUrl: "http://historian:3000",
|
|
94
|
+
internalBlobStorageUrl: "http://smelly-wolf-historian:3000",
|
|
95
|
+
},
|
|
96
|
+
})
|
|
97
|
+
.use("memory");
|
|
98
|
+
const config = {
|
|
99
|
+
provider,
|
|
100
|
+
tenantId: "fluid",
|
|
101
|
+
documentId: "damp-competition",
|
|
102
|
+
};
|
|
103
|
+
const urlResolver = new RouterliciousUrlResolver(config, async () => Promise.resolve(token), hostUrl);
|
|
104
|
+
const { endpoints, url } = (await urlResolver.resolve(request));
|
|
105
|
+
assert.equal(endpoints.storageUrl, "http://smelly-wolf-historian:3000/repos/fluid", "Improperly Formed storageUrl");
|
|
106
|
+
assert.equal(endpoints.deltaStorageUrl, "http://wiggly-wombat-alfred:3000/deltas/fluid/damp-competition", "Improperly Formed deltaStorageUrl");
|
|
107
|
+
assert.equal(endpoints.ordererUrl, "http://wiggly-wombat-alfred:3000", "Improperly Formed OrdererUrl");
|
|
108
|
+
assert.equal(url, "https://localhost:3003/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0", "Improperly formed FluidURL");
|
|
109
|
+
});
|
|
110
|
+
it("Should handle deployed External request", async () => {
|
|
111
|
+
const request = {
|
|
112
|
+
url: "/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0",
|
|
113
|
+
};
|
|
114
|
+
const provider = new Provider({})
|
|
115
|
+
.defaults({
|
|
116
|
+
worker: {
|
|
117
|
+
serverUrl: "https://alfred.wu2-ppe.prague.office-int.com",
|
|
118
|
+
alfredUrl: "http://wiggly-wombat-alfred",
|
|
119
|
+
blobStorageUrl: "https://historian.wu2-ppe.prague.office-int.com",
|
|
120
|
+
internalBlobStorageUrl: "http://smelly-wolf-historian",
|
|
121
|
+
},
|
|
122
|
+
})
|
|
123
|
+
.use("memory");
|
|
124
|
+
const config = {
|
|
125
|
+
provider,
|
|
126
|
+
tenantId: "fluid",
|
|
127
|
+
documentId: "damp-competition",
|
|
128
|
+
};
|
|
129
|
+
const urlResolver = new RouterliciousUrlResolver(config, async () => Promise.resolve(token), hostUrl);
|
|
130
|
+
const { endpoints, url } = (await urlResolver.resolve(request));
|
|
131
|
+
assert.equal(endpoints.storageUrl, "https://historian.wu2-ppe.prague.office-int.com/repos/fluid", "Storage url does not match");
|
|
132
|
+
assert.equal(endpoints.deltaStorageUrl, "https://alfred.wu2-ppe.prague.office-int.com/deltas/fluid/damp-competition", "Delta storage url does not match");
|
|
133
|
+
assert.equal(endpoints.ordererUrl, "https://alfred.wu2-ppe.prague.office-int.com", "Orderer url does not match");
|
|
134
|
+
assert.equal(url, "https://alfred.wu2-ppe.prague.office-int.com/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0", "FluidUrl does not match");
|
|
135
|
+
});
|
|
136
|
+
it("Should return the absolute url when requested", async () => {
|
|
137
|
+
const urlResolver = new RouterliciousUrlResolver(undefined, async () => Promise.resolve(token), hostUrl);
|
|
138
|
+
const url = "http://localhost:3000/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0";
|
|
139
|
+
const resolved = (await urlResolver.resolve({ url }));
|
|
140
|
+
const absoluteUrl = await urlResolver.getAbsoluteUrl(resolved, "relative");
|
|
141
|
+
assert.strictEqual(absoluteUrl, `${hostUrl}/fluid/damp-competition/relative`, "Absolute url should match");
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=routerlicious-urlResolver.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routerlicious-urlResolver.spec.js","sourceRoot":"","sources":["../../src/test/routerlicious-urlResolver.spec.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 { strict as assert } from \"assert\";\nimport { IResolvedUrl } from \"@fluidframework/driver-definitions\";\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport { Provider } from \"../nconf.cjs\";\nimport { RouterliciousUrlResolver } from \"../urlResolver.js\";\n\ndescribe(\"Routerlicious Url Resolver\", () => {\n\tconst token = \"dummy\";\n\tconst hostUrl = \"https://dummy.com\";\n\tit(\"Should resolve the Routerlicious urls correctly\", async () => {\n\t\tconst urlResolver = new RouterliciousUrlResolver(\n\t\t\tundefined,\n\t\t\tasync () => Promise.resolve(token),\n\t\t\thostUrl,\n\t\t);\n\t\tconst url: string =\n\t\t\t\"https://www.wu2.prague.office-int.com/loader/fluid/thinkable-list?chaincode=@fluid-example/shared-text@0.11.14146\";\n\t\tconst resolved = (await urlResolver.resolve({ url })) as IResolvedUrl;\n\t\tassert.equal(resolved.tokens.jwt, token, \"Token does not match\");\n\t\tassert.equal(\n\t\t\tresolved.endpoints.storageUrl,\n\t\t\t\"https://historian.wu2.prague.office-int.com/repos/fluid\",\n\t\t\t\"Storage url does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tresolved.endpoints.deltaStorageUrl,\n\t\t\t\"https://alfred.wu2.prague.office-int.com/deltas/fluid/thinkable-list\",\n\t\t\t\"Delta storage url does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tresolved.endpoints.ordererUrl,\n\t\t\t\"https://alfred.wu2.prague.office-int.com\",\n\t\t\t\"Orderer url does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tresolved.url,\n\t\t\t\"https://wu2.prague.office-int.com/fluid/thinkable-list?chaincode=@fluid-example/shared-text@0.11.14146\",\n\t\t\t\"FluidUrl does not match\",\n\t\t);\n\t});\n\n\tit(\"Should resolve the localhost urls correctly\", async () => {\n\t\tconst urlResolver = new RouterliciousUrlResolver(\n\t\t\tundefined,\n\t\t\tasync () => Promise.resolve(token),\n\t\t\thostUrl,\n\t\t);\n\t\tconst url: string =\n\t\t\t\"http://localhost:3000/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\";\n\t\tconst resolved = (await urlResolver.resolve({ url })) as IResolvedUrl;\n\t\tassert.equal(resolved.tokens.jwt, token, \"Token does not match\");\n\t\tassert.equal(\n\t\t\tresolved.endpoints.storageUrl,\n\t\t\t\"http://localhost:3001/repos/fluid\",\n\t\t\t\"Storage url does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tresolved.endpoints.deltaStorageUrl,\n\t\t\t\"http://localhost:3003/deltas/fluid/damp-competition\",\n\t\t\t\"Delta storage url does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tresolved.endpoints.ordererUrl,\n\t\t\t\"http://localhost:3003\",\n\t\t\t\"Orderer url does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tresolved.url,\n\t\t\t\"https://localhost:3003/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\",\n\t\t\t\"FluidUrl does not match\",\n\t\t);\n\t});\n\n\tit(\"Should handle local External request\", async () => {\n\t\tconst request: IRequest = {\n\t\t\turl: \"/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\",\n\t\t};\n\n\t\tconst provider = new Provider({})\n\t\t\t.defaults({\n\t\t\t\ta: \"hell\",\n\t\t\t\tworker: {\n\t\t\t\t\tserverUrl: \"http://localhost:3003\",\n\t\t\t\t\talfredUrl: \"http://alfred:3000\",\n\t\t\t\t\tblobStorageUrl: \"http://historian:3000\",\n\t\t\t\t\tinternalBlobStorageUrl: \"http://historian:3000\",\n\t\t\t\t},\n\t\t\t})\n\t\t\t.use(\"memory\");\n\n\t\tconst config = {\n\t\t\tprovider,\n\t\t\ttenantId: \"fluid\",\n\t\t\tdocumentId: \"damp-competition\",\n\t\t};\n\t\tconst urlResolver = new RouterliciousUrlResolver(\n\t\t\tconfig,\n\t\t\tasync () => Promise.resolve(token),\n\t\t\thostUrl,\n\t\t);\n\n\t\tconst { endpoints, url } = (await urlResolver.resolve(request)) as IResolvedUrl;\n\n\t\tassert.equal(\n\t\t\tendpoints.storageUrl,\n\t\t\t\"http://localhost:3001/repos/fluid\",\n\t\t\t\"Improperly Formed storageUrl\",\n\t\t);\n\t\tassert.equal(\n\t\t\tendpoints.deltaStorageUrl,\n\t\t\t\"http://localhost:3003/deltas/fluid/damp-competition\",\n\t\t\t\"Improperly Formed deltaStorageUrl\",\n\t\t);\n\t\tassert.equal(endpoints.ordererUrl, \"http://localhost:3003\", \"Improperly Formed OrdererUrl\");\n\t\tassert.equal(\n\t\t\turl,\n\t\t\t\"https://localhost:3003/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\",\n\t\t\t\"Improperly formed FluidURL\",\n\t\t);\n\t});\n\n\tit(\"Should handle local Internal request\", async () => {\n\t\tconst request: IRequest = {\n\t\t\turl: \"http://gateway:3000/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\",\n\t\t};\n\n\t\tconst provider = new Provider({})\n\t\t\t.defaults({\n\t\t\t\tworker: {\n\t\t\t\t\tserverUrl: \"http://localhost:3003\",\n\t\t\t\t\talfredUrl: \"http://alfred:3000\",\n\t\t\t\t\tblobStorageUrl: \"http://historian:3000\",\n\t\t\t\t\tinternalBlobStorageUrl: \"http://historian:3000\",\n\t\t\t\t},\n\t\t\t})\n\t\t\t.use(\"memory\");\n\n\t\tconst config = {\n\t\t\tprovider,\n\t\t\ttenantId: \"fluid\",\n\t\t\tdocumentId: \"damp-competition\",\n\t\t};\n\n\t\tconst urlResolver = new RouterliciousUrlResolver(\n\t\t\tconfig,\n\t\t\tasync () => Promise.resolve(token),\n\t\t\thostUrl,\n\t\t);\n\t\tconst { endpoints, url } = (await urlResolver.resolve(request)) as IResolvedUrl;\n\n\t\tassert.equal(\n\t\t\tendpoints.storageUrl,\n\t\t\t\"http://historian:3000/repos/fluid\",\n\t\t\t\"Improperly Formed storageUrl\",\n\t\t);\n\t\tassert.equal(\n\t\t\tendpoints.deltaStorageUrl,\n\t\t\t\"http://alfred:3000/deltas/fluid/damp-competition\",\n\t\t\t\"Improperly Formed deltaStorageUrl\",\n\t\t);\n\t\tassert.equal(endpoints.ordererUrl, \"http://alfred:3000\", \"Improperly Formed OrdererUrl\");\n\t\tassert.equal(\n\t\t\turl,\n\t\t\t\"https://localhost:3003/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\",\n\t\t\t\"Improperly formed FluidURL\",\n\t\t);\n\t});\n\n\tit(\"Should handle Deployed Internal request\", async () => {\n\t\tconst request: IRequest = {\n\t\t\turl: \"http://angry-dog-gateway:3000/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\",\n\t\t};\n\t\tconst provider = new Provider({})\n\t\t\t.defaults({\n\t\t\t\tworker: {\n\t\t\t\t\tserverUrl: \"http://localhost:3003\",\n\t\t\t\t\talfredUrl: \"http://wiggly-wombat-alfred:3000\",\n\t\t\t\t\tblobStorageUrl: \"http://historian:3000\",\n\t\t\t\t\tinternalBlobStorageUrl: \"http://smelly-wolf-historian:3000\",\n\t\t\t\t},\n\t\t\t})\n\t\t\t.use(\"memory\");\n\n\t\tconst config = {\n\t\t\tprovider,\n\t\t\ttenantId: \"fluid\",\n\t\t\tdocumentId: \"damp-competition\",\n\t\t};\n\n\t\tconst urlResolver = new RouterliciousUrlResolver(\n\t\t\tconfig,\n\t\t\tasync () => Promise.resolve(token),\n\t\t\thostUrl,\n\t\t);\n\t\tconst { endpoints, url } = (await urlResolver.resolve(request)) as IResolvedUrl;\n\n\t\tassert.equal(\n\t\t\tendpoints.storageUrl,\n\t\t\t\"http://smelly-wolf-historian:3000/repos/fluid\",\n\t\t\t\"Improperly Formed storageUrl\",\n\t\t);\n\t\tassert.equal(\n\t\t\tendpoints.deltaStorageUrl,\n\t\t\t\"http://wiggly-wombat-alfred:3000/deltas/fluid/damp-competition\",\n\t\t\t\"Improperly Formed deltaStorageUrl\",\n\t\t);\n\t\tassert.equal(\n\t\t\tendpoints.ordererUrl,\n\t\t\t\"http://wiggly-wombat-alfred:3000\",\n\t\t\t\"Improperly Formed OrdererUrl\",\n\t\t);\n\t\tassert.equal(\n\t\t\turl,\n\t\t\t\"https://localhost:3003/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\",\n\t\t\t\"Improperly formed FluidURL\",\n\t\t);\n\t});\n\n\tit(\"Should handle deployed External request\", async () => {\n\t\tconst request: IRequest = {\n\t\t\turl: \"/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\",\n\t\t};\n\n\t\tconst provider = new Provider({})\n\t\t\t.defaults({\n\t\t\t\tworker: {\n\t\t\t\t\tserverUrl: \"https://alfred.wu2-ppe.prague.office-int.com\",\n\t\t\t\t\talfredUrl: \"http://wiggly-wombat-alfred\",\n\t\t\t\t\tblobStorageUrl: \"https://historian.wu2-ppe.prague.office-int.com\",\n\t\t\t\t\tinternalBlobStorageUrl: \"http://smelly-wolf-historian\",\n\t\t\t\t},\n\t\t\t})\n\t\t\t.use(\"memory\");\n\n\t\tconst config = {\n\t\t\tprovider,\n\t\t\ttenantId: \"fluid\",\n\t\t\tdocumentId: \"damp-competition\",\n\t\t};\n\n\t\tconst urlResolver = new RouterliciousUrlResolver(\n\t\t\tconfig,\n\t\t\tasync () => Promise.resolve(token),\n\t\t\thostUrl,\n\t\t);\n\t\tconst { endpoints, url } = (await urlResolver.resolve(request)) as IResolvedUrl;\n\n\t\tassert.equal(\n\t\t\tendpoints.storageUrl,\n\t\t\t\"https://historian.wu2-ppe.prague.office-int.com/repos/fluid\",\n\t\t\t\"Storage url does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tendpoints.deltaStorageUrl,\n\t\t\t\"https://alfred.wu2-ppe.prague.office-int.com/deltas/fluid/damp-competition\",\n\t\t\t\"Delta storage url does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\tendpoints.ordererUrl,\n\t\t\t\"https://alfred.wu2-ppe.prague.office-int.com\",\n\t\t\t\"Orderer url does not match\",\n\t\t);\n\t\tassert.equal(\n\t\t\turl,\n\t\t\t\"https://alfred.wu2-ppe.prague.office-int.com/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\",\n\t\t\t\"FluidUrl does not match\",\n\t\t);\n\t});\n\n\tit(\"Should return the absolute url when requested\", async () => {\n\t\tconst urlResolver = new RouterliciousUrlResolver(\n\t\t\tundefined,\n\t\t\tasync () => Promise.resolve(token),\n\t\t\thostUrl,\n\t\t);\n\t\tconst url: string =\n\t\t\t\"http://localhost:3000/loader/fluid/damp-competition?chaincode=@fluid-example/shared-text@^0.11.0\";\n\t\tconst resolved = (await urlResolver.resolve({ url })) as IResolvedUrl;\n\t\tconst absoluteUrl = await urlResolver.getAbsoluteUrl(resolved, \"relative\");\n\t\tassert.strictEqual(\n\t\t\tabsoluteUrl,\n\t\t\t`${hostUrl}/fluid/damp-competition/relative`,\n\t\t\t\"Absolute url should match\",\n\t\t);\n\t});\n});\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
use_current_InterfaceDeclaration_IAlfredUser(get_old_InterfaceDeclaration_IAlfredUser());
|
|
2
|
+
use_old_InterfaceDeclaration_IAlfredUser(get_current_InterfaceDeclaration_IAlfredUser());
|
|
3
|
+
use_current_InterfaceDeclaration_IConfig(get_old_InterfaceDeclaration_IConfig());
|
|
4
|
+
use_old_InterfaceDeclaration_IConfig(get_current_InterfaceDeclaration_IConfig());
|
|
5
|
+
use_current_ClassDeclaration_RouterliciousUrlResolver(get_old_ClassDeclaration_RouterliciousUrlResolver());
|
|
6
|
+
use_old_ClassDeclaration_RouterliciousUrlResolver(get_current_ClassDeclaration_RouterliciousUrlResolver());
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=validateRouterliciousUrlresolverPrevious.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateRouterliciousUrlresolverPrevious.generated.js","sourceRoot":"","sources":["../../../src/test/types/validateRouterliciousUrlresolverPrevious.generated.ts"],"names":[],"mappings":"AAgCA,4CAA4C,CACxC,wCAAwC,EAAE,CAAC,CAAC;AAWhD,wCAAwC,CACpC,4CAA4C,EAAE,CAAC,CAAC;AAWpD,wCAAwC,CACpC,oCAAoC,EAAE,CAAC,CAAC;AAW5C,oCAAoC,CAChC,wCAAwC,EAAE,CAAC,CAAC;AAWhD,qDAAqD,CACjD,iDAAiD,EAAE,CAAC,CAAC;AAWzD,iDAAiD,CAC7C,qDAAqD,EAAE,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n/*\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.\n * Generated by fluid-type-test-generator in @fluidframework/build-tools.\n */\nimport type * as old from \"@fluidframework/routerlicious-urlresolver-previous\";\nimport type * as current from \"../../index.js\";\n\n\n// See 'build-tools/src/type-test-generator/compatibility.ts' for more information.\ntype TypeOnly<T> = T extends number\n\t? number\n\t: T extends string\n\t? string\n\t: T extends boolean | bigint | symbol\n\t? T\n\t: {\n\t\t\t[P in keyof T]: TypeOnly<T[P]>;\n\t };\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_IAlfredUser\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_IAlfredUser():\n TypeOnly<old.IAlfredUser>;\ndeclare function use_current_InterfaceDeclaration_IAlfredUser(\n use: TypeOnly<current.IAlfredUser>): void;\nuse_current_InterfaceDeclaration_IAlfredUser(\n get_old_InterfaceDeclaration_IAlfredUser());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_IAlfredUser\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_IAlfredUser():\n TypeOnly<current.IAlfredUser>;\ndeclare function use_old_InterfaceDeclaration_IAlfredUser(\n use: TypeOnly<old.IAlfredUser>): void;\nuse_old_InterfaceDeclaration_IAlfredUser(\n get_current_InterfaceDeclaration_IAlfredUser());\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_IConfig\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_InterfaceDeclaration_IConfig():\n TypeOnly<old.IConfig>;\ndeclare function use_current_InterfaceDeclaration_IConfig(\n use: TypeOnly<current.IConfig>): void;\nuse_current_InterfaceDeclaration_IConfig(\n get_old_InterfaceDeclaration_IConfig());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"InterfaceDeclaration_IConfig\": {\"backCompat\": false}\n*/\ndeclare function get_current_InterfaceDeclaration_IConfig():\n TypeOnly<current.IConfig>;\ndeclare function use_old_InterfaceDeclaration_IConfig(\n use: TypeOnly<old.IConfig>): void;\nuse_old_InterfaceDeclaration_IConfig(\n get_current_InterfaceDeclaration_IConfig());\n\n/*\n* Validate forward compat by using old type in place of current type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"ClassDeclaration_RouterliciousUrlResolver\": {\"forwardCompat\": false}\n*/\ndeclare function get_old_ClassDeclaration_RouterliciousUrlResolver():\n TypeOnly<old.RouterliciousUrlResolver>;\ndeclare function use_current_ClassDeclaration_RouterliciousUrlResolver(\n use: TypeOnly<current.RouterliciousUrlResolver>): void;\nuse_current_ClassDeclaration_RouterliciousUrlResolver(\n get_old_ClassDeclaration_RouterliciousUrlResolver());\n\n/*\n* Validate back compat by using current type in place of old type\n* If breaking change required, add in package.json under typeValidation.broken:\n* \"ClassDeclaration_RouterliciousUrlResolver\": {\"backCompat\": false}\n*/\ndeclare function get_current_ClassDeclaration_RouterliciousUrlResolver():\n TypeOnly<current.RouterliciousUrlResolver>;\ndeclare function use_old_ClassDeclaration_RouterliciousUrlResolver(\n use: TypeOnly<old.RouterliciousUrlResolver>): void;\nuse_old_ClassDeclaration_RouterliciousUrlResolver(\n get_current_ClassDeclaration_RouterliciousUrlResolver());\n"]}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { IRequest } from "@fluidframework/core-interfaces";
|
|
6
6
|
import { IResolvedUrl, IUrlResolver } from "@fluidframework/driver-definitions";
|
|
7
7
|
import { IUser } from "@fluidframework/protocol-definitions";
|
|
8
|
-
import { Provider } from "nconf";
|
|
8
|
+
import { Provider } from "./nconf.cjs";
|
|
9
9
|
/**
|
|
10
10
|
* @internal
|
|
11
11
|
*/
|
|
@@ -40,4 +40,4 @@ export interface IConfig {
|
|
|
40
40
|
tenantId: string;
|
|
41
41
|
documentId: string;
|
|
42
42
|
}
|
|
43
|
-
//# sourceMappingURL=urlResolver.d.
|
|
43
|
+
//# sourceMappingURL=urlResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlResolver.d.ts","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC;;GAEG;AACH,qBAAa,wBAAyB,YAAW,YAAY;IAE3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAGvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAJP,MAAM,EACpB;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAC5D,SAAS,EACK,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE,MAAM;IAGjC;;OAEG;IACU,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA8G7D,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgB5F;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { parse } from "url";
|
|
6
5
|
import { assert } from "@fluidframework/core-utils";
|
|
7
6
|
const r11sServers = [
|
|
8
7
|
"www.wu2-ppe.prague.office-int.com",
|
|
@@ -56,9 +55,9 @@ export class RouterliciousUrlResolver {
|
|
|
56
55
|
const isLocalHost = server === "localhost";
|
|
57
56
|
const isInternalRequest = server.includes("gateway"); // e.g. gateway:3000 || fierce-dog-gateway:3000
|
|
58
57
|
const serverSuffix = isLocalHost ? `${server}:3003` : server.substring(4);
|
|
59
|
-
let fluidUrl = "
|
|
58
|
+
let fluidUrl = "https://" +
|
|
60
59
|
`${this.config
|
|
61
|
-
?
|
|
60
|
+
? new URL(this.config.provider.get("worker:serverUrl")).host
|
|
62
61
|
: serverSuffix}/` +
|
|
63
62
|
`${encodeURIComponent(tenantId)}/` +
|
|
64
63
|
`${encodeURIComponent(documentId)}`;
|
|
@@ -112,7 +111,7 @@ export class RouterliciousUrlResolver {
|
|
|
112
111
|
return resolved;
|
|
113
112
|
}
|
|
114
113
|
async getAbsoluteUrl(resolvedUrl, relativeUrl) {
|
|
115
|
-
const parsedUrl =
|
|
114
|
+
const parsedUrl = new URL(resolvedUrl.url);
|
|
116
115
|
assert(!!parsedUrl.pathname, 0x0b9 /* "PathName should exist" */);
|
|
117
116
|
const [, tenantId, documentId] = parsedUrl.pathname.split("/");
|
|
118
117
|
assert(!!tenantId, 0x0ba /* "Tenant id should exist" */);
|
|
@@ -124,4 +123,4 @@ export class RouterliciousUrlResolver {
|
|
|
124
123
|
return `${this.hostUrl}/${encodeURIComponent(tenantId)}/${encodeURIComponent(documentId)}/${url}`;
|
|
125
124
|
}
|
|
126
125
|
}
|
|
127
|
-
//# sourceMappingURL=urlResolver.
|
|
126
|
+
//# sourceMappingURL=urlResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlResolver.js","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAMpD,MAAM,WAAW,GAAG;IACnB,mCAAmC;IACnC,+BAA+B;IAC/B,8BAA8B;CAC9B,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,wBAAwB;IACpC,YACkB,MAEL,EACK,QAA+B,EAC/B,OAAe;QAJf,WAAM,GAAN,MAAM,CAEX;QACK,aAAQ,GAAR,QAAQ,CAAuB;QAC/B,YAAO,GAAP,OAAO,CAAQ;IAC9B,CAAC;IAEJ;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,OAAiB;QACrC,IAAI,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;QAE/B,gDAAgD;QAChD,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YAC/C,YAAY,GAAG,oBAAoB,OAAO,CAAC,GAAG,EAAE,CAAC;SACjD;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE7C,sFAAsF;QACtF,IACC,CAAC,CACA,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5B,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC;YAClD,IAAI,CAAC,MAAM,CACX,EACA;YACD,OAAO,SAAS,CAAC;SACjB;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,QAAgB,CAAC;QACrB,IAAI,UAAkB,CAAC;QACvB,IAAI,QAA8B,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,EAAE;YAChB,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YAChC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YACpC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;SAChC;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YAC5B,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACrB;aAAM;YACN,QAAQ,GAAG,OAAO,CAAC;YACnB,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACrB;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEpC,MAAM,WAAW,GAAG,MAAM,KAAK,WAAW,CAAC;QAC3C,MAAM,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,+CAA+C;QAErG,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAE1E,IAAI,QAAQ,GACX,UAAU;YACV,GACC,IAAI,CAAC,MAAM;gBACV,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI;gBAC5D,CAAC,CAAC,YACJ,GAAG;YACH,GAAG,kBAAkB,CAAC,QAAQ,CAAC,GAAG;YAClC,GAAG,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;QAErC,gEAAgE;QAChE,IAAI,MAAM,CAAC,MAAM,EAAE;YAClB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;YACnC,IAAI,YAAY,EAAE;gBACjB,QAAQ,IAAI,YAAY,CAAC;aACzB;SACD;QAED,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,eAAe,GAAG,EAAE,CAAC;QAEzB,oDAAoD;QACpD,IAAI,QAAQ,IAAI,iBAAiB,EAAE;YAClC,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YAC3D,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC9C,eAAe,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,kBAAkB,CACjF,QAAQ,CACR,IAAI,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;SACtC;aAAM,IAAI,QAAQ,EAAE;YACpB,UAAU,GAAG,QAAQ;iBACnB,GAAG,CAAC,uBAAuB,CAAC;iBAC5B,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YAC9C,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC9C,eAAe,GAAG,GAAG,UAAU,WAAW,kBAAkB,CAC3D,QAAQ,CACR,IAAI,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;SACtC;aAAM,IAAI,WAAW,EAAE;YACvB,UAAU,GAAG,uBAAuB,CAAC;YACrC,UAAU,GAAG,uBAAuB,CAAC;YACrC,eAAe,GAAG,gCAAgC,QAAQ,IAAI,UAAU,EAAE,CAAC;SAC3E;aAAM;YACN,UAAU,GAAG,qBAAqB,YAAY,EAAE,CAAC;YACjD,UAAU,GAAG,kBAAkB,YAAY,EAAE,CAAC;YAC9C,eAAe,GAAG,kBAAkB,YAAY,WAAW,QAAQ,IAAI,UAAU,EAAE,CAAC;SACpF;QAED,UAAU,IAAI,UAAU,QAAQ,EAAE,CAAC;QACnC,UAAU,IAAI,EAAE,CAAC;QACjB,eAAe,IAAI,EAAE,CAAC;QAEtB,MAAM,QAAQ,GAAiB;YAC9B,SAAS,EAAE;gBACV,UAAU;gBACV,eAAe;gBACf,UAAU;aACV;YACD,EAAE,EAAE,UAAU;YACd,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;YACtB,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,QAAQ;SACb,CAAC;QACF,OAAO,QAAQ,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,WAAyB,EAAE,WAAmB;QACzE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAClE,MAAM,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/D,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAE7D,IAAI,GAAG,GAAG,WAAW,CAAC;QACtB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;YACxB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACpB;QAED,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,kBAAkB,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAC3E,UAAU,CACV,IAAI,GAAG,EAAE,CAAC;IACZ,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/core-utils\";\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport { IResolvedUrl, IUrlResolver } from \"@fluidframework/driver-definitions\";\nimport { IUser } from \"@fluidframework/protocol-definitions\";\nimport { Provider } from \"./nconf.cjs\";\n\nconst r11sServers = [\n\t\"www.wu2-ppe.prague.office-int.com\",\n\t\"www.wu2.prague.office-int.com\",\n\t\"www.eu.prague.office-int.com\",\n];\n\n/**\n * @internal\n */\nexport class RouterliciousUrlResolver implements IUrlResolver {\n\tconstructor(\n\t\tprivate readonly config:\n\t\t\t| { provider: Provider; tenantId: string; documentId: string }\n\t\t\t| undefined,\n\t\tprivate readonly getToken: () => Promise<string>,\n\t\tprivate readonly hostUrl: string,\n\t) {}\n\n\t/**\n\t * Handles a request and returns the relevant endpoints for the environment\n\t */\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tlet requestedUrl = request.url;\n\n\t\t// If we know the original hostname, reinsert it\n\t\tif (this.config && request.url.startsWith(\"/\")) {\n\t\t\trequestedUrl = `http://dummy:3000${request.url}`;\n\t\t}\n\n\t\tconst reqUrl = new URL(requestedUrl);\n\t\tconst server = reqUrl.hostname.toLowerCase();\n\n\t\t// If we don't have a valid server or a prescriptive config, we cannot resolve the URL\n\t\tif (\n\t\t\t!(\n\t\t\t\tr11sServers.includes(server) ||\n\t\t\t\t(server === \"localhost\" && reqUrl.port === \"3000\") ||\n\t\t\t\tthis.config\n\t\t\t)\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst path = reqUrl.pathname.split(\"/\");\n\t\tlet tenantId: string;\n\t\tlet documentId: string;\n\t\tlet provider: Provider | undefined;\n\t\tif (this.config) {\n\t\t\ttenantId = this.config.tenantId;\n\t\t\tdocumentId = this.config.documentId;\n\t\t\tprovider = this.config.provider;\n\t\t} else if (path.length >= 4) {\n\t\t\ttenantId = path[2];\n\t\t\tdocumentId = path[3];\n\t\t} else {\n\t\t\ttenantId = \"fluid\";\n\t\t\tdocumentId = path[2];\n\t\t}\n\n\t\tconst token = await this.getToken();\n\n\t\tconst isLocalHost = server === \"localhost\";\n\t\tconst isInternalRequest = server.includes(\"gateway\"); // e.g. gateway:3000 || fierce-dog-gateway:3000\n\n\t\tconst serverSuffix = isLocalHost ? `${server}:3003` : server.substring(4);\n\n\t\tlet fluidUrl =\n\t\t\t\"https://\" +\n\t\t\t`${\n\t\t\t\tthis.config\n\t\t\t\t\t? new URL(this.config.provider.get(\"worker:serverUrl\")).host\n\t\t\t\t\t: serverSuffix\n\t\t\t}/` +\n\t\t\t`${encodeURIComponent(tenantId)}/` +\n\t\t\t`${encodeURIComponent(documentId)}`;\n\n\t\t// In case of any additional parameters add them back to the url\n\t\tif (reqUrl.search) {\n\t\t\tconst searchParams = reqUrl.search;\n\t\t\tif (searchParams) {\n\t\t\t\tfluidUrl += searchParams;\n\t\t\t}\n\t\t}\n\n\t\tlet storageUrl = \"\";\n\t\tlet ordererUrl = \"\";\n\t\tlet deltaStorageUrl = \"\";\n\n\t\t// There is no provider when using debugging tooling\n\t\tif (provider && isInternalRequest) {\n\t\t\tstorageUrl = provider.get(\"worker:internalBlobStorageUrl\");\n\t\t\tordererUrl = provider.get(\"worker:alfredUrl\");\n\t\t\tdeltaStorageUrl = `${provider.get(\"worker:alfredUrl\")}/deltas/${encodeURIComponent(\n\t\t\t\ttenantId,\n\t\t\t)}/${encodeURIComponent(documentId)}`;\n\t\t} else if (provider) {\n\t\t\tstorageUrl = provider\n\t\t\t\t.get(\"worker:blobStorageUrl\")\n\t\t\t\t.replace(\"historian:3000\", \"localhost:3001\");\n\t\t\tordererUrl = provider.get(\"worker:serverUrl\");\n\t\t\tdeltaStorageUrl = `${ordererUrl}/deltas/${encodeURIComponent(\n\t\t\t\ttenantId,\n\t\t\t)}/${encodeURIComponent(documentId)}`;\n\t\t} else if (isLocalHost) {\n\t\t\tstorageUrl = `http://localhost:3001`;\n\t\t\tordererUrl = `http://localhost:3003`;\n\t\t\tdeltaStorageUrl = `http://localhost:3003/deltas/${tenantId}/${documentId}`;\n\t\t} else {\n\t\t\tstorageUrl = `https://historian.${serverSuffix}`;\n\t\t\tordererUrl = `https://alfred.${serverSuffix}`;\n\t\t\tdeltaStorageUrl = `https://alfred.${serverSuffix}/deltas/${tenantId}/${documentId}`;\n\t\t}\n\n\t\tstorageUrl += `/repos/${tenantId}`;\n\t\tordererUrl += ``;\n\t\tdeltaStorageUrl += ``;\n\n\t\tconst resolved: IResolvedUrl = {\n\t\t\tendpoints: {\n\t\t\t\tstorageUrl,\n\t\t\t\tdeltaStorageUrl,\n\t\t\t\tordererUrl,\n\t\t\t},\n\t\t\tid: documentId,\n\t\t\ttokens: { jwt: token },\n\t\t\ttype: \"fluid\",\n\t\t\turl: fluidUrl,\n\t\t};\n\t\treturn resolved;\n\t}\n\n\tpublic async getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string> {\n\t\tconst parsedUrl = new URL(resolvedUrl.url);\n\t\tassert(!!parsedUrl.pathname, 0x0b9 /* \"PathName should exist\" */);\n\t\tconst [, tenantId, documentId] = parsedUrl.pathname.split(\"/\");\n\t\tassert(!!tenantId, 0x0ba /* \"Tenant id should exist\" */);\n\t\tassert(!!documentId, 0x0bb /* \"Document id should exist\" */);\n\n\t\tlet url = relativeUrl;\n\t\tif (url.startsWith(\"/\")) {\n\t\t\turl = url.substr(1);\n\t\t}\n\n\t\treturn `${this.hostUrl}/${encodeURIComponent(tenantId)}/${encodeURIComponent(\n\t\t\tdocumentId,\n\t\t)}/${url}`;\n\t}\n}\n\n/**\n * @internal\n */\nexport interface IAlfredUser extends IUser {\n\tdisplayName: string;\n\tname: string;\n}\n\n/**\n * @internal\n */\nexport interface IConfig {\n\tserverUrl: string;\n\tblobStorageUrl: string;\n\ttenantId: string;\n\tdocumentId: string;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/routerlicious-urlresolver",
|
|
3
|
-
"version": "2.0.0-rc.
|
|
3
|
+
"version": "2.0.0-rc.2.0.0",
|
|
4
4
|
"description": "Url Resolver for routerlicious urls.",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -11,92 +11,70 @@
|
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"author": "Microsoft and contributors",
|
|
13
13
|
"sideEffects": false,
|
|
14
|
+
"type": "module",
|
|
14
15
|
"exports": {
|
|
15
16
|
".": {
|
|
16
17
|
"import": {
|
|
17
|
-
"types": "./lib/index.d.
|
|
18
|
-
"default": "./lib/index.
|
|
18
|
+
"types": "./lib/index.d.ts",
|
|
19
|
+
"default": "./lib/index.js"
|
|
19
20
|
},
|
|
20
21
|
"require": {
|
|
21
22
|
"types": "./dist/index.d.ts",
|
|
22
23
|
"default": "./dist/index.js"
|
|
23
24
|
}
|
|
24
25
|
},
|
|
25
|
-
"./
|
|
26
|
-
"import": {
|
|
27
|
-
"types": "./lib/routerlicious-urlresolver-alpha.d.mts",
|
|
28
|
-
"default": "./lib/index.mjs"
|
|
29
|
-
},
|
|
30
|
-
"require": {
|
|
31
|
-
"types": "./dist/routerlicious-urlresolver-alpha.d.ts",
|
|
32
|
-
"default": "./dist/index.js"
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
"./beta": {
|
|
26
|
+
"./public": {
|
|
36
27
|
"import": {
|
|
37
|
-
"types": "./lib/routerlicious-urlresolver-
|
|
38
|
-
"default": "./lib/index.
|
|
28
|
+
"types": "./lib/routerlicious-urlresolver-public.d.ts",
|
|
29
|
+
"default": "./lib/index.js"
|
|
39
30
|
},
|
|
40
31
|
"require": {
|
|
41
|
-
"types": "./dist/routerlicious-urlresolver-
|
|
32
|
+
"types": "./dist/routerlicious-urlresolver-public.d.ts",
|
|
42
33
|
"default": "./dist/index.js"
|
|
43
34
|
}
|
|
44
35
|
},
|
|
45
36
|
"./internal": {
|
|
46
37
|
"import": {
|
|
47
|
-
"types": "./lib/index.d.
|
|
48
|
-
"default": "./lib/index.
|
|
38
|
+
"types": "./lib/index.d.ts",
|
|
39
|
+
"default": "./lib/index.js"
|
|
49
40
|
},
|
|
50
41
|
"require": {
|
|
51
42
|
"types": "./dist/index.d.ts",
|
|
52
43
|
"default": "./dist/index.js"
|
|
53
44
|
}
|
|
54
|
-
},
|
|
55
|
-
"./public": {
|
|
56
|
-
"import": {
|
|
57
|
-
"types": "./lib/routerlicious-urlresolver-public.d.mts",
|
|
58
|
-
"default": "./lib/index.mjs"
|
|
59
|
-
},
|
|
60
|
-
"require": {
|
|
61
|
-
"types": "./dist/routerlicious-urlresolver-public.d.ts",
|
|
62
|
-
"default": "./dist/index.js"
|
|
63
|
-
}
|
|
64
45
|
}
|
|
65
46
|
},
|
|
66
47
|
"main": "dist/index.js",
|
|
67
|
-
"module": "lib/index.mjs",
|
|
68
48
|
"types": "dist/index.d.ts",
|
|
69
49
|
"dependencies": {
|
|
70
|
-
"@fluidframework/core-interfaces": ">=2.0.0-rc.
|
|
71
|
-
"@fluidframework/core-utils": ">=2.0.0-rc.
|
|
72
|
-
"@fluidframework/driver-definitions": ">=2.0.0-rc.
|
|
73
|
-
"@fluidframework/protocol-definitions": "^3.
|
|
74
|
-
"nconf": "^0.12.0"
|
|
75
|
-
"url": "^0.11.0"
|
|
50
|
+
"@fluidframework/core-interfaces": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
51
|
+
"@fluidframework/core-utils": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
52
|
+
"@fluidframework/driver-definitions": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
53
|
+
"@fluidframework/protocol-definitions": "^3.2.0",
|
|
54
|
+
"nconf": "^0.12.0"
|
|
76
55
|
},
|
|
77
56
|
"devDependencies": {
|
|
78
57
|
"@arethetypeswrong/cli": "^0.13.3",
|
|
79
|
-
"@fluid-
|
|
58
|
+
"@fluid-internal/mocha-test-setup": ">=2.0.0-rc.2.0.0 <2.0.0-rc.2.1.0",
|
|
59
|
+
"@fluid-tools/build-cli": "^0.34.0",
|
|
80
60
|
"@fluidframework/build-common": "^2.0.3",
|
|
81
|
-
"@fluidframework/build-tools": "^0.
|
|
82
|
-
"@fluidframework/eslint-config-fluid": "^
|
|
83
|
-
"@fluidframework/mocha-test-setup": ">=2.0.0-rc.1.0.4 <2.0.0-rc.1.1.0",
|
|
61
|
+
"@fluidframework/build-tools": "^0.34.0",
|
|
62
|
+
"@fluidframework/eslint-config-fluid": "^4.0.0",
|
|
84
63
|
"@fluidframework/routerlicious-urlresolver-previous": "npm:@fluidframework/routerlicious-urlresolver@2.0.0-internal.8.0.0",
|
|
85
|
-
"@microsoft/api-extractor": "^7.
|
|
64
|
+
"@microsoft/api-extractor": "^7.42.3",
|
|
86
65
|
"@types/mocha": "^9.1.1",
|
|
87
66
|
"@types/nconf": "^0.10.0",
|
|
88
67
|
"@types/node": "^18.19.0",
|
|
89
68
|
"assert": "^2.0.0",
|
|
90
69
|
"copyfiles": "^2.4.1",
|
|
91
70
|
"cross-env": "^7.0.3",
|
|
92
|
-
"eslint": "~8.
|
|
71
|
+
"eslint": "~8.55.0",
|
|
93
72
|
"mocha": "^10.2.0",
|
|
94
73
|
"mocha-json-output-reporter": "^2.0.1",
|
|
95
74
|
"mocha-multi-reporters": "^1.5.1",
|
|
96
75
|
"moment": "^2.21.0",
|
|
97
76
|
"prettier": "~3.0.3",
|
|
98
77
|
"rimraf": "^4.4.0",
|
|
99
|
-
"tsc-multi": "^1.1.0",
|
|
100
78
|
"typescript": "~5.1.6"
|
|
101
79
|
},
|
|
102
80
|
"fluidBuild": {
|
|
@@ -116,14 +94,16 @@
|
|
|
116
94
|
},
|
|
117
95
|
"scripts": {
|
|
118
96
|
"api": "fluid-build . --task api",
|
|
119
|
-
"api-extractor:commonjs": "api-extractor run --
|
|
120
|
-
"api-extractor:esnext": "api-extractor run --
|
|
97
|
+
"api-extractor:commonjs": "api-extractor run --config ./api-extractor-cjs.json",
|
|
98
|
+
"api-extractor:esnext": "api-extractor run --local",
|
|
121
99
|
"build": "fluid-build . --task build",
|
|
122
100
|
"build:commonjs": "fluid-build . --task commonjs",
|
|
123
101
|
"build:compile": "fluid-build . --task compile",
|
|
124
102
|
"build:docs": "fluid-build . --task api",
|
|
125
|
-
"build:esnext": "tsc
|
|
126
|
-
"build:test": "
|
|
103
|
+
"build:esnext": "tsc --project ./tsconfig.json",
|
|
104
|
+
"build:test": "npm run build:test:esm && npm run build:test:cjs",
|
|
105
|
+
"build:test:cjs": "fluid-tsc commonjs --project ./src/test/tsconfig.cjs.json",
|
|
106
|
+
"build:test:esm": "tsc --project ./src/test/tsconfig.json",
|
|
127
107
|
"check:are-the-types-wrong": "attw --pack . --entrypoints .",
|
|
128
108
|
"check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
|
|
129
109
|
"ci:build:docs": "api-extractor run",
|
|
@@ -136,9 +116,11 @@
|
|
|
136
116
|
"prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
|
|
137
117
|
"prettier:fix": "prettier --write . --cache --ignore-path ../../../.prettierignore",
|
|
138
118
|
"test": "npm run test:mocha",
|
|
139
|
-
"test:mocha": "
|
|
119
|
+
"test:mocha": "npm run test:mocha:esm && npm run test:mocha:cjs",
|
|
120
|
+
"test:mocha:cjs": "mocha --recursive \"dist/test/**/*.spec.*js\" --exit",
|
|
121
|
+
"test:mocha:esm": "mocha --recursive \"lib/test/**/*.spec.*js\" --exit",
|
|
140
122
|
"test:mocha:verbose": "cross-env FLUID_TEST_VERBOSE=1 npm run test:mocha",
|
|
141
|
-
"tsc": "tsc",
|
|
123
|
+
"tsc": "fluid-tsc commonjs --project ./tsconfig.cjs.json && copyfiles -f ../../../common/build/build-common/src/cjs/package.json ./dist",
|
|
142
124
|
"typetests:gen": "fluid-type-test-generator",
|
|
143
125
|
"typetests:prepare": "flub typetests --dir . --reset --previous --normalize"
|
|
144
126
|
}
|
package/src/index.ts
CHANGED
package/src/nconf.cts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
// This file serves as an intermediary module to export the 'Provider' named export from the 'nconf' module.
|
|
7
|
+
// It is written using ESM module syntax, making it compatible with both ESM and CJS module.
|
|
8
|
+
// This compatibility allows for flexible usage of the 'Provider' named export from the 'nconf' module across different module systems without modification.
|
|
9
|
+
|
|
10
|
+
import { Provider } from "nconf";
|
|
11
|
+
|
|
12
|
+
export { Provider };
|
package/src/urlResolver.ts
CHANGED
|
@@ -3,12 +3,11 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { parse } from "url";
|
|
7
6
|
import { assert } from "@fluidframework/core-utils";
|
|
8
7
|
import { IRequest } from "@fluidframework/core-interfaces";
|
|
9
8
|
import { IResolvedUrl, IUrlResolver } from "@fluidframework/driver-definitions";
|
|
10
9
|
import { IUser } from "@fluidframework/protocol-definitions";
|
|
11
|
-
import { Provider } from "nconf";
|
|
10
|
+
import { Provider } from "./nconf.cjs";
|
|
12
11
|
|
|
13
12
|
const r11sServers = [
|
|
14
13
|
"www.wu2-ppe.prague.office-int.com",
|
|
@@ -77,10 +76,10 @@ export class RouterliciousUrlResolver implements IUrlResolver {
|
|
|
77
76
|
const serverSuffix = isLocalHost ? `${server}:3003` : server.substring(4);
|
|
78
77
|
|
|
79
78
|
let fluidUrl =
|
|
80
|
-
"
|
|
79
|
+
"https://" +
|
|
81
80
|
`${
|
|
82
81
|
this.config
|
|
83
|
-
?
|
|
82
|
+
? new URL(this.config.provider.get("worker:serverUrl")).host
|
|
84
83
|
: serverSuffix
|
|
85
84
|
}/` +
|
|
86
85
|
`${encodeURIComponent(tenantId)}/` +
|
|
@@ -142,7 +141,7 @@ export class RouterliciousUrlResolver implements IUrlResolver {
|
|
|
142
141
|
}
|
|
143
142
|
|
|
144
143
|
public async getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string> {
|
|
145
|
-
const parsedUrl =
|
|
144
|
+
const parsedUrl = new URL(resolvedUrl.url);
|
|
146
145
|
assert(!!parsedUrl.pathname, 0x0b9 /* "PathName should exist" */);
|
|
147
146
|
const [, tenantId, documentId] = parsedUrl.pathname.split("/");
|
|
148
147
|
assert(!!tenantId, 0x0ba /* "Tenant id should exist" */);
|
package/tsconfig.json
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"extends":
|
|
3
|
-
"../../../common/build/build-common/tsconfig.base.json",
|
|
4
|
-
"../../../common/build/build-common/tsconfig.cjs.json",
|
|
5
|
-
],
|
|
2
|
+
"extends": "../../../common/build/build-common/tsconfig.node16.json",
|
|
6
3
|
"include": ["src/**/*"],
|
|
7
4
|
"exclude": ["src/test/**/*"],
|
|
8
5
|
"compilerOptions": {
|
|
9
6
|
"rootDir": "./src",
|
|
10
|
-
"outDir": "./
|
|
7
|
+
"outDir": "./lib",
|
|
11
8
|
"types": ["node"],
|
|
12
9
|
},
|
|
13
10
|
}
|
package/lib/index.d.mts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAEI,EAAE,WAAW,EAAE,OAAO,EAAE,wBAAwB,EAAE"}
|
package/lib/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAEI,EAAwB,wBAAwB,EAAE","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { IAlfredUser, IConfig, RouterliciousUrlResolver } from \"./urlResolver\";\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"urlResolver.d.mts","sourceRoot":"","sources":["../src/urlResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAII,EAAE,QAAQ,EAAE,MAAM,iCAAiC;OACnD,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oCAAoC;OACxE,EAAE,KAAK,EAAE,MAAM,sCAAsC;OACrD,EAAE,QAAQ,EAAE,MAAM,OAAO;AAQhC;;GAEG;AACH,qBAAa,wBAAyB,YAAW,YAAY;IAE3D,OAAO,CAAC,QAAQ,CAAC,MAAM;IAGvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAJP,MAAM,EACpB;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAC5D,SAAS,EACK,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE,MAAM;IAGjC;;OAEG;IACU,OAAO,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IA8G7D,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAgB5F;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,KAAK;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACnB"}
|
package/lib/urlResolver.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"urlResolver.mjs","sourceRoot":"","sources":["../src/urlResolver.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 { parse } from \"url\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport { IResolvedUrl, IUrlResolver } from \"@fluidframework/driver-definitions\";\nimport { IUser } from \"@fluidframework/protocol-definitions\";\nimport { Provider } from \"nconf\";\n\nconst r11sServers = [\n\t\"www.wu2-ppe.prague.office-int.com\",\n\t\"www.wu2.prague.office-int.com\",\n\t\"www.eu.prague.office-int.com\",\n];\n\n/**\n * @internal\n */\nexport class RouterliciousUrlResolver implements IUrlResolver {\n\tconstructor(\n\t\tprivate readonly config:\n\t\t\t| { provider: Provider; tenantId: string; documentId: string }\n\t\t\t| undefined,\n\t\tprivate readonly getToken: () => Promise<string>,\n\t\tprivate readonly hostUrl: string,\n\t) {}\n\n\t/**\n\t * Handles a request and returns the relevant endpoints for the environment\n\t */\n\tpublic async resolve(request: IRequest): Promise<IResolvedUrl | undefined> {\n\t\tlet requestedUrl = request.url;\n\n\t\t// If we know the original hostname, reinsert it\n\t\tif (this.config && request.url.startsWith(\"/\")) {\n\t\t\trequestedUrl = `http://dummy:3000${request.url}`;\n\t\t}\n\n\t\tconst reqUrl = new URL(requestedUrl);\n\t\tconst server = reqUrl.hostname.toLowerCase();\n\n\t\t// If we don't have a valid server or a prescriptive config, we cannot resolve the URL\n\t\tif (\n\t\t\t!(\n\t\t\t\tr11sServers.includes(server) ||\n\t\t\t\t(server === \"localhost\" && reqUrl.port === \"3000\") ||\n\t\t\t\tthis.config\n\t\t\t)\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst path = reqUrl.pathname.split(\"/\");\n\t\tlet tenantId: string;\n\t\tlet documentId: string;\n\t\tlet provider: Provider | undefined;\n\t\tif (this.config) {\n\t\t\ttenantId = this.config.tenantId;\n\t\t\tdocumentId = this.config.documentId;\n\t\t\tprovider = this.config.provider;\n\t\t} else if (path.length >= 4) {\n\t\t\ttenantId = path[2];\n\t\t\tdocumentId = path[3];\n\t\t} else {\n\t\t\ttenantId = \"fluid\";\n\t\t\tdocumentId = path[2];\n\t\t}\n\n\t\tconst token = await this.getToken();\n\n\t\tconst isLocalHost = server === \"localhost\";\n\t\tconst isInternalRequest = server.includes(\"gateway\"); // e.g. gateway:3000 || fierce-dog-gateway:3000\n\n\t\tconst serverSuffix = isLocalHost ? `${server}:3003` : server.substring(4);\n\n\t\tlet fluidUrl =\n\t\t\t\"fluid://\" +\n\t\t\t`${\n\t\t\t\tthis.config\n\t\t\t\t\t? parse(this.config.provider.get(\"worker:serverUrl\")).host\n\t\t\t\t\t: serverSuffix\n\t\t\t}/` +\n\t\t\t`${encodeURIComponent(tenantId)}/` +\n\t\t\t`${encodeURIComponent(documentId)}`;\n\n\t\t// In case of any additional parameters add them back to the url\n\t\tif (reqUrl.search) {\n\t\t\tconst searchParams = reqUrl.search;\n\t\t\tif (searchParams) {\n\t\t\t\tfluidUrl += searchParams;\n\t\t\t}\n\t\t}\n\n\t\tlet storageUrl = \"\";\n\t\tlet ordererUrl = \"\";\n\t\tlet deltaStorageUrl = \"\";\n\n\t\t// There is no provider when using debugging tooling\n\t\tif (provider && isInternalRequest) {\n\t\t\tstorageUrl = provider.get(\"worker:internalBlobStorageUrl\");\n\t\t\tordererUrl = provider.get(\"worker:alfredUrl\");\n\t\t\tdeltaStorageUrl = `${provider.get(\"worker:alfredUrl\")}/deltas/${encodeURIComponent(\n\t\t\t\ttenantId,\n\t\t\t)}/${encodeURIComponent(documentId)}`;\n\t\t} else if (provider) {\n\t\t\tstorageUrl = provider\n\t\t\t\t.get(\"worker:blobStorageUrl\")\n\t\t\t\t.replace(\"historian:3000\", \"localhost:3001\");\n\t\t\tordererUrl = provider.get(\"worker:serverUrl\");\n\t\t\tdeltaStorageUrl = `${ordererUrl}/deltas/${encodeURIComponent(\n\t\t\t\ttenantId,\n\t\t\t)}/${encodeURIComponent(documentId)}`;\n\t\t} else if (isLocalHost) {\n\t\t\tstorageUrl = `http://localhost:3001`;\n\t\t\tordererUrl = `http://localhost:3003`;\n\t\t\tdeltaStorageUrl = `http://localhost:3003/deltas/${tenantId}/${documentId}`;\n\t\t} else {\n\t\t\tstorageUrl = `https://historian.${serverSuffix}`;\n\t\t\tordererUrl = `https://alfred.${serverSuffix}`;\n\t\t\tdeltaStorageUrl = `https://alfred.${serverSuffix}/deltas/${tenantId}/${documentId}`;\n\t\t}\n\n\t\tstorageUrl += `/repos/${tenantId}`;\n\t\tordererUrl += ``;\n\t\tdeltaStorageUrl += ``;\n\n\t\tconst resolved: IResolvedUrl = {\n\t\t\tendpoints: {\n\t\t\t\tstorageUrl,\n\t\t\t\tdeltaStorageUrl,\n\t\t\t\tordererUrl,\n\t\t\t},\n\t\t\tid: documentId,\n\t\t\ttokens: { jwt: token },\n\t\t\ttype: \"fluid\",\n\t\t\turl: fluidUrl,\n\t\t};\n\t\treturn resolved;\n\t}\n\n\tpublic async getAbsoluteUrl(resolvedUrl: IResolvedUrl, relativeUrl: string): Promise<string> {\n\t\tconst parsedUrl = parse(resolvedUrl.url);\n\t\tassert(!!parsedUrl.pathname, 0x0b9 /* \"PathName should exist\" */);\n\t\tconst [, tenantId, documentId] = parsedUrl.pathname.split(\"/\");\n\t\tassert(!!tenantId, 0x0ba /* \"Tenant id should exist\" */);\n\t\tassert(!!documentId, 0x0bb /* \"Document id should exist\" */);\n\n\t\tlet url = relativeUrl;\n\t\tif (url.startsWith(\"/\")) {\n\t\t\turl = url.substr(1);\n\t\t}\n\n\t\treturn `${this.hostUrl}/${encodeURIComponent(tenantId)}/${encodeURIComponent(\n\t\t\tdocumentId,\n\t\t)}/${url}`;\n\t}\n}\n\n/**\n * @internal\n */\nexport interface IAlfredUser extends IUser {\n\tdisplayName: string;\n\tname: string;\n}\n\n/**\n * @internal\n */\nexport interface IConfig {\n\tserverUrl: string;\n\tblobStorageUrl: string;\n\ttenantId: string;\n\tdocumentId: string;\n}\n"]}
|
|
File without changes
|
|
File without changes
|
/package/lib/{routerlicious-urlresolver-public.d.mts → routerlicious-urlresolver-public.d.ts}
RENAMED
|
File without changes
|
/package/lib/{routerlicious-urlresolver-untrimmed.d.mts → routerlicious-urlresolver-untrimmed.d.ts}
RENAMED
|
File without changes
|